Murmured - The anti-social network

Murmured is a native Android app for anonymous, ephemeral group chat, designed and built from scratch using Jetpack Compose and Firebase. I led all aspects of product design and development. Currently in internal testing on Google Play; awaiting public beta approval.
Project Overview
Solo concept and execution — product strategy, UI design, and development
Murmured – Anonymous Group Chat App
A private, ephemeral chat experience with no user accounts, no names, and no data stored on the server. The anti-social network.
A private, ephemeral chat experience with no user accounts, no names, and no data stored on the server. The anti-social network.
Role: Solo Designer + Developer
Platform: Android (Jetpack Compose + Firebase Realtime DB)
Tools: Figma, Android Studio, GitHub
Status: In active development (internal testing on Google Play Store)
Goal: Explore anonymous, non-persistent group communication using local device presence and QR-only invites
Platform: Android (Jetpack Compose + Firebase Realtime DB)
Tools: Figma, Android Studio, GitHub
Status: In active development (internal testing on Google Play Store)
Goal: Explore anonymous, non-persistent group communication using local device presence and QR-only invites
Problem Space
Modern chat apps anchor everything to identity: usernames, history, tracking.
What if we removed all of it?
What if we removed all of it?
I set out to create a space where:
• No accounts or usernames exist
• No chat history persists after a stream is deleted by the user
• No personal data is collected or stored
• Access is invite-only via QR code from someone already inside
• No chat history persists after a stream is deleted by the user
• No personal data is collected or stored
• Access is invite-only via QR code from someone already inside
Solution Summary
Murmured enables users to create or join temporary, anonymous chat streams via QR code invites.
Key features:
• Ephemeral messaging: Data wiped when stream ends
• QR-only invites: No search, no usernames
• Anonymous auth: Device-scoped ownership logic
• Stream control: Creator can end sessions with “Delete Stream”
• Firebase used only as a temporary transport layer
• QR-only invites: No search, no usernames
• Anonymous auth: Device-scoped ownership logic
• Stream control: Creator can end sessions with “Delete Stream”
• Firebase used only as a temporary transport layer
UX Design Considerations
• One-tap onboarding and exit (no setup)
• Material 3 UI with light/dark theme support
• Clear feedback for invites, join actions, and destructive events
• No profiles, labels, or message attribution — pure presence
• Sticky, human notices for limits/expiry instead of intrusive popup
• Material 3 UI with light/dark theme support
• Clear feedback for invites, join actions, and destructive events
• No profiles, labels, or message attribution — pure presence
• Sticky, human notices for limits/expiry instead of intrusive popup
Challenges + Tradeoffs
Challenge -> Solution
• NFC joining was unreliable
⸰ Switched to QR — fast, cross-device, emulator-friendly
⸰ Switched to QR — fast, cross-device, emulator-friendly
• Ownership without identity
⸰ Anonymous auth + device-scoped rules for creator-only actions
⸰ Anonymous auth + device-scoped rules for creator-only actions
• Returning users mid-session
⸰ Rejoin/leave prompt to prevent “ghost” sessions
⸰ Rejoin/leave prompt to prevent “ghost” sessions
• Preventing abandoned streams
⸰ Auto-delete when last user exits to keep DB clean
• Communicating destructive actions
⸰ Distinct UI styling + copy for “Delete/Leave Stream”
• Total anonymity UX
⸰ Uniform message styling; presence over identity
⸰ Auto-delete when last user exits to keep DB clean
• Communicating destructive actions
⸰ Distinct UI styling + copy for “Delete/Leave Stream”
• Total anonymity UX
⸰ Uniform message styling; presence over identity
Screens & Flow
Primary User Screens (Dark Mode UI)

Start - Light

Start - Dark

Invite

Chat Stream

Menu

Upgrade to Pro

Protect the stream
User Flow Map

🟦 Joiner Flow 🟩 Creator Actions 🟥 Stream Termination Logic
What’s New (Current State)
• Stream-wide Pro Mode (creator-activated upgrade)
• Free vs Pro Limits:
• 8 users per stream (free)
• 30-day stream life
• 300 message limit
• Billing scaffolded (in progress for in-app purchases)
• QR invites & session hygiene
• Dev/Prod runtime DB and indicator
• Free vs Pro Limits:
• 8 users per stream (free)
• 30-day stream life
• 300 message limit
• Billing scaffolded (in progress for in-app purchases)
• QR invites & session hygiene
• Dev/Prod runtime DB and indicator
Future Vision
Planned improvements and stretch goals:
• Custom stream themes (mood, tone, style)
• Tone Stylizer: optional AI-powered rewriter for localized tone shifts
• Local-only mode for fully offline ephemeral chats
• Expanded Pro model (e.g., higher caps or true unlimited)
• iOS cross-platform support
• Tone Stylizer: optional AI-powered rewriter for localized tone shifts
• Local-only mode for fully offline ephemeral chats
• Expanded Pro model (e.g., higher caps or true unlimited)
• iOS cross-platform support
What I Learned
Key takeaways from building and testing Murmured:
• Real-time design is all about edge cases and cleanup
• Small animations land better when designed early
• Solo building is a balance of product, UX, and code tradeoffs
• Designing for ephemerality challenges traditional feature thinking
• QR > NFC for speed, reliability, and cross-device support
• Small animations land better when designed early
• Solo building is a balance of product, UX, and code tradeoffs
• Designing for ephemerality challenges traditional feature thinking
• QR > NFC for speed, reliability, and cross-device support
How it Started and Early Prototypes

Original Figma design - V2 7/23/2025

V1 logo

Original Figma - V1 7/19/2025