Inspiration

Community meetings often invite everyone but still hear from only a few people. Fast speakers, repeated themes, and limited time can push quieter concerns out of the decision—even when those concerns affect safety or accessibility. We wanted a tool that improves participation without collecting names, recording voices, or hiding the order behind a black-box model.

What it does

FairTurn turns anonymous concerns into a transparent facilitation workflow:

  1. Collect a concern under a shared theme.
  2. Score it with three visible factors: urgency, people affected, and how under-heard the theme is.
  3. Build a speaking queue that avoids repeating the same theme when another voice is available.
  4. Let the facilitator inspect, reorder, and lock the queue.
  5. Edit and commit a human-written decision, then export a Markdown brief.

The live Voice balance indicator changes as the queue changes. Every score and reason stays visible, so the tool supports a meeting rather than deciding for it.

How we built it

FairTurn is a responsive React 19 and TypeScript application built with Vite. The fairness engine is a standalone deterministic module. It combines urgency (45%), people affected (35%), and under-heard representation (20%), then applies a theme-diversity pass to the ranked queue. Vitest covers weights, explanations, diversity, edge cases, balance scoring, and immutable reordering.

The product is local-first: no account, backend, analytics SDK, recording, personal identifier, or model API is required. The UI uses semantic landmarks, keyboard-operable rows, visible focus states, reduced-motion support, responsive stacking, and high-contrast feedback. GitHub Actions tests and builds every deployment.

Challenges we ran into

The main challenge was making fairness legible. A single score would be easy to build but hard to trust. We separated the engine into a documented weighted score and a visible theme-diversity rule, then exposed the exact factors next to the selected voice. We also had to preserve a dense three-column facilitation workspace on mobile without turning it into a pile of unrelated cards.

Accomplishments that we're proud of

  • A complete add → rebalance → inspect → lock → commit → export workflow.
  • No hidden ranking inputs and no automated final decision.
  • Eight passing unit tests plus a successful production build.
  • No known production dependency vulnerabilities.
  • Desktop and mobile layouts with no page-level horizontal overflow.
  • A public, reproducible repository and automated HTTPS deployment.

What we learned

Explainability is strongest when it is part of the interaction, not a paragraph in documentation. Showing why a voice moved, and letting a facilitator override that move, made the system feel more useful and more accountable. We also learned that privacy can simplify product architecture: anonymity and local execution remove an entire class of identity and recording risks.

What's next for FairTurn

Next we would add facilitator-defined factor weights, multilingual plain-language prompts, an offline room-sharing mode, and a signed decision-history export. We would also run moderated sessions with student councils and neighborhood groups to test whether the queue improves participation without slowing down the meeting.

Built With

Share this project:

Updates