VayuNetra

AI-Powered Air Pollution Monitoring

Empowering Bengaluru's 12 million citizens with Amazon Nova AI โ€” Amazon Nova AI Hackathon 2026

View on GitHub Live Demo
๐Ÿค–

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

Email test@vayunetra.com
Password Test@1234

Download Mobile App

โฌ‡ Download APK

Login 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

Documentation

๐Ÿ“ฑ Mobile App

Flutter Android app with AI reporting

Read More โ†’

โšก Backend API

FastAPI + all 4 Nova services

Read More โ†’

๐Ÿ—„๏ธ Database Schema

16 tables with pgvector support

Read More โ†’

๐Ÿ—๏ธ Architecture

Complete system architecture diagrams

Read More โ†’

๐Ÿ—๏ธ System Architecture Overview

Core Components

USER LAYER
๐Ÿ“ฑ Flutter Mobile App
Camera + GPS + Voice EN/KN/HI
โ–ผ
API LAYER
โšก FastAPI on AWS Lightsail
Python 3.11 | Ubuntu 22.04 | 2GB RAM
Nginx + SSL | api.vayunetra.com
โ–ผ
AWS AI SERVICES
๐Ÿค– Nova 2 Lite
us.amazon.nova-2-lite
Photo Analysis + AI Chat + Complaint Letter
๐ŸŽ™๏ธ Nova 2 Sonic
amazon.nova-2-sonic
Voice Transcription EN/KN/HI
๐Ÿ” Nova Embeddings
nova-2-multimodal
VECTOR(1024) Similarity Search
๐Ÿค– Nova Act
amazon.nova-act
UI Automation KSPCB Auto-File
โ–ผ
STORAGE
โ˜๏ธ Amazon S3
vayunetra-pollution-images bucket
Photo Storage
๐Ÿ—„๏ธ PostgreSQL+pgvector
AWS RDS t4g.micro
16 Tables VECTOR(1024)
โ–ผ
WEBSITES
vayunetra.com
Main site
docs.vayunetra.com
S3+CloudFront
dashboard.vayunetra.com
Route53 DNS

Figure 1 โ€” Core components: User, API, AWS AI, Storage, Websites.

๐Ÿค– AI Agent Multi-Round Tool Calling

UserFastAPIAmazon BedrockNova 2 LiteToolsDBResponse
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

User Captures Photo
โ†“
Mobile App
Take Photo ยท Get GPS ยท Add Description
โ†“
POST /api/reports
user_id, latitude, longitude, description, image_data (base64)
โ†“
Save to Amazon S3
s3://vayunetra-pollution-images/reports/UUID.jpg
โ†“
Insert to PostgreSQL
reports: report_id, user_id, image_url, status: 'analyzing'
Amazon Bedrock Nova 2 Lite
invoke_model() โ€” Model: us.amazon.nova-2-lite-v1:0 โ€” Image (base64) + Structured Prompt โ€” Temperature: 0.2
โ†“
AI Analysis
Multi-Modal Processing
โ†“
Structured Extraction
pollution_type (VEHICLE_EMISSION etc) ยท severity (LOW/MODERATE/HIGH) ยท health_risk ยท confidence_score (0-1) ยท description ยท recommendations
analysis_results table
severity_score ยท pollution_type ยท health_risk ยท confidence ยท ai_description ยท image_embedding vector(1024)
โ†“
Hotspot Detection
Radius: 500m ยท 30 days ยท Min reports: 3
โ†“
Update Hotspot OR Create New Hotspot
โ†“
โœ… Analyzed

Figure 3 โ€” Image analysis pipeline: Mobile โ†’ S3/DB โ†’ Nova 2 Lite โ†’ analysis_results โ†’ Hotspot detection.

๐Ÿค– Nova Act โ€” Complaint Filing

