Christopher Mayor 3a3ff55893 [#1+#7] Mobile-first redesign + accessibility
- 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
2026-04-28 21:37:46 -07:00

🏄 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
Readme 3.5 MiB
Languages
HTML 53.7%
JavaScript 43.9%
CSS 2.4%