A private, gamified tool for quitting a habit you want gone (built first for NoFap / quitting porn), plus everyday habits, focus and personal growth. Works as a website and as an iOS/Android app. You build the habits you choose, pause before the ones you don't, and a luminous 3D Seed grows with every active day. Missed days end a streak but never shrink the Seed.
Website: https://echa920.github.io/seed/ (once published). Free to run: GitHub Pages hosts the site, Supabase stores accounts and synced data, and sign-in is optional with Google. Setup steps: docs/WEBSITE_SETUP.md.
This is a pre-release build (phases 1–6 of the product plan). It runs, it is tested, and it is honest about what isn't finished. See What is and isn't done.
packages/shared Domain logic shared by app and server: schedules, streaks, calendar, analytics,
XP / levels / Seed stages / achievements, exercises, starter plans, offline coach,
and the zod API contract.
supabase/ Database schema + sync function used by the website (tested in PGlite).
services/api Optional self-hosted Fastify + SQLite backend (email accounts, AI coach proxy). Not used by the website.
apps/mobile Expo SDK 57 / React Native 0.86 app (expo-router, React Three Fiber on expo-gl).
scripts/ Secret generator, audio + icon generators, end-to-end smoke test.
docs/ Architecture, API, AI coach, progression, privacy & security, testing, release.
npm.cmd install
npm.cmd run build:web
npm.cmd run serve:web # http://localhost:8082/seed/Requires Node 22.12+ (developed on Node 24) and npm 11.
npm install
# Backend
npm run gen:secret # prints JWT_SECRET
cp .env.example .env # paste the secret; add ANTHROPIC_API_KEY to enable the AI coach
npm run dev:api # http://localhost:4100 (Swagger UI at /docs)
# App (in another terminal)
EXPO_PUBLIC_API_URL=http://<your-computer-LAN-IP>:4100 npm run dev:mobileThe app works without a server. Everything is stored on the device (guest mode), and the coach falls back to a labelled offline coach. Point it at a server with EXPO_PUBLIC_API_URL, app.json → extra.apiUrl, or Profile → Account and sync → Server (dev convenience).
Expo Go vs development build. Most of the app runs in Expo Go. The 3D Seed (expo-gl), background audio and reliable local notifications should be checked in a development build (npx expo run:ios / run:android, or EAS Build). Real app blocking will need a development build plus platform entitlements (see docs/CONTENT_BLOCKER.md).
npm run check # eslint + typecheck (3 packages) + all tests
npm run smoke # starts a real API process and runs an end-to-end flow
npm run export:check --workspace apps/mobile # bundles iOS + Android JS (uses --no-bytecode, see below)Latest results are in docs/TESTING.md. On this PC, Windows Application Control blocks the Hermes compiler binary, so the bundle check runs with --no-bytecode. Real builds (EAS or on a Mac) are unaffected.
| Area | Status |
|---|---|
| Reset streak: live counter, best run, milestones (1–365 days), shame-free reset log with triggers, patterns, Pause button on every tab, blocking guide, optional PIN lock, discreet wording | Working, tested |
| Habits (create/edit/archive/restore/pause/delete; daily, weekdays, N×/week, every N days, one-time; check/count/duration/quantity) | Working, tested |
| Streak engine (timezone/DST-safe, rest days, pauses, setbacks, weekly targets, milestones) | Working, unit-tested |
| Calendar with legend, notes, weekly/monthly summaries | Working |
| Analytics (documented formulas, ranges, per-habit, insights only with enough data) | Working, unit-tested |
| Seed: 8 configurable stages, 3D (R3F/expo-gl) + 2D fallback, rotate/tap/reset, reduced motion, cosmetics | Working; 3D not yet measured on a real device |
| XP, levels, achievements, rewards (derived and deduplicated; server-authoritative after sync) | Working, unit-tested |
| Onboarding (8 steps), starter plan, notification permission flow | Working, UI-tested |
| Guided breathing/mindfulness (8 exercises), Urge Tool, Focus timer, reflections | Working |
| Audio player (3 original ambient tracks; speed, seek, volume, sleep timer, favourites, background) | Working; narrated sessions not available (no licensed recordings) |
| Local reminders (per-habit times, quiet hours, lock-screen privacy, weekly summary) | Working; verify on device |
| Accounts (email + password, rotating refresh tokens, verify email, reset, delete, export) | Working, tested; no real email provider |
| Offline-first sync with conflict resolution | Working, tested |
| AI coach (Claude via backend, consent-gated context, crisis handling, daily limit, fallback) | Implemented and tested with a fake model; not yet called live (no API key here) |
| Sign in with Apple / Google | Not implemented (needs store credentials) |
| Content blocker | Not implemented: honest status screen + focus timer (needs Apple Family Controls entitlement / Android review) |
| Community | Deferred by decision (off; status screen only) |
| Subscriptions | Not implemented (app states it is free); see docs/RELEASE.md |
| Light theme | Not implemented (dark only) |
The full list of incomplete integrations, external services, costs and the store checklist is in docs/RELEASE.md.
- docs/ARCHITECTURE.md: stack choices and constraints, screen map, data model, sync
- docs/API.md: endpoints, auth flow, sync protocol, errors, rate limits
- docs/AI_COACH.md: model, consent, context, crisis handling, costs
- docs/PROGRESSION.md: streak rules, XP, levels, Seed stages, achievements, cosmetics
- docs/SECURITY_PRIVACY.md: data inventory, retention, threat notes, analytics
- docs/CONTENT_BLOCKER.md: platform research and plan
- docs/TESTING.md: automated results and the manual device checklist
- docs/RELEASE.md: deployment, store readiness, services and costs
- docs/legal/: draft privacy policy and terms (not lawyer-reviewed)