All projects

Survey & voting platform

Ballot

A survey and voting platform for creating guided question workflows, sharing room codes, collecting anonymous responses, and exporting results for review.

Solo: fullstackWeb App9 tools
ballot-self.vercel.app
Ballot dashboard with recent surveys, participation metrics, and create survey action

01 · The problem

A quick poll or survey usually forces respondents to sign up first, and branching questions ("if yes, ask this next") are awkward to build in simple form tools.

02 · What I built

  1. 01Built a drag-and-drop workflow builder where each question is a node and answers decide the next node.
  2. 02Supported 7 question types: short text, long text, number, rating, yes/no, single choice, and multiple choice.
  3. 03Let participants join anonymously with a room code, with progress saving and duplicate-submission protection.
  4. 04Added scheduled surveys, live voting sessions, and a results dashboard with Excel, CSV, and JSON export.
Room code entryWorkflow builderAnonymous responsesScheduled surveysLive votingResult export

03 · Decisions & trade-offs

A survey is a graph, not a list

Modelling questions as connected nodes makes branches visible, and the builder can validate the whole flow before it's published.

Anonymous, but one response each

Nobody needs an account to answer, but duplicate submissions are blocked so the results can be trusted.

04 · Screens

Ballot workflow builder with question library, connected question nodes, and configuration panel
Ballot workflow builder with question library, connected question nodes, and configuration panel
Ballot login screen with split editorial layout and Vietnamese welcome copy
Ballot login screen with split editorial layout and Vietnamese welcome copy
Ballot participant screen for entering a survey room code
Ballot participant screen for entering a survey room code
Ballot create survey form with schedule and live voting options
Ballot create survey form with schedule and live voting options
Ballot survey results dashboard with completion analytics and export buttons
Ballot survey results dashboard with completion analytics and export buttons

05 · Result

What changed

  • Live demo at ballot-self.vercel.app.
  • Organisers go from draft to a shareable room code, and respondents never have to create an account.

Stack

Next.js 15React 19TypeScriptPrismaPostgreSQLRedisVitestpnpm WorkspaceDocker Compose

Next case study

Notion Clone Realtime note workspace

Ballot case study | Bui Thuy Ngoc