VayuNetra
AI-Powered Air Pollution Monitoring
Empowering Bengaluru's 12 million citizens with Amazon Nova AI โ Amazon Nova AI Hackathon 2026
Amazon Nova 2 Lite
Multimodal photo analysis โ detects pollution type, severity, health risk
Amazon Nova 2 Sonic
Voice transcription in Kannada, Hindi, English
Nova Multimodal Embeddings
Semantic similarity search using VECTOR(1024) cosine similarity
Nova Act
UI automation โ auto-files complaints to KSPCB government portal
Mobile App
Flutter Android app with camera, GPS, voice reporting
Backend API
FastAPI + Amazon Bedrock on AWS Lightsail
Vector Database
PostgreSQL + pgvector with VECTOR(1024) embeddings
Secure & Scalable
JWT auth, HTTPS, rate limiting, AWS production deployment
๐ Quick Start
Test the Live System
Test Credentials
test@vayunetra.com
Test@1234
Download Mobile App
โฌ Download APKLogin with test credentials above
๐ Amazon Nova AI Hackathon 2026
VayuNetra showcases all 4 Amazon Nova model families to solve air pollution challenges in Bengaluru, India.
Key AI Innovations
- Multi-Round Tool Calling โ Agent autonomously chains SQL queries โ hotspot detection โ health advice
- Nova 2 Lite Multimodal โ Photo analysis: pollution_type, severity, health_risk, confidence score
- Nova 2 Sonic Voice AI โ Voice reporting in Kannada, Hindi, English
- Nova Multimodal Embeddings โ Similar report search using VECTOR(1024) cosine similarity
- Nova Act UI Automation โ Auto-files complaint letters to KSPCB government portal
Documentation
๐๏ธ System Architecture Overview
Core Components
Nginx + SSL | api.vayunetra.com
Photo Analysis + AI Chat + Complaint Letter
Voice Transcription EN/KN/HI
VECTOR(1024) Similarity Search
UI Automation KSPCB Auto-File
Photo Storage
16 Tables VECTOR(1024)
Figure 1 โ Core components: User, API, AWS AI, Storage, Websites.
๐ค AI Agent Multi-Round Tool Calling
| User | FastAPI | Amazon Bedrock | Nova 2 Lite | Tools | DB | Response | |
|---|---|---|---|---|---|---|---|
| POST /api/chat | โ | ||||||
| โ | bedrock_runtime.converse() | ||||||
| โ | Initial prompt + 5 available tools | ||||||
| Round 1: Reasoning โ I need pollution data, I'll query the database | |||||||
| โ | Tool Request: execute_sql_query | ||||||
| โ | Execute SQL query | ||||||
| โ | Results: {data, count} | ||||||
| โ | Tool result + continue conversation | ||||||
| Round 2: Reasoning โ I have the data. Now formulating response | |||||||
| โ | Final response + tools_used | ||||||
| โ | Answer with tools_used list | ||||||
Figure 2 โ Multi-round tool calling: User โ FastAPI โ Bedrock โ Nova 2 Lite โ Tools โ DB โ Response.
๐ธ Image Analysis Pipeline
Multi-Modal Processing
Radius: 500m ยท 30 days ยท Min reports: 3
Figure 3 โ Image analysis pipeline: Mobile โ S3/DB โ Nova 2 Lite โ analysis_results โ Hotspot detection.
๐ค Nova Act โ Complaint Filing
Figure 4 โ Nova Act complaint filing flow from report to KSPCB reference number.
About This Docs Site
This documentation site is built for the Amazon Nova AI Hackathon 2026 submission.
๐ฑ Mobile App Overview
- Photo capture with GPS tagging
- Voice reporting (EN/KN/HI)
- Real-time pollution map
- Nova 2 Lite AI analysis
- Complaint letter viewer
- Badge and points system
- AI agent chat
- Similar reports finder
- Nova Act complaint filing
๐ฑ App Screenshots
๐ฑ Dashboard (laptop view)
Overview, Reports, and Leaderboard โ one after the other, same style as dashboard.vayunetra.com.



