# trustinggoose-cpu/evergrace-app architecture

> Architecture diagram of the GitHub repository trustinggoose-cpu/evergrace-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/trustinggoose-cpu/evergrace-app
- Repository: https://github.com/trustinggoose-cpu/evergrace-app

## Overview

EverGrace is a senior-friendly martial-arts training platform with member and staff experiences. Members can complete a health check-in, receive a recommended track, sign in, browse access-gated lessons, and track practice; the admin console manages members, videos, and other content. Shared server modules provide authentication, business rules, queries, validation, and persistence. The README documents the product capabilities; source excerpts and the index support only some implementation links, so other capability links are shown at the documented level.

Main entry points: [`src/actions/member.ts`](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/member.ts) (Member actions), [`src/lib/auth.ts`](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/auth.ts) (Authentication), [`src/lib/db.ts`](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/db.ts) (Application database), [`src/app/admin/page.tsx`](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/admin/page.tsx) (Admin console)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_member["Member experience"]
  node_onboarding["Health check-in<br/>[page.tsx]"]
  node_login["Magic-link login<br/>[page.tsx]"]
  node_dashboard["Member dashboard<br/>[page.tsx]"]
  node_library["Video library<br/>[page.tsx]"]
  node_player["Lesson player<br/>[player-stage.tsx]"]
end

subgraph group_staff["Staff console"]
  node_admin["Admin console<br/>[page.tsx]"]
  node_contentui["Content managers<br/>[blog-manager.tsx]"]
  node_adminvideo["Video management<br/>[admin-video.ts]"]
  node_settings["Integration diagnostics<br/>[page.tsx]"]
end

subgraph group_services["Application services"]
  node_checkin["Track scoring<br/>[onboarding.ts]"]
  node_auth["Authentication<br/>[auth.ts]"]
  node_memberactions["Member actions<br/>[member.ts]"]
  node_domain["Access and track rules<br/>[domain.ts]"]
  node_queries["Application queries<br/>[queries.ts]"]
  node_validation["Input validation<br/>[validation.ts]"]
  node_db[("Application database<br/>[db.ts]")]
  node_admincontent["Content actions<br/>[admin-content.ts]"]
  node_notify["Notifications<br/>[notifications.ts]"]
  node_media["Video hosting<br/>[media.ts]"]
  node_billing["Plan changes<br/>[billing.ts]"]
  node_env["Integration configuration<br/>[env.ts]"]
end

subgraph group_integrations["External integrations"]
  node_mail["Email delivery<br/>[mail.ts]"]
  node_mediawebhook["Media-ready webhook<br/>[route.ts]"]
  node_billinghook["Billing webhook<br/>[route.ts]"]
end

node_visitor(("Member"))
node_stripe{{"Stripe"}}
node_mux{{"Mux"}}

node_visitor -->|"completes check-in"| node_onboarding
node_onboarding -->|"submits answers"| node_checkin
node_checkin -->|"scores track"| node_domain
node_visitor -->|"requests sign-in"| node_login
node_login -->|"requests magic link"| node_auth
node_auth -->|"sends link"| node_mail
node_auth -->|"reads and writes sessions"| node_db
node_visitor -->|"views progress"| node_dashboard
node_dashboard -->|"loads member data"| node_queries
node_dashboard -->|"records activity"| node_memberactions
node_memberactions -->|"requires member"| node_auth
node_memberactions -->|"checks plan rules"| node_domain
node_memberactions -->|"validates input"| node_validation
node_memberactions -->|"persists activity"| node_db
node_visitor -->|"browses lessons"| node_library
node_library -->|"opens lesson"| node_player
node_player -->|"enforces access"| node_domain
node_visitor -->|"opens staff console"| node_admin
node_admin -->|"manages content"| node_contentui
node_contentui -->|"saves or deletes posts"| node_admincontent
node_admincontent -->|"requires admin"| node_auth
node_admincontent -->|"reads and writes content"| node_db
node_admincontent -->|"validates input"| node_validation
node_admin -->|"manages videos"| node_adminvideo
node_adminvideo -.->|"notifies on publish"| node_notify
node_mux -->|"sends asset event"| node_mediawebhook
node_mediawebhook -->|"updates video"| node_db
node_mediawebhook -->|"creates thumbnail URL"| node_media
node_mediawebhook -->|"fans out notifications"| node_notify
node_stripe -->|"sends plan events"| node_billinghook
node_billinghook -->|"applies plan change"| node_billing
node_billing -->|"updates membership"| node_db
node_admin -->|"checks integrations"| node_settings
node_settings -->|"reports configuration"| node_env

