# suleman984/personal-knowledge-tracker architecture

> Architecture diagram of the GitHub repository suleman984/personal-knowledge-tracker, 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/suleman984/personal-knowledge-tracker
- Repository: https://github.com/suleman984/personal-knowledge-tracker

## Overview

Personal Knowledge Tracker lets users sign up or log in, capture text or a URL for an AI summary, organize and edit saved knowledge, and schedule review reminders. The backend handles authentication, content and reminder operations, while a background worker sends due reminder emails. The extension is a documented client and the login form explicitly forwards its token. Sampled code confirms these flows and database operations; several frontend pages and route implementations were not sampled, so their internal wiring is left out.

Main entry points: [`backend/cmd/main.go`](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/cmd/main.go) (Server setup), [`backend/internal/summarizer/handler.go`](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/summarizer/handler.go) (Summary handler), [`frontend/src/components/forms/AuthForm.tsx`](https://github.com/suleman984/personal-knowledge-tracker/blob/main/frontend/src/components/forms/AuthForm.tsx) (Auth form), [`backend/internal/reminder/worker.go`](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/worker.go) (Reminder worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_web["Web app"]
  node_authform["Auth form<br/>[AuthForm.tsx]"]
  node_extension["Chrome extension<br/>[popup.js]"]
  node_api["API client<br/>[api.ts]"]
end

subgraph group_identity["Identity and API"]
  node_user_routes["User routes<br/>[route.go]"]
  node_auth_handlers["Auth handlers<br/>[handlers.go]"]
  node_jwt["JWT auth<br/>[jwt.go]"]
  node_auth_middleware["Auth middleware<br/>[auth_middleware.go]"]
  node_server["Server setup<br/>[main.go]"]
end

subgraph group_knowledge["Knowledge capture"]
  node_content_routes["Content routes<br/>[contentRoutes.go]"]
  node_content_handlers["Content handlers<br/>[handlers.go]"]
  node_summary_routes["Summary routes<br/>[route.go]"]
  node_summarizer["Summary handler<br/>[handler.go]"]
  node_gemini["Gemini client<br/>[gemini.go]"]
  node_contents_store[("Knowledge database<br/>[db.go]")]
end

subgraph group_review["Review reminders"]
  node_reminder_routes["Reminder routes<br/>[reminder.go]"]
  node_reminder_handlers["Reminder handlers<br/>[handler.go]"]
  node_worker["Reminder worker<br/>[worker.go]"]
  node_email["Email sender<br/>[email.go]"]
  node_reminders_store[("Reminder data<br/>[db.go]")]
end

node_user(("User"))
node_email_service["Email service"]
node_gemini_service["Gemini API"]

node_user -->|"uses"| node_web
node_web -->|"presents auth"| node_authform
node_authform -->|"submits credentials"| node_api
node_authform -.->|"sends token"| node_extension
node_server -->|"registers routes"| node_user_routes
node_server -->|"registers routes"| node_content_routes
node_server -->|"registers routes"| node_reminder_routes
node_server -->|"registers routes"| node_summary_routes
node_server -->|"starts worker"| node_worker
node_content_routes -->|"applies auth"| node_auth_middleware
node_auth_middleware -->|"validates token"| node_jwt
node_auth_handlers -->|"creates token"| node_jwt
node_content_handlers -->|"reads and writes"| node_contents_store
node_summarizer -->|"generates summary"| node_gemini
node_summarizer -->|"saves summary"| node_contents_store
node_summarizer -->|"schedules reviews"| node_reminders_store
node_summarizer -->|"sends first email"| node_email
node_reminder_handlers -->|"reads and updates"| node_reminders_store
node_worker -->|"checks and schedules"| node_reminders_store
node_worker -->|"sends due reminders"| node_email
node_email -->|"delivers email"| node_email_service
node_gemini -->|"requests summary"| node_gemini_service

click node_web "https://github.com/suleman984/personal-knowledge-tracker/tree/main/frontend/src/app"
click node_authform "https://github.com/suleman984/personal-knowledge-tracker/blob/main/frontend/src/components/forms/AuthForm.tsx"
click node_extension "https://github.com/suleman984/personal-knowledge-tracker/blob/main/extension/popup.js"
click node_api "https://github.com/suleman984/personal-knowledge-tracker/blob/main/frontend/src/lib/api.ts"
click node_user_routes "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/userRoutes/route.go"
click node_auth_handlers "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/auth/handlers.go"
click node_jwt "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/auth/jwt.go"
click node_auth_middleware "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/middleware/auth_middleware.go"
click node_server "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/cmd/main.go"
click node_content_routes "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/content/contentRoutes.go"
click node_content_handlers "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/content/handlers.go"
click node_summary_routes "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/summaryRoutes/route.go"
click node_summarizer "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/summarizer/handler.go"
click node_gemini "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/summarizer/gemini.go"
click node_contents_store "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/db/db.go"
click node_reminder_routes "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/reminderRoutes/reminder.go"
click node_reminder_handlers "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/handler.go"
click node_worker "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/worker.go"
click node_email "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/email.go"
click node_reminders_store "https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/db/db.go"

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_web,node_authform,node_extension,node_api,node_user toneBlue
class node_user_routes,node_auth_handlers,node_jwt,node_auth_middleware,node_server toneAmber
class node_content_routes,node_content_handlers,node_summary_routes,node_summarizer,node_gemini,node_contents_store,node_gemini_service toneMint
class node_reminder_routes,node_reminder_handlers,node_worker,node_email,node_reminders_store toneRose
class node_email_service toneIndigo
```

## Components

### User clients

- [Web app](https://github.com/suleman984/personal-knowledge-tracker/tree/main/frontend/src/app): `frontend/src/app`
- [Auth form](https://github.com/suleman984/personal-knowledge-tracker/blob/main/frontend/src/components/forms/AuthForm.tsx): `frontend/src/components/forms/AuthForm.tsx`
- [Chrome extension](https://github.com/suleman984/personal-knowledge-tracker/blob/main/extension/popup.js): `extension/popup.js`
- [API client](https://github.com/suleman984/personal-knowledge-tracker/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`

### Identity and API

- [User routes](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/userRoutes/route.go): `backend/internal/routes/userRoutes/route.go`
- [Auth handlers](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/auth/handlers.go): `backend/internal/auth/handlers.go`
- [JWT auth](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/auth/jwt.go): `backend/internal/auth/jwt.go`
- [Auth middleware](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/middleware/auth_middleware.go): `backend/internal/middleware/auth_middleware.go`
- [Server setup](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/cmd/main.go): `backend/cmd/main.go`

### Knowledge capture

- [Content routes](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/content/contentRoutes.go): `backend/internal/content/contentRoutes.go`
- [Content handlers](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/content/handlers.go): `backend/internal/content/handlers.go`
- [Summary routes](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/summaryRoutes/route.go): `backend/internal/routes/summaryRoutes/route.go`
- [Summary handler](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/summarizer/handler.go): `backend/internal/summarizer/handler.go`
- [Gemini client](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/summarizer/gemini.go): `backend/internal/summarizer/gemini.go`
- [Knowledge database](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/db/db.go): `backend/internal/db/db.go`

### Review reminders

- [Reminder routes](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/routes/reminderRoutes/reminder.go): `backend/internal/routes/reminderRoutes/reminder.go`
- [Reminder handlers](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/handler.go): `backend/internal/reminder/handler.go`
- [Reminder worker](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/worker.go): `backend/internal/reminder/worker.go`
- [Email sender](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/reminder/email.go): `backend/internal/reminder/email.go`
- [Reminder data](https://github.com/suleman984/personal-knowledge-tracker/blob/main/backend/internal/db/db.go): `backend/internal/db/db.go`

### Other components

- **User**
- **Email service**
- **Gemini API**

## Connections

- User → Web app: uses
- Web app → Auth form: presents auth
- Auth form → API client: submits credentials
- Auth form → Chrome extension: sends token
- Server setup → User routes: registers routes
- Server setup → Content routes: registers routes
- Server setup → Reminder routes: registers routes
- Server setup → Summary routes: registers routes
- Server setup → Reminder worker: starts worker
- Content routes → Auth middleware: applies auth
- Auth middleware → JWT auth: validates token
- Auth handlers → JWT auth: creates token
- Content handlers → Knowledge database: reads and writes
- Summary handler → Gemini client: generates summary
- Summary handler → Knowledge database: saves summary
- Summary handler → Reminder data: schedules reviews
- Summary handler → Email sender: sends first email
- Reminder handlers → Reminder data: reads and updates
- Reminder worker → Reminder data: checks and schedules
- Reminder worker → Email sender: sends due reminders
- Email sender → Email service: delivers email
- Gemini client → Gemini API: requests summary
