Inspiration

Only 1 in 3 Australians trust their federal government to do the right thing. But OECD research across 30 countries reveals something striking, when citizens feel they actually have a say, trust jumps by 52 percentage points. The problem isn't apathy. People care deeply about the services that shape their daily lives. The problem is that their voices go nowhere. Complaints are scattered across Reddit threads, Facebook groups, and ignored feedback forms. There's no single place where community frustration becomes something a government team can actually act on. We built Polis to fix that.

What it does

Polis is a civic and community dicussion platform that aggregates public frustration and sentiments into high-signal datasets. Citizens post specific issues like transport, local infrastructure, or broken government services. By centralizing these scattered complaints into a single ranked interface, we provide a clear prioritized map of what the community actually needs fixed first.

How we built it

Polis was built on a modern full-stack architecture designed for speed, reliability, and real-time performance under the pressure of a 24-hour hackathon.

Frontend The frontend is built with React and Vite, styled using Tailwind CSS with a dark, high-contrast design system built for clarity and engagement. Framer Motion handles all animations and transitions including the TikTok-style swipe mechanics that drive the core voting experience. Zustand manages global state across the feed, voting system, and leaderboard, while React Query handles all data fetching and real-time cache invalidation.

Backend The backend runs on FastAPI with Python, chosen for its speed, automatic API documentation, and clean async support. PostgreSQL serves as the primary database, managed through SQLAlchemy and Alembic for schema migrations. Authentication is handled via JWT tokens using python-jose and passlib with argon2 password hashing. All media assets and user-uploaded images are stored in Cloudflare R2 for fast, scalable object storage without egress fees.

Infrastructure and Workflow Everything is hosted on Railway, with the PostgreSQL database, FastAPI backend, and React frontend running as three separate services within one project. Every commit pushed to GitHub automatically triggered a build and deploy pipeline, meaning the entire team could push changes and see them live within two minutes. Cursor and VS Code AI assistants were used throughout development to rapidly scaffold features and refactor complex logic, letting the team focus time on prompt engineering and product polish rather than boilerplate.

Challenges we ran into

The hardest challenge wasn't technical, it was designing the line between a useful civic tool and an unmoderated complaint board. Anyone can post anything, and raw frustration rarely translates into actionable insight.

The second challenge was scope. Civic engagement platforms can sprawl infinitely with location tagging, departmental routing, official government responses, moderation systems. Keeping the hackathon build focused on the core loop of post, vote, synthesise, export required constant discipline around what we cut.

Finally, real-time voting creates race conditions. Multiple simultaneous votes on a popular issue can produce inconsistent point tallies without proper database transaction management. PostgreSQL transactions solved this, but it took longer to implement correctly than expected.

Accomplishments that we're proud of

We're proud that Polis feels like a product, not a prototype. The core loop of posting a civic issue, voting on what matters works end to end and tells a coherent story.

Most of all we're proud that the concept is grounded in a real problem with real data behind it. This isn't a solution looking for a problem.

What we learned

Constraint breeds focus. By stripping away non-essential features, we learned that the value of the platform isn't in the complexity of the features, but in the integrity of the data. We also learned that civic tech lives or dies on Trust as a Constraint. Every design choice, from anonymity options to transparent vote counts and clean export formatting, is either a bridge or a barrier to credibility. Good intentions don't scale; credible, disciplined design does.

What's next for Polis

The immediate move is closing the feedback loop so agencies can formally mark issues as "Acknowledged" or "Resolved." Beyond that, we’re looking at Geospatial mapping for infrastructure heatmaps and verified government accounts for direct engagement. Long term, Polis becomes the infrastructure layer for participatory government, the place citizens go to report bugs in society, and the place governments go to find the fix.

Built With

Share this project:

Updates