
What I built: KoloPadi, an onchain kolo (a traditional Nigerian clay piggy bank) that only your padi (friend) can crack open on you. You lock MON into a kolo and feed it every day to keep your streak alive, that daily deposit is your check-in, no separate button, nothing to fake. Miss a day, and your padi can catch you and earn a bounty for it. Finish the full streak and the whole pot is yours; break it early and you still get most of it back, with a small cut going to your padi. It's a single Solidity contract (28 tests, verified on Sourcify/MonadVision) with a React/wagmi frontend, live on Monad testnet. What problem it solves: I've started more savings goals than I've finished. Things go fine until life gets stressful or exciting, and suddenly the money that was "for something" becomes just... available. My grandmother's kolo never had this problem, you couldn't get the money out without smashing it in front of everyone. KoloPadi rebuilds that same friction onchain, and adds the one thing a clay pot never had: a friend who gets paid to catch you the moment you slip. What I learned: This was my first smart contract, first testnet deployment, and first time shipping anything onchain. A week ago I didn't have a wallet. The biggest lesson was that the hard problem in an app like this isn't the Solidity, it's the oracle problem: the chain can verify money moving, but it can't verify a promise being kept. Making the deposit itself the check-in, and turning a friend into a financially-incentivized witness for the one thing that can't be verified onchain, taught me more about smart contract design than any tutorial could have. I also learned that real end-to-end testing (I drove the live contract with two real wallets before trusting it) catches bugs that reading code never will. It caught an off-by-one epoch bug and a UI rounding bug that I'd have otherwise shipped.
Discussion
No comments yet. Be the first to share what you think.