Skip to main content

UI/UX

The messenger starts as screens: connect, chats, a thread, contacts, calls, a profile. Those screens live in two crates. whatsup is the product shell — routes, PWA, and platform entry points. whatsup-ui is the chrome those routes mount: lists, threads, ticks, pairing panels, and a terminal frontend.

This page is the UI layer. Session, poll, and send live in glitr-client and are covered on Network. How the shell sits on the rest of the stack is the Architecture product map.

It is research and development — subject to change. The UI crates are closed-source. Galleries are the public surface.

whatsup​

whatsup is the Glitr client: a Dioxus 0.6 app for the web PWA, desktop, mobile, and a text TUI. It owns the router and the platform binaries. The chrome is imported from whatsup-ui.

The published demo on GitHub Pages is a UI shell with mock data — hardcoded contacts, threads, and replies so the screens can be pressed without a mailbox.

Open the whatsup demo

The product app on this site is the same shell wired to glitr-client. Use Try messaging when you want two tabs that actually send.

PlatformWhat you get
Webdx serve default. WASM plus origin-private storage for a real mailbox.
DesktopNative git on the filesystem. Live and calls depend on the webview.
MobileAndroid and iOS nightlies.
TUIwhatsup-tui: text poll and send. Voice, video, and live pairing stay on the graphical app.

Cargo features are exclusive — one frontend at a time. There is no Tailwind step in this crate: the stylesheet ships in whatsup-ui.

whatsup-ui​

The chrome outgrew one app crate. Lists, threads, ticks, pairing, and the terminal frontend live in whatsup-ui so every gallery in the stack can import the same components.

One domain model, two frontends:

  • gui — Dioxus components for web, desktop, and mobile.
  • tui — ratatui draw functions for the terminal.

The components are router-agnostic. They describe where they want to go with a NavTarget. The host maps that onto its own routes. A mock feature seeds contacts, chats, call history, and canned replies so a story can render without a mailbox.

Web UI testing usually means Storybook. There is no Storybook-for-Rust that fits this stack (thread), so the crate ships its own gallery: /demo/:kind/:group/:name, knobs, docs tabs, and a browser terminal that can show a TUI. It is an internal debugging tool that happens to be public.

Open the component gallery

Page stories​

Atoms, molecules, and knobs stay on the gallery home. These are the screens that matter for the messenger.

StoryLive
Chat threadgui/pages/chatthread
Chatsgui/pages/chats
Contactsgui/pages/contacts
Contact detailsgui/pages/contact-details
Callsgui/pages/calls
Active callgui/pages/activecall
Profilegui/pages/profile
Chat thread (TUI)tui/pages/chatthread

The same gallery chrome is reused by the crypto, git, db, api, and webrtc galleries. Those stories are on the pages that follow.

Next: Cryptography — Signal, ML-KEM, and PQXDH as libraries you can press.