3a3ff55893cf3c762f657ed586f2b4c22acf396f
- Bottom tab bar on mobile (≤640px), top tabs on desktop - Name modal → bottom sheet on mobile with drag handle - Larger tap targets (72px cards, 44px touch areas) - Arrow hint (›) on clickable option cards - Touch feedback with :active scale animation - ARIA roles: tablist/tab/tabpanel, aria-selected, aria-live=polite - Keyboard: Arrow keys navigate tabs, 1-5 number keys switch tabs - Skip-to-content link for screen readers - Visible :focus-visible ring - Desktop body padding reset for bottom tabs
🏄 Cabo Bachelor Party Voting App
Real-time group voting for the bachelor party — hotels, golf, nightlife, excursions, and full itineraries.
Quick Start
cd voting_app
npm install
node server.js
# → http://localhost:3001
Features
- Real-time WebSocket voting — all clients update instantly
- 5 categories — Hotels, Golf, Nightlife, Excursions, Full Itineraries
- Add suggestions — anyone can propose new venues
- Admin approval — pending options require approval before going live
- Responsive — works on desktop and mobile
Data
Votes are stored in data/votes.json (created on first run). Edit directly or use the admin panel.
Deployment
Deployed on ice:3001 via Node.js directly (not Docker). Routed through Traefik on ubuntu via cabo-voting.yml.
See Gitea Issues for the UI/UX roadmap.
Tech Stack
- Node.js + Express
- WebSocket (ws)
- Vanilla JS frontend (no framework)
- No database — JSON file persistence
Description
Cabo Bachelor Party real-time voting app — Node.js/Express + WebSocket, deployable on any homelab host
Languages
HTML
53.7%
JavaScript
43.9%
CSS
2.4%