All projects

Project 03 / Team contribution

Ech0.

Connecting the mobile app to its messaging SDK.

I built the Expo app foundation and connected chat history, attachments, device linking, and message actions to the Rust SDK.

Focus
Mobile messaging & SDK integration
Built with
Expo / React Native / TypeScript / Rust SDK / BoltFFI
Status
In development · SDK integrations merged
Ech0’s mobile contact picker with search and a list of people to message.Ech0’s mobile conversation with message bubbles, an image attachment, and the composer.
Starting a chat and sending messages in Ech0. Figma design previews with sample content.

01

Overview

Ech0 is a communication product in development. I built the Expo mobile foundation and moved it from a static preview to merged integrations with the native messaging SDK.

The app needs to handle late chat history and uncertain upload results. It also needs to update every open view when a message is deleted.

02

My work

I built the mobile screens and frontend controllers that use the SDK’s public contracts. The SDK owns persistence, protocol state, and durable operations.

  • Connected chat history, native attachment preparation, downloads, and media views to the SDK.
  • Built QR device-linking screens with approval on the primary device and clear pending states.
  • Kept message deletion and revocation consistent across chat and retained views, and connected replies to the original messages.

A closer look

Keeping a deleted message from coming back.

The problem
The native chat could keep showing a message after the SDK reported it deleted or revoked. A later history or live snapshot also had to respect that terminal state.
My decision
I projected typed SDK events into chat using the original Delivery message identity, independent state versions, and account ownership checks. Durable message state stayed with the SDK.
The behavior
Private deletion removes the message from the user’s view. Public revocation leaves a row without its original body. Older history, outbox, and live snapshots cannot restore the removed content.

The projection was merged and checked with real SDK messages on a physical Android device and an iOS simulator, including reopening and cold restart. Physical iOS and private propagation between two devices remain separate acceptance work; Ech0 is in development.

03

Technical decisions

React Native screens use typed controllers over a Rust SDK exposed through BoltFFI. The frontend displays SDK state across chat, media, and device-linking screens.

  • Used the SDK’s message IDs and versioned events so late history could not restore a deleted message.
  • Retried uncertain media preparation with its original SDK operation instead of starting a second upload.
  • Scoped asynchronous work to the active account and kept enrollment, storage, and cryptography in the SDK.

04

Scope & status

The messaging, attachment, and device-setup integrations are merged. Ech0 is still in development.

  • Merged code and platform exports do not establish a production release.
  • Message-state changes have recorded Android-device and iOS-simulator checks. Full device pairing and broader physical-iOS testing remain separate work.
Next projectPhotobooth