
I built brokelock a commitment savings vault on Monad. You name a goal, set a deadline and a penalty rate (up to 50%), and lock MON toward it. Withdraw after the deadline: free. Rage-quit early: the contract skims the penalty and credits it to an accountability partner you chose, or burns it if you trust no one. I'm broke, not because I don't earn, but because every savings app has a withdraw button that works instantly at 2am. Willpower isn't a system; consequences are. Brokelock doesn't say no when I reach for my savings, it says "that'll be 10%, and your friend collects." It converts a moment of weakness into a real, immediate, social cost. The friend angle is the point: the penalty isn't a fee vanishing into some protocol, it's a payout to someone who'll text you about it. The contract is the app. Skipping the backend entirely and treating chain state as the single source of truth simplified everything, no sync bugs, no mock data, and the demo can't lie because the UI can't show anything the chain doesn't say. The pull-payment pattern matters. Penalties are credited to a claimable balance the partner withdraws themselves, so a malicious or reverting partner contract can never block a saver's withdrawal. Push payments would have been a griefing vector. Monad's 400ms blocks change UX assumptions. I didn't need optimistic UI or pending-state theater, transactions confirm fast enough to just re-read chain state. Testing against the live deployment beats a local fork for a hackathon, my 16 assertions run against the real contract on testnet, so "it works" and "the demo works" are the same claim. Design is half the build. The git history is honest about this: roughly as many commits went into the vault-wheel hero, glass UI, and accessibility passes (contrast, reduced motion, date-picker a11y) as into the contract. A savings app about feelings has to look like something you'd trust with money. Contract address - `0x52b4f638698000d41f58ff6448538acd98d06b98`
讨论
还没有评论,快来分享你的看法吧。