My Vote
Jury voting — full-screen ballot
Native Android app for jury voting. Built with Kotlin + Jetpack Compose + Room, with a Ktor networking layer (CIO server + WebSocket client) for multi-device. Jury setup, contestant performance entry, juror-by-juror voting (slider + numeric), full-screen ballot with color interpolation between "min vote" and "max vote" (default red → green), performance summary, final ranking revealed one contestant at a time from worst to best. Navigable session history, resume interrupted sessions, customizable range/colors/palettes.
Two modes of use. Single-device mode: one phone passes around between jurors (simple, no network). Multi-device LAN mode: the jury chair starts their phone as host — Ktor WebSocket server on the same Wi-Fi, mDNS registration, QR code generation. Each juror scans the QR from their own phone to join as a client and vote in real time. No more passing the phone, no peeking at others' votes. The host orchestrates the flow (performance switch, moment of ranking reveal) and collects votes synchronously.
Features
- Single-device mode: one phone is passed around
- Multi-device LAN mode: host (Ktor server + WebSocket) + client via QR
- mDNS server discovery on the local network
- QR code for instant juror join
- Real-time vote sync via WebSocket
- Host-orchestrated ranking reveal
- Jury setup: juror count + aliases
- Full-screen ballot with min→max interpolated color
- Progressive ranking (one contestant at a time, worst → best)
- Performance summary (total, average, vote list)
- Navigable session history + resume interrupted sessions
- Customizable range / colors / palette
Configuration
- Mode: single-device | multi-device LAN
- WebSocket server port (default 8765)
- Session name + juror aliases
- Vote range (min / max, default 0–10)
- Min / max vote color (linear interpolation)
- Palette: Default (Violet) / Sunset / Ocean / Forest
- Light / dark / system theme
Technical prerequisites
- Android 8.0+ (API 26)
- ~50 MB storage
- For multi-device mode: 2+ devices on the same Wi-Fi
- For multi-device mode: Wi-Fi state, Camera (for client QR scan) permissions
- In single-device: no special permissions required