How henryivwighre/nana works
Nana is a bedtime-story setup app: users authenticate, reach a dashboard of children, voices, and recent stories, then can add, edit, or delete child profiles that personalize stories. The sampled runtime implements authentication and child-profile management; voices and stories appear as dashboard sections and links, but their implementation is not present in the supplied tree. Supabase is used for authentication and persisted profile/dashboard data. The graph reflects only relationships supported by the excerpts or source index.
Main entry points: server.ts Server Client · new/page.tsx New Child Page · [id]/page.tsx Edit Child Page · login/page.tsx Login and Signup Pages
Components 16
Authentication
- Login and Signup Pages
src/app/login/page.tsx - Login Form
src/app/login/login-form.tsx - Signup Form
src/app/signup/signup-form.tsx - Auth Actions
src/app/auth/actions.ts
Dashboard
- Site Header
src/components/site-header.tsx - Dashboard Page
src/app/dashboard/page.tsx - Dashboard Data Query
src/lib/db/dashboard.ts - Home Route
src/app/page.tsx
Child Profiles
- New Child Page
src/app/dashboard/children/new/page.tsx - Edit Child Page
src/app/dashboard/children/[id]/page.tsx - Child Form
src/app/dashboard/children/child-form.tsx - Child Actions
src/app/dashboard/children/actions.ts
Supabase Access
- Server Client
src/lib/supabase/server.ts - Browser Client
src/lib/supabase/client.ts
Other components
- User
- Supabase
Connections 26
- User → Login and Signup Pages: opens
src/app/login/page.tsx - Login and Signup Pages → Server Client: checks session
src/app/login/page.tsx - Login and Signup Pages → Login Form: renders
src/app/login/page.tsx - Login and Signup Pages → Signup Form: renders
- Login Form → Browser Client: creates client
src/app/login/login-form.tsx - Signup Form → Browser Client: creates client
src/app/signup/signup-form.tsx - Site Header → Auth Actions: submits sign-out
src/components/site-header.tsx - User → Dashboard Page: opens
src/app/dashboard/page.tsx - Dashboard Page → Dashboard Data Query: loads data
src/app/dashboard/page.tsx - Dashboard Page → Site Header: renders
src/app/dashboard/page.tsx - Dashboard Data Query → Server Client: creates client
src/lib/db/dashboard.ts - User → New Child Page: opens
src/app/dashboard/children/new/page.tsx - New Child Page → Server Client: checks session
src/app/dashboard/children/new/page.tsx - New Child Page → Site Header: renders
src/app/dashboard/children/new/page.tsx - New Child Page → Child Form: renders
src/app/dashboard/children/new/page.tsx - New Child Page → Child Actions: passes create action
src/app/dashboard/children/new/page.tsx - User → Edit Child Page: opens
src/app/dashboard/children/[id]/page.tsx - Edit Child Page → Server Client: creates client
src/app/dashboard/children/[id]/page.tsx - Edit Child Page → Site Header: renders
src/app/dashboard/children/[id]/page.tsx - Edit Child Page → Child Form: renders
src/app/dashboard/children/[id]/page.tsx - Edit Child Page → Child Actions: binds actions
src/app/dashboard/children/[id]/page.tsx - Child Form → Child Actions: invokes passed action
src/app/dashboard/children/child-form.tsx - Child Actions → Server Client: creates client
src/app/dashboard/children/actions.ts - Server Client → Supabase: connects
- Browser Client → Supabase: connects
- Home Route → Server Client: uses
src/app/page.tsx