-
-
Genesis, your guide. The start screen you swipe up to enter — the app's first frame, before a single tap.
-
Base: live block height, live price, and the Proof-of-Work you've earned. Hold the orb to convert it into Paper Sats.
-
Signal: 21, 45 or 60 minutes of focus. Drag a record out of its sleeve, or tune into the radio everyone hears at the same second.
-
Signature: design your own card, a human reviews it, and it joins the pool every other user draws from.
-
Verify: confirm what you finished. Twenty-one confirmations seal a block into a chain you keep on your phone — permanently, readable back.
-
One hundred cards. Fifty earned through progress, fifty drawn from a daily pack — and together they're a Bitcoin education in disguise.
-
Connect your own home miner over Wi-Fi and watch every share roll in. Nothing about it leaves your phone unless you join the leaderboard.
-
Mempool: the block being built right now, what it costs to send, and the last ten blocks the network mined.
-
Grind: drag the sun around the dial. The alarm ramps from 30% to 100% over half a minute — and it still fires if you force-quit the app.
-
Onboarding.
-
One pack a day, and the day rolls at 9pm (21:00). Free users pick one of three; miss the window and it expires — nothing banks.
-
Twenty-one minutes of focus, with a record spinning. Or tune into the radio — every listener hears the same track at the same second.
-
Rabbit Hole: where to go deeper. Books, links, hardware — curated, and the reading list follows the region you picked.
Inspiration
Two things, and they only met later.
The first was a sentence I kept hearing:
"I'm too late for Bitcoin."
People said it at $10. At $200. At $12,000. At $50,000. They say it now. Meanwhile the thing itself has been running without interruption since January 2009 and has been declared dead hundreds of times. I wanted to build the app that answers that sentence without selling anything — no affiliate funnel, no urgency, no "invest now."
The second was that habit trackers don't respect effort. You tap a checkbox and nothing is at stake. The record is a list, the list is disposable, and next month you start a new one.
Bitcoin has a word for effort that counts: proof of work. So I borrowed the grammar — not the chain, not a wallet, not a token — and applied it to a day.
The goal was to build a door into the rabbit hole that a newcomer can walk through without being sold to, and that someone who has been here since 2013 still finds worth opening. That turned out to be the hardest constraint in the whole project, and it shaped nearly every decision below.
This is my first app. It started as an idea and became seven days a week after my actual job, for six months.
What it does
Your own chain, and it is the point. Write down what you want to get done, swipe it right when it's actually done. Each confirmation earns Proof-of-Work and fills one of 21 cells. The 21st seals a block — every title, timestamp and reward, kept on your phone and readable back forever. No cap, no end state, no daily reset. Six months in, your chain is a record of what you actually did, not a streak counter that resets when you miss a Tuesday.
A hundred cards that are a Bitcoin curriculum in disguise. They started as a syllabus — history, basics, properties, myths, slang — and became a collectible set. Fifty unlock through progress, fifty come from a daily pack. A newcomer learns what a satoshi is by pulling the card; someone who already knows gets the joke on the slang cards and the memorial on the rare ones.
Cards made by the people using the app. You design your own signature card, a human reviews it, and it joins the pool everyone else draws from. Someone in another country opens their daily pack and gets your card.
One radio, one broadcast. Not a playlist — a station. Every listener hears the same track at the same second, computed from a published timetable. You are listening with people, not alongside them.
And the rest of the day. An alarm that ramps from 30% to 100% over half a minute instead of blasting you awake, six mixable sleep sounds, a focus timer with a record player you physically drag out of its sleeve, the live network, a long-term price model, a since-genesis buy calculator, a reading list, and a dashboard that talks to home mining hardware on your own Wi-Fi.
No account. No sign-up. The core loop runs entirely offline. Data goes to your own iCloud, never to my server.
How we built it
React Native and Expo, TypeScript throughout. Skia for the canvas work, Reanimated for anything that has to survive a dropped frame, Supabase and a small Node service for the community card pool, Cloudflare for the site and the review tooling, RevenueCat for the subscription.
Solo, in rewrites rather than one straight line. The onboarding was built, thrown away, and built again as a swipeable story. The focus screen was rebuilt from scratch after the first version couldn't carry the visuals. The collectible card came from a shine effect I saw posted on X and then spent weeks working out how to reproduce without pulling in a WebGPU dependency.
Challenges we ran into
The community card pipeline was the hardest thing in the app. A user designs a card, pays once, uploads artwork, a human reviews it, and it enters a pool that every other user draws from — in packs that open once a day, with rarity, ceremonies, and a card that can only ever be featured once. Every part of that chain has a failure mode that reaches strangers: art that gets swapped after approval, a creator name nobody reviewed, a moderation dashboard that trusts its own input. Most of my last month was spent closing those, not building features.
The daily draw is a small piece of state with a lot of edges. One pack per window, and the window rolls at 9pm rather than midnight. Draw at 20:59 and again at 21:00 and you get two packs in two minutes; draw at 22:00 and you wait 23 hours. A missed window expires and nothing banks. Free users pick one of three face-down cards, subscribers keep all three, and the two paths have different last-safe-exit points. Getting that to feel fair — and to survive a force-quit mid-ceremony — took far longer than the animation did.
Audio, for most of the project. An early splash screen had a music leak so stubborn that killing it took seven fallback methods and three seconds of retries. That was the symptom. The cause was that five sound systems — record player, radio, ambience, sleep sounds, sleep music — plus an alarm that has to outrank all of them were each reaching for the audio session on their own, and iOS gives the lock-screen card to exactly one player at a time. It ended in an arbiter: one module owning who holds the session, which sources exclude which, who keeps the card through a pause, and how everything hands off when the alarm fires. Nothing touches the audio session directly any more.
A radio everyone hears the same. No per-device shuffle, no fallback playlist. The client computes its position from a server timetable, and if it can't reach the timetable there is deliberately no play button at all — because a station that quietly becomes a private playlist is worse than a station that admits it is offline.
An alarm you can actually trust. The honest version is harder than the marketing version. iOS silences notification sounds on the physical mute switch. Critical Alerts were requested and refused. A suspended app can't play its own audio. So the app ships two independent wake paths, tells the user plainly what each guarantees, and warns every time an alarm is armed without notification permission rather than silently refusing.
Accomplishments that we're proud of
The offline claim held. Habits, blocks, streaks, the alarm, the focus timer and all hundred cards live on the phone, and the alarm sounds ship in the bundle. That survived six months of feature pressure.
Nothing in the app promises money. Both modes are labelled Paper Sats. No yield claim, no odds-of-winning framing, no "start earning." That was a decision taken repeatedly, against copy that would have converted better.
And it works for both audiences. A newcomer can use it as a habit tracker and pick up Bitcoin by osmosis. Someone who has been around since 2013 can plug in their own miner and watch their shares roll in.
What we learned
Say what you can't guarantee. The alarm was the clearest case. iOS silences notification sounds on the mute switch, Critical Alerts were refused, and a suspended app can't play its own audio. The marketing version would have said "reliable alarm" and let the 1-star reviews sort it out. The honest version ships two wake paths and tells you plainly what each one does. Every time I chose the honest version, the feature got harder to build and easier to trust.
A shared resource needs one owner. Five sound systems each reaching for the audio session on their own produced a bug I chased for months. The fix wasn't a better fallback — it was admitting that something has to decide, and building that something.
Rebuilding a screen is cheaper than defending the first version of it. The onboarding and the focus screen are both second attempts, and both are better for it.
And shipping the first one takes longer than you think, mostly in the parts nobody sees.
What's next for Satoshi Habits
App Store submission. Then a crossfade on the radio, a user-facing restore, and growing the community card pool so the daily draw always has something new in it.
Built With
- bitcoin
- cloudflare-pages
- cloudflare-workers
- expo-notifications
- expo-router
- expo.io
- google-gemini
- icloud
- ios
- mempool.space
- node.js
- postgresql
- react-native
- react-native-reanimated
- react-native-skia
- revenue-cat
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.