# mika-collins/seng401-project-mawc architecture

> Architecture diagram of the GitHub repository mika-collins/seng401-project-mawc, 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/mika-collins/seng401-project-mawc
- Repository: https://github.com/mika-collins/seng401-project-mawc

## Overview

The repository implements “The Floor is Lava,” a Wi-Fi scan-based indoor localization and heatmap application. Raspberry Pi endpoints capture Wi-Fi observations and send them to a Flask API, which stores scans and provides account, endpoint-health, floorplan, and location-related API capabilities; the Vue client supports signup/login, floorplan setup, endpoint placement, and live visualization. The README and sampled code support the scan-to-storage and client-to-API flows. The API-to-trilateration route wiring is not established by the excerpts, so that connection is left out.

Main entry points: [`server/app.py`](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/app.py) (Flask API), [`client/src/views/HeatmapPage.vue`](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/HeatmapPage.vue) (Heatmap Page), [`endpoint/python_wifi_script.py`](https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/python_wifi_script.py) (Raspberry Pi), [`client/src/router/index.js`](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/router/index.js) (Page Router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Wi-Fi Capture"]
  node_pi_endpoint["Raspberry Pi"]
  node_monitor_setup["Monitor Setup"]
  node_scan_parser["Scan Parser"]
  node_scan_sender["Scan Sender<br/>[send_tcpdump.py]"]
end

subgraph group_api["API Services"]
  node_api["Flask API<br/>[app.py]"]
  node_validation["Request Validation<br/>[validators.py]"]
  node_passwords["Password Handling<br/>[passwords.py]"]
  node_db_access["Database Access<br/>[db.py]"]
  node_floorplan["Floorplan Data<br/>[app.py]"]
end

subgraph group_localization["Localization"]
  node_trilateration["Position Estimation<br/>[trilateration.py]"]
end

subgraph group_client["Web Client"]
  node_web_app["Vue App<br/>[App.vue]"]
  node_router["Page Router<br/>[index.js]"]
  node_login_page["Login Page<br/>[LoginPage.vue]"]
  node_signup_page["Signup Page<br/>[SignupPage.vue]"]
  node_heatmap_page["Heatmap Page<br/>[HeatmapPage.vue]"]
  node_status_bar["Endpoint Status<br/>[PiStatusBar.vue]"]
  node_tutorial["Feature Tutorial<br/>[TutorialModal.vue]"]
end

node_room_user(("Room User"))
node_wifi_devices(("Wi-Fi Devices"))
node_postgres[("PostgreSQL")]

node_room_user -->|"uses"| node_web_app
node_wifi_devices -->|"emit Wi-Fi signals"| node_pi_endpoint
node_pi_endpoint -->|"sets monitor mode"| node_monitor_setup
node_pi_endpoint -->|"parses captures"| node_scan_parser
node_pi_endpoint -->|"sends observations"| node_scan_sender
node_scan_sender -->|"posts scans"| node_api
node_web_app -->|"renders routes"| node_router
node_router -->|"routes to"| node_login_page
node_router -->|"routes to"| node_signup_page
node_router -->|"routes to"| node_heatmap_page
node_login_page -->|"submits login"| node_api
node_signup_page -->|"registers account"| node_api
node_heatmap_page -->|"requests heatmap data"| node_api
node_heatmap_page -->|"uploads floorplan"| node_api
node_heatmap_page -->|"displays status"| node_status_bar
node_heatmap_page -->|"opens tutorial"| node_tutorial
node_api -->|"validates input"| node_validation
node_api -->|"verifies credentials"| node_passwords
node_api -->|"reads and writes"| node_db_access
node_db_access -->|"queries and stores"| node_postgres
node_trilateration -->|"reads scan rows"| node_postgres
node_api -->|"handles floorplan routes"| node_floorplan

click node_pi_endpoint "https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/python_wifi_script.py"
click node_monitor_setup "https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/set_wifi_monitor.py"
click node_scan_parser "https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/parse_tcpdump_json.py"
click node_scan_sender "https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/send_tcpdump.py"
click node_web_app "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/App.vue"
click node_router "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/router/index.js"
click node_login_page "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/LoginPage.vue"
click node_signup_page "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/SignupPage.vue"
click node_heatmap_page "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/HeatmapPage.vue"
click node_status_bar "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/components/PiStatusBar.vue"
click node_tutorial "https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/components/TutorialModal.vue"
click node_api "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/app.py"
click node_validation "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/validators.py"
click node_passwords "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/passwords.py"
click node_db_access "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/db.py"
click node_trilateration "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/trilateration.py"
click node_floorplan "https://github.com/mika-collins/seng401-project-mawc/blob/main/server/app.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_pi_endpoint,node_monitor_setup,node_scan_parser,node_scan_sender,node_room_user toneBlue
class node_api,node_validation,node_passwords,node_db_access,node_floorplan,node_postgres toneAmber
class node_trilateration toneMint
class node_web_app,node_router,node_login_page,node_signup_page,node_heatmap_page,node_status_bar,node_tutorial toneRose
class node_wifi_devices toneIndigo
```

## Components

### Wi-Fi Capture

- [Raspberry Pi](https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/python_wifi_script.py): `endpoint/python_wifi_script.py`
- [Monitor Setup](https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/set_wifi_monitor.py): `endpoint/set_wifi_monitor.py`
- [Scan Parser](https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/parse_tcpdump_json.py): `endpoint/parse_tcpdump_json.py`
- [Scan Sender](https://github.com/mika-collins/seng401-project-mawc/blob/main/endpoint/send_tcpdump.py): `endpoint/send_tcpdump.py`

### API Services

- [Flask API](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/app.py): `server/app.py`
- [Request Validation](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/validators.py): `server/validators.py`
- [Password Handling](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/passwords.py): `server/passwords.py`
- [Database Access](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/db.py): `server/db.py`
- [Floorplan Data](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/app.py): `server/app.py`

### Localization

- [Position Estimation](https://github.com/mika-collins/seng401-project-mawc/blob/main/server/trilateration.py): `server/trilateration.py`

### Web Client

- [Vue App](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/App.vue): `client/src/App.vue`
- [Page Router](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/router/index.js): `client/src/router/index.js`
- [Login Page](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/LoginPage.vue): `client/src/views/LoginPage.vue`
- [Signup Page](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/SignupPage.vue): `client/src/views/SignupPage.vue`
- [Heatmap Page](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/views/HeatmapPage.vue): `client/src/views/HeatmapPage.vue`
- [Endpoint Status](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/components/PiStatusBar.vue): `client/src/components/PiStatusBar.vue`
- [Feature Tutorial](https://github.com/mika-collins/seng401-project-mawc/blob/main/client/src/components/TutorialModal.vue): `client/src/components/TutorialModal.vue`

### Other components

- **Room User**
- **Wi-Fi Devices**
- **PostgreSQL**

## Connections

- Room User → Vue App: uses
- Wi-Fi Devices → Raspberry Pi: emit Wi-Fi signals
- Raspberry Pi → Monitor Setup: sets monitor mode
- Raspberry Pi → Scan Parser: parses captures
- Raspberry Pi → Scan Sender: sends observations
- Scan Sender → Flask API: posts scans
- Vue App → Page Router: renders routes
- Page Router → Login Page: routes to
- Page Router → Signup Page: routes to
- Page Router → Heatmap Page: routes to
- Login Page → Flask API: submits login
- Signup Page → Flask API: registers account
- Heatmap Page → Flask API: requests heatmap data
- Heatmap Page → Flask API: uploads floorplan
- Heatmap Page → Endpoint Status: displays status
- Heatmap Page → Feature Tutorial: opens tutorial
- Flask API → Request Validation: validates input
- Flask API → Password Handling: verifies credentials
- Flask API → Database Access: reads and writes
- Database Access → PostgreSQL: queries and stores
- Position Estimation → PostgreSQL: reads scan rows
- Flask API → Floorplan Data: handles floorplan routes
