Skip to content

NguyenTriBaoThang/AirSafeNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

195 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

AirSafeNet Logo

AirSafeNet

AI-powered Air Quality Monitoring, Forecasting & Personalized Early Warning System for Ho Chi Minh City

CI Status GitHub stars MIT License Security Policy

Ensemble AI Β· Real-time Anomaly Detection Β· Personalized Activity Scheduling Β· WHO Dose Budget
React + TypeScript Β· ASP.NET Core 8 Β· FastAPI Β· PostgreSQL Β· Docker

🌐 Explore the Dashboard Β» Β |Β  πŸ“Ή Demo Script Β |Β  πŸ› Report Bug Β |Β  πŸš€ Request Feature Β |Β  πŸ’¬ Support

.NET 8 React 18 TypeScript FastAPI Python 3.11 PostgreSQL Docker

AirSafeNet Banner


πŸ† Edition

WEBSITE & AI INNOVATION

Objective: Build an AI-powered platform that monitors, forecasts, and delivers personalized air quality warnings for citizens of Ho Chi Minh City β€” especially vulnerable groups including children, the elderly, pregnant women, and people with respiratory conditions.

Core Innovation Highlights:

  • βœ… Ensemble Forecasting β€” Random Forest + ARIMA + XGBoost with dynamic inverse-MAE weighting
  • βœ… Real-time Anomaly Detection β€” XAI-powered spike detection with feature-level explanation
  • βœ… Personalized Activity Scheduling β€” AI-optimized schedule with WHO Dose Budget tracker
  • βœ… Compound Risk Scoring β€” PM2.5 Γ— Temperature Γ— Humidity Γ— UV Index Γ— Wind
  • βœ… District-level Heatmap β€” 22 quαΊ­n/huyện real-time AQI visualization
  • βœ… Safety Gamification β€” Streak system + 11 health achievement badges

πŸ“Έ Screenshots

AI Dashboard Activity Planner District Heatmap
Anomaly Detection PM2.5 Guide AI Assistant

❓ Why AirSafeNet?

Most air quality apps only show current readings β€” you see the danger after it's already there.

AirSafeNet moves from reactive observation β†’ proactive early warning:

Problem AirSafeNet Solution
Static AQI numbers 7-day hourly PM2.5 forecast with confidence scoring
One-size-fits-all alerts 5 user groups with personalized risk multipliers
No activity guidance Smart Schedule Optimizer + Golden Hour Picker
Ignores weather factors Compound Risk = PM2.5 Γ— Temp Γ— Humidity Γ— UV Γ— Wind
No health quantification WHO Dose Budget (225 Β΅g/day) with real-time tracking
Reactive anomaly alerts Real-time XAI spike detection with interrupt alerts

✨ Feature Overview

πŸ€– AI & Forecasting Engine

  • Ensemble Model β€” 3-model weighted average with dynamic evaluation every compute cycle
  • 7-day hourly forecast β€” iterative multi-step prediction with delta clamping
  • Confidence bands β€” per-step uncertainty (Β±Β΅g/mΒ³, 95% CI approximation)
  • APScheduler β€” auto-recompute every 60 minutes, cached CSVs served to all clients
  • Model versioning β€” see MODEL_VERSIONING.md

🚨 Anomaly Detection

  • Spike detection β€” SPIKE_THRESHOLD=20 Β΅g/mΒ³, LOOKBACK=6h, COOLDOWN=2h
  • XAI explanation β€” feature importance Γ— delta β†’ top contributing factors
  • AQI Spike Interrupt β€” real-time overlay alert when spike occurs during active activity
  • Telegram + Email β€” push notifications with group-specific advice

πŸ—“οΈ Personalized Activity Module

  • Smart Schedule Optimizer β€” AI proposes top-3 time slots based on 24h forecast
  • Golden Hour Picker β€” interactive 24h AQI heatmap bar chart
  • Weekly Planner β€” 7Γ—24 drag-and-drop grid with AQI background heatmap
  • Weekly Risk Matrix β€” activity vs. day-of-week risk comparison (30-day history)
  • Pattern Insight β€” detects recurring bad-day / bad-hour patterns from history
  • Exposure Log β€” 30-day PM2.5 intake log (bar chart + table)

