Inspiration

Most habit trackers punish you. Miss a day and the streak snaps, the counter resets, the calendar turns red. We wanted the opposite: a tracker where what you have built stays built, and where the record of your effort is something you actually want to look at.

So we borrowed a metaphor from the night sky. Every completed habit lights a star. Hold the rhythm through a month and those stars gather into a celestial object of its own — a nebula, a lone star, an aurora, a comet. Skip a day and the light only dims. It never erases.

What it does

  • One screen a day. Today's habits, a couple of taps to close them, gentle reminders at your hour. No feed, no ads, no endless settings.
  • A cosmos that grows with you. Each month is rendered from your own data: the steadier the habits, the richer the object. Months are sealed when they end and kept in your collection; year after year they form a galaxy that is only yours.
  • A missed day erases nothing. No red failure badges, no counters reset to zero.
  • Friends alongside. Add friends, watch their universes grow, share your cosmos as a single image. Profiles are private by default.
  • Your data is yours. Full JSON export and one-tap account deletion right in Settings. No ads, no data selling.
  • Nebula Plus. An optional subscription that unlocks one exclusive form for your cosmos each month. A month you light with Plus keeps that form for good — even after the subscription ends.

How we built it

  • React Native + Expo (SDK 57) for iOS and Android, sharing a single core package (@nebula/core) with the web app.
  • React Native Skia renders the cosmos: every object is drawn procedurally from the month's completion data, with parallax star layers and a deterministic seed so a month always looks the same on every device.
  • Reanimated + Gesture Handler for the swipeable form tiles, the sky hand-over crossfade between months, and the first-star moment.
  • Supabase (Postgres + RLS + Edge Functions) for accounts, sync, friends and monthly snapshots; Sign in with Apple and Google.
  • RevenueCat powers Nebula Plus: entitlements, the 7-day trial, restore, and cross-platform state. The paywall closes itself the moment RevenueCat reports the entitlement.
  • Sentry for telemetry; a CI of ~2,000 tests, many of them guards that pin invariants of the rendering and billing layers and are proven by mutation.

Challenges we ran into

  • Making a month "sealed". The month you light with Plus must keep its form forever, even after the subscription lapses. That meant a server-side snapshot of each month's form at the moment it ends, and a client that trusts the snapshot over the live entitlement.
  • Cold start on a cosmos. Rendering a year of procedural objects on first launch was slow; we persist query results to disk and fade the sky in instead of blocking on it.

Accomplishments that we're proud of

  • A rendering engine where no two months look alike, and where the design comes from the user's own consistency rather than from a theme picker.
  • The "nothing is erased" promise held all the way through the product: no streak-breaking UI anywhere.
  • The whole project — web, iOS, Android, backend — built and shipped by one person; the mobile apps went from first store build to a paid release within the Shipaton window.

What we learned

  • Reviewers read the first path you give them and stop at the first blocker. Every screen needs an exit.
  • A subscription lands better when it adds something to a product that is already complete for free.

What's next for Nebula

A new exclusive form every month for Plus, now on both the App Store and Google Play.

Built With

Share this project:

Updates

Submission history