# lienier/schoolconnect architecture

> Architecture diagram of the GitHub repository lienier/schoolconnect, 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/lienier/schoolconnect
- Repository: https://github.com/lienier/schoolconnect

## Overview

SchoolConnect is a college bulletin and event-registration system for administrators, teachers, student-council officers, and students. Users authenticate into role-specific dashboards, then browse or manage announcements and events; event participants register, check in, and appear in attendance and reporting workflows. The React SPA calls a Flask REST API, whose feature routes delegate to services and persist domain records. The README documents notifications, uploads, school administration, and reports as additional capabilities. Some subsystem links are documented or implied by the tree rather than confirmed in the sampled source.

Main entry points: [`backend/app/app.py`](https://github.com/lienier/schoolconnect/blob/main/backend/app/app.py) (Flask API), [`frontend/src/routes/AppRoutes.tsx`](https://github.com/lienier/schoolconnect/blob/main/frontend/src/routes/AppRoutes.tsx) (Page routing), [`backend/app/events/routes.py`](https://github.com/lienier/schoolconnect/blob/main/backend/app/events/routes.py) (Event workflows), [`backend/app/registrations/routes.py`](https://github.com/lienier/schoolconnect/blob/main/backend/app/registrations/routes.py) (Event registrations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_spa["React application<br/>[App.tsx]"]
  node_routes["Page routing<br/>[AppRoutes.tsx]"]
  node_dashboards["Role dashboards"]
end

subgraph group_identity["Identity and access"]
  node_authui["Login and session"]
  node_authapi["Authentication API<br/>[routes.py]"]
  node_useradmin["User administration<br/>[routes.py]"]
  node_roles["Roles and permissions<br/>[routes.py]"]
end

subgraph group_bulletins["Bulletins and events"]
  node_annui["Bulletin interface"]
  node_annroutes["Announcement endpoints<br/>[routes.py]"]
  node_feed["Combined bulletin feed<br/>[routes.py]"]
  node_eventui["Event interface"]
  node_events["Event workflows<br/>[routes.py]"]
  node_registrations["Event registrations<br/>[routes.py]"]
end

subgraph group_operations["College operations"]
  node_attui["Attendance interface"]
  node_attendance["Attendance and QR<br/>[routes.py]"]
  node_school["School structure<br/>[routes.py]"]
  node_reports["Reports and dashboards<br/>[routes.py]"]
  node_notifications["Notifications<br/>[routes.py]"]
  node_uploads["File uploads<br/>[routes.py]"]
end

subgraph group_platform["API platform"]
  node_api["Flask API<br/>[app.py]"]
  node_database[("PostgreSQL database")]
  node_realtime["Realtime updates<br/>[service.py]"]
end

node_users(("College users"))

node_users -->|"use"| node_spa
node_spa -->|"renders"| node_routes
node_routes -->|"routes to"| node_authui
node_routes -->|"routes to"| node_dashboards
node_routes -->|"routes to"| node_annui
node_routes -->|"routes to"| node_eventui
node_routes -->|"routes to"| node_attui
node_authui -->|"authenticates via"| node_authapi
node_annui -->|"requests"| node_annroutes
node_annui -->|"loads feed"| node_feed
node_eventui -->|"requests"| node_events
node_eventui -->|"registers via"| node_registrations
node_attui -->|"checks in via"| node_attendance
node_dashboards -->|"loads data from"| node_api
node_api -->|"dispatches"| node_authapi
node_api -->|"dispatches"| node_useradmin
node_api -->|"dispatches"| node_roles
node_api -->|"dispatches"| node_annroutes
node_api -->|"dispatches"| node_feed
node_api -->|"dispatches"| node_events
node_api -->|"dispatches"| node_registrations
node_api -->|"dispatches"| node_attendance
node_api -->|"dispatches"| node_school
node_api -->|"dispatches"| node_reports
node_api -->|"dispatches"| node_notifications
node_api -->|"dispatches"| node_uploads
node_annroutes -->|"reads and writes"| node_database
node_feed -->|"reads"| node_database
node_events -->|"reads and writes"| node_database
node_registrations -->|"reads and writes"| node_database
node_attendance -->|"reads and writes"| node_database
node_school -->|"reads and writes"| node_database
node_notifications -->|"reads and writes"| node_database
node_uploads -->|"records metadata"| node_database
node_events -->|"emits updates"| node_realtime
node_registrations -->|"emits updates"| node_realtime
node_attendance -->|"emits updates"| node_realtime
node_useradmin -->|"disconnects user"| node_realtime

click node_spa "https://github.com/lienier/schoolconnect/blob/main/frontend/src/App.tsx"
click node_routes "https://github.com/lienier/schoolconnect/blob/main/frontend/src/routes/AppRoutes.tsx"
click node_dashboards "https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/dashboards"
click node_authui "https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/auth"
click node_authapi "https://github.com/lienier/schoolconnect/blob/main/backend/app/auth/routes.py"
click node_useradmin "https://github.com/lienier/schoolconnect/blob/main/backend/app/users/routes.py"
click node_roles "https://github.com/lienier/schoolconnect/blob/main/backend/app/roles/routes.py"
click node_annui "https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/announcements"
click node_annroutes "https://github.com/lienier/schoolconnect/blob/main/backend/app/announcements/routes.py"
click node_feed "https://github.com/lienier/schoolconnect/blob/main/backend/app/feed/routes.py"
click node_eventui "https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/events"
click node_events "https://github.com/lienier/schoolconnect/blob/main/backend/app/events/routes.py"
click node_registrations "https://github.com/lienier/schoolconnect/blob/main/backend/app/registrations/routes.py"
click node_attui "https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/attendance"
click node_attendance "https://github.com/lienier/schoolconnect/blob/main/backend/app/attendance/routes.py"
click node_school "https://github.com/lienier/schoolconnect/blob/main/backend/app/school/routes.py"
click node_reports "https://github.com/lienier/schoolconnect/blob/main/backend/app/reports/routes.py"
click node_notifications "https://github.com/lienier/schoolconnect/blob/main/backend/app/notifications/routes.py"
click node_uploads "https://github.com/lienier/schoolconnect/blob/main/backend/app/uploads/routes.py"
click node_api "https://github.com/lienier/schoolconnect/blob/main/backend/app/app.py"
click node_realtime "https://github.com/lienier/schoolconnect/blob/main/backend/app/realtime/service.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_spa,node_routes,node_dashboards,node_users toneBlue
class node_authui,node_authapi,node_useradmin,node_roles toneAmber
class node_annui,node_annroutes,node_feed,node_eventui,node_events,node_registrations toneMint
class node_attui,node_attendance,node_school,node_reports,node_notifications,node_uploads toneRose
class node_api,node_database,node_realtime toneIndigo
```

## Components

### Web application

- [React application](https://github.com/lienier/schoolconnect/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Page routing](https://github.com/lienier/schoolconnect/blob/main/frontend/src/routes/AppRoutes.tsx): `frontend/src/routes/AppRoutes.tsx`
- [Role dashboards](https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/dashboards): `frontend/src/features/dashboards`

### Identity and access

- [Login and session](https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/auth): `frontend/src/features/auth`
- [Authentication API](https://github.com/lienier/schoolconnect/blob/main/backend/app/auth/routes.py): `backend/app/auth/routes.py`
- [User administration](https://github.com/lienier/schoolconnect/blob/main/backend/app/users/routes.py): `backend/app/users/routes.py`
- [Roles and permissions](https://github.com/lienier/schoolconnect/blob/main/backend/app/roles/routes.py): `backend/app/roles/routes.py`

### Bulletins and events

- [Bulletin interface](https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/announcements): `frontend/src/features/announcements`
- [Announcement endpoints](https://github.com/lienier/schoolconnect/blob/main/backend/app/announcements/routes.py): `backend/app/announcements/routes.py`
- [Combined bulletin feed](https://github.com/lienier/schoolconnect/blob/main/backend/app/feed/routes.py): `backend/app/feed/routes.py`
- [Event interface](https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/events): `frontend/src/features/events`
- [Event workflows](https://github.com/lienier/schoolconnect/blob/main/backend/app/events/routes.py): `backend/app/events/routes.py`
- [Event registrations](https://github.com/lienier/schoolconnect/blob/main/backend/app/registrations/routes.py): `backend/app/registrations/routes.py`

### College operations

- [Attendance interface](https://github.com/lienier/schoolconnect/tree/main/frontend/src/features/attendance): `frontend/src/features/attendance`
- [Attendance and QR](https://github.com/lienier/schoolconnect/blob/main/backend/app/attendance/routes.py): `backend/app/attendance/routes.py`
- [School structure](https://github.com/lienier/schoolconnect/blob/main/backend/app/school/routes.py): `backend/app/school/routes.py`
- [Reports and dashboards](https://github.com/lienier/schoolconnect/blob/main/backend/app/reports/routes.py): `backend/app/reports/routes.py`
- [Notifications](https://github.com/lienier/schoolconnect/blob/main/backend/app/notifications/routes.py): `backend/app/notifications/routes.py`
- [File uploads](https://github.com/lienier/schoolconnect/blob/main/backend/app/uploads/routes.py): `backend/app/uploads/routes.py`

### API platform

- [Flask API](https://github.com/lienier/schoolconnect/blob/main/backend/app/app.py): `backend/app/app.py`
- **PostgreSQL database**
- [Realtime updates](https://github.com/lienier/schoolconnect/blob/main/backend/app/realtime/service.py): `backend/app/realtime/service.py`

### Other components

- **College users**

## Connections

- College users → React application: use
- React application → Page routing: renders
- Page routing → Login and session: routes to
- Page routing → Role dashboards: routes to
- Page routing → Bulletin interface: routes to
- Page routing → Event interface: routes to
- Page routing → Attendance interface: routes to
- Login and session → Authentication API: authenticates via
- Bulletin interface → Announcement endpoints: requests
- Bulletin interface → Combined bulletin feed: loads feed
- Event interface → Event workflows: requests
- Event interface → Event registrations: registers via
- Attendance interface → Attendance and QR: checks in via
- Role dashboards → Flask API: loads data from
- Flask API → Authentication API: dispatches
- Flask API → User administration: dispatches
- Flask API → Roles and permissions: dispatches
- Flask API → Announcement endpoints: dispatches
- Flask API → Combined bulletin feed: dispatches
- Flask API → Event workflows: dispatches
- Flask API → Event registrations: dispatches
- Flask API → Attendance and QR: dispatches
- Flask API → School structure: dispatches
- Flask API → Reports and dashboards: dispatches
- Flask API → Notifications: dispatches
- Flask API → File uploads: dispatches
- Announcement endpoints → PostgreSQL database: reads and writes
- Combined bulletin feed → PostgreSQL database: reads
- Event workflows → PostgreSQL database: reads and writes
- Event registrations → PostgreSQL database: reads and writes
- Attendance and QR → PostgreSQL database: reads and writes
- School structure → PostgreSQL database: reads and writes
- Notifications → PostgreSQL database: reads and writes
- File uploads → PostgreSQL database: records metadata
- Event workflows → Realtime updates: emits updates
- Event registrations → Realtime updates: emits updates
- Attendance and QR → Realtime updates: emits updates
- User administration → Realtime updates: disconnects user
