Date: 2026-05-06 Status: Draft
There is no simple, anonymous, registration-free tool for a group of people to collaboratively vote on a list of names suggested by the participants themselves.
Objective: Deliver a general-purpose website where any visitor can suggest names and vote for a single name, viewing the results in real time, with no login required.
- Anonymous visitor: any person who accesses the site URL, without registration or identification.
- As a visitor, I want to suggest a name so that it appears on the voting list.
- As a visitor, I want to vote for a name on the list to register my preference.
- As a visitor, I want to see how many votes each name has in real time to follow the results.
- As a visitor who has already voted, I want to see the updated scoreboard but not be able to vote again.
| # | Requirement |
|---|---|
| RF01 | The system displays a single global list of names with the vote count for each one. |
| RF02 | Any visitor can suggest a new name through a text field. |
| RF03 | The suggested name appears immediately in the list after submission. |
| RF04 | Each visitor can vote for only 1 name during their entire session/visit. |
| RF05 | After voting, the visitor stays on the same page and continues to see the updated scoreboard. |
| RF06 | After voting, the voting controls are disabled for that visitor (1 vote per person). |
| RF07 | The vote count is updated in real time for all connected visitors. |
| RF08 | The voting has no closing date — it remains open indefinitely. |
| RF09 | There is no moderation: suggested names appear on the list without prior approval. |
| RF10 | The suggestion field accepts a maximum of 50 characters; submissions exceeding this limit are blocked. |
- Hosting: Vercel.
- Frontend: ReactJS with Next.js.
- Backend: Next.js own API Routes (
/api/*) — no separate server. - Persistence: Firebase (Firestore) — votes and names persisted and read via API Routes.
- Single vote control: Implemented via
localStorageor cookie in the browser (no authentication). - Accessibility: Form and buttons with accessible labels (minimum WCAG AA).
- Responsiveness: Functional on desktop and mobile.
- Authentication or account creation.
- Multiple distinct lists/polls.
- Moderation or approval of suggested names.
- Editing or removing names after submission.
- Voting closing date and time.
- Email or push notifications.
- Admin panel.
Visitor accesses the site
→ Sees the list of names + vote count
→ [Option A] Types a name → clicks "Suggest" → name appears on the list
→ [Option B] Clicks "Vote" on a name
→ Vote recorded
→ Scoreboard updated in real time
→ Voting controls disabled for this visitor
| # | Question | Impact |
|---|---|---|
| Q01 | — | |
| Q02 | localStorage or server-side?localStorage is sufficient. |
— |
| Q03 | — | |
| Q04 | — |