# ck-embpro/primature_board_tracker architecture

> Architecture diagram of the GitHub repository ck-embpro/primature_board_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/ck-embpro/primature_board_tracker
- Repository: https://github.com/ck-embpro/primature_board_tracker

## Overview

Primature Board Tracker is a Flask web application for managing institutions, board members, users and board roles, with tenure tracking and notifications. Users access the application through its registered routes; those routes render pages and read or update SQLAlchemy-backed records. A separate notification run checks active members against configurable expiry thresholds, archives expired members, and may send email. The route excerpt is partial and the README gives no capability detail, so feature links not directly demonstrated in sampled code are kept broad or omitted.

Main entry points: [`app/routes/main.py`](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py) (Web routes), [`app/models/models.py`](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/models/models.py) (ORM models), [`app/services/email_service.py`](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/services/email_service.py) (Email delivery), [`notifications.py`](https://github.com/ck-embpro/primature_board_tracker/blob/main/notifications.py) (Expiry check job)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_flask_app["Flask app<br/>[__init__.py]"]
  node_routes["Web routes<br/>[main.py]"]
  node_page_templates["Application pages"]
  node_filter_js["Auto filtering<br/>[auto-filter.js]"]
  node_pagination_js["Table paging<br/>[tbl-paginator.js]"]
end

subgraph group_domain["Board management"]
  node_institutions["Institutions<br/>[main.py]"]
  node_members["Board members<br/>[main.py]"]
  node_accounts["User accounts<br/>[main.py]"]
  node_board_roles["Board roles<br/>[main.py]"]
  node_audit["Audit logging<br/>[main.py]"]
end

subgraph group_notify["Tenure notifications"]
  node_notification_settings["Notification settings<br/>[main.py]"]
  node_notification_job["Expiry check job<br/>[notifications.py]"]
  node_email_service["Email delivery<br/>[email_service.py]"]
end

subgraph group_persistence["Persistence"]
  node_orm_models["ORM models<br/>[models.py]"]
  node_database[("Application database")]
end

node_user(("Staff user"))
node_smtp["SMTP server"]

node_user -->|"uses"| node_flask_app
node_flask_app -->|"registers routes"| node_routes
node_routes -->|"renders pages"| node_page_templates
node_routes -->|"handles requests"| node_institutions
node_routes -->|"handles requests"| node_members
node_routes -->|"handles requests"| node_accounts
node_routes -->|"handles requests"| node_board_roles
node_routes -->|"records actions"| node_audit
node_routes -->|"handles requests"| node_notification_settings
node_institutions -->|"queries and updates"| node_orm_models
node_members -->|"queries and updates"| node_orm_models
node_accounts -->|"queries and updates"| node_orm_models
node_board_roles -->|"queries and updates"| node_orm_models
node_audit -->|"writes entries"| node_orm_models
node_notification_settings -->|"reads and updates"| node_orm_models
node_orm_models -->|"persists records"| node_database
node_user -->|"filters lists"| node_filter_js
node_user -->|"pages tables"| node_pagination_js
node_notification_job -->|"reads and updates"| node_orm_models
node_notification_job -->|"sends alerts"| node_email_service
node_email_service -->|"looks up recipients"| node_orm_models
node_email_service -->|"delivers email"| node_smtp

click node_flask_app "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/__init__.py"
click node_routes "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_page_templates "https://github.com/ck-embpro/primature_board_tracker/tree/main/app/templates"
click node_filter_js "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/static/js/auto-filter.js"
click node_pagination_js "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/static/js/tbl-paginator.js"
click node_institutions "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_members "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_accounts "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_board_roles "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_audit "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_notification_settings "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py"
click node_notification_job "https://github.com/ck-embpro/primature_board_tracker/blob/main/notifications.py"
click node_email_service "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/services/email_service.py"
click node_orm_models "https://github.com/ck-embpro/primature_board_tracker/blob/main/app/models/models.py"

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_flask_app,node_routes,node_page_templates,node_filter_js,node_pagination_js,node_user toneBlue
class node_institutions,node_members,node_accounts,node_board_roles,node_audit toneAmber
class node_notification_settings,node_notification_job,node_email_service,node_smtp toneMint
class node_orm_models,node_database toneRose
```

## Components

### Web application

- [Flask app](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/__init__.py): `app/__init__.py`
- [Web routes](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [Application pages](https://github.com/ck-embpro/primature_board_tracker/tree/main/app/templates): `app/templates`
- [Auto filtering](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/static/js/auto-filter.js): `app/static/js/auto-filter.js`
- [Table paging](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/static/js/tbl-paginator.js): `app/static/js/tbl-paginator.js`

### Board management

- [Institutions](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [Board members](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [User accounts](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [Board roles](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [Audit logging](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`

### Tenure notifications

- [Notification settings](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/routes/main.py): `app/routes/main.py`
- [Expiry check job](https://github.com/ck-embpro/primature_board_tracker/blob/main/notifications.py): `notifications.py`
- [Email delivery](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/services/email_service.py): `app/services/email_service.py`

### Persistence

- [ORM models](https://github.com/ck-embpro/primature_board_tracker/blob/main/app/models/models.py): `app/models/models.py`
- **Application database**

### Other components

- **Staff user**
- **SMTP server**

## Connections

- Staff user → Flask app: uses
- Flask app → Web routes: registers routes
- Web routes → Application pages: renders pages
- Web routes → Institutions: handles requests
- Web routes → Board members: handles requests
- Web routes → User accounts: handles requests
- Web routes → Board roles: handles requests
- Web routes → Audit logging: records actions
- Web routes → Notification settings: handles requests
- Institutions → ORM models: queries and updates
- Board members → ORM models: queries and updates
- User accounts → ORM models: queries and updates
- Board roles → ORM models: queries and updates
- Audit logging → ORM models: writes entries
- Notification settings → ORM models: reads and updates
- ORM models → Application database: persists records
- Staff user → Auto filtering: filters lists
- Staff user → Table paging: pages tables
- Expiry check job → ORM models: reads and updates
- Expiry check job → Email delivery: sends alerts
- Email delivery → ORM models: looks up recipients
- Email delivery → SMTP server: delivers email
