Files
Orchestrator/.kiro/specs/jury-voting/requirements.md
2026-06-30 20:37:40 +02:00

193 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Requirements Document
## Introduction
This feature replaces the paper-based jury evaluation process (Bewertungsbogen and Auswertungstabelle) for the **15. UNIKAT Ideenwettbewerb** with a digital, mobile-friendly voting application. A panel of **6 jurors** evaluates **11 teams** via their smartphones during the Prämierungsfeier on **19. Mai 2026, 18 Uhr** at **Science Park Kassel, Universitätsplatz 12** (hosted by Universität Kassel). Results are displayed in real time on a beamer/projector for the audience.
**Scoring system:** 5 equally-weighted criteria, each scored on a 110 scale (configurable). Maximum score per juror per team: 50. Aggregation: simple sum across all jurors, average = total / number of jurors.
**Visual design basis:** Projekt-KIQ-HP (React 19 + Vite) — dark theme (#0a0a0a background), neon green accents (#00FF00), glassmorphism panels, Outfit font, lucide-react icons. Premium event look.
**Tech stack:** React 19 + Vite, react-router-dom, lucide-react icons. NO Supabase — use a lightweight real-time backend (e.g., simple JSON server, or localStorage + polling for MVP since only 6 jurors).
**Reference documents (in repo):**
- `Jury-Voting/Teams/` — folder containing team/project descriptions (11 teams)
- `Jury-Voting/UNIKAT_IDEENWETTBEWERB_2026_Einladung_Prämierungsfeier.pdf` — event invitation
- `Jury-Voting/Bewertungsbogen Jury 2026.doc` — the paper scoring form (5 criteria, 110 scale)
- `Jury-Voting/Auswertungstabelle 2026.xlsx` — the paper results table (simple sum aggregation)
## Glossary
- **Voting_App**: The web application that jurors and the audience interact with
- **Juror**: A registered panel member who submits scores for each team (6 jurors this year: Cielejewski, Finke, Freyer, Knie, Meyer, Trieschmann)
- **Team**: A team/product/concept being evaluated (11 total in the current event)
- **Score**: A numeric rating (110) a juror assigns to a team for a given criterion
- **Criterion**: A dimension on which a team is evaluated (5 criteria: Gesamtidee, Kundennutzen, Markt, Realisierbarkeit, Präsentation)
- **Voting_Session**: A time-bounded event during which jurors submit their scores
- **Results_View**: The projector-optimized page that displays aggregated scores and rankings
- **Admin**: The person who configures the session, manages jurors, and controls the results display
## Concrete Event Data
### Jurors (6)
| # | Name |
|---|------|
| 1 | Cielejewski |
| 2 | Finke |
| 3 | Freyer |
| 4 | Knie |
| 5 | Meyer |
| 6 | Trieschmann |
### Teams (11)
| # | Team Name | Description | Contact |
|---|-----------|-------------|---------|
| 1 | Anima Lektor | Lektor for game language/text | Lukas Fleck |
| 2 | Das Any-Thing | Physical AI automaton that adapts to context | — |
| 3 | Doppelrad-Sortierer | AI-powered seed sorting machine for niche producers | — |
| 4 | DUAL | Fully reversible wood construction system | Nicole Kozlewski, Sebastian Görs |
| 5 | fömo | Funding management platform for social institutions | — |
| 6 | ISOmedi | Compact rechargeable medication case with protective micro-environment | — |
| 7 | Lian's Tempeh Chips | Tempeh-based snack product | Dr. Berlianti Puteri |
| 8 | Lumpen | Sustainable upholstery material from old clothing textiles | — |
| 9 | Mobile Sprinkleranlage | Mobile sprinkler system for fire protection | Björn Knoke |
| 10 | SafeSupply OS | Lightweight supplier risk & audit system for agri-food SMEs | Jesvin Jaksan |
| 11 | Second Nose | Digital smell detection module for smartphones | — |
### Scoring Criteria (5, equally weighted)
| # | Criterion (DE) | Criterion (EN) |
|---|----------------|----------------|
| 1 | Gesamtidee | Overall Idea |
| 2 | Kundennutzen | Customer Benefit |
| 3 | Markt | Market |
| 4 | Realisierbarkeit | Feasibility |
| 5 | Präsentation | Presentation |
**Scale:** 110 per criterion (configurable, default 110)
**Max per juror per team:** 50 points
**Aggregation:** Simple sum. Per-team total = sum of all juror scores. Average = total / 6.
### Presentation Schedule (partial, from Gesamtauswertung)
| Time | Team |
|------|------|
| 15:1015:30 | DUAL |
| 16:1016:30 | fömo |
| 16:3016:50 | Lumpen (inferred) |
| 16:5017:10 | Das Any-Thing |
| 17:1017:30 | Doppelrad-Sortierer |
| 17:4518:05 | Anima Lektor |
| 18:0518:25 | Mobile Sprinkleranlage |
## Requirements
### Requirement 1: Juror Authentication
**User Story:** As a juror, I want a simple way to identify myself when I open the app on my phone, so that my votes are attributed to me without a complex login flow.
#### Acceptance Criteria
1. WHEN a juror opens the Voting_App on a mobile device, THE Voting_App SHALL present a juror selection list showing the 6 registered juror names (Cielejewski, Finke, Freyer, Knie, Meyer, Trieschmann)
2. WHEN a juror selects their name from the list, THE Voting_App SHALL grant access to the voting interface within 3 seconds
3. IF a juror selects a name that is already in use by another active session, THEN THE Voting_App SHALL display a warning and allow override or retry
4. THE Voting_App SHALL support 6 concurrent jurors in a single Voting_Session
### Requirement 2: Mobile-Friendly Voting Interface
**User Story:** As a juror, I want to score each team on my smartphone quickly and intuitively, so that the evaluation process is faster than the paper form.
#### Acceptance Criteria
1. THE Voting_App SHALL render a responsive voting interface optimized for mobile viewports (320px428px width)
2. WHEN a juror navigates to a team, THE Voting_App SHALL display all 5 scoring criteria (Gesamtidee, Kundennutzen, Markt, Realisierbarkeit, Präsentation) with a 110 input for each
3. WHEN a juror selects a score for a criterion, THE Voting_App SHALL persist the score immediately without requiring a separate save action
4. THE Voting_App SHALL display all 11 teams in a navigable list with clear indication of which teams have been scored and which are pending
5. WHILE a juror is scoring a team, THE Voting_App SHALL display the team name and short description
### Requirement 3: Score Persistence and Conflict Handling
**User Story:** As a juror, I want my scores to be saved reliably even if my phone loses connection briefly, so that no votes are lost.
#### Acceptance Criteria
1. WHEN a juror submits a score, THE Voting_App SHALL persist the score to the server within 2 seconds under normal network conditions
2. IF the network connection is lost, THEN THE Voting_App SHALL store scores locally and synchronize them when connectivity is restored
3. WHEN a juror changes a previously submitted score, THE Voting_App SHALL overwrite the previous value with the new score
4. THE Voting_App SHALL prevent a juror from submitting scores for the same criterion on the same team more than once without explicit overwrite intent
### Requirement 4: Real-Time Results Aggregation
**User Story:** As an admin, I want the results to update in real time as jurors submit scores, so that the audience sees a live leaderboard on the projector.
#### Acceptance Criteria
1. WHEN a new score is persisted, THE Voting_App SHALL recalculate the aggregated result for the affected team within 1 second
2. THE Voting_App SHALL calculate a total score per team by summing all juror scores across all 5 criteria (simple sum, max possible = 6 jurors × 5 criteria × 10 points = 300)
3. THE Voting_App SHALL calculate an average score per team (total / number of jurors who have scored)
4. THE Voting_App SHALL rank teams from highest to lowest total score
5. IF two or more teams have the same total score, THEN THE Voting_App SHALL display them with equal rank
### Requirement 5: Beamer/Projector Results Display
**User Story:** As an event organizer, I want a dedicated results page optimized for projection on a large screen, so that the audience can follow the voting live.
#### Acceptance Criteria
1. THE Results_View SHALL be optimized for landscape display at 1920×1080 resolution
2. THE Results_View SHALL use the dark theme (#0a0a0a background) with neon green (#00FF00) accents, glassmorphism panels, and Outfit font for a premium event look
3. WHEN aggregated scores change, THE Results_View SHALL update the displayed rankings within 2 seconds without requiring a page refresh
4. THE Results_View SHALL display each team name, its total score, its average score, and its current rank
5. WHILE a Voting_Session is active, THE Results_View SHALL indicate that voting is in progress
6. WHEN a Voting_Session ends, THE Results_View SHALL display the final rankings with a clear "Final Results" indicator
### Requirement 6: Session Management
**User Story:** As an admin, I want to configure and control the voting session, so that I can set up teams, criteria, and start/stop voting at the right time.
#### Acceptance Criteria
1. THE Voting_App SHALL provide an admin interface to create and configure a Voting_Session
2. WHEN an admin creates a Voting_Session, THE Voting_App SHALL allow configuration of team names and descriptions (pre-populated with the 11 teams for this event)
3. WHEN an admin creates a Voting_Session, THE Voting_App SHALL allow configuration of scoring criteria and their scale (pre-populated with 5 criteria, 110 scale)
4. WHEN an admin starts a Voting_Session, THE Voting_App SHALL enable score submission for all 6 registered jurors
5. WHEN an admin ends a Voting_Session, THE Voting_App SHALL disable further score submission and mark results as final
6. THE Voting_App SHALL allow the admin to register jurors by name (pre-populated with the 6 jurors for this event)
### Requirement 7: Voting Progress Visibility
**User Story:** As an admin, I want to see which jurors have completed their scoring, so that I know when all votes are in and I can close the session.
#### Acceptance Criteria
1. THE Voting_App SHALL display a progress overview showing how many of the 11 teams each juror has fully scored (all 5 criteria submitted)
2. WHEN all 6 jurors have submitted scores for all 11 teams and all 5 criteria, THE Voting_App SHALL indicate that voting is complete
3. THE Voting_App SHALL allow the admin to view individual juror completion status without revealing their specific scores
### Requirement 8: Data Export
**User Story:** As an admin, I want to export the final results, so that I have a digital record comparable to the previous paper-based Auswertungstabelle.
#### Acceptance Criteria
1. WHEN a Voting_Session has ended, THE Voting_App SHALL provide an export of all scores in a tabular format (CSV or XLSX)
2. THE Voting_App SHALL include in the export: team names, juror names, individual scores per criterion (Gesamtidee, Kundennutzen, Markt, Realisierbarkeit, Präsentation), and aggregated totals
3. THE Voting_App SHALL include the final ranking and average scores in the export
4. THE Voting_App SHALL format the export to match the structure of the original Auswertungstabelle (teams as rows, jurors × criteria as columns)
---
## Open Questions (resolved)
| # | Question | Resolution |
|---|----------|------------|
| 1 | Scoring scale | **110 per criterion** (configurable, default 110) |
| 2 | Criteria | **5 criteria:** Gesamtidee, Kundennutzen, Markt, Realisierbarkeit, Präsentation |
| 3 | Weighting | **Equally weighted** — simple sum, no weighting factors |
| 4 | Aggregation | **Simple sum** across all jurors. Average = total / number of jurors |
| 5 | Juror anonymity | **TBD** — not specified in paper documents. Default: scores visible only to admin |
| 6 | Idea metadata | Team name + short description shown to jurors (from Teams/ folder) |
| 7 | Comments | **Not included** — paper form has no free-text field; digital version omits it too |