πŸ₯ Health Profile System

  • 5 user groups: Normal / Child / Elderly / Respiratory / Pregnant
  • Borg CR-10 Scale β€” predicted exertion level per activity
  • Mask Recommendation β€” None / Surgical / KF94 / N95 / N99 by AQI + group
  • Max Outdoor Time β€” WHO-derived limits per group + intensity
  • Dose Budget Tracker β€” real-time WHO budget depletion in activity modal
  • Compound Risk Panel β€” weather-amplified risk with per-factor multipliers

πŸ“Š Visualization

  • District Heatmap β€” 22-district SVG map with realtime color coding
  • Forecast vs Actual β€” MAE / RMSE / accuracy% comparison chart
  • WHO Comparison β€” PM2.5 daily average vs WHO 5/15 Β΅g/mΒ³ guidelines
  • Exposure Log Chart β€” 30-day Recharts bar chart with WHO reference line
  • Safety Streak & Badges β€” 11 unlockable health achievement badges

πŸ€– AI Assistant

  • Conversational chat with streaming typewriter response
  • Pinned / renamed conversations with full history
  • Message regeneration, export (.txt / .md)
  • Domain-aware (only answers air quality topics)

πŸ—οΈ System Architecture

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      CLIENT LAYER                            β”‚
β”‚   React 18 + TypeScript + Vite  (port 5173)                  β”‚
β”‚   Recharts Β· ReactMarkdown Β· react-router-dom Β· Tailwind CSS β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚ REST API (JWT Bearer)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    BACKEND LAYER                             β”‚
β”‚   ASP.NET Core 8.0  (port 7276)                              β”‚
β”‚   Entity Framework Core Β· JWT Auth Β· APScheduler proxy       β”‚
β”‚   Controllers: Air Β· Dashboard Β· Activity Β· Anomaly          β”‚
β”‚                Admin Β· Notification Β· Assistant              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚ HTTP                       β”‚ HTTP
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    AI SERVER        β”‚    β”‚       EXTERNAL APIs             β”‚
β”‚   FastAPI Python    β”‚    β”‚  Open-Meteo Weather API         β”‚
β”‚   (port 8000)       β”‚    β”‚  OpenAQ Air Quality API         β”‚
β”‚                     β”‚    β”‚  Telegram Bot API               β”‚
β”‚ Ensemble Model      β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”œβ”€ Random Forest    β”‚
β”‚ β”œβ”€ ARIMA (auto AIC) β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ └─ XGBoost Lite     β”‚    β”‚          DATABASE               β”‚
β”‚                     β”‚    β”‚   PostgreSQL 16 (prod)          β”‚
β”‚  APScheduler 60min  β”‚    β”‚   SQLite (dev/test)             β”‚
β”‚  Anomaly Detector   β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚  Cache Manager      β”‚
β”‚  District Heatmap   β”‚
β”‚  22 quαΊ­n/huyện      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow:

  1. APScheduler triggers run_compute() every 60 minutes
  2. Ensemble model builds 7-day forecast CSV + 30-day history CSV + current JSON
  3. Clients read from cache β€” zero per-request AI computation
  4. Anomaly detector runs in parallel, triggers alerts via .NET /api/notification
  5. District heatmap computed with parallel weather fetch per district

πŸ› οΈ Tech Stack

Layer Technology
Frontend React 18, TypeScript, Vite, Recharts, ReactMarkdown
Backend ASP.NET Core 8.0, C#, Entity Framework Core
AI Server FastAPI, Python 3.11, scikit-learn, XGBoost, statsmodels
Database PostgreSQL 16 (prod) / SQLite (dev)
Auth JWT Bearer Token
Cache CSV + JSON file cache (APScheduler 60-min cycle)
Notification Telegram Bot API Β· SMTP Email
DevOps Docker Compose Β· GitHub Actions CI/CD

πŸ“ Repository Structure