๐Ÿ“‹ Report Submitted
โ†’
Nova 2 Lite โ€” Generate formal complaint letter (Air Act 1981, KSPCB format)
โ†’
Nova Act Activated โ€” amazon.nova-act-v1:0
โ†’
Navigate KSPCB Online Portal โ€” Playwright automation
โ†’
Fill Complaint Form โ€” Location, Type, Description, Evidence URL
โ†’
Submit Form
โ†’
โœ… Reference Number โ€” Returned to citizen

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.

Project: VayuNetra โ€” เฒตเฒพเฒฏเณ เฒจเณ‡เฒคเณเฒฐ
Hackathon: Amazon Nova AI Hackathon 2026
Category: Multimodal Understanding
API: https://api.vayunetra.com
GitHub: github.com/manojgowda2520/VayuNetra

๐Ÿ“ฑ Mobile App Overview

๐Ÿ“ฑ App Screenshots

๐Ÿ“ฑ Dashboard (laptop view)

Overview, Reports, and Leaderboard โ€” one after the other, same style as dashboard.vayunetra.com.

dashboard.vayunetra.com
Dashboard Overview
Dashboard Overview
dashboard.vayunetra.com
Dashboard Reports
Dashboard Reports
dashboard.vayunetra.com
Dashboard Leaderboard
Dashboard Leaderboard

Tech Stack

Framework Flutter (Dart)
State Provider pattern
Maps flutter_map
Voice record + Nova 2 Sonic
Auth JWT in AsyncStorage
API HTTP package + api.vayunetra.com
โฌ‡ Download APK

Credentials: test@vayunetra.com / Test@1234

๐Ÿค– Testing on Android

  1. Download APK from link above
  2. Enable "Install unknown apps" in Android settings
  3. Open APK file to install VayuNetra
  4. Launch the app
  5. Login: test@vayunetra.com / Test@1234
  6. Go to Report tab (camera icon)
  7. Take photo of any outdoor pollution
  8. Add area: "Koramangala, Bengaluru"
  9. Tap "Analyze with Nova AI"
  10. Wait 15-20 seconds for Nova 2 Lite analysis
  11. View severity badge + complaint letter
  12. 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

MethodEndpointDescriptionAuth
POST/api/auth/registerRegister userNo
POST/api/auth/loginLogin get JWTNo
GET/api/auth/meCurrent userYes
POST/api/reportsSubmit report+NovaYes
GET/api/reportsAll reportsNo
GET/api/reports/{id}Single reportNo
GET/api/my-reportsMy reportsYes
DELETE/api/reports/{id}Delete reportYes
GET/api/statsDashboard statsNo
GET/api/leaderboardTop usersNo
POST/api/chatAI agent chatNo
GET/api/searchSearch by areaNo
GET/api/similar/{id}Similar reportsNo
POST/api/voiceVoice transcribeYes
GET/api/clean-zonesClean air zonesNo
POST/api/file-complaint/{id}Nova Act filingYes
GET/healthHealth checkNo

Nova Models

Nova 2 Lite us.amazon.nova-2-lite-v1:0
Nova 2 Sonic amazon.nova-2-sonic-v1:0
Nova Embeddings amazon.nova-2-multimodal-embeddings-v1:0
Nova Act amazon.nova-act-v1:0

๐Ÿค– 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

ToolDescriptionData Source
execute_sql_queryQuery pollution databasePostgreSQL RDS
get_clean_air_zones6 clean zones with AQIStatic + API
get_pollution_hotspotsTop N areas by severityreports table
get_area_statsCount + avg severity for areareports table
get_health_adviceHealth advice by severityBuilt-in logic

Example Conversation

Example Conversation
Which areas in Bengaluru have the worst air pollution this week?
๐Ÿง  Round 1: Reasoning
I need to query the database for high severity reports this week...
execute_sql_query
๐Ÿ“Š Tool Result: execute_sql_query
{
  "results": [
    {"area": "Peenya Industrial Area", "severity": "CRITICAL", "count": 8},
    {"area": "Whitefield", "severity": "HIGH", "count": 5},
    {"area": "Hebbal", "severity": "HIGH", "count": 3}
  ],
  "total": 16
}
๐Ÿง  Round 2: Reasoning
I have the data. Now I'll get health advice for CRITICAL severity...
get_health_advice
๐Ÿ“Š Tool Result: get_health_advice
{
  "severity": "CRITICAL",
  "advice": "Stay indoors. Wear N95 mask if must go out. Avoid all outdoor exercise. Keep windows closed."
}
๐Ÿ‘๏ธ VayuNetra AI

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.

