Files
cabo-voting-app/README.md
2026-04-30 11:07:26 -07:00

2.0 KiB

🏄 Cabo Bachelor Party Voting App

Real-time group voting for the bachelor party — hotels, golf, nightlife, excursions, and full itineraries.

Quick Start

cd cabo-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
  • Budget planner tab — quick compare for 8, 10, and 12 guys across Budget, Balanced, and Splurge tracks
  • Price trend graphs — each option shows a live line graph from price-watch automation runs
  • Decision detail cards — automation-enriched pricing, features, amenities, and tradeoffs appear on each option
  • 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. System seed data auto-refreshes researched package options and budget scenarios while preserving existing votes and user-added options. Price-watch automation runs append time-series snapshots in price-watch/history.jsonl, which the app turns into per-option trend lines and decision detail cards.

For hosted deployments, set DATA_DIR or DATA_FILE so mutable vote data lives outside the Git checkout. When price-watch automation updates tracked data files in the repository, refresh the Ubuntu deployment so the hosted app picks up the latest option details and price history.

Deployment

The app can run directly under systemd with:

PORT=3021 DATA_DIR=/srv/state/cabo-voting node server.js

Traefik can then reverse proxy to the chosen host port.

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