AirSafeNet/
β”‚
β”œβ”€β”€ .github/
β”‚   β”œβ”€β”€ workflows/
β”‚   β”‚   β”œβ”€β”€ ci.yml                    # CI: lint + type-check + build all layers
β”‚   β”‚   └── docker-publish.yml        # CD: build & push Docker images on tag
β”‚   β”œβ”€β”€ ISSUE_TEMPLATE/
β”‚   β”‚   β”œβ”€β”€ bug_report.md
β”‚   β”‚   └── feature_request.md
β”‚   β”œβ”€β”€ PULL_REQUEST_TEMPLATE.md
β”‚   β”œβ”€β”€ dependabot.yml                # Auto dependency updates
β”‚   └── release-drafter.yml          # Auto-generate release notes
β”‚
β”œβ”€β”€ assets/
β”‚   β”œβ”€β”€ images/                       # Logo, banner
β”‚   β”œβ”€β”€ screenshots/                  # UI screenshots
β”‚   └── diagrams/                     # Architecture, CI/CD diagrams
β”‚
β”œβ”€β”€ docs/
β”‚   └── wiki/                         # Extended documentation
β”‚
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ model_manifest.py             # Generate model version manifest
β”‚   └── drift_check.py               # Check model drift vs new data
β”‚
β”œβ”€β”€ src/
β”‚   β”‚
β”‚   β”œβ”€β”€ airsafenet_ai/                # FastAPI Python AI Server
β”‚   β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”‚   β”œβ”€β”€ api.py                # FastAPI routes
β”‚   β”‚   β”‚   β”œβ”€β”€ predict.py            # Main model inference
β”‚   β”‚   β”‚   β”œβ”€β”€ ensemble_predict.py   # Ensemble (RF + ARIMA + XGBoost)
β”‚   β”‚   β”‚   β”œβ”€β”€ cache_manager.py      # 60-min cache pipeline
β”‚   β”‚   β”‚   β”œβ”€β”€ anomaly_detector.py   # Spike detection + XAI
β”‚   β”‚   β”‚   β”œβ”€β”€ districts.py          # 22-district heatmap
β”‚   β”‚   β”‚   β”œβ”€β”€ scheduler.py          # APScheduler 60-min job
β”‚   β”‚   β”‚   β”œβ”€β”€ features.py           # Feature engineering
β”‚   β”‚   β”‚   β”œβ”€β”€ data_loader.py        # Open-Meteo + OpenAQ fetch
β”‚   β”‚   β”‚   β”œβ”€β”€ aqi.py               # EPA AQI conversion
β”‚   β”‚   β”‚   β”œβ”€β”€ profiles.py          # Risk profiles (Vietnamese)
β”‚   β”‚   β”‚   └── config.py            # LAT/LON/constants
β”‚   β”‚   β”œβ”€β”€ models/                   # Trained model .pkl files
β”‚   β”‚   β”œβ”€β”€ data/                     # Cache CSVs/JSONs
β”‚   β”‚   β”œβ”€β”€ notebooks/               # Google Colab training notebooks
β”‚   β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”‚   └── requirements.txt
β”‚   β”‚
β”‚   β”œβ”€β”€ airsafenet_backend/           # ASP.NET Core 8.0 Web API
β”‚   β”‚   β”œβ”€β”€ airsafenet_backend/
β”‚   β”‚   β”‚   β”œβ”€β”€ Controllers/          # Air, Dashboard, Activity, Anomaly,
β”‚   β”‚   β”‚   β”‚                         # Admin, Notification, Assistant
β”‚   β”‚   β”‚   β”œβ”€β”€ Data/                 # AppDbContext, EF migrations
β”‚   β”‚   β”‚   β”œβ”€β”€ DTOs/                 # Request/Response models
β”‚   β”‚   β”‚   β”œβ”€β”€ Models/               # EF entities
β”‚   β”‚   β”‚   β”œβ”€β”€ Services/             # AiCachedService, AirExplainService
β”‚   β”‚   β”‚   └── Program.cs
β”‚   β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”‚   └── airsafenet_backend.sln
β”‚   β”‚
β”‚   └── airsafenet_frontend/          # React + TypeScript + Vite
β”‚       β”œβ”€β”€ src/
β”‚       β”‚   β”œβ”€β”€ pages/                # Dashboard, Activity, Heatmap, Impact,
β”‚       β”‚   β”‚                         # Assistant, Preferences, Guide, Presentation
β”‚       β”‚   β”œβ”€β”€ components/
β”‚       β”‚   β”‚   β”œβ”€β”€ layout/           # AppShell, AppHeader, SidebarNav
β”‚       β”‚   β”‚   β”œβ”€β”€ dashboard/        # 30+ visualization components
β”‚       β”‚   β”‚   └── common/           # SectionHeader, StatusChip, Toast
β”‚       β”‚   β”œβ”€β”€ api/                  # http.ts, air.ts, dashboard.ts,
β”‚       β”‚   β”‚                         # assistant.ts, preferences.ts
β”‚       β”‚   └── types/                # TypeScript type definitions
β”‚       β”œβ”€β”€ Dockerfile
β”‚       └── vite.config.ts
β”‚
β”œβ”€β”€ .env.example                      # Environment variable template
β”œβ”€β”€ .gitignore
β”œβ”€β”€ docker-compose.yml                # Full stack orchestration
β”œβ”€β”€ ARCHITECTURE.md
β”œβ”€β”€ BRANCHING.md
β”œβ”€β”€ CODE_OF_CONDUCT.md
β”œβ”€β”€ COMPETITION_SUBMISSION.md
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ DEMO_SCRIPT.md
β”œβ”€β”€ LICENSE
β”œβ”€β”€ MODEL_VERSIONING.md
β”œβ”€β”€ RELEASE_TEMPLATE.md
β”œβ”€β”€ SECURITY.md
β”œβ”€β”€ SUPPORT.md
└── README.md

