Snap it. Tag it. Track it. — Empowering citizens to report potholes, garbage, water leaks, and broken streetlights, and to follow each issue from Pending → Resolved in real time.
Features • Demo • Architecture • Tech Stack • Getting Started
StreetSmart India is a native Android application that turns every citizen into a sensor for their city. Users capture a civic problem with a single photo, the app automatically attaches their GPS location and an issue category, and the report is published to a shared community feed backed by Cloud Firestore.
The community then upvotes the issues that matter most, while administrators update their resolution status and notify reporters via push notifications and email — closing the loop between citizens and the authorities meant to serve them.
Built end-to-end as a full-stack mobile project: authentication, media capture, cloud image hosting, real-time database, transactional voting, and push messaging.
| Feature | Description | |
|---|---|---|
| 🔐 | Email Authentication | Secure sign-up & login powered by Firebase Authentication, with email validation and persistent sessions. |
| 📷 | Photo Capture & Upload | Report issues using the device camera or gallery, with images hosted on Cloudinary via a multipart OkHttp upload. |
| 📍 | Automatic Geo-tagging | Fetches high-accuracy GPS coordinates (Fused Location Provider) and gracefully prompts the user to enable location services. |
| 🏷️ | Category Tagging & Filtering | Classify reports as Pothole, Garbage, Water Leak, Streetlight, or Other — and filter the feed by category. |
| 👍 | Community Voting | Transactional, one-vote-per-user upvote/downvote system to surface the most pressing issues — built with Firestore transactions to prevent race conditions. |
| 📊 | Status Tracking | Every report moves through Pending → Resolved → Rejected, with admin-driven status updates. |
| 🔔 | Push Notifications | Real-time alerts via Firebase Cloud Messaging (FCM) when report status changes. |
| 📧 | Email Reporting | Forward report details to the relevant authority directly from the app. |
| 👤 | Profile Management | View and edit account details with live Firestore sync. |
| 🔄 | Pull-to-Refresh Feed | Swipe-to-refresh community feed with a clean RecyclerView + Glide image pipeline. |
A full walkthrough video (StreetSmartDemo.mp4) and pitch deck (StreetsmartIndia.pptx) are included in the repository root.
💡 Tip: For maximum impact, upload the demo to YouTube and embed the thumbnail here, and add 3–4 screenshots of the Login, Report, and Feed screens in a
/screenshotsfolder.
StreetSmart India follows an MVVM-inspired structure, separating UI, view-model, and data concerns, with Firebase as the serverless backend.
┌──────────────────────────────────────────────────────────────┐
│ Presentation │
│ Activities (Login · Signup · Home · Report · Detail) │
│ Fragments (Home · Reports · Profile) + RecyclerView │
└───────────────┬──────────────────────────────────────────────┘
│ observes
┌───────────────▼──────────────────────────────────────────────┐
│ ViewModel Layer │
│ LocationViewModel (LiveData<location>) │
└───────────────┬──────────────────────────────────────────────┘
│
┌───────────────▼──────────────────────────────────────────────┐
│ Data / Cloud │
│ Firebase Auth · Cloud Firestore · FCM │
│ Cloudinary (image CDN) · Fused Location Provider │
└──────────────────────────────────────────────────────────────┘
Data flow for a new report:
Capture photo → upload to Cloudinary → receive secure URL → write Report{description, category, location, imageUrl, votes, status} to Firestore → broadcast to community feed
Language & Core
- Kotlin · Android SDK 35 (min SDK 23)
- Android Views (XML) + Jetpack Compose (Material 3) hybrid UI
- AndroidX · Lifecycle · ViewModel · LiveData
Backend & Cloud
- Firebase Authentication
- Cloud Firestore (NoSQL real-time DB)
- Firebase Cloud Messaging (push notifications)
- Cloudinary (image hosting / CDN)
- Google Play Services — Fused Location Provider
Libraries
- Glide — image loading & caching
- OkHttp / Retrofit — networking
- SwipeRefreshLayout — pull-to-refresh
- Material Components
Build
- Gradle (Kotlin DSL) with version catalogs · KAPT
- Android Studio (Ladybug or newer)
- JDK 11
- A Firebase project & a Cloudinary account
# 1. Clone the repository
git clone https://github.com/Sumasree8/StreetSmartIndia.git
cd StreetSmartIndia-
Configure Firebase — Create a project in the Firebase Console, add an Android app with package name
com.example.streetsmart, enable Email/Password Authentication, Firestore, and Cloud Messaging, then drop yourgoogle-services.jsoninto theapp/directory. -
Configure Cloudinary — Create an unsigned upload preset named
streetsmartand update the cloud name inReportActivity.ktif different. -
Build & run
./gradlew assembleDebug # build
./gradlew installDebug # install on a connected device/emulatorOr simply open the project in Android Studio and hit ▶ Run.
app/src/main/java/com/example/streetsmart/
├── LoginActivity.kt # Firebase email auth
├── SignupActivity.kt
├── HomeActivity.kt # Bottom-nav host (Home · Reports · Profile)
├── HomeFragment.kt # Community feed
├── ReportsFragment.kt # User's own reports
├── ProfileFragment.kt # Account management
├── ReportActivity.kt # Capture photo + location + submit
├── ReportDetailActivity.kt # Full report view
├── Reportadapter.kt # RecyclerView + transactional voting
├── Report.kt # Data model
├── LocationViewModel.kt # GPS via Fused Location Provider
├── FileUtil.kt / ReportStorage.kt
└── ui/theme/ # Compose Material 3 theming
- Interactive map view of nearby reports (Google Maps SDK)
- Role-based admin dashboard for municipal authorities
- Offline-first caching with Room
- Multi-language support (regional Indian languages)
- Analytics dashboard for civic-issue hotspots
Contributions, issues, and feature requests are welcome! Feel free to open an issue or submit a pull request.
Distributed under the MIT License. See LICENSE for details.
Built with ❤️ to make Indian streets smarter, one report at a time.
⭐ If you find this project useful, consider starring the repo!