Tech Stack
Credentials: test@vayunetra.com / Test@1234
๐ค Testing on Android
- Download APK from link above
- Enable "Install unknown apps" in Android settings
- Open APK file to install VayuNetra
- Launch the app
- Login: test@vayunetra.com / Test@1234
- Go to Report tab (camera icon)
- Take photo of any outdoor pollution
- Add area: "Koramangala, Bengaluru"
- Tap "Analyze with Nova AI"
- Wait 15-20 seconds for Nova 2 Lite analysis
- View severity badge + complaint letter
- Tap "Auto-File with Nova Act" button
โก Backend API Overview
Base URL:
https://api.vayunetra.com
Health check
curl https://api.vayunetra.com/health
Response:
{
"status": "ok",
"db": "connected",
"nova_models": {
"lite": "us.amazon.nova-2-lite-v1:0",
"sonic": "amazon.nova-2-sonic-v1:0",
"embed": "amazon.nova-2-multimodal-embeddings-v1:0",
"act": "amazon.nova-act-v1:0"
}
}
API Endpoints
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /api/auth/register | Register user | No |
| POST | /api/auth/login | Login get JWT | No |
| GET | /api/auth/me | Current user | Yes |
| POST | /api/reports | Submit report+Nova | Yes |
| GET | /api/reports | All reports | No |
| GET | /api/reports/{id} | Single report | No |
| GET | /api/my-reports | My reports | Yes |
| DELETE | /api/reports/{id} | Delete report | Yes |
| GET | /api/stats | Dashboard stats | No |
| GET | /api/leaderboard | Top users | No |
| POST | /api/chat | AI agent chat | No |
| GET | /api/search | Search by area | No |
| GET | /api/similar/{id} | Similar reports | No |
| POST | /api/voice | Voice transcribe | Yes |
| GET | /api/clean-zones | Clean air zones | No |
| POST | /api/file-complaint/{id} | Nova Act filing | Yes |
| GET | /health | Health check | No |
Nova Models
๐ค AI Agent Overview
VayuNetra's AI agent uses Amazon Nova 2 Lite with multi-round tool calling to answer questions about Bengaluru's air quality using real-time data.
5 Tools
| Tool | Description | Data Source |
|---|---|---|
| execute_sql_query | Query pollution database | PostgreSQL RDS |
| get_clean_air_zones | 6 clean zones with AQI | Static + API |
| get_pollution_hotspots | Top N areas by severity | reports table |
| get_area_stats | Count + avg severity for area | reports table |
| get_health_advice | Health advice by severity | Built-in logic |
Example Conversation
{
"results": [
{"area": "Peenya Industrial Area", "severity": "CRITICAL", "count": 8},
{"area": "Whitefield", "severity": "HIGH", "count": 5},
{"area": "Hebbal", "severity": "HIGH", "count": 3}
],
"total": 16
}
{
"severity": "CRITICAL",
"advice": "Stay indoors. Wear N95 mask if must go out. Avoid all outdoor exercise. Keep windows closed."
}
Based on this week's reports, Peenya Industrial Area is the worst with 8 CRITICAL reports, followed by Whitefield (5 HIGH) and Hebbal (3 HIGH).
โ ๏ธ Health Advisory for CRITICAL areas: Stay indoors. Wear N95 mask if you must go outside. Avoid all outdoor exercise and keep windows closed.
Consider reporting any new pollution sources you observe.
๐๏ธ Database Schema
16 tables with pgvector VECTOR(1024) support for semantic similarity search.
| Column | Type | Description |
|---|---|---|
| id | SERIAL PK | Auto increment |
| username | VARCHAR(50) | Unique username |
| VARCHAR(100) | Unique email | |
| password_hash | VARCHAR(255) | Bcrypt hash |
| points | INT DEFAULT 0 | Gamification points |
| badge_level | VARCHAR(50) | Current badge |
| report_count | INT DEFAULT 0 | Total reports |
| account_status | VARCHAR(20) | active/suspended |
| created_at | TIMESTAMP | Registration date |
| Column | Type | Description |
|---|---|---|
| id | SERIAL PK | Primary key |
| user_id | INT FK | References users |
| photo_url | VARCHAR(500) | S3 photo URL |
| area | VARCHAR(100) | Area name |
| latitude | DECIMAL(10,8) | GPS latitude |
| longitude | DECIMAL(11,8) | GPS longitude |
| description | TEXT | User description |
| complaint_letter | TEXT | Nova generated letter |
| status | VARCHAR(20) | analyzed/pending |
| created_at | TIMESTAMP | Report date |
| Column | Type | Description |
|---|---|---|
| id | SERIAL PK | Primary key |
| report_id | INT FK | References reports |
| severity | VARCHAR(20) | HIGH/MODERATE/LOW |
| pollution_type | VARCHAR(50) | Type detected |
| health_risk | TEXT | Health assessment |
| confidence | DECIMAL(5,2) | 0.0 to 1.0 |
| description | TEXT | AI description |
| recommendations | TEXT | Action items |
| processed_by | VARCHAR(200) | Nova model ID |
| image_embedding | VECTOR(1024) | Nova embedding |
| analyzed_at | TIMESTAMP | Analysis time |
id, name, center_latitude, center_longitude, radius_meters, total_reports, average_severity, status (active/resolved), first_reported, last_reported
id, report_id, image_url, status (pending/processing/completed/failed), queued_at, processed_at, retry_count, error_message
id, user_id, email, otp, created_at, expires_at, is_verified, attempts
id, api_key, name, permissions (JSON), created_date, expiration_date, active, last_used
id, username, email, password_hash, role (super_admin/admin/moderator), created_at, last_login, active
id, timestamp, agent, action, details, log_level (info/warning/error), related_id, related_table
id, setting_key (unique), setting_value, data_type, description, updated_at
id, stat_date, total_reports, critical_count, high_count, areas_covered, trend_direction, last_updated
id, name, district, sub_district, latitude, longitude, population_estimate, area_sqkm
id, name, description, hazard_level, health_impact, icon_url
id, report_id, pollution_type_id, confidence_score, percentage
id, report_id, hotspot_id
id, name, aqi, status, latitude, longitude, activities (JSON), updated_at
id, user_id, title, message, type, is_read, created_at
id, name, description, min_reports, icon_url, color, created_at
๐ Semantic Similarity Search
Every pollution photo submitted generates a VECTOR(1024) embedding via Amazon Nova Multimodal Embeddings (amazon.nova-2-multimodal-embeddings-v1:0) stored in PostgreSQL with the pgvector extension. This enables semantic similarity search to find visually similar pollution incidents across Bengaluru.
-- Find visually similar pollution reports
SELECT
r.area,
r.photo_url,
ar.severity,
ar.pollution_type,
ar.confidence,
1 - (ar.image_embedding <=> $1::vector)
AS similarity_score
FROM reports r
JOIN analysis_results ar
ON r.id = ar.report_id
WHERE ar.image_embedding IS NOT NULL
ORDER BY similarity_score DESC
LIMIT 5;
CREATE INDEX ON analysis_results USING ivfflat (image_embedding vector_cosine_ops) WITH (lists = 100);
Enables fast approximate nearest neighbor search across all report embeddings.