Nest is a small shared space for two (or a few) people to doodle, leave notes, and stay present with each other async — a persistent canvas that lives on your home screen, not a chat thread.
What I built
Cross-platform from one codebase. Nest targets Android and iOS from a single Kotlin Multiplatform codebase, with Compose Multiplatform driving the UI on both. The shared/ module holds domain models, use cases, repositories, and SQLDelight-backed local storage; composeApp/ wires up screens, ViewModels, and platform entry points.
Real-time collaborative canvas. A Supabase Realtime channel per “nest” (canvas:<nestId>) streams stroke inserts/deletes, clears, presence, and text-note CRUD as typed Kotlin Flows, merged into a single event stream that drives the canvas UI live as the other person draws.
Home-screen widget. An Android Glance widget renders a live thumbnail of the shared canvas directly on the home screen, kept in sync by a WorkManager-driven refresh triggered by FCM or a local schedule — so a new doodle shows up without opening the app.
Pick One. A lightweight multiplayer guessing game built on top of the same realtime infrastructure — one person sets hidden-or-visible options, others pick independently, and the reveal happens live for everyone in the nest.
Why I built it
I wanted an excuse to build something meaningfully real-time and cross-platform end to end — sockets, offline-tolerant local storage, and a UI that reacts instantly to another person’s actions — while keeping full ownership of the product decisions, from the mascot to the interaction model.