How cmmhero/zentype works
zentype is a customizable typing-test app with guest-first local play and optional cloud accounts. The main flow configures a prompt, runs the typing engine, computes a result, saves it locally or to the cloud, then processes XP and achievements; profile and leaderboard views expose accumulated stats. The map also captures documented appearance, account, and discovery capabilities. Source excerpts are partial, so unsampled feature wiring is shown only where the README documents it.
Main entry points: page.tsx Typing page · server.ts Supabase client · gamification.ts Progress processing · leaderboard.ts Ranking service
Components 24
Typing experience
- Typing page
src/app/page.tsx - Typing display
src/components/typing/typing-display.tsx - Typing engine
src/hooks/use-typing-engine.ts - Prompt service
src/server/prompts.ts - Prompt utilities
src/lib/prompt-utils.ts
Results and progress
- Result service
src/server/results.ts - Guest results
src/stores/results-store.ts - Progress processing
src/server/gamification.ts - Achievement rules
src/lib/achievements.ts - Profile dashboard
src/app/profile/page.tsx - Public profile
src/app/profile/[username]/page.tsx
Account and settings
- Settings
src/app/settings/page.tsx - Settings state
src/stores/settings-store.ts - Settings sync
src/hooks/use-settings-sync.ts - Auth actions
src/server/auth.ts - OAuth callback
src/app/auth/callback/route.ts
Community and discovery
- Leaderboards
src/app/leaderboard/page.tsx - Ranking service
src/server/leaderboard.ts - Command palette
src/components/layout/command-palette.tsx
Persistence services
- Supabase client
src/lib/supabase/server.ts - Supabase
- Redis rankings
src/lib/redis.ts - Postgres
Other components
- Player
Connections 23
- Player → Typing page: starts test
- Typing page → Typing display: renders test
- Typing display → Typing engine: runs engine
- Typing page → Prompt service: requests prompt
- Typing page → Prompt utilities: fallback prompt
- Typing page → Result service: saves result
- Typing page → Guest results: keeps guest results
- Typing page → Progress processing: processes saved result
- Progress processing → Achievement rules: checks progress
- Result service → Supabase client: uses cloud client
- Supabase client → Supabase: reads and writes
- Progress processing → Supabase client: persists progress
- Settings → Settings state: updates settings
- Settings sync → Settings state: syncs settings
- Settings sync → Supabase client: syncs cloud settings
- Auth actions → Supabase client: uses session client
- OAuth callback → Supabase client: exchanges OAuth code
- Profile dashboard → Supabase client: loads account data
- Public profile → Supabase client: loads public data
- Leaderboards → Ranking service: requests rankings
- Ranking service → Redis rankings: reads all-time boards
- Ranking service → Postgres: reads fallback and recent boards
- Command palette → Result service: searches users