πŸš€ Getting Started

🧰 Prerequisites

  • Docker Desktop β‰₯ 24.0 & Docker Compose β‰₯ 2.0 (recommended)
  • Or: Node.js β‰₯ 18, .NET SDK 8.0, Python 3.11, PostgreSQL 16

⚑ Quick Start with Docker (Recommended)

# 1. Clone repository
git clone https://github.com/NguyenTriBaoThang/AirSafeNet.git
cd AirSafeNet

# 2. Configure environment
cp .env.example .env
# Edit .env with your API keys (see Environment Variables section)

# 3. Start all services
docker compose up -d --build

# 4. Open browser
# Frontend:   http://localhost:5173
# Backend:    http://localhost:7276/swagger
# AI Server:  http://localhost:8000/docs

To stop all services:

docker compose down

πŸ”§ Manual Setup (Without Docker)

β–Ά 1. AI Server (FastAPI)
cd src/airsafenet_ai
python -m venv .venv

# Windows
.\.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

pip install -r requirements.txt

# Optional: install Ensemble dependencies
pip install statsmodels xgboost

cp .env.example .env
uvicorn app.api:app --reload --host 0.0.0.0 --port 8000

Place trained model at src/airsafenet_ai/models/model.pkl

Health check: http://localhost:8000/health

β–Ά 2. Backend (ASP.NET Core)
cd src/airsafenet_backend
dotnet restore
dotnet ef database update
dotnet run

Swagger UI: https://localhost:7276/swagger

β–Ά 3. Frontend (React + Vite)
cd src/airsafenet_frontend
cp .env.example .env.local
npm install
npm run dev

Web app: http://localhost:5173


βš™οΈ Environment Variables

Copy .env.example β†’ .env and fill in:

# ── Database ─────────────────────────────────────
POSTGRES_USER=airsafenet
POSTGRES_PASSWORD=your_strong_password

# ── JWT Auth ──────────────────────────────────────
JWT_SECRET=your_min_32_char_secret_key

# ── Admin ─────────────────────────────────────────
ADMIN_KEY=your_admin_key

# ── External APIs ─────────────────────────────────
OPENAQ_API_KEY=your_openaq_api_key
# Open-Meteo: Free, no key needed

# ── Notifications ─────────────────────────────────
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your@gmail.com
SMTP_PASS=your_app_password  # Gmail App Password

# ── Frontend ──────────────────────────────────────
VITE_API_BASE_URL=http://localhost:7276

πŸ“‘ API Reference

AI Server β€” http://localhost:8000

Method Endpoint Description
GET /health Service health check
GET /forecast/current Current PM2.5 + AQI (cached)
GET /forecast/range?days=7 7-day hourly forecast
GET /history?days=30 30-day historical data
GET /districts/current 22-district real-time AQI
GET /anomaly/latest Latest anomaly detection
GET /anomaly/history Anomaly history log
POST /admin/compute Trigger cache recompute

Backend β€” https://localhost:7276

Method Endpoint Auth Description
POST /api/auth/register βœ… Register account
POST /api/auth/login βœ… Login β†’ JWT token
GET /api/air/current βœ… Current AQI + weather
GET /api/air/forecast?days=7 βœ… Forecast (from cache)
GET /api/air/history?days=30 βœ… History (from cache)
GET /api/air/explain βœ… Weather + AI explanation
GET/POST /api/activity βœ… Activity schedule CRUD
GET /api/activity/forecast βœ… Risk score per activity
GET /api/dashboard/summary βœ… Dashboard summary data
GET /api/anomaly/latest βœ… Anomaly proxy
POST /api/admin/compute βœ… Admin Trigger AI recompute

