# jcdynamics/silk architecture

> Architecture diagram of the GitHub repository jcdynamics/silk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jcdynamics/silk
- Repository: https://github.com/jcdynamics/silk

## Overview

SILK is a school-staff ERP/CRM frontend: staff sign in, enter an authenticated tenant shell, then manage admissions inquiries or search student records. Admissions supports inquiry capture, activity-stage updates, and conversion; SIS supports directory search and sibling-group viewing. Data modules select mock or live access, with live requests delegated to SPIDER. The README identifies fees, timetable, examinations, and HR/payroll as future scope, not implemented capabilities. Some server actions and page wiring are unsampled; links are limited to documented or evidenced interactions.

Main entry points: [`src/proxy.ts`](https://github.com/jcdynamics/silk/blob/master/src/proxy.ts) (Tenant and route proxy), [`src/lib/data/inquiries.ts`](https://github.com/jcdynamics/silk/blob/master/src/lib/data/inquiries.ts) (Inquiry data access), [`src/lib/data/students.ts`](https://github.com/jcdynamics/silk/blob/master/src/lib/data/students.ts) (Student data access), [`src/app/(dashboard)/crm/inquiries/page.tsx`](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/crm/inquiries/page.tsx) (Inquiry page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and shell"]
  node_login["Login screen<br/>[page.tsx]"]
  node_login_form["Login form<br/>[login-form.tsx]"]
  node_login_action["Login action<br/>[actions.ts]"]
  node_session["Dev session<br/>[dev-session.ts]"]
  node_proxy["Tenant and route proxy<br/>[proxy.ts]"]
  node_tenant["Tenant resolver<br/>[resolve-tenant.ts]"]
  node_dashboard["Dashboard shell<br/>[layout.tsx]"]
  node_sidebar["Plan-aware navigation<br/>[sidebar.tsx]"]
end

subgraph group_admissions["Admissions CRM"]
  node_inquiry_page["Inquiry page<br/>[page.tsx]"]
  node_inquiry_board["Inquiry board<br/>[inquiry-board.tsx]"]
  node_inquiry_controls["Inquiry capture and conversion"]
  node_inquiry_actions["Inquiry actions<br/>[actions.ts]"]
end

subgraph group_sis["Student records"]
  node_students_page["Student directory page<br/>[page.tsx]"]
  node_students_table["Student directory"]
  node_sibling_drawer["Sibling group view"]
  node_student_actions["Student actions<br/>[actions.ts]"]
end

subgraph group_data["Data integration"]
  node_inquiries["Inquiry data access<br/>[inquiries.ts]"]
  node_students_data["Student data access<br/>[students.ts]"]
  node_data_source["Mock or live selector<br/>[data-source.ts]"]
  node_api_client["Typed API client<br/>[apiClient.ts]"]
end

subgraph group_shared["Shared services"]
  node_tenant_preferences["Tenant preferences"]
  node_entitlements["Plan entitlements"]
end

node_staff(("School staff"))
node_spider{{"SPIDER backend"}}
node_browser(("Staff browser"))

node_staff -->|"opens"| node_login
node_login -->|"renders"| node_login_form
node_login_form -->|"submits"| node_login_action
node_login_action -->|"checks and encodes"| node_session
node_browser -->|"requests routes"| node_proxy
node_proxy -->|"resolves tenant"| node_tenant
node_proxy -->|"decodes cookie"| node_session
node_proxy -->|"permits dashboard"| node_dashboard
node_dashboard -->|"renders navigation"| node_sidebar
node_sidebar -->|"checks plan"| node_entitlements
node_staff -->|"manages admissions"| node_inquiry_page
node_inquiry_page -->|"loads inquiries"| node_inquiries
node_inquiry_page -->|"renders board"| node_inquiry_board
node_inquiry_board -->|"opens capture or conversion"| node_inquiry_controls
node_inquiry_board -->|"logs activity"| node_inquiry_actions
node_inquiry_actions -->|"updates inquiry"| node_inquiries
node_staff -->|"opens directory"| node_students_page
node_students_page -->|"loads students"| node_students_data
node_students_page -->|"renders directory"| node_students_table
node_students_table -->|"requests sibling group"| node_student_actions
node_student_actions -->|"loads sibling group"| node_students_data
node_students_table -->|"shows group"| node_sibling_drawer
node_inquiries -->|"selects source"| node_data_source
node_students_data -->|"selects source"| node_data_source
node_inquiries -.->|"requests live data"| node_api_client
node_students_data -.->|"requests live data"| node_api_client
node_api_client -.->|"sends REST requests"| node_spider

click node_login "https://github.com/jcdynamics/silk/blob/master/src/app/login/page.tsx"
click node_login_form "https://github.com/jcdynamics/silk/blob/master/src/components/auth/login-form.tsx"
click node_login_action "https://github.com/jcdynamics/silk/blob/master/src/app/login/actions.ts"
click node_session "https://github.com/jcdynamics/silk/blob/master/src/lib/auth/dev-session.ts"
click node_proxy "https://github.com/jcdynamics/silk/blob/master/src/proxy.ts"
click node_tenant "https://github.com/jcdynamics/silk/blob/master/src/lib/tenant/resolve-tenant.ts"
click node_dashboard "https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/layout.tsx"
click node_sidebar "https://github.com/jcdynamics/silk/blob/master/src/components/layout/sidebar.tsx"
click node_inquiry_page "https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/crm/inquiries/page.tsx"
click node_inquiry_board "https://github.com/jcdynamics/silk/blob/master/src/components/crm/inquiry-board.tsx"
click node_inquiry_controls "https://github.com/jcdynamics/silk/blob/master/src/components/crm/quick-entry-drawer.tsx"
click node_inquiry_actions "https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/crm/inquiries/actions.ts"
click node_inquiries "https://github.com/jcdynamics/silk/blob/master/src/lib/data/inquiries.ts"
click node_students_page "https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/students/page.tsx"
click node_students_table "https://github.com/jcdynamics/silk/blob/master/src/components/sis/student-directory-table.tsx"
click node_sibling_drawer "https://github.com/jcdynamics/silk/blob/master/src/components/sis/sibling-hub-drawer.tsx"
click node_student_actions "https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/students/actions.ts"
click node_students_data "https://github.com/jcdynamics/silk/blob/master/src/lib/data/students.ts"
click node_data_source "https://github.com/jcdynamics/silk/blob/master/src/lib/data/data-source.ts"
click node_api_client "https://github.com/jcdynamics/silk/blob/master/src/lib/apiClient.ts"
click node_tenant_preferences "https://github.com/jcdynamics/silk/blob/master/src/hooks/useTenantPreferences.tsx"
click node_entitlements "https://github.com/jcdynamics/silk/blob/master/src/hooks/usePlanEntitlement.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_login,node_login_form,node_login_action,node_session,node_proxy,node_tenant,node_dashboard,node_sidebar,node_browser toneBlue
class node_inquiry_page,node_inquiry_board,node_inquiry_controls,node_inquiry_actions toneAmber
class node_students_page,node_students_table,node_sibling_drawer,node_student_actions toneMint
class node_inquiries,node_students_data,node_data_source,node_api_client toneRose
class node_tenant_preferences,node_entitlements,node_staff,node_spider toneIndigo
```

## Components

### Access and shell

- [Login screen](https://github.com/jcdynamics/silk/blob/master/src/app/login/page.tsx): `src/app/login/page.tsx`
- [Login form](https://github.com/jcdynamics/silk/blob/master/src/components/auth/login-form.tsx): `src/components/auth/login-form.tsx`
- [Login action](https://github.com/jcdynamics/silk/blob/master/src/app/login/actions.ts): `src/app/login/actions.ts`
- [Dev session](https://github.com/jcdynamics/silk/blob/master/src/lib/auth/dev-session.ts): `src/lib/auth/dev-session.ts`
- [Tenant and route proxy](https://github.com/jcdynamics/silk/blob/master/src/proxy.ts): `src/proxy.ts`
- [Tenant resolver](https://github.com/jcdynamics/silk/blob/master/src/lib/tenant/resolve-tenant.ts): `src/lib/tenant/resolve-tenant.ts`
- [Dashboard shell](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/layout.tsx): `src/app/(dashboard)/layout.tsx`
- [Plan-aware navigation](https://github.com/jcdynamics/silk/blob/master/src/components/layout/sidebar.tsx): `src/components/layout/sidebar.tsx`

### Admissions CRM

- [Inquiry page](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/crm/inquiries/page.tsx): `src/app/(dashboard)/crm/inquiries/page.tsx`
- [Inquiry board](https://github.com/jcdynamics/silk/blob/master/src/components/crm/inquiry-board.tsx): `src/components/crm/inquiry-board.tsx`
- [Inquiry capture and conversion](https://github.com/jcdynamics/silk/blob/master/src/components/crm/quick-entry-drawer.tsx): `src/components/crm/quick-entry-drawer.tsx`
- [Inquiry actions](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/crm/inquiries/actions.ts): `src/app/(dashboard)/crm/inquiries/actions.ts`

### Student records

- [Student directory page](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/students/page.tsx): `src/app/(dashboard)/students/page.tsx`
- [Student directory](https://github.com/jcdynamics/silk/blob/master/src/components/sis/student-directory-table.tsx): `src/components/sis/student-directory-table.tsx`
- [Sibling group view](https://github.com/jcdynamics/silk/blob/master/src/components/sis/sibling-hub-drawer.tsx): `src/components/sis/sibling-hub-drawer.tsx`
- [Student actions](https://github.com/jcdynamics/silk/blob/master/src/app/(dashboard)/students/actions.ts): `src/app/(dashboard)/students/actions.ts`

### Data integration

- [Inquiry data access](https://github.com/jcdynamics/silk/blob/master/src/lib/data/inquiries.ts): `src/lib/data/inquiries.ts`
- [Student data access](https://github.com/jcdynamics/silk/blob/master/src/lib/data/students.ts): `src/lib/data/students.ts`
- [Mock or live selector](https://github.com/jcdynamics/silk/blob/master/src/lib/data/data-source.ts): `src/lib/data/data-source.ts`
- [Typed API client](https://github.com/jcdynamics/silk/blob/master/src/lib/apiClient.ts): `src/lib/apiClient.ts`

### Shared services

- [Tenant preferences](https://github.com/jcdynamics/silk/blob/master/src/hooks/useTenantPreferences.tsx): `src/hooks/useTenantPreferences.tsx`
- [Plan entitlements](https://github.com/jcdynamics/silk/blob/master/src/hooks/usePlanEntitlement.ts): `src/hooks/usePlanEntitlement.ts`

### Other components

- **School staff**
- **SPIDER backend**
- **Staff browser**

## Connections

- School staff → Login screen: opens
- Login screen → Login form: renders
- Login form → Login action: submits
- Login action → Dev session: checks and encodes
- Staff browser → Tenant and route proxy: requests routes
- Tenant and route proxy → Tenant resolver: resolves tenant
- Tenant and route proxy → Dev session: decodes cookie
- Tenant and route proxy → Dashboard shell: permits dashboard
- Dashboard shell → Plan-aware navigation: renders navigation
- Plan-aware navigation → Plan entitlements: checks plan
- School staff → Inquiry page: manages admissions
- Inquiry page → Inquiry data access: loads inquiries
- Inquiry page → Inquiry board: renders board
- Inquiry board → Inquiry capture and conversion: opens capture or conversion
- Inquiry board → Inquiry actions: logs activity
- Inquiry actions → Inquiry data access: updates inquiry
- School staff → Student directory page: opens directory
- Student directory page → Student data access: loads students
- Student directory page → Student directory: renders directory
- Student directory → Student actions: requests sibling group
- Student actions → Student data access: loads sibling group
- Student directory → Sibling group view: shows group
- Inquiry data access → Mock or live selector: selects source
- Student data access → Mock or live selector: selects source
- Inquiry data access → Typed API client: requests live data
- Student data access → Typed API client: requests live data
- Typed API client → SPIDER backend: sends REST requests