click node_onboarding "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/onboarding/page.tsx"
click node_checkin "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/onboarding.ts"
click node_login "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/login/page.tsx"
click node_auth "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/auth.ts"
click node_mail "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/mail.ts"
click node_dashboard "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/dashboard/page.tsx"
click node_memberactions "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/member.ts"
click node_library "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/library/page.tsx"
click node_player "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/components/player/player-stage.tsx"
click node_domain "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/domain.ts"
click node_queries "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/queries.ts"
click node_validation "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/validation.ts"
click node_db "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/db.ts"
click node_admin "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/admin/page.tsx"
click node_contentui "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/components/admin/blog-manager.tsx"
click node_admincontent "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/admin-content.ts"
click node_adminvideo "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/admin-video.ts"
click node_notify "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/notifications.ts"
click node_mediawebhook "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/api/mux/webhook/route.ts"
click node_media "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/media.ts"
click node_billinghook "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/api/stripe/webhook/route.ts"
click node_billing "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/billing.ts"
click node_settings "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/admin/settings/page.tsx"
click node_env "https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/env.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_onboarding,node_login,node_dashboard,node_library,node_player toneBlue
class node_admin,node_contentui,node_adminvideo,node_settings toneAmber
class node_checkin,node_auth,node_memberactions,node_domain,node_queries,node_validation,node_db,node_admincontent,node_notify,node_media,node_billing,node_env toneMint
class node_mail,node_mediawebhook,node_billinghook toneRose
class node_visitor,node_stripe,node_mux toneIndigo
```

## Components

### Member experience

- [Health check-in](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/onboarding/page.tsx): `src/app/onboarding/page.tsx`
- [Magic-link login](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`
- [Member dashboard](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/dashboard/page.tsx): `src/app/dashboard/page.tsx`
- [Video library](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/library/page.tsx): `src/app/library/page.tsx`
- [Lesson player](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/components/player/player-stage.tsx): `src/components/player/player-stage.tsx`

### Staff console

- [Admin console](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/admin/page.tsx): `src/app/admin/page.tsx`
- [Content managers](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/components/admin/blog-manager.tsx): `src/components/admin/blog-manager.tsx`
- [Video management](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/admin-video.ts): `src/actions/admin-video.ts`
- [Integration diagnostics](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/admin/settings/page.tsx): `src/app/admin/settings/page.tsx`

### Application services

- [Track scoring](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/onboarding.ts): `src/actions/onboarding.ts`
- [Authentication](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Member actions](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/member.ts): `src/actions/member.ts`
- [Access and track rules](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/domain.ts): `src/lib/domain.ts`
- [Application queries](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/queries.ts): `src/lib/queries.ts`
- [Input validation](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/validation.ts): `src/lib/validation.ts`
- [Application database](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/db.ts): `src/lib/db.ts`
- [Content actions](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/actions/admin-content.ts): `src/actions/admin-content.ts`
- [Notifications](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/notifications.ts): `src/lib/notifications.ts`
- [Video hosting](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/media.ts): `src/lib/media.ts`
- [Plan changes](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/billing.ts): `src/lib/billing.ts`
- [Integration configuration](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/env.ts): `src/lib/env.ts`

### External integrations

- [Email delivery](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/lib/mail.ts): `src/lib/mail.ts`
- [Media-ready webhook](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/api/mux/webhook/route.ts): `src/app/api/mux/webhook/route.ts`
- [Billing webhook](https://github.com/trustinggoose-cpu/evergrace-app/blob/main/src/app/api/stripe/webhook/route.ts): `src/app/api/stripe/webhook/route.ts`

### Other components

- **Member**
- **Stripe**
- **Mux**

## Connections

- Member → Health check-in: completes check-in
- Health check-in → Track scoring: submits answers
- Track scoring → Access and track rules: scores track (evidence: `src/actions/onboarding.ts`)
- Member → Magic-link login: requests sign-in
- Magic-link login → Authentication: requests magic link
- Authentication → Email delivery: sends link (evidence: `src/lib/auth.ts`)
- Authentication → Application database: reads and writes sessions (evidence: `src/lib/auth.ts`)
- Member → Member dashboard: views progress
- Member dashboard → Application queries: loads member data
- Member dashboard → Member actions: records activity
- Member actions → Authentication: requires member (evidence: `src/actions/member.ts`)
- Member actions → Access and track rules: checks plan rules (evidence: `src/actions/member.ts`)
- Member actions → Input validation: validates input (evidence: `src/actions/member.ts`)
- Member actions → Application database: persists activity (evidence: `src/actions/member.ts`)
- Member → Video library: browses lessons
- Video library → Lesson player: opens lesson
- Lesson player → Access and track rules: enforces access
- Member → Admin console: opens staff console
- Admin console → Content managers: manages content
- Content managers → Content actions: saves or deletes posts (evidence: `src/components/admin/blog-manager.tsx`)
- Content actions → Authentication: requires admin (evidence: `src/actions/admin-content.ts`)
- Content actions → Application database: reads and writes content (evidence: `src/actions/admin-content.ts`)
- Content actions → Input validation: validates input (evidence: `src/actions/admin-content.ts`)
- Admin console → Video management: manages videos
- Video management → Notifications: notifies on publish
- Mux → Media-ready webhook: sends asset event
- Media-ready webhook → Application database: updates video (evidence: `src/app/api/mux/webhook/route.ts`)
- Media-ready webhook → Video hosting: creates thumbnail URL (evidence: `src/app/api/mux/webhook/route.ts`)
- Media-ready webhook → Notifications: fans out notifications (evidence: `src/app/api/mux/webhook/route.ts`)
- Stripe → Billing webhook: sends plan events
- Billing webhook → Plan changes: applies plan change (evidence: `src/app/api/stripe/webhook/route.ts`)
- Plan changes → Application database: updates membership (evidence: `src/lib/billing.ts`)
- Admin console → Integration diagnostics: checks integrations
- Integration diagnostics → Integration configuration: reports configuration
