Inspiration
The inspiration for FixCity came from a simple, yet powerful idea: empowering citizens to actively participate in the improvement of their city. We saw a gap between community members who wanted to report issues like potholes or broken streetlights and the city officials who needed to efficiently manage and resolve them. Our goal was to create a unified platform that not only streamlined this process but also fostered a sense of community by allowing users to share news and events.
What it does
FixCity is a comprehensive city portal designed to connect citizens and local government. The platform provides a suite of features:
Issues Management: Citizens can report issues with detailed descriptions, precise locations using latitude and longitude coordinates, and even attach photos and videos for better context.
Event Sharing: The community can create and view local events, fostering a more connected and vibrant city life.
News Aggregation: The site features an up-to-date news section, thanks to an automated scraper, keeping everyone informed about local happenings.
Admin Dashboard: City administrators have access to a powerful dashboard to monitor, search, and manage all reported issues and events, update their status, and even export data for analysis.
User Profiles: Each user gets a dedicated profile page to track their contributions, including all reported issues and created events.
AI Suggestions: An integrated AI assistant provides actionable suggestions for resolving reported issues, giving city officials a head start on problem-solving.
How we built it
FixCity was built as a modern, asynchronous web application. The backend is powered by FastAPI, a high-performance Python framework that allows us to handle many requests efficiently. For the database, we chose MongoDB with its non-blocking driver, motor, to ensure our data interactions wouldn't slow down the application. We used GridFS for robust and scalable storage of media files like photos and videos.
On the frontend, we used Jinja2 to render dynamic HTML pages and Tailwind CSS for rapid and responsive UI development. A key feature is the use of apscheduler to run a daily background job to scrape and update the news section. For the AI functionality, we integrated with the OpenRouter API to process descriptions and generate intelligent suggestions. The entire project is containerized to make deployment and scaling seamless.
Challenges we ran into
The development journey for FixCity was not without its hurdles. One of the primary challenges was ensuring a seamless, bug-free integration between all our different services. For example, we encountered a few SyntaxError issues that required careful debugging of our try...except blocks and a deep dive into asyncio to ensure correct handling of asynchronous operations.
Another major challenge was correctly passing and handling data between the backend and frontend. The template rendering required us to meticulously match variable names, like ensuring that issue.photo was used instead of an incorrectly named variable. We also had to manage the conversion of raw datetime objects from the database into a format that the Jinja2 template could understand, which was a classic problem of data-type consistency.
Accomplishments that we're proud of
We are most proud of successfully building a fully functional and integrated full-stack application from scratch. The seamless file uploads, the responsive admin dashboard, and the dynamic user profiles are a testament to our ability to combine multiple technologies effectively. The AI feature is a particularly noteworthy accomplishment, demonstrating our ability to integrate machine learning models to provide real-world value. We believe that this feature, in particular, showcases our commitment to using innovative solutions to tackle common problems.
What we learned
Building FixCity was a tremendous learning experience. We gained a deeper understanding of asynchronous programming and how it can significantly improve application performance. The project also taught us the importance of robust error handling and the value of clear data contracts between the backend and frontend. We learned how to use a NoSQL database effectively for a scalable, flexible data schema and how to use a modern utility-first CSS framework to build a beautiful, consistent UI.
What's next for FixCity
Moving forward, we have several exciting plans for FixCity. Our top priority is to enhance the admin dashboard with more powerful data analytics and a real-time notification system to alert officials of new high-priority issues. We also plan to expand the AI's capabilities to include automatic issue categorization and routing. Finally, we envision developing a native mobile application to make reporting issues and engaging with the community even easier for citizens on the go.
Log in or sign up for Devpost to join the conversation.