The full tour

Every feature,
tuned to disappear nicely.

Wisp packs the messaging essentials — stories, chats, camera, friends, location, and a personal archive — into one polished, dark-mode-first Android experience.

01 · Stories

The story is the whole point.

Every wisp you post lives for exactly 24 hours, then quietly fades. There is no archive, no algorithm, no infinite feed. Just the people you trust, glowing for a day.

What makes it different

  • Auto-expire after 24h. WorkManager runs a periodic cleanup worker that tombstones old documents.
  • Tap-to-advance viewer. Fullscreen, timed progression, ambient blur on the edges.
  • Friend-scoped queries. Stories collection is filtered server-side by your friend list.
  • View tracking. Each story knows who's seen it without exposing read receipts to others.
Stories Feed
Story Viewer
02 · Chat

Real-time, offline-first, beautiful.

Text-only chats sync instantly via Firestore listeners and cache locally with Room — your conversations stay alive even when your signal doesn't.

What's inside

  • Realtime listeners. Firestore snapshot listeners deliver each message the moment it's written.
  • Offline cache. Room mirrors every conversation; the repository falls back gracefully when you're disconnected.
  • Read state. Per-message isRead flag drives unread badges and notifications.
  • Signature bubbles. Asymmetric corners, gradient outgoing fills, soft outer glow.
starting at the lake at 7?
yeah see u there
bring the speaker pls 🔊
always
Chat Detail
03 · Camera

From shutter to URL in under a second.

CameraX captures, smart compression shrinks, and Imgur stores. The camera screen is the gravitational center of the app — every other surface flows out from it.

Pipeline

  • Native CameraX. Front, back, and flash control with hardware-accelerated preview.
  • Quality-aware compression. Targets ~200KB while preserving the dark-room glow that makes wisps look right.
  • Anonymous Imgur upload. No account required, public CDN URL, indexed only via Firestore.
  • Preview screen. Retake, send to chat, or post as story — three actions, no clutter.
Capture
Preview & Send
Connection layer

People, groups, places, memories.

Beyond stories and chat, Wisp adds the social glue: friends, groups, location, and your own private archive.

Friends

Add by username search, or scan a QR code in person. Friend lists are stored as a simple friendIds[] array on each user document, keeping queries cheap and rules tight.

Groups

Create a group, invite friends, share stories scoped just to that circle. The custom CompositeAvatar component renders up to four member faces in a single tile.

Map

See where your friends' wisps were posted from. Opt-in only — no silent tracking, no background pings. Drop your own pin when you want a place to be remembered.

Memories

A private, personal archive of your own past wisps. Stories that fade for everyone else stay in your Memories — visible only to you, organized by month.

04 · Notifications

FCM push, with taste.

Wisp uses Firebase Cloud Messaging to alert you the moment a friend sends a message or posts a story — never a second sooner, never a second later.

  • Per-chat mute toggles, with quiet-hours respected at the system level
  • NotificationListener service to deduplicate and surface in-app banners
  • Tap-to-deep-link straight into the conversation
Notification banner
05 · Auth

Sign in once. Vanish on logout.

Firebase Authentication with Google Sign-In handles identity. No custom password storage, no leaks, no fuss. Logout wipes the local Room cache instantly.

  • Google Sign-In via Firebase Auth — single tap onboarding
  • All Firestore documents are scoped to the authenticated UID
  • Logout flushes Room and clears Imgur upload tokens
Login Screen
Bonus moments

And a thousand small details.

The polish you don't notice — until you'd notice it missing.

Dark-mode-first

Every screen designed for night. The "Luminescent Wisp" design system is documented in DESIGN.md.

30%+ test coverage

Kover-tracked unit and Compose UI tests across viewmodels, repositories, and key flows.

Composable everywhere

Pure Jetpack Compose. No fragments, no XML layouts, no view-system hangovers.

Animated transitions

Crossfades between tabs, shared-element story-to-viewer transitions, motion-aware easings.

Privacy by design

No analytics SDKs. No third-party trackers. Imgur URLs are technically public but only discoverable via Firestore.

Free-tier only

Spark plan Firebase + free Imgur API. The whole stack costs $0/month to run.

Stop reading, start glowing

See it in motion.

Every feature on this page is captured in the showcase gallery — real screenshots from the running app.