This is a submission for Weekend Challenge: Passion Edition
What I Built
Everyone says "consistency is everything," then loses the streak in a spreadsheet nobody opens again. A habit — a craft, a team, a side project — deserves proof that outlives the app you tracked it in.
Flywheel is a Solana devnet app that turns a daily streak into a badge you actually own. Declare something you refuse to miss a day of, check in, and when you cross a threshold, mint the streak as an on-chain trophy that lives in your wallet — not in my database.
Here's the loop:
- 🔥 Declare a habit — name it, pick a category, pick an emblem
- ✅ Check in daily — miss a day and the streak resets; the badges you already minted don't
- 🏅 Four tiers to earn — Spark (7 days), Motion (30), Momentum (100), Unstoppable (365)
- ⛓️ Immortalize it — one click mints a Metaplex Core NFT straight to your Phantom wallet, with a live Solana Explorer link
- 🃏 Trophy Shelf — a flip-card gallery that reads badges from the chain, not local storage — clear your browser and they're still there
Everything runs on Solana devnet with free airdropped SOL, on purpose — this is about proving the habit, not spending money on it.
What Inspired This
I have a graveyard of streaks that only ever lived in my own head: a run of gym mornings, a stretch of daily commits, a season of never missing a match. Every one of them evaporated the moment I stopped believing my own memory of them — no proof, no receipt, nothing to show for the discipline once the feeling faded.
The "passion" theme made me want to build the opposite of a vanity metric. Not a streak counter that resets your pride to zero the day you forget to open the app, but something that keeps the momentum — the flywheel — spinning even after you've moved on. If a habit is real, it should survive outside your own head, verifiable by anyone, on a ledger that doesn't care whether you're still paying attention.
Demo
🔗 Live → [https://flywheel0.vercel.app/]
How I Built It
| Layer | Tech |
|---|---|
| Frontend | React 19 + TypeScript + Tailwind v4 + Vite |
| Wallet |
@solana/wallet-adapter-react (Phantom, devnet) |
| Mint | Metaplex Umi + mpl-core — one Core asset per badge |
| Art | Badge SVGs generated per tier, uploaded via Irys |
| State | Streaks live in localStorage; badges live on-chain |
The chain is the only source of truth that matters. The Trophy Shelf never trusts local state — it queries devnet RPC for Core assets owned by the connected wallet. I could wipe every cookie on my machine and my Momentum badge would still be sitting in my wallet, because that's the entire point of the project.
The part I'm proudest of is the failure handling. Metadata upload to Irys can time out — so after 60 seconds the mint falls back to static metadata served from the app itself, logs it loudly, and still lands on-chain. Faucet rate-limited mid-demo? Retry button, no crash. The ownership and the mint are never fake; only the JSON description occasionally takes the scenic route.
There's also a hidden time machine (Ctrl+Shift+D) that fast-forwards the clock and simulates check-ins so a 365-day streak can be demoed live in ninety seconds — it can shift time, but it can't fake a single thing on-chain.
Why It's Passion
The theme was "passion," and the easiest interpretation is a fan page. I wanted proof instead of a page. A streak that only lives in an app's database is a vibe. A streak minted as a wallet-owned, Explorer-verifiable NFT is a receipt — and receipts are what separate "I say I'm passionate" from "here's 100 days, audit it yourself."
My own longest streak while building this was the project itself: several days of shipping straight through, no missed check-ins, until the Unstoppable tier stopped being hypothetical.
Built solo in a weekend. Momentum, proven daily.
— Harsh Kochar (harshkochar88@gmail.com)


Top comments (2)
Great work ... I will be top on leaderboard
Really Appreciated 🤑