Gamification — Curate Your Brain
Kimosabe's tagline is a promise: the more deliberately you use the product, the better your communications hygiene gets. Gamification turns that promise into a visible ladder users can climb — without ever measuring or rewarding behavior we cannot see.
Core principle
If we cannot compute it from ciphertext or self-attestation, we do not measure it.
We never count messages sent, words typed, attachments shared, or sentiment. Those are private. We can count locally-computed signals the user opts to share, and we can reward security-hygiene actions the server can verify (key rotation, recovery-key download, passkey enrollment).
The Curation Ladder (5 ranks)
| Rank | Name | Unlock criteria | Cosmetic |
|---|---|---|---|
| 1 | Initiate | Account created. Recovery key downloaded. | Bronze Metatron mark |
| 2 | Apprentice | 1 verified contact (safety number compared) + first conversation TTL set | Antique-gold mark, faceted |
| 3 | Adept | 5 verified contacts + passkey enrolled (when shipped) + recovery key rotated once | Gold mark with inner glow |
| 4 | Curator | 10 verified contacts + 1 group with all members verified + at least one agent connected | Animated mark on hover |
| 5 | Sentinel | 25 verified contacts + own-agent attestation + completes annual security checkup | Custom signature mark on profile |
All ranks are earned through hygiene, not volume. A Sentinel might send 5 messages a year.
Streaks (privacy-safe variant)
Traditional streaks measure activity. Ours measure uninterrupted hygiene:
- 🔐 Vault streak — consecutive months with zero password resets. Resets when password changes.
- 🔁 Rotation streak — consecutive 90-day windows where the recovery key was rotated on schedule.
- ✅ Verification streak — every new contact in the last 30 days has a verified safety number.
Streak counters are computed and stored client-side in IndexedDB. They never reach the server. Users can opt to attest a streak to the server for badge display; the attestation is a signed claim, not an audit trail.
Badges (one-time)
| Badge | Earn condition |
|---|---|
| Day-One | Account created in Phase 1 |
| Witness | First contact verified via safety number |
| Forager | Imported identity from a backup file |
| Lighthouse | Helped a contact recover via recovery-key signal |
| Owner | Hosted your own agent (not Agent-as-Service) |
| Watchtower | Reported a verified vulnerability (CVD program) |
| Quiet | 30-day streak with all conversations on disappearing messages |
Badges are non-transferrable, displayed only on your own profile by default, and can be selectively revealed per-contact.
Anti-patterns we refuse
- ❌ Engagement metrics. No "messages sent today." That's the surveillance economy in a friendlier hat.
- ❌ Leaderboards across users. Privacy collapses the moment we rank people.
- ❌ Read-receipt-driven scoring. Receipts are opt-in per conversation; they do not feed any score.
- ❌ Push-to-shame nudges. No "you haven't messaged Alice in 30 days." We are not a habit-loop product.
- ❌ NFTs / on-chain badges. Public chains are the opposite of our threat model.
Onboarding hooks
The first run of the app surfaces three deliberate moments:
- Save your recovery key — completes Initiate rank immediately. Tactile: download + copy + "I've stored it" attestation.
- Add and verify your first contact — opens the Apprentice path with a clear "compare these 6 numbers" UX.
- Set a default conversation TTL — frames disappearing messages as the norm, not the exception.
Each step is skippable. None blocks core functionality. All persist locally so users can resume.
Telemetry we do collect (with consent)
Aggregate, k-anonymized, opt-in:
- App version distribution
- Crash reports (no message content, ever)
- Feature-flag exposure for A/B safety messaging copy
Off by default. Toggle in Settings → Privacy.
Implementation notes
- Ladder + badge logic lives in
src/lib/curation.ts(Phase 2 — not yet created). - Persistent state: IndexedDB (
kimosabe.curation) + an attested mirror inpublic.curation_attestations(signed by the user's identity key). - Display:
/_authenticated/profile— own profile only by default; per-contact reveal is a one-tap action. - All copy lives in
src/lib/i18n/curation.tsto ease translation.
Roadmap mapping
| Phase | Gamification surface |
|---|---|
| 1 | Initiate rank + Day-One / Quiet badges (recovery-key + TTL hooks already exist) |
| 2 | Apprentice + Adept ranks; safety numbers; passkey badge |
| 3 | Curator rank; agent badge; identity attestation badge |
| 4 | Native-client streak parity (same IndexedDB schema in app) |
| 5 | Sentinel rank; annual security checkup flow |
We will not ship a single ladder UI before Phase 2 — ranks 2+ depend on safety numbers, which depend on group/identity work scheduled there. Phase 1 ships the Initiate rank invisibly via the existing recovery-key flow.
