# Architecture Overview
## C4 Model - System Context Diagram
```mermaid
graph TB
subgraph System
MB["🧠 Magic Bus
Compass 360"]
end
subgraph Users
Youth["👥 Youth Users
Learning & Feedback"]
Admin["👨💼 Admin Users
System Management"]
Stakeholder["🎯 Stakeholders
Decision Making"]
end
subgraph External
Azure["☁️ Azure Blob Storage
APAC Datasets"]
Email["📧 Email Service
Survey Distribution"]
end
Youth -->|Register, Learn, Feedback| MB
Admin -->|Configure, Monitor| MB
Stakeholder -->|View Insights| MB
MB -->|Read Data| Azure
MB -->|Send Surveys| Email
```
## C4 Model - Container Diagram
```mermaid
graph TB
subgraph "Client Layer"
Web["🌐 Web Application
(Streamlit)
- 6 Pages
- Multi-role UI
- Responsive"]
end
subgraph "Application Layer"
Auth["🔐 Auth Module
- User Management
- Role Control
- Session Mgmt"]
Youth["👤 Youth Service
- Profile Management
- Progress Tracking
- Feedback"]
Admin["⚙️ Admin Service
- Module Config
- Survey Mgmt
- System Health"]
DI["📊 Decision Intelligence
- Feature Compute
- KPI Generation
- Analytics"]
end
subgraph "Data Layer"
DB["🗄️ SQLite Database
- 9 Tables
- 50 Users
- 16 Modules"]
Cache["💾 Cache Layer
- Feature Cache
- Dataset Cache
- Session Cache"]
end
subgraph "External Services"
Azure["☁️ Azure Blob
- 25+ Datasets
- APAC Region
- Read-Only"]
end
Web -->|API Calls| Auth
Web -->|API Calls| Youth
Web -->|API Calls| Admin
Web -->|API Calls| DI
Auth -->|Query| DB
Youth -->|Query/Update| DB
Admin -->|Query/Update| DB
DI -->|Query| DB
DI -->|Cache| Cache
DI -->|Read| Azure
Auth -->|Store/Verify| Cache
```
## C4 Model - Component Diagram (Detail View)
```mermaid
graph TB
subgraph "Frontend - Streamlit Pages"
Login["Login Page
- Email/Password
- Register Link"]
Register["Register Page
- Form Validation
- Profile Setup"]
Youth["Youth Dashboard
- Profile View
- Progress Tracker
- Feedback Form"]
Admin["Admin Portal
- User List
- Module Manager
- Survey Panel"]
DI["DI Dashboard
- 7 Tabs
- Charts
- Exports"]
Confirm["Confirmation
- Success Messages
- Navigation"]
end
subgraph "Backend Services"
AuthSvc["Auth Service
- validate_credentials()
- create_session()
- get_user_role()"]
YouthSvc["Youth Service
- get_profile()
- update_progress()
- submit_feedback()"]
AdminSvc["Admin Service
- list_users()
- create_module()
- send_surveys()"]
DISvc["DI Service
- compute_features()
- get_kpis()
- build_heatmap()"]
end
subgraph "Data Access Layer"
SQLite["SQLite Driver
- execute_query()
- insert_record()
- update_record()"]
AzureConn["Azure Connector
- get_dataset()
- list_blobs()
- handle_errors()"]
FeatureEng["Feature Engineer
- compute_all_features()
- load_from_sqlite()
- aggregate_metrics()"]
end
Login -->|Login| AuthSvc
Register -->|Register| AuthSvc
Youth -->|Get Profile| YouthSvc
Youth -->|Submit Feedback| YouthSvc
Admin -->|List/Create| AdminSvc
DI -->|Compute| DISvc
AuthSvc -->|Query| SQLite
YouthSvc -->|Query/Update| SQLite
AdminSvc -->|Query/Update| SQLite
DISvc -->|Query Features| FeatureEng
FeatureEng -->|Load Data| SQLite
FeatureEng -->|Read| AzureConn
AzureConn -->|Connect| Azure["Azure Blob
Storage"]
```
## C4 Model - Code Level (Detailed)
```mermaid
graph LR
subgraph "mb/pages"
Page0["0_login.py
Entry point"]
Page1["1_register.py
Registration logic"]
Page2Y["2_youth_dashboard.py
Youth UI"]
Page3["3_magicbus_admin.py
Admin UI"]
Page4["4_decision_intelligence_azure.py
DI Dashboard"]
end
subgraph "mb/data_sources"
Connector["azure_blob_connector.py
AzureBlobConnector class
- get_dataset()
- list_available_datasets()
- get_health_report()"]
Engineer["azure_feature_engineer.py
AzureFeatureEngineer class
- compute_all_features()
- compute_student_daily_features()
- compute_dropout_risk()"]
Dashboard["azure_decision_dashboard.py
AzureDecisionDashboard class
- get_executive_overview()
- get_sector_heatmap()
- generate_proposal_insights()"]
end
subgraph "config"
Settings["settings.py
Environment config"]
Secrets["secrets.py
Key management"]
end
Page4 -->|Uses| Dashboard
Dashboard -->|Uses| Engineer
Engineer -->|Uses| Connector
Dashboard -->|Config| Settings
Connector -->|Config| Settings
```
## Data Flow Architecture
### Request Flow - Youth Dashboard
```mermaid
sequenceDiagram
participant Browser
participant Streamlit
participant YouthService
participant SQLite
participant Cache
Browser->>Streamlit: Click Youth Dashboard
Streamlit->>Streamlit: Check Session
Streamlit->>YouthService: get_user_profile(user_id)
YouthService->>Cache: Check Cache
alt Cache Hit
Cache-->>YouthService: Cached Profile
else Cache Miss
YouthService->>SQLite: SELECT from mb_users
SQLite-->>YouthService: Profile Data
YouthService->>Cache: Store in Cache
end
YouthService-->>Streamlit: Profile Object
Streamlit->>Streamlit: Render UI
Streamlit-->>Browser: Display Dashboard
```
### Request Flow - Decision Intelligence
```mermaid
sequenceDiagram
participant Admin
participant DI_Dashboard
participant FeatureEngineer
participant AzureConnector
participant SQLite
participant Azure
Admin->>DI_Dashboard: Click "Refresh Features"
DI_Dashboard->>FeatureEngineer: compute_all_features()
FeatureEngineer->>AzureConnector: get_dataset("students")
AzureConnector->>Azure: Request Data
alt Azure Available
Azure-->>AzureConnector: CSV Data
else Azure Unavailable
AzureConnector->>SQLite: Fallback Load
SQLite-->>AzureConnector: SQLite Data
end
AzureConnector-->>FeatureEngineer: DataFrame
FeatureEngineer->>FeatureEngineer: Compute 6 Features
FeatureEngineer-->>DI_Dashboard: Features Dict
DI_Dashboard->>DI_Dashboard: Generate KPIs
DI_Dashboard-->>Admin: Display Dashboard
```
## Technology Stack Architecture
```mermaid
graph TB
subgraph "Presentation"
Streamlit["Streamlit 1.28.1
- Session Management
- State Management
- Interactive Widgets"]
Plotly["Plotly 5.18
- Charts
- Heatmaps
- Visualizations"]
end
subgraph "Application Logic"
Python["Python 3.11
- Core Logic
- Data Processing
- Algorithms"]
Pandas["Pandas 2.1.4
- Data Manipulation
- Feature Engineering
- Aggregations"]
NumPy["NumPy
- Numerical Computing
- Array Operations"]
end
subgraph "Data Storage"
SQLite["SQLite 3
- Relational Storage
- ACID Compliance
- Transaction Support"]
AzureSDK["Azure SDK
- Blob Storage
- Authentication
- Connection Pooling"]
end
subgraph "Infrastructure"
Windows["Windows/Linux
- Host OS
- Port 8501"]
Azure_Cloud["Azure Cloud
- Blob Storage
- APAC Region"]
end
Streamlit -->|Renders| Plotly
Streamlit -->|Calls| Python
Python -->|Uses| Pandas
Python -->|Uses| NumPy
Python -->|Queries| SQLite
Python -->|Connects| AzureSDK
SQLite -->|Runs on| Windows
AzureSDK -->|Connects to| Azure_Cloud
```
## Integration Points
### Database Integration
```mermaid
graph TB
subgraph "Read Operations"
R1["mb_users
- Get profile
- List all users"]
R2["learning_modules
- List modules
- Get assignments"]
R3["student_daily_features
- Engagement metrics
- Progress data"]
end
subgraph "Write Operations"
W1["youth_feedback_surveys
- Save feedback
- Store responses"]
W2["learning_modules
- Update progress
- Mark complete"]
W3["survey_distribution_logs
- Track sends
- Log opens"]
end
subgraph "Queries"
Q["Feature Engineer
- Compute dropout risk
- Calculate sector fit
- Aggregate funnel"]
end
R1 -->|Source| Q
R2 -->|Source| Q
R3 -->|Source| Q
W1 -->|Target| DB["SQLite
Database"]
W2 -->|Target| DB
W3 -->|Target| DB
Q -->|Update| DB
```
### Azure Integration
```mermaid
graph TB
subgraph "Azure Blob Storage"
Container["Container: usethisone
Folder: apac"]
DS1["students.csv"]
DS2["learning_modules.csv"]
DS3["quiz_attempts.csv"]
DS4["...more datasets"]
end
subgraph "Azure Connector"
Auth["Authentication
- Connection String
- Access Keys"]
Reader["Data Reader
- Download Blobs
- Parse CSV"]
Cache_AZ["Caching
- In-Memory
- TTL"]
end
subgraph "Feature Engineer"
FE["Feature Pipeline
- Load Data
- Transform
- Compute Features"]
end
Container -->|Contains| DS1
Container -->|Contains| DS2
Container -->|Contains| DS3
Container -->|Contains| DS4
Auth -->|Connects| Container
Reader -->|Reads| Container
Reader -->|Caches| Cache_AZ
FE -->|Reads| Cache_AZ
```
## Performance Considerations
### Caching Strategy
```mermaid
graph LR
subgraph "Cache Layers"
L1["L1: Session Cache
- User Profile
- TTL: 5 min
- Per Session"]
L2["L2: Feature Cache
- Computed Features
- TTL: 1 hour
- Shared"]
L3["L3: Dataset Cache
- Raw Data
- TTL: 24 hours
- Blob Storage"]
end
Request["Incoming Request"]
Request -->|Check| L1
L1 -->|Miss| L2
L2 -->|Miss| L3
L3 -->|Miss| Compute["Compute from Source"]
Compute -->|Store| L3
L3 -->|Store| L2
L2 -->|Store| L1
L1 -->|Return| Response["Send to User"]
```
### Scalability Considerations
| Component | Current Capacity | Bottleneck | Solution |
|-----------|-----------------|-----------|----------|
| Users | 50 | Session Management | Implement session store |
| Features | 6 | Computation Time | Parallel processing |
| Queries | 100 RPS | SQLite Locks | Move to PostgreSQL |
| Azure Reads | 25+ datasets | Authentication | Use Service Principal |
---
## Deployment Architecture
### Development
```
Local Machine (Windows)
├── .venv (Python 3.11)
├── SQLite (data/mb_compass.db)
├── Streamlit (port 8501)
└── Code (Git)
```
### Production
```
Server/Cloud
├── Docker Container (Python 3.11)
├── PostgreSQL (Persistent Storage)
├── Streamlit Server (gunicorn + nginx)
├── Azure Blob (Read-Only)
└── CI/CD Pipeline (GitHub Actions)
```
---
**Last Updated**: January 29, 2026