AI project

StreetLight

AI and blockchain civic complaint platform

92% classification accuracy

StreetLight landing page: "See it. Report it. Fix the city together." under a street lamp
  • PyTorch
  • EfficientNet-B3
  • FastAPI
  • Flutter
  • React
  • PostgreSQL
  • Supabase
  • Solidity
  • Ethereum Sepolia
  • Firebase FCM
  • Hugging Face Spaces
  • Docker

The story

Snap a photo of a broken road or overflowing bin. The AI checks it, scores it and sends it to the right city department, and every step is recorded so reports can't quietly vanish.

The hard part
Combining signals that disagree: a report can look valid to the image model and still be a duplicate, spoofed GPS or spam, so the final verdict weighs AI confidence, community votes and user trust (AI×0.4 + Community×0.3 + Trust×0.3) instead of trusting any one of them.

How it’s built

Inside StreetLight

System architecture

  1. STAGE 01

    • Flutter citizen app · Client
      • → FastAPI backend: router, Web3 writer (photo + GPS)
    • React admin portal · Client
      • → FastAPI backend: router, Web3 writer (Kanban workflow)
  2. STAGE 02

    • FastAPI backend: router, Web3 writer · Service
      • → 5-layer AI pipeline (validate + score)
      • → Supabase PostgreSQL
      • → Agentic scheduler: escalate, auto-close (background jobs)
      • → Ethereum Sepolia contract (verified hash)
      • → Firebase FCM alerts (status alerts)
  3. STAGE 03

    • 5-layer AI pipeline · AI
      • → EfficientNet-B3 on Hugging Face Spaces (classify)
    • Agentic scheduler: escalate, auto-close · Service
      • → Supabase PostgreSQL (escalate / close)
    • Ethereum Sepolia contract · External
    • Firebase FCM alerts · External
  4. STAGE 04

    • EfficientNet-B3 on Hugging Face Spaces · AI
    • Supabase PostgreSQL · Data

Engineering decisions

  1. Decision 01

    One score, three opinions

    Final score = AI × 0.4 + Community × 0.3 + Trust × 0.3. No single signal decides alone, so a convincing fake photo still needs the community and the reporter's history to agree.

  2. Decision 02

    Three lanes, not a yes/no

    85 or more auto-verifies, 60 to 84 goes to an officer, under 60 is rejected. Automation handles the clear cases; humans only see the uncertain ones.

  3. Decision 03

    Privacy-first blockchain

    Only SHA-256 image hashes and Keccak location hashes go on-chain. The ledger proves nothing was altered without ever storing a photo, coordinate or name.

  4. Decision 04

    Model as its own service

    EfficientNet-B3 runs in its own Docker container on Hugging Face Spaces, so the model can be retrained and redeployed without touching the FastAPI backend.

  5. Decision 05

    Nothing silently stalls

    Agentic background jobs escalate reports that stop moving and auto-close confirmed fixes, so a complaint can't just disappear in a queue.