(Please view in mobile view)
A community-driven safety map that helps you discover nearby hazards, report issues, and make informed travel decisions in real time.
Vazhikaatti (Malayalam for "one who shows the way") is a community-powered public safety web platform that allows users to view real-time safety alerts around them, report local hazards, and plan safer routes based on crowd-sourced data. It acts as a live hyperlocal safety layer on top of city maps.
In cities, people face everyday risks β stray dogs, poor lighting, flooded roads, potholes β that are rarely reported officially in real time. Vazhikaatti bridges the gap between hazard occurrence and public awareness by turning every citizen into a safety contributor.
Think: Google Maps + Community Safety Alerts, focused purely on hyperlocal hazards and civic safety.
- πΊοΈ Live Hazard Map β Interactive map powered by Leaflet.js and OpenStreetMap showing community-reported hazard markers in real time
- π Report an Issue β Submit hazard reports with photo, description, category, severity, and GPS location
- π§ Journey Mode β Plan routes from point A to B and see hazard markers along your path via OpenRouteService API
- πΌοΈ AI Image Validation β CLIP model (OpenAI) used for intelligent image validation of uploaded hazard photos
- βοΈ My Reports β View, edit, and delete your own submitted reports with a swipeable card interface
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (TypeScript) |
| Backend | FastAPI (Python) |
| AI / ML | CLIP Model (OpenAI) |
| Map Rendering | Leaflet.js |
| Map Data | OpenStreetMap |
| Routing | OpenRouteService API |
| Auth | Google OAuth |
| Deployment | Vercel (frontend), Render (backend) |
πΉ Watch Demo Video
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND β Next.js 14 (TypeScript) β
β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββββββββ β
β β Map View β β Report Form β β Journey Mode β β
β β (Leaflet.js)β β (image + β β (Route Planning UI) β β
β β β β metadata) β β β β
β ββββββββ¬βββββββ ββββββββ¬ββββββββ ββββββββββββ¬βββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββββββββ β
β βOpenStreetMapβ β Supabase β β OpenRouteService API β β
β β (Map Tiles) β β JS Client β β (Fetch 3 routes, β β
β β β β β β walking directions) β β
β βββββββββββββββ ββββββββ¬ββββββββ βββββββββββββββββββββββββ β
β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ
β (Auth + DB reads + Image upload)
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SUPABASE β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββ β
β β Auth β β Database β β Storage β β
β β (Google β β (Reports β β (Hazard images β β
β β OAuth) β β + Users) β β uploaded by users)β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
(Image URL sent to backend for validation)
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND β FastAPI (Python) β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CLIP Model (OpenAI) β β
β β β β
β β β’ Receives image URL from frontend β β
β β β’ Validates image matches reported category β β
β β e.g. "stray dog" photo <-> "Stray Dogs" category β β
β β β’ Returns validation result -> frontend proceeds/rejects β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User submits report
β
ββ 1 βββΆ Image uploaded to Supabase Storage (frontend)
β
ββ 2 βββΆ Image URL + category sent to FastAPI (frontend β backend)
β βββΆ CLIP model validates image matches category
β βββΆ Returns: { valid: true / false }
β
ββ 3 βββΆ If valid β report saved to Supabase DB (frontend)
β
ββ 4 βββΆ Map refreshes with new hazard marker (Leaflet.js)
- Node.js 18+
- Python 3.10+
- pip
# Clone the repository
git clone https://github.com/bonitoflakesorg/vazhikaatti.git
cd vazhikaatti/client
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env.local
# Add your keys to .env.local:
# NEXT_PUBLIC_API_URL=http://localhost:8000
# NEXT_PUBLIC_ORS_API_KEY=your_openrouteservice_key
# NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_id
# Start the development server
npm run devcd vazhikaatti/server
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
# Set up environment variables
cp .env.example .env
# Add your keys to .env:
# DATABASE_URL=your_db_url
# GOOGLE_CLIENT_ID=your_google_client_id
# GOOGLE_CLIENT_SECRET=your_google_client_secret
# Start the backend server
uvicorn app.main:app --reload# Frontend
cd client && npm run dev # http://localhost:3000
# Backend
cd server && uvicorn app.main:app --reload # http://localhost:8000
# API Docs (auto-generated by FastAPI)
# http://localhost:8000/docs| Name | Role | College |
|---|---|---|
| Mehrin Fathima Shamim | Backend (FastAPI) + Auth | Government Model Engineering College, Thrikkakara |
| Diya Jojo | Frontend (Next.js) + Map Integration | Government Model Engineering College, Thrikkakara |
Daily commuters, students, women traveling alone, delivery drivers, elderly citizens, and urban residents who want safer, more informed travel.
- AI-based hazard clustering and heatmaps
- SMS alert system for high-severity zones
- Government / NGO dashboard integration
- Verified report badges
- Predictive risk zones using historical data
This project is licensed under the MIT License.
Made with β€οΈ at TinkerHub β Tink-Her-Hack 4.0