🏄 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
  • 6 planning categories — Hotels, Flights, Golf, Nightlife, Excursions, and Full Itineraries
  • Budget planner tab — compares 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
  • Source-selectable price tracking — switch each option between Apple, Costco, KAYAK, and other tracked sources
  • Package vs standalone labels — bundled flight+hotel quotes stay distinct from room-only, flight-only, tee-time, table, charter, and excursion prices
  • Decision detail cards — automation-enriched pricing, features, amenities, and tradeoffs appear on each option
  • Guest authentication — bachelor-party voters sign in with their name and the last 4 digits of their phone number
  • 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 options 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. Automation output should cover hotels, flights, golf, nightlife, and excursions, with bookingType and priceBasis separating package quotes from standalone booking prices. When a run includes calculated budgetScenarios or derivedItineraries, the app uses those fresh automation calculations instead of the static seed budget scenarios. Guest access is rostered in seed-data.js and data/votes.json; Jon is marked as groom and Toph as best man. The live automation itself runs from ~/.codex/automations/cabo-price-watch/automation.toml, and its human-readable and machine-readable outputs are written back into this repo under price-watch/latest-report.md and price-watch/history.jsonl.

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, commit/push those changes and refresh the Ubuntu deployment so the hosted app picks up the latest option details, price history, itinerary calculations, and budget scenarios.

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
Description
Cabo Bachelor Party real-time voting app — Node.js/Express + WebSocket, deployable on any homelab host
Readme 3.3 MiB
Languages
HTML 53.7%
JavaScript 43.9%
CSS 2.4%