๐Ÿ”ง SQL Query ๐Ÿ’Š Health Advice

๐Ÿ—„๏ธ Database Schema

16 tables with pgvector VECTOR(1024) support for semantic similarity search.

CORE TABLES
users
User authentication and profiles
ColumnTypeDescription
idSERIAL PKAuto increment
usernameVARCHAR(50)Unique username
emailVARCHAR(100)Unique email
password_hashVARCHAR(255)Bcrypt hash
pointsINT DEFAULT 0Gamification points
badge_levelVARCHAR(50)Current badge
report_countINT DEFAULT 0Total reports
account_statusVARCHAR(20)active/suspended
created_atTIMESTAMPRegistration date
reports
Pollution reports submitted by citizens
ColumnTypeDescription
idSERIAL PKPrimary key
user_idINT FKReferences users
photo_urlVARCHAR(500)S3 photo URL
areaVARCHAR(100)Area name
latitudeDECIMAL(10,8)GPS latitude
longitudeDECIMAL(11,8)GPS longitude
descriptionTEXTUser description
complaint_letterTEXTNova generated letter
statusVARCHAR(20)analyzed/pending
created_atTIMESTAMPReport date
analysis_results โญ
Nova 2 Lite AI analysis results with vector embeddings
ColumnTypeDescription
idSERIAL PKPrimary key
report_idINT FKReferences reports
severityVARCHAR(20)HIGH/MODERATE/LOW
pollution_typeVARCHAR(50)Type detected
health_riskTEXTHealth assessment
confidenceDECIMAL(5,2)0.0 to 1.0
descriptionTEXTAI description
recommendationsTEXTAction items
processed_byVARCHAR(200)Nova model ID
image_embeddingVECTOR(1024)Nova embedding
analyzed_atTIMESTAMPAnalysis time
AI TABLES
hotspots
Geographic pollution clusters

id, name, center_latitude, center_longitude, radius_meters, total_reports, average_severity, status (active/resolved), first_reported, last_reported

image_processing_queue
Async Nova AI processing queue

id, report_id, image_url, status (pending/processing/completed/failed), queued_at, processed_at, retry_count, error_message

AUTH TABLES
user_verifications
OTP email verification

id, user_id, email, otp, created_at, expires_at, is_verified, attempts

api_keys
API keys for external integrations

id, api_key, name, permissions (JSON), created_date, expiration_date, active, last_used

ADMIN TABLES
admin_users
Admin panel accounts

id, username, email, password_hash, role (super_admin/admin/moderator), created_at, last_login, active

system_logs
Audit logs for system actions

id, timestamp, agent, action, details, log_level (info/warning/error), related_id, related_table

system_settings
Key-value configuration

id, setting_key (unique), setting_value, data_type, description, updated_at

ANALYTICS & REFERENCE TABLES
dashboard_statistics
Pre-calculated dashboard metrics

id, stat_date, total_reports, critical_count, high_count, areas_covered, trend_direction, last_updated

locations
Bengaluru areas

id, name, district, sub_district, latitude, longitude, population_estimate, area_sqkm

pollution_types
Pollution type classifications

id, name, description, hazard_level, health_impact, icon_url

report_pollution_types
Many-to-many: reports โ†” pollution types

id, report_id, pollution_type_id, confidence_score, percentage

hotspot_reports
Junction: reports linked to hotspots

id, report_id, hotspot_id

clean_zones
Clean air zones in Bengaluru

id, name, aqi, status, latitude, longitude, activities (JSON), updated_at

notifications
User notifications

id, user_id, title, message, type, is_read, created_at

badges
Gamification badges

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;
โšก pgvector Index
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.