Inspiration

We all obsess over streaks. We also need to study. Why not use Solana.

What it does

CheckedIn lets you log a single “I studied today” check-in per calendar day, stored on Solana. Your wallet owns a streak account that tracks your current streak and last check-in. The web app shows your streak, blocks double check-ins, and turns your study history into on-chain reputation.

How we built it

Wrote a Solana program in Rust using Anchor. Created a UserStreak PDA account. Implemented check_in to initialize, increment, or reset streaks based on timestamps. Deployed the program to devnet with Anchor CLI. Built a Next.js + TypeScript + Tailwind frontend. Integrated Phantom and other wallets via Solana Wallet Adapter. Used Anchor’s TypeScript client + @solana/web3.js to derive PDAs, send transactions, and fetch streak data.

Challenges we ran into

Getting Anchor + Next.js + wallet adapter all talking cleanly to the same program ID. Handling time and “one check-in per day” correctly across local/devnet and different time zones. Debugging Solana transaction errors and PDA mismatches. Dealing with wallet UX: failed signatures, rejected transactions, and making error states understandable.

Accomplishments that we're proud of

Fully deployed Solana program enforcing streak logic on-chain (not just simulated). A minimal, fast UI where a real devnet transaction is only one click away. Clean separation between contract logic and frontend, making it easy to extend. Turning a very common Web2 pattern (streaks) into a composable, verifiable Web3 primitive.

What we learned

How Anchor’s account model and PDAs map really well to “one user → one piece of state.” How to design smart-contract APIs from a product point of view, not just from code. The importance of good error messages in blockchain apps—especially when wallets and RPC nodes fail. How Solana dev tooling (Anchor, wallet adapter, TS clients) speeds up full-stack development.

What’s next for CheckedIn

Multi-habit support (different subjects or goals per wallet).

Built With

Share this project:

Updates