Career intelligence system built on Harmonia UI.
- Framework: Next.js 15 App Router
- Auth + DB: Supabase
- UI: Tailwind + DaisyUI
- State: Zustand
- Adaptive Layer: Harmonia
/lib/capacity
Complete TypeScript type system:
Opportunity— core data model with all fieldsScoredOpportunity— computed composite score + categoryAlignmentScore,EnergyScore,SignalScore,PositioningGapInterviewReflection,FollowUpGroveInsights— derived analytics
Production-ready schema:
opportunitiestable with all scoring dimensionsreflectionstable (one-to-many per opportunity)- Row Level Security — users only see their own data
- Auto-updated
updated_attrigger - Indexed for performance
Zustand store with:
- Live scoring on every mutation (composite score, category)
- Auto-derived insights (patterns, gaps, averages)
- Selectors:
getByCategory,getByStatus,getWarmLeads
Supabase data layer:
- Full CRUD for opportunities
- Reflection creation
- Auth helpers (signUp, signIn, signOut, getSession)
- snake_case ↔ camelCase mapping
Pure scoring utilities:
- Label maps for all enum types
categoriesForMode()— Harmonia mode → which categories to showcardFieldsForDensity()— density token → which fields to render- Badge colors, score colors, alignment labels
/app/layout.tsx— Root layout withCapacityProvider+ auth guard/app/page.tsx— Auth page (login/signup)/app/dashboard/page.tsx— Capacity-adaptive pipeline view/components/grove/OpportunityCard— Adaptive card usinguseDerivedMode()/app/opportunities/new/page.tsx— Add opportunity form/app/opportunities/[id]/page.tsx— Detail + reflection/app/insights/page.tsx— Patterns + gap analysis
npx create-next-app@latest grove --typescript --tailwind --app
cd grovenpm install @supabase/supabase-js zustand daisyui
npm install -D @types/nodeIn tailwind.config.ts:
plugins: [require("daisyui")],
daisyui: { themes: ["dark"] }cp -r ../harmonia-ui/lib/capacity ./src/lib/capacityCreate .env.local:
NEXT_PUBLIC_SUPABASE_URL=your_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
Paste supabase/schema.sql into your Supabase SQL editor and run.
| Harmonia Hook | Grove Usage |
|---|---|
useDerivedMode() |
Every card and dashboard section |
deriveModeLabel() |
categoriesForMode() — filter pipeline |
usePredictedCapacity() |
Preload minimal view before user hits low capacity |
useFeedback().fire() |
Haptic on opportunity save, status change |
CapacityProvider |
Root layout wrapper |
CapacityControls |
Fixed panel on dashboard |