The challenge
Contact between Irish citizens and their elected representatives ran through email threads, social media replies, and phone calls: channels with no record, no deadline, and no way to prove anything was ever read. Issues went unanswered, nobody could point to what had been promised, and each unanswered message widened the trust gap between communities and the people meant to serve them. Left alone, the drift would keep pulling people out of civic life altogether.
Any fix had to earn trust on both sides at once. Citizens needed certainty that a real, verified representative would actually reply. Representatives needed certainty that the person writing to them was a real constituent, not an anonymous account. And because civic correspondence carries personal circumstances, health, housing, and money among them, all of it had to be handled to a standard that would survive scrutiny.
What we built
We built Constituency end to end: a platform where a citizen submits an issue once and chooses whether it stays private between them and their representative or goes public for the community to see and support. Identity verification sits at the front of both sides, so every case has a real constituent at one end and a verified representative at the other. Messaging is encrypted, petitions are verified rather than open to bulk signing, and cases carry a status the citizen can watch move.
Public cases surface on a national map filtered by county, town, status and category, which turns individual complaints into a visible picture of what a community is dealing with. Around the casework sits the rest of civic life: events and webinars, news, FAQs, and a bilingual interface. The front end is Next.js 15 with React 19, TypeScript and Tailwind CSS 4; the back end is Django 4.2 with Django REST Framework and Django Ninja over PostgreSQL 15 and Redis 7, with Stripe for representative subscriptions, running in Docker behind Nginx on AWS.
The hard part was holding two requirements together that pull in opposite directions. A guaranteed response window means the system has to route, notify and escalate quickly; the sensitivity of the content means every one of those paths has to stay encrypted, access-controlled and auditable. Getting both meant designing the case lifecycle and the permission model as one thing rather than bolting security onto a messaging app, and the result is audited to ISO/IEC 27001.
The result
Constituency guarantees a response within 18 to 24 hours, so a citizen knows when to expect a reply instead of hoping for one. Correspondence moved off email and social media into a structured, auditable system where each case has an owner, a status and a history. Public perception of government responsiveness improved, trust between constituents and their representatives grew, and communities gained a shared, visible record of the issues they are raising and what is being done about them.