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. The project explores how interaction design, motion, and system constraints can support privacy-first communication without identity, history, or persistence.
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: Closed beta on Google Play; iterating based on tester feedback toward public release.
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: Closed beta on Google Play; iterating based on tester feedback toward public release.
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 — prioritizing presence over identity
• 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 — prioritizing presence over identity
• Sticky, human notices for limits/expiry instead of intrusive popup
Interaction & Motion Design
• Screen-to-screen transitions designed to reinforce entry and exit of ephemeral chat sessions
• Animated navigation menu using icon rotation and sliding panels to communicate state change
• Clear feedback for invites, join actions, and destructive events
• Progressive message entry patterns to maintain spatial continuity as new chats appear
• Motion used intentionally for orientation and feedback, not decoration
• Animated navigation menu using icon rotation and sliding panels to communicate state change
• Clear feedback for invites, join actions, and destructive events
• Progressive message entry patterns to maintain spatial continuity as new chats appear
• Motion used intentionally for orientation and feedback, not decoration
Motion Examples coming soon.
Challenges & Tradeoffs
Challenge -> Solution
• NFC-based joining proved unreliable across devices
⸰ Replaced with QR-based invites for speed, reliability, and cross-device consistency
⸰ Replaced with QR-based invites for speed, reliability, and cross-device consistency
• 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
Next steps include capturing and refining interaction details through recorded prototypes and validating motion patterns against real user behavior during public beta.
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 - Project Bluegill
Original Figma design - V2 7/23/2025
V1 logo
Original Figma - V1 7/19/2025