Prove it. Every day.
Habits. Streaks. Accountability. All onchain.
Proov is a habit-tracking and personal accountability dApp built on Celo. Users create habits, run focus timers, log activities with AI verification, write journal entries, and build daily streaks. Friends connect to form accountability circles. Every action fires an onchain transaction — the proof is permanent and publicly verifiable.
| Dashboard | Link |
|---|---|
| Dune (onchain) | dune.com/marvyy/proov |
| Goldsky subgraph | API v4.0.0 |
| Admin panel (owner only) | /admin |
Lightweight event-log contracts — every user action emits an onchain event at ~0.005–0.009 CELO per transaction. Data is stored in Supabase; the chain is the immutable proof layer indexed by Dune and Goldsky.
All contracts follow the UUPS upgradeable proxy pattern (OpenZeppelin v5) — logic can be upgraded without changing the proxy address users interact with.
| Contract | Proxy Address | Celoscan |
|---|---|---|
| ProovCore | 0x6f379efDb10aFD85b233aE35Ad01164c7bc54eE2 |
view |
| SessionManager | 0xea7d4608e9e2798D826d0DD698A7637EC83EA8d2 |
view |
| CircleManager | 0x5366DB5a7aB63ceDE7229d15179633CA69ad076D |
view |
| FuelFaucet | 0x500e1c72aB3c5C5be17255fe6f66bA8f3c37E988 |
view |
Deployed at block 68,295,054 · May 31 2026
- Create habits across 6 categories: Focus, Fitness, Reading, Hydration, Sleep, Custom
- Every creation, completion, and archive fires an onchain transaction
- AI verification (Claude Sonnet 4.6) for fitness habits — proof hash stored in the tx
- Deactivate and reactivate habits at any time
- Consecutive daily completions build your streak — miss a day and it resets
- Milestones at 7, 21, 30, 50, 100, 200 days emit
MilestoneReachedonchain events - Streak data kept in Supabase; milestone proof lives onchain
- Start/end sessions recorded onchain via
SessionManager - Timer reconstructs elapsed time from local state — survives tab switches and refreshes
- Powered by Claude Sonnet 4.6
- Users describe their workout before submitting a completion
- Claude judges the description — vague claims rejected, specific effort accepted
- Verification hash stored in the transaction
- Add friends by wallet address or username
- Accepting a circle request emits
MemberAddedonchain (proof of the bond) - Cheers and nudges sent onchain
- Top 50 users globally, sorted by current streak
- Gold/silver/bronze podium for top 3
- Tap any user to view their public profile
- Log daily entries — content stored as a
keccak256hash onchain (private, verifiable) - Counts as daily activity and keeps your streak alive
| Layer | Technology |
|---|---|
| Blockchain | Celo (L2, post-March 2025 migration) |
| Smart contracts | Solidity 0.8.28, Hardhat, OpenZeppelin UUPS v5 |
| Frontend | Next.js 14, TypeScript |
| Wallet auth | Web3Auth (social login — Google, Email OTP) |
| Onchain reads/writes | wagmi v2 + viem v2 |
| Database | Supabase (Postgres — app state) |
| Indexing | Goldsky subgraph v4.0.0 |
| Analytics | Dune |
| AI verification | Claude Sonnet 4.6 via Anthropic API |
| AI reports | Google Gemini 2.5 Flash via @google/generative-ai |
| Animations | Framer Motion |
proov-app/
├── apps/contracts/ ← Hardhat workspace
│ ├── contracts/
│ │ ├── ProovCore.sol ← habits + streaks + journal (UUPS upgradeable)
│ │ ├── SessionManager.sol ← focus timer sessions (UUPS upgradeable)
│ │ ├── CircleManager.sol ← accountability circles (UUPS upgradeable)
│ │ └── FuelFaucet.sol ← daily CELO drip for users (UUPS upgradeable)
│ ├── goldsky/ ← Goldsky subgraph (v4.0.0)
│ └── scripts/
│ ├── deploy-upgradeable.ts ← mainnet deploy (UUPS proxies)
│ ├── upgrade.ts ← push new implementation to existing proxies
│ └── register-agent.ts ← ERC-8004 AI agent registration
│
└── apps/web/ ← Next.js 14 frontend
├── app/
│ ├── page.tsx ← Landing page
│ ├── signup/ signin/ ← Web3Auth social login
│ ├── dashboard/ ← Streak hero + today's habits
│ ├── habits/ ← Habit manager
│ ├── timer/ ← Focus timer with live ring
│ ├── circle/ ← Accountability circle
│ ├── leaderboard/ ← Global leaderboard
│ └── api/
│ ├── faucet/ ← Server-side CELO drip for new users
│ └── verify-habit/ ← Claude AI verification
├── hooks/ ← useProovTx, useBackgroundTx, useSession
└── lib/ ← wagmi-config, transactions ABIs, auth, fuel
All four contracts are event-log only — no complex storage, just events. This keeps gas at ~0.005–0.009 CELO per transaction (~17–20 txs per 0.1 CELO at current Celo mainnet gas prices).
All contracts use the UUPS proxy pattern: the proxy address is permanent; only the implementation behind it can be swapped by the owner via upgrade.ts.
createHabit(name, type, duration, frequency)→ emitsHabitCreatedselfCompleteHabit(habitId, hash)→ emitsHabitCompleteddeactivateHabit(habitId)→ emitsHabitDeactivatedreactivateHabit(habitId)→ emitsHabitReactivatedrecordStreakIncrement(count)→ emitsStreakUpdated+MilestoneReachedon milestone dayssetUsername / editUsername→ emitsUsernameSetlogJournalEntry(hash)→ emitsJournalLogged
startSession(habitId)→ emitsSessionStartedendSession(habitId, durationSeconds)→ emitsSessionCompletedabandonSession(habitId, durationSeconds)→ emitsSessionAbandoned
acceptRequest(from)→ emitsMemberAdded(proof of circle bond)sendCheer(to)→ emitsCheerSentremoveFromCircle(member)→ emitsRemovedFromCircle
claimFuel()→ sends 0.2 CELO to caller (once per 24h, owner-funded)canClaim(user)→ view: returns true if user can claim nowsecondsUntilClaim(user)→ view: seconds until next eligible claim
node >= 18
pnpm >= 8git clone https://github.com/MarvyNwaokobia/Proov.git
cd Proov/proov-app
pnpm installcp apps/web/.env.template apps/web/.env.localFill in apps/web/.env.local:
NEXT_PUBLIC_WEB3AUTH_CLIENT_ID=your_client_id
NEXT_PUBLIC_CELO_RPC_URL=https://forno.celo.org
NEXT_PUBLIC_PROOV_CORE_ADDRESS=0x6f379efDb10aFD85b233aE35Ad01164c7bc54eE2
NEXT_PUBLIC_SESSION_MANAGER_ADDRESS=0xea7d4608e9e2798D826d0DD698A7637EC83EA8d2
NEXT_PUBLIC_CIRCLE_MANAGER_ADDRESS=0x5366DB5a7aB63ceDE7229d15179633CA69ad076D
NEXT_PUBLIC_FUEL_FAUCET_ADDRESS=0x500e1c72aB3c5C5be17255fe6f66bA8f3c37E988
NEXT_PUBLIC_GOLDSKY_URL=https://api.goldsky.com/api/public/project_cmpdqb2n5s8s801x0h45a2npf/subgraphs/proov/4.0.0/gn
ANTHROPIC_API_KEY=your_key
GEMINI_API_KEY=your_key
FAUCET_PRIVATE_KEY=0x_your_faucet_wallet_keycd apps/web && pnpm dev
# → http://localhost:3000cd apps/contracts
# Deploy fresh UUPS proxies (first time or after a breaking change)
pnpm deploy:celo
# Upgrade existing proxies to new implementation (no address change)
pnpm upgrade:celoThe deploy script prints all proxy addresses and saves them to deployed-mainnet.json. Update them in Vercel and apps/web/.env.local.
| Key | Value |
|---|---|
| Agent Address | 0xc8BF2144e4742230c8Fd692d940032E6277883e2 |
| Metadata URI | https://raw.githubusercontent.com/MarvyNwaokobia/Proov/main/agent-metadata.json |
- Fitness verification — Claude Sonnet 4.6 judges workout descriptions before accepting a habit completion.
- Sunday circle reports — Gemini generates weekly plain-text summaries for each accountability circle.
- Track: AI Agents
- Contracts: Deployed and verified on Celo Mainnet
- Agent: Registered via ERC-8004
- Onchain activity: 20+ real transactions on mainnet
MIT