# vernsmoke/techcare architecture

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

- Interactive diagram: https://gitdiagram.com/vernsmoke/techcare
- Repository: https://github.com/vernsmoke/techcare

## Overview

TechCare is a local-pilot campus support and community portal. Visitors browse campus information, troubleshooting guides, resources and announcements; members can register and verify accounts, contribute to moderated discussions, connect with other members, and access support features. Staff manage content and review submissions. The Next.js app exposes a shared API route backed by server-side services and persistent SQLite data. The README documents major capabilities beyond the sampled excerpts; their paths are represented from the tree, but uncertain internal call wiring is omitted.

Main entry points: [`src/lib/server/api.mjs`](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/api.mjs) (API handler), [`src/app/api/[...path]/route.ts`](https://github.com/vernsmoke/techcare/blob/main/src/app/api/%5B...path%5D/route.ts) (API route), [`src/components/shell.tsx`](https://github.com/vernsmoke/techcare/blob/main/src/components/shell.tsx) (Navigation shell), [`src/components/views.tsx`](https://github.com/vernsmoke/techcare/blob/main/src/components/views.tsx) (Portal views)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Portal experience"]
  node_portal["Portal entry<br/>[page.tsx]"]
  node_navigation["Navigation shell<br/>[shell.tsx]"]
  node_portal_views["Portal views<br/>[views.tsx]"]
  node_announcements_ui["Announcements<br/>[announcements.tsx]"]
  node_assistant_ui["Help assistant"]
  node_assistant_logic["Assistant knowledge<br/>[guide-assistant.ts]"]
end

subgraph group_community["Community services"]
  node_discussion_ui["Discussion pages<br/>[discussion.tsx]"]
  node_community_ui["Community features<br/>[community.tsx]"]
  node_account_service["Accounts and access<br/>[auth.mjs]"]
  node_discussion_service["Discussion service<br/>[discussion.mjs]"]
end

subgraph group_operations["Staff and content"]
  node_content_admin["Content management"]
  node_announcement_admin["Announcement settings"]
  node_managed_content["Managed content"]
  node_announcement_service["Announcement service<br/>[announcements.mjs]"]
end

subgraph group_platform["Server platform"]
  node_api_route["API route<br/>[route.ts]"]
  node_api_handler["API handler<br/>[api.mjs]"]
  node_database[("SQLite data<br/>[db.mjs]")]
  node_media_service["Media handling<br/>[media.mjs]"]
  node_mail_service["Mail delivery<br/>[mail.mjs]"]
end

node_visitor(("Visitor or member"))
node_mail_provider["SMTP service"]

node_visitor -->|"opens"| node_portal
node_portal -->|"renders"| node_navigation
node_navigation -->|"selects views"| node_portal_views
node_portal_views -->|"renders"| node_discussion_ui
node_portal_views -->|"renders"| node_community_ui
node_navigation -->|"shows"| node_announcements_ui
node_navigation -->|"offers help"| node_assistant_ui
node_assistant_ui -->|"matches topics"| node_assistant_logic
node_portal_views -->|"requests data"| node_api_route
node_discussion_ui -->|"requests data"| node_api_route
node_community_ui -->|"requests data"| node_api_route
node_content_admin -->|"saves changes"| node_api_route
node_announcement_admin -->|"saves changes"| node_api_route
node_api_route -->|"dispatches"| node_api_handler
node_api_handler -->|"persists data"| node_database
node_api_handler -->|"uses access rules"| node_account_service
node_api_handler -->|"handles discussions"| node_discussion_service
node_api_handler -->|"handles content"| node_managed_content
node_api_handler -->|"handles announcements"| node_announcement_service
node_api_handler -->|"handles uploads"| node_media_service
node_api_handler -->|"sends mail"| node_mail_service
node_mail_service -.->|"delivers messages"| node_mail_provider

click node_portal "https://github.com/vernsmoke/techcare/blob/main/src/app/page.tsx"
click node_navigation "https://github.com/vernsmoke/techcare/blob/main/src/components/shell.tsx"
click node_portal_views "https://github.com/vernsmoke/techcare/blob/main/src/components/views.tsx"
click node_announcements_ui "https://github.com/vernsmoke/techcare/blob/main/src/components/announcements.tsx"
click node_assistant_ui "https://github.com/vernsmoke/techcare/blob/main/src/components/guide-assistant.tsx"
click node_assistant_logic "https://github.com/vernsmoke/techcare/blob/main/src/lib/guide-assistant.ts"
click node_discussion_ui "https://github.com/vernsmoke/techcare/blob/main/src/components/discussion.tsx"
click node_community_ui "https://github.com/vernsmoke/techcare/blob/main/src/components/community.tsx"
click node_account_service "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/auth.mjs"
click node_discussion_service "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/discussion.mjs"
click node_content_admin "https://github.com/vernsmoke/techcare/blob/main/src/components/content-settings.tsx"
click node_announcement_admin "https://github.com/vernsmoke/techcare/blob/main/src/components/announcement-settings.tsx"
click node_managed_content "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/managed-content.mjs"
click node_announcement_service "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/announcements.mjs"
click node_api_route "https://github.com/vernsmoke/techcare/blob/main/src/app/api/%5B...path%5D/route.ts"
click node_api_handler "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/api.mjs"
click node_database "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/db.mjs"
click node_media_service "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/media.mjs"
click node_mail_service "https://github.com/vernsmoke/techcare/blob/main/src/lib/server/mail.mjs"

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_portal,node_navigation,node_portal_views,node_announcements_ui,node_assistant_ui,node_assistant_logic toneBlue
class node_discussion_ui,node_community_ui,node_account_service,node_discussion_service toneAmber
class node_content_admin,node_announcement_admin,node_managed_content,node_announcement_service toneMint
class node_api_route,node_api_handler,node_database,node_media_service,node_mail_service toneRose
class node_visitor,node_mail_provider toneIndigo
```

## Components

### Portal experience

- [Portal entry](https://github.com/vernsmoke/techcare/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Navigation shell](https://github.com/vernsmoke/techcare/blob/main/src/components/shell.tsx): `src/components/shell.tsx`
- [Portal views](https://github.com/vernsmoke/techcare/blob/main/src/components/views.tsx): `src/components/views.tsx`
- [Announcements](https://github.com/vernsmoke/techcare/blob/main/src/components/announcements.tsx): `src/components/announcements.tsx`
- [Help assistant](https://github.com/vernsmoke/techcare/blob/main/src/components/guide-assistant.tsx): `src/components/guide-assistant.tsx`
- [Assistant knowledge](https://github.com/vernsmoke/techcare/blob/main/src/lib/guide-assistant.ts): `src/lib/guide-assistant.ts`

### Community services

- [Discussion pages](https://github.com/vernsmoke/techcare/blob/main/src/components/discussion.tsx): `src/components/discussion.tsx`
- [Community features](https://github.com/vernsmoke/techcare/blob/main/src/components/community.tsx): `src/components/community.tsx`
- [Accounts and access](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/auth.mjs): `src/lib/server/auth.mjs`
- [Discussion service](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/discussion.mjs): `src/lib/server/discussion.mjs`

### Staff and content

- [Content management](https://github.com/vernsmoke/techcare/blob/main/src/components/content-settings.tsx): `src/components/content-settings.tsx`
- [Announcement settings](https://github.com/vernsmoke/techcare/blob/main/src/components/announcement-settings.tsx): `src/components/announcement-settings.tsx`
- [Managed content](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/managed-content.mjs): `src/lib/server/managed-content.mjs`
- [Announcement service](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/announcements.mjs): `src/lib/server/announcements.mjs`

### Server platform

- [API route](https://github.com/vernsmoke/techcare/blob/main/src/app/api/%5B...path%5D/route.ts): `src/app/api/[...path]/route.ts`
- [API handler](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/api.mjs): `src/lib/server/api.mjs`
- [SQLite data](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/db.mjs): `src/lib/server/db.mjs`
- [Media handling](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/media.mjs): `src/lib/server/media.mjs`
- [Mail delivery](https://github.com/vernsmoke/techcare/blob/main/src/lib/server/mail.mjs): `src/lib/server/mail.mjs`

### Other components

- **Visitor or member**
- **SMTP service**

## Connections

- Visitor or member → Portal entry: opens
- Portal entry → Navigation shell: renders
- Navigation shell → Portal views: selects views
- Portal views → Discussion pages: renders
- Portal views → Community features: renders
- Navigation shell → Announcements: shows
- Navigation shell → Help assistant: offers help
- Help assistant → Assistant knowledge: matches topics
- Portal views → API route: requests data
- Discussion pages → API route: requests data
- Community features → API route: requests data
- Content management → API route: saves changes
- Announcement settings → API route: saves changes
- API route → API handler: dispatches
- API handler → SQLite data: persists data
- API handler → Accounts and access: uses access rules
- API handler → Discussion service: handles discussions
- API handler → Managed content: handles content
- API handler → Announcement service: handles announcements
- API handler → Media handling: handles uploads
- API handler → Mail delivery: sends mail
- Mail delivery → SMTP service: delivers messages
