StreetCred: Turning Civic Awareness into Action

Inspiration We were inspired by how many New Yorkers notice issues around the city but don’t have an easy or engaging way to report them. We wanted to make civic participation fun in a way that makes something feel like a game rather than a chore. StreetCred gives every New Yorker a way to make their city better by reporting public issues (such as broken hydrants or potholes) while earning badges and leveling up their civic impact.

What We Learned This project deepened our understanding of spatial computing and full-stack architecture. We learned how to use geohashing for efficient location-based queries, integrate Supabase for authentication and storage, and apply Google’s Gemini AI for generating badges and identifying NYC neighborhoods from GPS coordinates. On the frontend, we built an interactive interface using React and Leaflet for dynamic map visualization. We also gained experience connecting a Django backend with modern tools like Folium for map visualization and Django Ninja for API development.

How We Built It We built StreetCred using Django as the backend framework and React for the frontend. Each reported location automatically generates a geohash, enabling fast and efficient proximity searches. We used Leaflet on the frontend for interactive map rendering and Folium on the backend for generating static visualizations. The system uses Supabase for user authentication and image storage, while Gemini AI powers both image generation (for badges) and neighborhood recognition from GPS coordinates. The workflow automates everything from generating custom badges to uploading them to Supabase Storage and linking their metadata to the database.

Challenges One major challenge we faced was managing geospatial accuracy; balancing precision between nearby and exact matches using different geohash lengths. Integrating multiple APIs (Supabase, Gemini AI, Django Ninja) also required careful coordination to handle authentication, async responses, and file uploads smoothly. Debugging these integrations taught us how to structure large Python projects with modular, reusable components.

Built With

Share this project:

Updates