- Full Obsidian vault content - Host configs (ice, grizzley, ubuntu, proxmox, truenas, panda, hyte) - Media stack documentation - Traefik HA setup - Automation scripts - Bachelor party planning
2.9 KiB
2.9 KiB
title, type, tags, created, updated, confidence
| title | type | tags | created | updated | confidence | |||
|---|---|---|---|---|---|---|---|---|
| Cabo Vote — Voting App | concept |
|
2026-04-30 | 2026-05-04 | high |
Cabo Vote — Bachelor Party Voting App
Real-time polling app for the Cabo bachelor party. Tracks votes and live prices.
Service Details
| Property | Value |
|---|---|
| Host | ubuntu (192.168.50.61) |
| Container | reccollection-backend-local (Node.js) |
| Port | 3001 |
| URL | cabo-vote.local.tophermayor.com |
| Traefik | ubuntu:8080 → backend:3001 |
| Data dir | /home/bear/RecCollection/data (bind mount) |
| Data file | votes.json |
Data Flow
price-watch/history.jsonl ← scraped prices (two sources)
│ ← manual promotion
seed-data.js ← hardcoded via buildSeedData()
│ ← server restart / reload
votes.json ← app's authoritative data store
│
├──→ server.js ← Express API + WebSocket
│
└──→ cabo-vote.local ← served as static web app
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/categories |
All poll categories |
| GET | /api/options |
All options with votes and prices |
| GET | /api/results |
Aggregated vote counts |
| GET | / |
Static web UI |
Key Files
| File | Purpose |
|---|---|
voting_app/server.js |
Express server, WebSocket, API routes |
voting_app/seed-data.js |
Hardcoded seed prices, buildSeedData() |
voting_app/data/votes.json |
Persisted votes and prices |
voting_app/price-watch/history.jsonl |
Raw scraped price history |
voting_app/price-watch/latest-report.md |
Most recent scrape report |
Price Update Process
- Scrape — Agent (MacBook Codex or grizzley Hermes) scrapes travel sites →
history.jsonl - Promote — Manual step: extract prices from report, edit
buildSeedData()inseed-data.js - Restart — Server reloads:
mergeSeedData()merges new seed with preserved votes →votes.json - Serve — Fresh prices appear in the UI and API
The mergeSeedData() function preserves existing votes when reloading — only the price data from buildSeedData() is refreshed.
Seed Version
Current: v5 (April 29, 2026)
Deployment
The app is not containerized separately — it runs as the reccollection-backend-local container on ubuntu. It was originally a RecCollection app repurposed for the bachelor party.
To check the container:
ssh bear@ubuntu "docker ps | grep reccollection"
To restart (reload prices from votes.json):
ssh bear@ubuntu "docker restart reccollection-backend-local"
Related
- bachelor-party/project
- bachelor-party/data-sources — Two-agent price tracking