About

The story behind
the wisp.

Wisp is the final project for an Android development course at university. It's an exercise in shipping a real product with real architectural taste — and a love letter to ephemeral messaging.

The brief

Build a complete Android app.

The course requires a Kotlin app with persistent storage, a real data source, MVVM architecture, authentication, push notifications, and tests. The base grade is a "3"; reaching a "1" means stacking four extensions on top.

The choice

A Snapchat-shaped messaging app.

Wisp uses the camera as the primary data source, Room for offline-first persistence, Firebase for the cloud, and Compose for the UI. Each piece earned its place — nothing is decorative.

Timeline

From sketch to ship.

Week 1

Concept & design system

Decided on the Snapchat-shaped scope. Wrote DESIGN.md — "The Luminescent Wisp" — to anchor the visual language before writing any code.

Week 2

Architecture skeleton

Set up Hilt modules, Room database, repository abstractions, and Compose Navigation. Got Firebase Auth wiring through end-to-end before any UI.

Week 3

Camera + Imgur pipeline

Built the CameraX capture flow and the Imgur upload path. The free-tier Storage workaround turned out to be a feature: anonymous URLs, no auth dance.

Week 4

Stories & chat

Stories collection in Firestore, real-time listeners, story viewer. Then chat: conversations, messages, asymmetric bubbles, offline cache.

Week 5

Friends, groups, map, memories

The social layer. Composite avatars for groups, opt-in map, and the private Memories archive of expired wisps.

Week 6

FCM, polish, tests

Push notifications, animations, edge cases. Kover crossed 30%. Built the showcase website to wrap it all up.

Grading

How Wisp meets the rubric.

The course splits requirements into a "base" set (grade 3) and "extensions" (each one moves you up a grade). Wisp targets a grade of 1 by stacking four extensions.

Base — Grade 3

All seven boxes ticked.

  • Compose UI with 4 main screens + auth flow + navigation
  • Data source: CameraX (the camera produces stories)
  • Persistent storage: Room database
  • Architecture: MVVM with Hilt + repositories
  • Auth: Firebase Authentication (Google Sign-In)
  • Notifications: FCM push on new messages
  • Tests: 30%+ coverage tracked by Kover
Extensions — Targeting Grade 1

Four bonus extensions stacked.

  • Cloud syncFirestore for messages and stories
  • FCM pushreal-time message alerts
  • Offline-firstRoom cache, graceful reconnect
  • Custom UX/UIbespoke design system + animations
Design

"The Luminescent Wisp."

Wisp's design system rejects the standard dark-mode template — heavy borders, flat grey boxes, sterile dividers. Instead, the UI feels like a deep nocturnal atmosphere where information floats with weightless grace.

The "No-Line" Rule

Boundaries come from background shifts and tonal transitions, never from 1px solid borders.

The Wisp Gradient

#c890ff#c0c1ff. The signature texture for CTAs and outgoing chat bubbles.

Editorial Type

Plus Jakarta Sans for display, Manrope for body. A dual-font approach for personality plus legibility.

Glassmorphism

Floating elements use 20% surface-variant opacity with a 28px backdrop blur.

Palette

The Wisp accents

Primary → Secondary
#c890ff → #c0c1ff
Tertiary
#ffafd3
Surface Highest
#262627
Surface (Base)
#0e0e0f
Questions

Things people ask.

Is Wisp a real, shipping app?

Wisp is a university final project. It runs on real Android devices, syncs through real Firebase, and uploads to real Imgur — but it's not in the Play Store, and it's not designed for a public audience.

Why Imgur instead of Firebase Storage?

Firebase Storage requires the Blaze (paid) plan. The course constraints stipulated free-tier services only. Imgur's anonymous upload API is a perfect fit: no payment, no account, public CDN URLs.

Are the stories truly ephemeral?

The Firestore documents expire after 24 hours via a WorkManager cleanup worker. The underlying Imgur image stays on their CDN — but it's only discoverable via the Firestore document, which is what gets removed.

Can I use Wisp with my own friends?

Yes — clone the repo, add your Firebase config and Imgur Client-ID, build the APK, and share it with friends.

Why the name "Wisp"?

A wisp is a small, glowing shape — half-light, half-imagined. The app captures small, glowing moments and lets them fade. The name and the design system grew together.

What's the license?

Wisp is released under the MIT License for the source code. The "Luminescent Wisp" design system is documented in DESIGN.md and free to reference for educational use.

One last thing

Built with care.

Wisp is school work, but it's school work made with the same attention to architecture and craft you'd give a real product. That's the only way to learn anything that matters.