Skip to content

Sumasree8/StreetSmartIndia

Repository files navigation

StreetSmart India Logo

StreetSmart India 🇮🇳

Crowdsourced civic-issue reporting for smarter, cleaner cities

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.

Platform Language Backend Min SDK Target SDK License

FeaturesDemoArchitectureTech StackGetting Started


📌 Overview

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.


✨ Features

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.

🎥 Demo

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 /screenshots folder.


🏗 Architecture

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


🧰 Tech Stack

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

🚀 Getting Started

Prerequisites

  • Android Studio (Ladybug or newer)
  • JDK 11
  • A Firebase project & a Cloudinary account

Setup

# 1. Clone the repository
git clone https://github.com/Sumasree8/StreetSmartIndia.git
cd StreetSmartIndia
  1. 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 your google-services.json into the app/ directory.

  2. Configure Cloudinary — Create an unsigned upload preset named streetsmart and update the cloud name in ReportActivity.kt if different.

  3. Build & run

./gradlew assembleDebug      # build
./gradlew installDebug       # install on a connected device/emulator

Or simply open the project in Android Studio and hit ▶ Run.


📂 Project Structure

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

🗺 Roadmap

  • 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

🤝 Contributing

Contributions, issues, and feature requests are welcome! Feel free to open an issue or submit a pull request.

📄 License

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!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages