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

User Layer
📱 Flutter Mobile App
API Layer
⚡ FastAPI on AWS Lightsail
AWS AI Services
🤖 Nova 2 Lite 🎙️ Nova 2 Sonic 🔍 Nova Embeddings 🤖 Nova Act
Storage & Database
☁️ Amazon S3 🗄️ PostgreSQL + pgvector

🤖 AI Agent Multi-Round Tool Calling

UserFastAPINova 2 LiteToolsDBResponse
POST /api/chat →
Initial prompt + 5 tools →
Round 1: I need pollution data
execute_sql_query →
SELECT reports... →
{data, count} ←
Round 2: Formulating response
Final answer + tools_used → User

📸 AI-Powered Image Analysis

📷 Take Photo
POST /api/reports — FastAPI
☁️ Upload to Amazon S3
🤖 Nova 2 Lite Analysis
• pollution_type: VEHICLE_EMISSION
• severity: HIGH
• health_risk: MODERATE
• confidence: 0.95
📄 Generate Complaint Letter — Nova 2 Lite
🔍 Nova Embeddings → VECTOR(1024)
🗄️ Save to PostgreSQL
✅ Return to Mobile App

🤖 Nova Act — Complaint Filing

Report Submitted Generate Letter Nova Act Activated Navigate KSPCB Portal Fill & Submit Form ✅ 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-Backend

📱 Mobile App Overview

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

Which areas have critical pollution today?
Round 1: I'll query the database for today's critical reports... execute_sql_query
Based on today's reports, Whitefield Industrial Area shows CRITICAL levels with 5 reports in the last 24 hours... SQL Query Hotspots

🗄️ Database Schema

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

users

id | email | username | points | badge_level | report_count | created_at

reports

id | user_id | photo_url | area | latitude | longitude | status | complaint_letter | created_at

analysis_results ⭐

id | report_id | severity | pollution_type | health_risk | confidence | description | image_embedding VECTOR(1024)

Semantic Similarity Search

Every report photo generates a VECTOR(1024) embedding via Nova Multimodal Embeddings stored in PostgreSQL with pgvector extension.

-- Find similar pollution reports
SELECT r.area, r.photo_url,
  ar.severity, ar.pollution_type,
  1 - (ar.image_embedding <=> $1::vector) AS similarity
FROM reports r
JOIN analysis_results ar ON r.id = ar.report_id
ORDER BY similarity DESC
LIMIT 5;