# zariaa27/edgenote architecture

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

- Interactive diagram: https://gitdiagram.com/zariaa27/edgenote
- Repository: https://github.com/zariaa27/edgenote

## Overview

EdgeNote is an edge-hosted collaborative Markdown workspace. Users register or sign in, enter a workspace to create and manage documents, then edit, share, and discover notes; account settings and administration provide separate workflows. API routes enforce authentication and document access while using D1 and Cloudflare services for persistence, files, AI, semantic search, and realtime rooms. The graph preserves README-described capabilities, but several UI components and API routes were not sampled, so some documented links are shown without source-level detail.

Main entry points: [`src/db/schema.ts`](https://github.com/zariaa27/edgenote/blob/main/src/db/schema.ts) (Data schema), [`src/server/document-access.ts`](https://github.com/zariaa27/edgenote/blob/main/src/server/document-access.ts) (Access resolver), [`app/api/auth/login/route.ts`](https://github.com/zariaa27/edgenote/blob/main/app/api/auth/login/route.ts) (Auth routes), [`app/api/account/route.ts`](https://github.com/zariaa27/edgenote/blob/main/app/api/account/route.ts) (Account API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Web experience"]
  node_landing["Landing page<br/>[page.tsx]"]
  node_authform["Sign-in forms<br/>[AuthForm.tsx]"]
  node_workspace["Workspace<br/>[Workspace.tsx]"]
  node_docview["Document view"]
  node_editor["Markdown editor<br/>[Editor.tsx]"]
  node_sharingui["Sharing controls"]
  node_settings["Account settings"]
  node_adminui["Admin dashboard<br/>[AdminDashboard.tsx]"]
end

subgraph group_identity["Identity and accounts"]
  node_authroutes["Auth routes<br/>[route.ts]"]
  node_accountapi["Account API<br/>[route.ts]"]
  node_exportapi["Data export<br/>[route.ts]"]
  node_email["Account email<br/>[account-email.ts]"]
  node_authcore["Session and passwords<br/>[auth.ts]"]
  node_adminapi["Analytics API<br/>[route.ts]"]
end

subgraph group_documents["Documents and collaboration"]
  node_docapi["Document routes<br/>[route.ts]"]
  node_shareapi["Share routes<br/>[route.ts]"]
  node_access["Access resolver<br/>[document-access.ts]"]
  node_realtimeapi["Realtime route<br/>[route.ts]"]
  node_realtimehandler["Room handler"]
  node_room["Document room"]
end

subgraph group_discovery["Discovery and media"]
  node_searchapi["Semantic search<br/>[route.ts]"]
  node_summarizeapi["AI summary<br/>[route.ts]"]
  node_uploadapi["Image uploads<br/>[route.ts]"]
  node_mediaapi["Media delivery<br/>[route.ts]"]
end

subgraph group_edge["Edge services"]
  node_worker["Worker entrypoint<br/>[worker.ts]"]
  node_dbschema["Data schema<br/>[schema.ts]"]
end

node_visitor(("Visitor / user"))
node_mailer["Resend email"]
node_d1[("D1 database")]
node_ai["Workers AI"]
node_vectorize[("Vectorize")]
node_r2[("R2 storage")]

node_visitor -->|"visits"| node_landing
node_landing -->|"starts account"| node_authform
node_visitor -.->|"signs in"| node_authform
node_authform -.->|"submits credentials"| node_authroutes
node_authroutes -->|"validates session"| node_authcore
node_authroutes -->|"reads accounts"| node_dbschema
node_authroutes -->|"sends account email"| node_email
node_email -->|"sends messages"| node_mailer
node_visitor -.->|"opens workspace"| node_workspace
node_workspace -.->|"manages documents"| node_docapi
node_docapi -->|"checks session"| node_authcore
node_docapi -->|"reads and writes"| node_dbschema
node_visitor -.->|"opens note"| node_docview
node_docview -->|"renders editor"| node_editor
node_docview -->|"renders sharing"| node_sharingui
node_sharingui -.->|"sets permissions"| node_shareapi
node_shareapi -->|"checks access"| node_access
node_shareapi -->|"reads and writes"| node_dbschema
node_docapi -.->|"resolves access"| node_access
node_realtimeapi -->|"routes upgrades"| node_realtimehandler
node_realtimehandler -->|"checks permissions"| node_access
node_realtimehandler -->|"dispatches room request"| node_room
node_worker -->|"exports handler"| node_realtimehandler
node_worker -->|"exports durable object"| node_room
node_room -.->|"persists revisions"| node_dbschema
node_dbschema -->|"defines relational data"| node_d1
node_visitor -.->|"manages account"| node_settings
node_settings -.->|"updates account"| node_accountapi
node_settings -.->|"requests export"| node_exportapi
node_accountapi -->|"checks session"| node_authcore
node_accountapi -->|"creates email token"| node_email
node_accountapi -->|"reads and writes"| node_dbschema
node_exportapi -->|"reads account data"| node_dbschema
node_visitor -.->|"views analytics"| node_adminui
node_adminui -.->|"requests analytics"| node_adminapi
node_adminapi -->|"queries activity"| node_dbschema
node_visitor -.->|"searches notes"| node_searchapi
node_searchapi -->|"embeds query"| node_ai
node_searchapi -->|"queries vectors"| node_vectorize
node_searchapi -->|"fetches matching notes"| node_dbschema
node_visitor -.->|"requests summary"| node_summarizeapi
node_summarizeapi -->|"generates summary"| node_ai
node_summarizeapi -->|"checks document access"| node_access
node_visitor -.->|"adds images"| node_uploadapi
node_uploadapi -->|"checks edit access"| node_access
node_uploadapi -->|"stores metadata"| node_d1
node_uploadapi -->|"stores image"| node_r2
node_visitor -.->|"loads attachments"| node_mediaapi

click node_landing "https://github.com/zariaa27/edgenote/blob/main/app/page.tsx"
click node_authform "https://github.com/zariaa27/edgenote/blob/main/components/AuthForm.tsx"
click node_workspace "https://github.com/zariaa27/edgenote/blob/main/components/Workspace.tsx"
click node_docview "https://github.com/zariaa27/edgenote/blob/main/components/DocumentWorkspace.tsx"
click node_editor "https://github.com/zariaa27/edgenote/blob/main/components/Editor.tsx"
click node_sharingui "https://github.com/zariaa27/edgenote/blob/main/components/DocumentSharing.tsx"
click node_settings "https://github.com/zariaa27/edgenote/blob/main/components/AccountSettings.tsx"
click node_adminui "https://github.com/zariaa27/edgenote/blob/main/components/AdminDashboard.tsx"
click node_authroutes "https://github.com/zariaa27/edgenote/blob/main/app/api/auth/login/route.ts"
click node_accountapi "https://github.com/zariaa27/edgenote/blob/main/app/api/account/route.ts"
click node_exportapi "https://github.com/zariaa27/edgenote/blob/main/app/api/account/export/route.ts"
click node_email "https://github.com/zariaa27/edgenote/blob/main/src/server/account-email.ts"
click node_authcore "https://github.com/zariaa27/edgenote/blob/main/src/server/auth.ts"
click node_docapi "https://github.com/zariaa27/edgenote/blob/main/app/api/documents/route.ts"
click node_shareapi "https://github.com/zariaa27/edgenote/blob/main/app/api/documents/%5BdocumentId%5D/shares/route.ts"
click node_access "https://github.com/zariaa27/edgenote/blob/main/src/server/document-access.ts"
click node_realtimeapi "https://github.com/zariaa27/edgenote/blob/main/app/api/realtime/route.ts"
click node_realtimehandler "https://github.com/zariaa27/edgenote/blob/main/src/server/realtime-handler.ts"
click node_room "https://github.com/zariaa27/edgenote/blob/main/src/document-session.ts"
click node_worker "https://github.com/zariaa27/edgenote/blob/main/worker.ts"
click node_dbschema "https://github.com/zariaa27/edgenote/blob/main/src/db/schema.ts"
click node_searchapi "https://github.com/zariaa27/edgenote/blob/main/app/api/search/route.ts"
click node_summarizeapi "https://github.com/zariaa27/edgenote/blob/main/app/api/ai/summarize/route.ts"
click node_uploadapi "https://github.com/zariaa27/edgenote/blob/main/app/api/upload/route.ts"
click node_mediaapi "https://github.com/zariaa27/edgenote/blob/main/app/api/media/route.ts"
click node_adminapi "https://github.com/zariaa27/edgenote/blob/main/app/api/admin/analytics/route.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_landing,node_authform,node_workspace,node_docview,node_editor,node_sharingui,node_settings,node_adminui,node_visitor toneBlue
class node_authroutes,node_accountapi,node_exportapi,node_email,node_authcore,node_adminapi,node_d1,node_vectorize,node_r2 toneAmber
class node_docapi,node_shareapi,node_access,node_realtimeapi,node_realtimehandler,node_room toneMint
class node_searchapi,node_summarizeapi,node_uploadapi,node_mediaapi,node_ai toneRose
class node_worker,node_dbschema,node_mailer toneIndigo
```

## Components

### Web experience

- [Landing page](https://github.com/zariaa27/edgenote/blob/main/app/page.tsx): `app/page.tsx`
- [Sign-in forms](https://github.com/zariaa27/edgenote/blob/main/components/AuthForm.tsx): `components/AuthForm.tsx`
- [Workspace](https://github.com/zariaa27/edgenote/blob/main/components/Workspace.tsx): `components/Workspace.tsx`
- [Document view](https://github.com/zariaa27/edgenote/blob/main/components/DocumentWorkspace.tsx): `components/DocumentWorkspace.tsx`
- [Markdown editor](https://github.com/zariaa27/edgenote/blob/main/components/Editor.tsx): `components/Editor.tsx`
- [Sharing controls](https://github.com/zariaa27/edgenote/blob/main/components/DocumentSharing.tsx): `components/DocumentSharing.tsx`
- [Account settings](https://github.com/zariaa27/edgenote/blob/main/components/AccountSettings.tsx): `components/AccountSettings.tsx`
- [Admin dashboard](https://github.com/zariaa27/edgenote/blob/main/components/AdminDashboard.tsx): `components/AdminDashboard.tsx`

### Identity and accounts

- [Auth routes](https://github.com/zariaa27/edgenote/blob/main/app/api/auth/login/route.ts): `app/api/auth/login/route.ts`
- [Account API](https://github.com/zariaa27/edgenote/blob/main/app/api/account/route.ts): `app/api/account/route.ts`
- [Data export](https://github.com/zariaa27/edgenote/blob/main/app/api/account/export/route.ts): `app/api/account/export/route.ts`
- [Account email](https://github.com/zariaa27/edgenote/blob/main/src/server/account-email.ts): `src/server/account-email.ts`
- [Session and passwords](https://github.com/zariaa27/edgenote/blob/main/src/server/auth.ts): `src/server/auth.ts`
- [Analytics API](https://github.com/zariaa27/edgenote/blob/main/app/api/admin/analytics/route.ts): `app/api/admin/analytics/route.ts`

### Documents and collaboration

- [Document routes](https://github.com/zariaa27/edgenote/blob/main/app/api/documents/route.ts): `app/api/documents/route.ts`
- [Share routes](https://github.com/zariaa27/edgenote/blob/main/app/api/documents/%5BdocumentId%5D/shares/route.ts): `app/api/documents/[documentId]/shares/route.ts`
- [Access resolver](https://github.com/zariaa27/edgenote/blob/main/src/server/document-access.ts): `src/server/document-access.ts`
- [Realtime route](https://github.com/zariaa27/edgenote/blob/main/app/api/realtime/route.ts): `app/api/realtime/route.ts`
- [Room handler](https://github.com/zariaa27/edgenote/blob/main/src/server/realtime-handler.ts): `src/server/realtime-handler.ts`
- [Document room](https://github.com/zariaa27/edgenote/blob/main/src/document-session.ts): `src/document-session.ts`

### Discovery and media

- [Semantic search](https://github.com/zariaa27/edgenote/blob/main/app/api/search/route.ts): `app/api/search/route.ts`
- [AI summary](https://github.com/zariaa27/edgenote/blob/main/app/api/ai/summarize/route.ts): `app/api/ai/summarize/route.ts`
- [Image uploads](https://github.com/zariaa27/edgenote/blob/main/app/api/upload/route.ts): `app/api/upload/route.ts`
- [Media delivery](https://github.com/zariaa27/edgenote/blob/main/app/api/media/route.ts): `app/api/media/route.ts`

### Edge services

- [Worker entrypoint](https://github.com/zariaa27/edgenote/blob/main/worker.ts): `worker.ts`
- [Data schema](https://github.com/zariaa27/edgenote/blob/main/src/db/schema.ts): `src/db/schema.ts`

### Other components

- **Visitor / user**
- **Resend email**
- **D1 database**
- **Workers AI**
- **Vectorize**
- **R2 storage**

## Connections

- Visitor / user → Landing page: visits (evidence: `app/page.tsx`)
- Landing page → Sign-in forms: starts account (evidence: `app/page.tsx`)
- Visitor / user → Sign-in forms: signs in (evidence: `README.md`)
- Sign-in forms → Auth routes: submits credentials (evidence: `README.md`)
- Auth routes → Session and passwords: validates session (evidence: `app/api/auth/login/route.ts`)
- Auth routes → Data schema: reads accounts (evidence: `app/api/auth/login/route.ts`)
- Auth routes → Account email: sends account email (evidence: `app/api/auth/login/route.ts`)
- Account email → Resend email: sends messages (evidence: `src/server/account-email.ts`)
- Visitor / user → Workspace: opens workspace (evidence: `README.md`)
- Workspace → Document routes: manages documents (evidence: `README.md`)
- Document routes → Session and passwords: checks session (evidence: `app/api/documents/route.ts`)
- Document routes → Data schema: reads and writes (evidence: `app/api/documents/route.ts`)
- Visitor / user → Document view: opens note (evidence: `README.md`)
- Document view → Markdown editor: renders editor (evidence: `components/DocumentWorkspace.tsx`)
- Document view → Sharing controls: renders sharing (evidence: `components/DocumentWorkspace.tsx`)
- Sharing controls → Share routes: sets permissions (evidence: `README.md`)
- Share routes → Access resolver: checks access (evidence: `app/api/documents/[documentId]/shares/route.ts`)
- Share routes → Data schema: reads and writes (evidence: `app/api/documents/[documentId]/shares/route.ts`)
- Document routes → Access resolver: resolves access (evidence: `README.md`)
- Realtime route → Room handler: routes upgrades (evidence: `README.md`)
- Room handler → Access resolver: checks permissions (evidence: `src/server/realtime-handler.ts`)
- Room handler → Document room: dispatches room request (evidence: `src/server/realtime-handler.ts`)
- Worker entrypoint → Room handler: exports handler (evidence: `worker.ts`)
- Worker entrypoint → Document room: exports durable object (evidence: `worker.ts`)
- Document room → Data schema: persists revisions (evidence: `README.md`)
- Data schema → D1 database: defines relational data (evidence: `README.md`)
- Visitor / user → Account settings: manages account (evidence: `README.md`)
- Account settings → Account API: updates account (evidence: `README.md`)
- Account settings → Data export: requests export (evidence: `README.md`)
- Account API → Session and passwords: checks session (evidence: `app/api/account/route.ts`)
- Account API → Account email: creates email token (evidence: `app/api/account/route.ts`)
- Account API → Data schema: reads and writes (evidence: `app/api/account/route.ts`)
- Data export → Data schema: reads account data (evidence: `app/api/account/export/route.ts`)
- Visitor / user → Admin dashboard: views analytics (evidence: `README.md`)
- Admin dashboard → Analytics API: requests analytics (evidence: `README.md`)
- Analytics API → Data schema: queries activity (evidence: `app/api/admin/analytics/route.ts`)
- Visitor / user → Semantic search: searches notes (evidence: `README.md`)
- Semantic search → Workers AI: embeds query (evidence: `app/api/search/route.ts`)
- Semantic search → Vectorize: queries vectors (evidence: `app/api/search/route.ts`)
- Semantic search → Data schema: fetches matching notes (evidence: `app/api/search/route.ts`)
- Visitor / user → AI summary: requests summary (evidence: `README.md`)
- AI summary → Workers AI: generates summary (evidence: `README.md`)
- AI summary → Access resolver: checks document access (evidence: `app/api/ai/summarize/route.ts`)
- Visitor / user → Image uploads: adds images (evidence: `README.md`)
- Image uploads → Access resolver: checks edit access (evidence: `app/api/upload/route.ts`)
- Image uploads → D1 database: stores metadata (evidence: `README.md`)
- Image uploads → R2 storage: stores image (evidence: `README.md`)
- Visitor / user → Media delivery: loads attachments (evidence: `README.md`)
