# davidasrorxonov/rounza architecture

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

- Interactive diagram: https://gitdiagram.com/davidasrorxonov/rounza
- Repository: https://github.com/davidasrorxonov/rounza

## Overview

Rounza is a job-search workspace for tracking applications through hiring rounds, tasks, contacts, and follow-up actions. Its private-account workflow is sign-in, manage applications and resumes, and use an encrypted browser-unlocked portal vault; the README also documents AI connections and a read-only MCP interface. The tree does not include the documented public-demo implementation, so it is not represented here. Some subsystem links rely on README descriptions because their route or action source was not sampled.

Main entry points: [`src/features/applications/data.ts`](https://github.com/davidasrorxonov/rounza/blob/main/src/features/applications/data.ts) (Application records), [`src/features/journey/data.ts`](https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/data.ts) (Journey records), [`src/app/app/page.tsx`](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/page.tsx) (Workspace overview), [`src/app/app/resumes/page.tsx`](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/resumes/page.tsx) (Resume library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Job-search workspace"]
  node_workspace_ui["Workspace overview<br/>[page.tsx]"]
  node_application_pages["Application tracking<br/>[page.tsx]"]
  node_application_data["Application records<br/>[data.ts]"]
  node_application_model["Application model<br/>[model.ts]"]
end

subgraph group_journey["Hiring journey"]
  node_journey_pages["Journey pages<br/>[page.tsx]"]
  node_journey_views["Rounds, tasks, contacts<br/>[views.tsx]"]
  node_journey_data["Journey records<br/>[data.ts]"]
  node_journey_actions["Journey updates<br/>[actions.ts]"]
  node_journey_time["Schedule and time<br/>[time.ts]"]
end

subgraph group_records["Private records"]
  node_resume_pages["Resume library<br/>[page.tsx]"]
  node_resume_import["Resume import<br/>[import.ts]"]
  node_resume_data["Resume records<br/>[data.ts]"]
  node_vault_page["Portal vault<br/>[page.tsx]"]
  node_vault_client["Vault controls<br/>[client.tsx]"]
  node_vault_crypto["Browser encryption<br/>[crypto.ts]"]
  node_vault_actions["Encrypted operations<br/>[actions.ts]"]
end

subgraph group_integrations["Account and AI access"]
  node_account["Verified account<br/>[account.ts]"]
  node_login["Sign-in<br/>[page.tsx]"]
  node_connections["AI connections<br/>[actions.ts]"]
  node_mcp_route["MCP endpoint<br/>[route.ts]"]
  node_mcp_auth["MCP authentication<br/>[auth.ts]"]
  node_mcp_server["Read-only MCP tools<br/>[server.ts]"]
end

node_person(("Job seeker"))
node_supabase[("Supabase")]
node_assistant(("AI assistant"))

node_person -->|"signs in"| node_login
node_login -->|"verifies account"| node_account
node_account -->|"checks identity"| node_supabase
node_person -->|"opens workspace"| node_workspace_ui
node_workspace_ui -->|"loads summary"| node_application_data
node_application_pages -->|"loads records"| node_application_data
node_application_data -->|"uses validation"| node_application_model
node_application_data -.->|"reads records"| node_supabase
node_workspace_ui -->|"loads next actions"| node_journey_data
node_journey_pages -->|"loads actions"| node_journey_data
node_journey_views -->|"loads journey"| node_journey_data
node_journey_data -->|"uses time rules"| node_journey_time
node_journey_actions -.->|"updates records"| node_supabase
node_person -->|"manages resumes"| node_resume_pages
node_resume_pages -.->|"imports text"| node_resume_import
node_resume_pages -.->|"saves reviewed version"| node_resume_data
node_resume_data -.->|"stores records"| node_supabase
node_person -->|"opens vault"| node_vault_page
node_vault_page -.->|"renders controls"| node_vault_client
node_vault_client -->|"encrypts and unlocks"| node_vault_crypto
node_vault_client -->|"loads and updates"| node_vault_actions
node_vault_actions -.->|"stores ciphertext"| node_supabase
node_person -.->|"configures access"| node_connections
node_connections -.->|"configures OAuth"| node_supabase
node_assistant -.->|"requests records"| node_mcp_route
node_mcp_route -->|"authenticates token"| node_mcp_auth
node_mcp_route -->|"dispatches tools"| node_mcp_server
node_mcp_server -->|"queries records"| node_supabase
node_mcp_server -->|"calculates action clock"| node_journey_time

click node_workspace_ui "https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/page.tsx"
click node_application_pages "https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/applications/page.tsx"
click node_application_data "https://github.com/davidasrorxonov/rounza/blob/main/src/features/applications/data.ts"
click node_application_model "https://github.com/davidasrorxonov/rounza/blob/main/src/features/applications/model.ts"
click node_journey_pages "https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/next-actions/page.tsx"
click node_journey_views "https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/views.tsx"
click node_journey_data "https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/data.ts"
click node_journey_actions "https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/actions.ts"
click node_journey_time "https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/time.ts"
click node_resume_pages "https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/resumes/page.tsx"
click node_resume_import "https://github.com/davidasrorxonov/rounza/blob/main/src/features/resumes/import.ts"
click node_resume_data "https://github.com/davidasrorxonov/rounza/blob/main/src/features/resumes/data.ts"
click node_vault_page "https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/portals/page.tsx"
click node_vault_client "https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/client.tsx"
click node_vault_crypto "https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/crypto.ts"
click node_vault_actions "https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/actions.ts"
click node_account "https://github.com/davidasrorxonov/rounza/blob/main/src/lib/auth/account.ts"
click node_login "https://github.com/davidasrorxonov/rounza/blob/main/src/app/login/page.tsx"
click node_connections "https://github.com/davidasrorxonov/rounza/blob/main/src/features/connections/actions.ts"
click node_mcp_route "https://github.com/davidasrorxonov/rounza/blob/main/src/app/mcp/route.ts"
click node_mcp_auth "https://github.com/davidasrorxonov/rounza/blob/main/src/lib/mcp/auth.ts"
click node_mcp_server "https://github.com/davidasrorxonov/rounza/blob/main/src/lib/mcp/server.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_workspace_ui,node_application_pages,node_application_data,node_application_model toneBlue
class node_journey_pages,node_journey_views,node_journey_data,node_journey_actions,node_journey_time,node_supabase toneAmber
class node_resume_pages,node_resume_import,node_resume_data,node_vault_page,node_vault_client,node_vault_crypto,node_vault_actions toneMint
class node_account,node_login,node_connections,node_mcp_route,node_mcp_auth,node_mcp_server toneRose
class node_person,node_assistant toneIndigo
```

## Components

### Job-search workspace

- [Workspace overview](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/page.tsx): `src/app/app/page.tsx`
- [Application tracking](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/applications/page.tsx): `src/app/app/applications/page.tsx`
- [Application records](https://github.com/davidasrorxonov/rounza/blob/main/src/features/applications/data.ts): `src/features/applications/data.ts`
- [Application model](https://github.com/davidasrorxonov/rounza/blob/main/src/features/applications/model.ts): `src/features/applications/model.ts`

### Hiring journey

- [Journey pages](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/next-actions/page.tsx): `src/app/app/next-actions/page.tsx`
- [Rounds, tasks, contacts](https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/views.tsx): `src/features/journey/views.tsx`
- [Journey records](https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/data.ts): `src/features/journey/data.ts`
- [Journey updates](https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/actions.ts): `src/features/journey/actions.ts`
- [Schedule and time](https://github.com/davidasrorxonov/rounza/blob/main/src/features/journey/time.ts): `src/features/journey/time.ts`

### Private records

- [Resume library](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/resumes/page.tsx): `src/app/app/resumes/page.tsx`
- [Resume import](https://github.com/davidasrorxonov/rounza/blob/main/src/features/resumes/import.ts): `src/features/resumes/import.ts`
- [Resume records](https://github.com/davidasrorxonov/rounza/blob/main/src/features/resumes/data.ts): `src/features/resumes/data.ts`
- [Portal vault](https://github.com/davidasrorxonov/rounza/blob/main/src/app/app/portals/page.tsx): `src/app/app/portals/page.tsx`
- [Vault controls](https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/client.tsx): `src/features/vault/client.tsx`
- [Browser encryption](https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/crypto.ts): `src/features/vault/crypto.ts`
- [Encrypted operations](https://github.com/davidasrorxonov/rounza/blob/main/src/features/vault/actions.ts): `src/features/vault/actions.ts`

### Account and AI access

- [Verified account](https://github.com/davidasrorxonov/rounza/blob/main/src/lib/auth/account.ts): `src/lib/auth/account.ts`
- [Sign-in](https://github.com/davidasrorxonov/rounza/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`
- [AI connections](https://github.com/davidasrorxonov/rounza/blob/main/src/features/connections/actions.ts): `src/features/connections/actions.ts`
- [MCP endpoint](https://github.com/davidasrorxonov/rounza/blob/main/src/app/mcp/route.ts): `src/app/mcp/route.ts`
- [MCP authentication](https://github.com/davidasrorxonov/rounza/blob/main/src/lib/mcp/auth.ts): `src/lib/mcp/auth.ts`
- [Read-only MCP tools](https://github.com/davidasrorxonov/rounza/blob/main/src/lib/mcp/server.ts): `src/lib/mcp/server.ts`

### Other components

- **Job seeker**
- **Supabase**
- **AI assistant**

## Connections

- Job seeker → Sign-in: signs in (evidence: `README.md`)
- Sign-in → Verified account: verifies account (evidence: `src/app/login/page.tsx`)
- Verified account → Supabase: checks identity (evidence: `src/lib/auth/account.ts`)
- Job seeker → Workspace overview: opens workspace (evidence: `src/app/app/page.tsx`)
- Workspace overview → Application records: loads summary (evidence: `src/app/app/page.tsx`)
- Application tracking → Application records: loads records (evidence: `src/app/app/applications/page.tsx`)
- Application records → Application model: uses validation (evidence: `src/features/applications/data.ts`)
- Application records → Supabase: reads records (evidence: `README.md`)
- Workspace overview → Journey records: loads next actions (evidence: `src/app/app/page.tsx`)
- Journey pages → Journey records: loads actions (evidence: `src/app/app/next-actions/page.tsx`)
- Rounds, tasks, contacts → Journey records: loads journey (evidence: `src/features/journey/views.tsx`)
- Journey records → Schedule and time: uses time rules (evidence: `src/features/journey/data.ts`)
- Journey updates → Supabase: updates records (evidence: `README.md`)
- Job seeker → Resume library: manages resumes (evidence: `README.md`)
- Resume library → Resume import: imports text (evidence: `README.md`)
- Resume library → Resume records: saves reviewed version (evidence: `README.md`)
- Resume records → Supabase: stores records (evidence: `README.md`)
- Job seeker → Portal vault: opens vault (evidence: `README.md`)
- Portal vault → Vault controls: renders controls (evidence: `README.md`)
- Vault controls → Browser encryption: encrypts and unlocks (evidence: `src/features/vault/client.tsx`)
- Vault controls → Encrypted operations: loads and updates (evidence: `src/features/vault/client.tsx`)
- Encrypted operations → Supabase: stores ciphertext (evidence: `README.md`)
- Job seeker → AI connections: configures access (evidence: `README.md`)
- AI connections → Supabase: configures OAuth (evidence: `README.md`)
- AI assistant → MCP endpoint: requests records (evidence: `README.md`)
- MCP endpoint → MCP authentication: authenticates token (evidence: `src/app/mcp/route.ts`)
- MCP endpoint → Read-only MCP tools: dispatches tools (evidence: `src/app/mcp/route.ts`)
- Read-only MCP tools → Supabase: queries records (evidence: `src/lib/mcp/server.ts`)
- Read-only MCP tools → Schedule and time: calculates action clock (evidence: `src/lib/mcp/server.ts`)