Full API specification: see openapi.txt


🎬 Demo Flow

A) Dashboard

  1. Login β†’ Dashboard loads forecast, AQI summary, anomaly banner
  2. Switch forecast/history, 1/3/7 days
  3. Check WHO Comparison Chart and Forecast vs Actual

B) Activity Planner

  1. Settings β†’ set user group (e.g. Respiratory)
  2. Activity page β†’ Add activity via modal (see Dose Budget update live)
  3. Smart Schedule Optimizer β†’ enter activity β†’ get top-3 time slots
  4. Golden Hour Picker β†’ 24h AQI heatmap β†’ select best hour β†’ apply

C) District Heatmap

  1. Heatmap page β†’ see 22 quαΊ­n/huyện color-coded by AQI
  2. Click district β†’ popup with PM2.5 and risk level

D) AI Assistant

  1. Assistant page β†’ ask "PM2.5 hΓ΄m nay nhΖ° thαΊΏ nΓ o?"
  2. Streaming typewriter response
  3. Pin, rename, export conversation

E) Admin Panel

  1. Login as Admin β†’ /admin
  2. Trigger compute β†’ watch cache refresh
  3. Monitor scheduler status and file timestamps

πŸ—ΊοΈ CI/CD Pipeline

CI/CD Pipeline

  • CI (every push/PR to main): TypeScript check β†’ ESLint β†’ .NET build β†’ Python lint β†’ Docker build verification
  • CD (every semver tag v*.*.*): Build multi-arch images β†’ push to GitHub Container Registry β†’ auto-generate release notes
# Create and push a release tag
git tag v1.0.0
git push origin v1.0.0
# β†’ GitHub Actions builds and publishes Docker images automatically
# β†’ GitHub Release created with changelog

πŸ—ΊοΈ Roadmap

  • Core AI forecast (Random Forest)
  • Ensemble Model (ARIMA + XGBoost + dynamic weights)
  • Real-time anomaly detection + XAI
  • 22-district heatmap (HCMC)
  • Activity scheduling + personalized risk scoring
  • WHO Dose Budget Tracker
  • Compound Risk Score (PM2.5 Γ— Weather)
  • Safety Streak & Badge gamification
  • AQI Spike Interrupt Alert
  • PM2.5 Educational Guide page
  • Mobile App (React Native / PWA)
  • Multi-city support (Hanoi, Da Nang)
  • Long-term trend analytics (6 months / 1 year)
  • Family Dashboard (multi-profile management)
  • Official station data integration
  • Cloud deployment (AWS/Azure)

🀝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md first.

# 1. Fork the repository
# 2. Create your feature branch
git checkout -b feature/your-feature-name

# 3. Commit with convention
git commit -m "feat(frontend): add compound risk panel"

# 4. Push and open Pull Request
git push origin feature/your-feature-name

Commit Convention

Prefix Purpose
feat New feature
fix Bug fix
docs Documentation
style CSS / formatting
refactor Code refactor
test Tests
chore Build / config

πŸ” Security

Please read SECURITY.md. Do not report security vulnerabilities publicly in issues β€” contact the maintainer directly.


πŸ“„ Documentation Index

Document Description
ARCHITECTURE.md System architecture deep-dive
BRANCHING.md Git branching strategy
COMPETITION_SUBMISSION.md Competition guide
DEMO_SCRIPT.md Step-by-step demo script
MODEL_VERSIONING.md AI model versioning
CONTRIBUTING.md Contribution guidelines
SECURITY.md Security policy
SUPPORT.md Support information
openapi.txt Full API specification

πŸ“œ License

MIT License β€” see LICENSE for details.


πŸ™ Credits

Team KTT.HUTECH
Instructor MSc. Nguyen Huy Cuong
Contributors Nguyen Tri Bao Thang Β Β·Β  Le Trung Kien Β Β·Β  Do Chi Thanh Β Β·Β  Vo Thanh Trung

Star

Built with ❀️ for cleaner air and healthier lives in Ho Chi Minh City, Vietnam.

About

AirSafeNet - AI powered air quality monitoring and early warning system using Big Data to predict pollution and protect public health in smart cities. 🌍

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors