Live audio rooms for political networks, first release in 16 weeks

Voter IQ's founder needed party leaders, badge holders, and citizens in Andhra Pradesh talking in one place, with the right permissions, before elections arrived. Generic chat groups couldn't model a political hierarchy. RaftLabs shipped the iOS, Android, and admin products in 16 weeks and load-tested them before anyone claimed a scale number.

to first release, ahead of the election cycle
16 weeks
WebSocket connections reached in internal load tests
~7,854
unanswered issues move up the political hierarchy
Auto-escalation

Short answer

RaftLabs built Voter IQ, a Clubhouse-style live audio app for political networks in Andhra Pradesh, India. The first iOS, Android, and web admin release shipped in 16 weeks, ahead of an election cycle. Internal tests recorded about 7,854 simultaneous WebSocket connections and 347 ms p95 latency at 1,000 concurrent HTTP users.

Engagement

The Voter IQ engagement

Client
Voter IQ, a founder-led civic tech startup in Andhra Pradesh, India
Decision-maker
The founder, somewhat technical, and the person who held the political domain knowledge
What it is
A live audio app where party leaders host discussions, badge holders follow their leaders, and citizens listen, comment, and vote in polls
What we owned
iOS and Android apps, the web super admin panel, the backend, and load testing
Why RaftLabs
Our real-time voice work for PSi, a group deliberation platform
Team
One backend engineer, two mobile engineers across the engagement, one QA engineer, one designer, and a project manager
Engagement model
Fixed-price, delivered in phases
Duration
First release in 16 weeks. Later phases ran the engagement to roughly 1.5 to 2 years

The situation

Political conversation in Andhra Pradesh runs through a hierarchy: MPs, MLAs, constituency leaders, badge-holding party members, and the citizens they represent. Voter IQ's founder wanted that whole structure talking in one app. Leaders would host live audio rooms. Members would follow the right leaders. Citizens would listen, comment, and vote in polls, without getting leader-level access.

WhatsApp groups and public social feeds couldn't do that. They don't know who is an MLA, which constituency someone belongs to, or where a local complaint should go next.

There was also a hard deadline. Elections were coming. If the first phase missed them, the app would have nothing to be used for until the next cycle.

The founder picked RaftLabs because of our real-time voice work for PSi. We shipped the first iOS, Android, and admin release in 16 weeks. Then the founder asked whether it could handle 200,000 people at once. We ran load tests before giving any number, and the answer is on this page.

Voter IQ mobile app for live political discussions and constituency groups in Andhra Pradesh

starting point

From scattered groups to one structured network

The goal was a product that knows the political hierarchy, puts every person in the right place in it, and ships before the election window closes.

Before
  • Political discussion moved through scattered groups and calls, one level at a time
  • Getting the right leaders into a conversation meant manual outreach and reminders
  • Citizens followed politics through fragmented public channels, not their own constituency
  • Generic tools had no idea who was a host, speaker, badge holder, citizen, or admin
  • Local issues had no defined path to the constituency leader, MLA, or MP
  • Nobody had tested how many simultaneous users the product could take
After
  • Live audio rooms with host, co-host, speaker, and listener roles
  • Four user groups with distinct permissions across mobile and web admin
  • Citizens listen, comment, and vote without leader-level access
  • Geographic groups tied to constituencies, with feeds for the sessions and issues that matter to each role
  • Unanswered issues escalate up the hierarchy automatically
  • A tested capacity boundary instead of a guessed one

What discovery changed

  • The hierarchy was the product, not a setting

    We expected roles and permissions to be one module among many. It turned out every feature depended on them: who sees which room, whose feed shows which issue, where a complaint goes next. The founder held that domain knowledge, and our PM spent several rounds getting it out of his head and onto paper before the backend engineer designed a single table.

    The data model then went through more iterations. Once the founder used a working build, he saw gaps the whiteboard version had hidden. We rebuilt parts of the structure to fit what he'd learned.

  • The admin panel had to act for users, not just manage them

    The plan was a minimal super admin panel. Mid-build, the founder explained that many end users wouldn't do the key actions themselves. Someone would do it on their behalf. That turned the admin panel into a second product, with its own flows for acting as a user.

    Our PM's own takeaway: agree visually on the admin panel early, and ask how it will really be used, not just what it should contain.

  • We pushed back on deleting constituencies

    The founder asked for a feature to delete a constituency. On paper it's one button. In the data model, almost everything hangs off a constituency: members, leaders, groups, issues, and escalation paths. Deleting one safely needs careful planning for every record attached to it.

    We moved it to a later phase rather than rush it into the election release. A half-planned delete in a hierarchy like this breaks things silently.

The engineering problems worth reporting

  • Mapping a democratic hierarchy into a data model

    Challenge. The product needed to place every user in the right party and constituency, give them the right powers, and build a feed of upcoming sessions and issues based on their role and geography.

    Approach. We kept network membership, following, discussion roles, and admin authority as separate concepts. The shortcut was one "role" field. That would have let a follow relationship quietly grant organisational access, and it would have made counts disagree across screens.

    Result. Four user groups (mobile admins, badge holders, non-badge-holder citizens, and web super or sub-admins) each got distinct actions. When deleted users were still showing in network totals, we fixed the counting rule in the backend, so mobile and admin views read one definition instead of disagreeing.

  • Issues that climb the hierarchy on their own

    Challenge. A constituency leader raises an issue. It should reach a specific higher-level leader. If that leader doesn't act in time, it shouldn't just sit there.

    Approach. We built a routing and escalation workflow. Each issue is assigned to the next leader up the chain, with a time limit. If it isn't actioned in that window, the system moves it up another level automatically.

    Result. Local problems have a defined path from constituency level toward the MLA and MP, and silence at one level doesn't end the issue.

  • A 10,000-user audio target, and a 200,000-user question

    Challenge. The architecture was designed for up to 10,000 people in one audio session. Then the founder asked whether it could reach 200,000.

    Approach. We didn't answer with a number from a slide. We tested two layers separately. Artillery drove HTTP application traffic, and k6 opened WebSocket connections. Agora handled the audio itself. The app controlled who could host, speak, listen, comment, and vote.

    Result. At 1,000 concurrent HTTP users, all 2,000 requests succeeded at 347 ms p95. At 5,000, only 7,824 of 10,000 succeeded and p95 rose to about 3.1 seconds. That's degradation, not a pass. WebSockets reached about 7,854 simultaneous connections before latency climbed. All of this ran on one AWS EC2 m5a.large, at about $38 a month at the time.

  • An audio join failure that only showed up in production

    Challenge. Users hit Agora's CAN_NOT_GET_GATEWAY_SERVER error in production, reported with an invalid-token message.

    Approach. We compared the generated token with the join parameters. The app was passing a UUID string where the SDK flow we'd implemented expected a numeric UID.

    Result. Switching to a numeric UID fixed the failure. The general lesson is to check the SDK's contract, not just the token, whenever a join fails.

Proof

What we can and can't claim

Every figure below comes from RaftLabs delivery records or internal tests. None of it is live usage.

ResultWhat changedPeriod or contextEvidence and limitation
First release16 weeks to iOS, Android, and web adminAhead of the election cycle the founder was building forRaftLabs delivery record. Both app store listings confirm the app shipped on iOS and Android
HTTP at 1,000 users2,000 of 2,000 requests succeeded, 347 ms p95100-second Artillery scenarioRetained internal test report. One environment, one workload
HTTP at 5,000 users7,824 of 10,000 requests succeeded, about 3.1 s p95Same setup, higher loadRetained internal test report. We report this as degradation, not a pass
WebSocket connectionsAbout 7,854 before latency climbedk6 connection test on one EC2 m5a.large, about $38 a monthRetained internal test report. Not a live user count and not 7,854 simultaneous Agora audio streams
Scale-out path60,000 to 70,000 connections, projectedHorizontal scaling plan in the project recordA projection. It was never tested, so we don't count it as a result
AdoptionLow after launchTracked through the database and Firebase analyticsPM's recollection. We don't hold usage numbers to publish

the build

What we built

Everything in the product hangs off one question: who is this person in the political structure, and what are they allowed to do here?

  1. Live audio rooms with political roles built in

    Leaders host rooms, invite co-hosts, and bring speakers up. Citizens listen, comment, and vote in live polls. Agora carries the audio. The app decides who can do what, based on each person's place in the network.

    Voter IQ live audio room with host, speaker, and listener roles
  2. One React Native codebase for iOS and Android

    With an election date fixed, two native codebases would have doubled the work. React Native let the team share most of the product across both stores and keep platform-specific code where iOS and Android behaved differently. Both Google Play and the App Store list live discussions, issue-based polls, and geographic groups.

    Voter IQ role-controlled mobile experience on iOS and Android
  3. Constituency groups and issue escalation

    Users land in groups tied to their constituency. Their feed shows the sessions and issues that fit their role and location. Issues raised by constituency leaders go to a named higher-level leader and escalate automatically if nobody acts.

    Voter IQ geographic issue routing through the constituency hierarchy
  4. A super admin panel that can act on a user's behalf

    Super and sub-admins manage networks, members, and permissions from the web. Because many users wouldn't do key actions themselves, the panel also lets admins carry those actions out for them.

    Voter IQ web super admin panel for managing political networks

Timeline

How the engagement ran

Before the build

Chosen for the PSi work

The founder had seen our real-time voice platform for PSi. A fixed-price first phase was agreed, sized to land before the election cycle.

  • Discovery

    Learning the political structure

    Several rounds of domain transfer from the founder, led by our PM, then internal working sessions before the backend engineer designed the data model.

  • Weeks 1 to 16

    First release on iOS, Android, and web admin

    Live rooms, roles, constituency groups, polls, comments, issue escalation, and the admin panel. Deleting constituencies was deliberately held back for a later phase.

  • After launch

    Load testing and later phases

    HTTP and WebSocket tests set a measured capacity boundary. Later phases added admin features as the founder's picture of the product sharpened, over roughly 1.5 to 2 years in total.

  • Today

    Engagement closed

    RaftLabs isn't currently working with Voter IQ. Usage after launch stayed low, and we don't hold adoption figures to publish.

The lesson

Test the scale you need, and plan the audience you'll actually get

If you're building a live audio product for a political or member network, the thing most teams miss is that the concurrency number is a question, not a spec. Our founder asked about 200,000 people at once. Tests showed one small server hitting its limit at around 7,854 WebSocket connections. That's the useful answer: a measured boundary, a cost to go further, and no money spent on capacity nobody had shown up for yet. Pick a stack that can scale when audio rooms fill up. Don't pay for the peak before the audience exists.

The second half of the lesson is harder. We shipped before the election, and usage stayed low anyway. A product built for a political moment needs a plan for getting leaders and citizens into it, as serious as the plan for building it. And when a founder holds all the domain knowledge, get written sign-off on each milestone. Scope that lives only in one person's head moves.

How it runs

React Native
An election date left no room for two native builds. One shared codebase shipped iOS and Android in 16 weeks, with platform-specific code where behaviour differed.
Agora
Carried the live audio, so the team built political roles and permissions instead of a media server. The app still owned who could host, speak, and listen.
AWS
One EC2 instance ran the tested setup at about $38 a month, with Lambda for background jobs. That kept costs tied to real demand, not a hypothetical peak.
Firebase
Handled push notifications for upcoming sessions and mobile analytics, outside the main backend.

Common questions

RaftLabs built Voter IQ, a Clubhouse-style live audio app for political networks in Andhra Pradesh, India. Leaders host rooms, badge holders follow their leaders, and citizens listen, comment, and vote in polls. It includes constituency groups, automatic issue escalation up the hierarchy, and a web super admin panel. The first iOS, Android, and admin release shipped in 16 weeks.

Voter IQ's first release took 16 weeks with a small team: one backend engineer, mobile engineers, QA, a designer, and a PM. Live rooms are the quick part when a provider like Agora carries the audio. Roles, permissions, and admin tooling take the time. Our guide to building a social audio app like Clubhouse breaks down the rest.

It depends on the setup, so test it. On one AWS EC2 m5a.large at about $38 a month, Voter IQ reached about 7,854 simultaneous WebSocket connections before latency climbed. HTTP traffic passed cleanly at 1,000 concurrent users and degraded at 5,000. A 60,000 to 70,000 connection scale-out path was planned but never tested.

Keep membership, following, discussion roles, and admin authority as separate concepts. Voter IQ had four user groups, each with its own actions, and a data model built around constituencies. Getting it right took several rounds with the founder before any database design, and more iterations once he used a working build. We shipped it on one React Native codebase for iOS and Android.

A constituency leader raises an issue, and it goes to a specific higher-level leader with a time limit. If that leader doesn't act in time, the system moves it up another level automatically. Issues can't stall silently at one level on their way toward the MLA or MP.

Three things. Get written client sign-off at each milestone, so scope held in the founder's head can't drift. Agree visually on the admin panel early, and ask how it will really be used. And plan how leaders and citizens will find the app with the same care as the build, because usage stayed low after launch.

No. RaftLabs delivered the first release and later phases over roughly 1.5 to 2 years, and the engagement has since closed. If you're building something similar, see our social media app development and real-time application development services.

Work with us

Recognise this problem in your business?

Tell us what's broken. We'll diagnose it and show you exactly what to fix first, before you commit to anything.

  • Scope and cost agreed before work starts. No surprises. No obligation.
  • Working prototype within 3 weeks of kickoff.
  • Pay by milestone. You see progress before each invoice.
  • 60-day post-launch warranty. Bug fixes, UI tweaks, and deployment support. No retainer.
  • All conversations are NDA-protected.