# kuankuan2007/hamlog-manager architecture

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

- Interactive diagram: https://gitdiagram.com/kuankuan2007/hamlog-manager
- Repository: https://github.com/kuankuan2007/hamlog-manager

## Overview

Hamlog Manager is a local ham-radio contact and QSL management application. The main workflow runs from browser pages through the frontend API client to HTTP routes, which validate requests and read or update SQLite; returned records support contact search, address management, and QSL tracking. Separate branches provide callsign/email lookup and email preparation, preview, and SMTP sending. The README documents these capabilities; some route-to-storage details are not shown in sampled source, so those links reflect documented responsibilities rather than inspected call sites.

Main entry points: [`server/api/index.ts`](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/index.ts) (HTTP API), [`server/api/select/index.ts`](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/select/index.ts) (Select routes), [`server/api/update/index.ts`](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/update/index.ts) (Update routes), [`server/auto/callsign2email.ts`](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/auto/callsign2email.ts) (Automatic lookup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webapp["Vue application<br/>[main.ts]"]
  node_pages["Management pages"]
  node_router["Page router<br/>[index.ts]"]
  node_clientapi["API client"]
end

subgraph group_records["Contact records"]
  node_selectroutes["Select routes<br/>[index.ts]"]
  node_updateroutes["Update routes<br/>[index.ts]"]
  node_logstore["Contact records<br/>[select.ts]"]
  node_recordupdates["Record writes<br/>[update.ts]"]
  node_addressqsl["Address and QSL"]
end

subgraph group_lookup["Email lookup"]
  node_emailcache["Email cache"]
  node_autolookup["Automatic lookup<br/>[callsign2email.ts]"]
  node_lookuproutes["Lookup route<br/>[index.ts]"]
end

subgraph group_mail["Email workflow"]
  node_emailpages["Email pages<br/>[EmailPrepare.vue]"]
  node_emailcontent["Email composition<br/>[mailContent.ts]"]
  node_emailroutes["Email routes<br/>[index.ts]"]
  node_mailer["Template and SMTP<br/>[send.ts]"]
end

subgraph group_runtime["Server and storage"]
  node_sharedschema["Shared schemas"]
  node_apirouter["HTTP API<br/>[index.ts]"]
  node_database[("SQLite database")]
  node_server["HTTP server<br/>[index.ts]"]
end

node_operator(("Ham operator"))
node_qrz{{"QRZ.com"}}
node_smtp{{"SMTP service"}}

node_operator -->|"uses"| node_webapp
node_webapp -->|"mounts"| node_router
node_router -->|"routes"| node_pages
node_pages -->|"requests"| node_clientapi
node_clientapi -->|"calls API"| node_apirouter
node_server -->|"registers"| node_apirouter
node_apirouter -->|"dispatches"| node_selectroutes
node_apirouter -->|"dispatches"| node_updateroutes
node_apirouter -->|"dispatches"| node_lookuproutes
node_apirouter -->|"dispatches"| node_emailroutes
node_updateroutes -->|"validates"| node_sharedschema
node_emailroutes -->|"validates"| node_sharedschema
node_selectroutes -->|"reads"| node_logstore
node_selectroutes -->|"reads"| node_database
node_updateroutes -->|"writes"| node_recordupdates
node_recordupdates -->|"writes"| node_database
node_selectroutes -->|"serves records"| node_addressqsl
node_lookuproutes -->|"dispatches"| node_autolookup
node_autolookup -->|"checks cache"| node_emailcache
node_emailcache -->|"reads and writes"| node_database
node_autolookup -.->|"queries"| node_qrz
node_emailpages -->|"requests"| node_clientapi
node_emailpages -->|"prepares"| node_emailcontent
node_emailcontent -->|"returns draft"| node_emailpages
node_emailroutes -->|"renders and sends"| node_mailer
node_mailer -->|"sends mail"| node_smtp

click node_webapp "https://github.com/kuankuan2007/hamlog-manager/blob/master/src/main.ts"
click node_pages "https://github.com/kuankuan2007/hamlog-manager/tree/master/src/views"
click node_router "https://github.com/kuankuan2007/hamlog-manager/blob/master/src/router/index.ts"
click node_clientapi "https://github.com/kuankuan2007/hamlog-manager/tree/master/src/api"
click node_sharedschema "https://github.com/kuankuan2007/hamlog-manager/tree/master/schema"
click node_apirouter "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/index.ts"
click node_selectroutes "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/select/index.ts"
click node_updateroutes "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/update/index.ts"
click node_logstore "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/select.ts"
click node_recordupdates "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/update.ts"
click node_addressqsl "https://github.com/kuankuan2007/hamlog-manager/tree/master/schema"
click node_emailcache "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/callsign-email-cache.ts"
click node_autolookup "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/auto/callsign2email.ts"
click node_lookuproutes "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/auto/index.ts"
click node_emailpages "https://github.com/kuankuan2007/hamlog-manager/blob/master/src/views/EmailPrepare.vue"
click node_emailcontent "https://github.com/kuankuan2007/hamlog-manager/blob/master/src/scripts/mailContent.ts"
click node_emailroutes "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/email/index.ts"
click node_mailer "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/email/send.ts"
click node_server "https://github.com/kuankuan2007/hamlog-manager/blob/master/server/index.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_webapp,node_pages,node_router,node_clientapi toneBlue
class node_selectroutes,node_updateroutes,node_logstore,node_recordupdates,node_addressqsl toneAmber
class node_emailcache,node_autolookup,node_lookuproutes toneMint
class node_emailpages,node_emailcontent,node_emailroutes,node_mailer toneRose
class node_sharedschema,node_apirouter,node_database,node_server,node_operator,node_qrz,node_smtp toneIndigo
```

## Components

### Web application

- [Vue application](https://github.com/kuankuan2007/hamlog-manager/blob/master/src/main.ts): `src/main.ts`
- [Management pages](https://github.com/kuankuan2007/hamlog-manager/tree/master/src/views): `src/views`
- [Page router](https://github.com/kuankuan2007/hamlog-manager/blob/master/src/router/index.ts): `src/router/index.ts`
- [API client](https://github.com/kuankuan2007/hamlog-manager/tree/master/src/api): `src/api`

### Contact records

- [Select routes](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/select/index.ts): `server/api/select/index.ts`
- [Update routes](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/update/index.ts): `server/api/update/index.ts`
- [Contact records](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/select.ts): `server/database/select.ts`
- [Record writes](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/update.ts): `server/database/update.ts`
- [Address and QSL](https://github.com/kuankuan2007/hamlog-manager/tree/master/schema): `schema`

### Email lookup

- [Email cache](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/database/callsign-email-cache.ts): `server/database/callsign-email-cache.ts`
- [Automatic lookup](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/auto/callsign2email.ts): `server/auto/callsign2email.ts`
- [Lookup route](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/auto/index.ts): `server/api/auto/index.ts`

### Email workflow

- [Email pages](https://github.com/kuankuan2007/hamlog-manager/blob/master/src/views/EmailPrepare.vue): `src/views/EmailPrepare.vue`
- [Email composition](https://github.com/kuankuan2007/hamlog-manager/blob/master/src/scripts/mailContent.ts): `src/scripts/mailContent.ts`
- [Email routes](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/email/index.ts): `server/api/email/index.ts`
- [Template and SMTP](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/email/send.ts): `server/email/send.ts`

### Server and storage

- [Shared schemas](https://github.com/kuankuan2007/hamlog-manager/tree/master/schema): `schema`
- [HTTP API](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/api/index.ts): `server/api/index.ts`
- **SQLite database**
- [HTTP server](https://github.com/kuankuan2007/hamlog-manager/blob/master/server/index.ts): `server/index.ts`

### Other components

- **Ham operator**
- **QRZ.com**
- **SMTP service**

## Connections

- Ham operator → Vue application: uses
- Vue application → Page router: mounts
- Page router → Management pages: routes
- Management pages → API client: requests
- API client → HTTP API: calls API
- HTTP server → HTTP API: registers
- HTTP API → Select routes: dispatches
- HTTP API → Update routes: dispatches
- HTTP API → Lookup route: dispatches
- HTTP API → Email routes: dispatches
- Update routes → Shared schemas: validates
- Email routes → Shared schemas: validates
- Select routes → Contact records: reads
- Select routes → SQLite database: reads
- Update routes → Record writes: writes
- Record writes → SQLite database: writes
- Select routes → Address and QSL: serves records
- Lookup route → Automatic lookup: dispatches
- Automatic lookup → Email cache: checks cache
- Email cache → SQLite database: reads and writes
- Automatic lookup → QRZ.com: queries
- Email pages → API client: requests
- Email pages → Email composition: prepares
- Email composition → Email pages: returns draft
- Email routes → Template and SMTP: renders and sends
- Template and SMTP → SMTP service: sends mail
