44 lines
2.2 KiB
Markdown
44 lines
2.2 KiB
Markdown
# scout-website
|
|
|
|
Public recruiting site for **Cub Scout Pack 73 and Scouts BSA Troop 73** (Zieglerville / Green Lane, PA).
|
|
Live at **https://greenlanescouts73.org** (NPM proxy → `scout-website` container, port 8132 on arrstack).
|
|
Replaces the `scoutpoc` proof of concept (claude-workspace/stacks/scoutpoc).
|
|
|
|
## Updating the calendar (the part you'll actually do)
|
|
|
|
All dates on the site (home "Next up," both program pages, the Calendar page) render from **one JSON file**, read fresh on every request:
|
|
|
|
```
|
|
/srv/scout-website/data/events.json ← the LIVE file. Edit this.
|
|
app/events.json ← seed only; copied to /data on first boot.
|
|
```
|
|
|
|
Edit the live file on the host (or ask Claude), save, refresh the site. **No rebuild, no redeploy.**
|
|
|
|
Event format (one object per event):
|
|
|
|
```json
|
|
{"date": "2026-10-17", "end": "2026-10-18", "time": "from 4:00 PM",
|
|
"title": "Fall Campout", "location": "Green Lane Park",
|
|
"unit": "both", "badge": "OVERNIGHT"}
|
|
```
|
|
|
|
- `date` required (YYYY-MM-DD). `end` only for multi-day events.
|
|
- `unit`: `"pack"`, `"troop"`, or `"both"` (default pack). Drives the Pack/Troop calendar filter and each page's "Next up."
|
|
- `badge`: optional shouty label (`FALL OPEN HOUSE`, `OVERNIGHT`, `THE BIG ONE`).
|
|
- Past events are hidden from "Next up" automatically; keep or prune them in the file, your call.
|
|
- TeamSnap (team 8198615) stays the source of truth; this file is the public snapshot.
|
|
|
|
To change the **seed** for future rebuilds too, edit `app/events.json` here in Gitea and redeploy the stack.
|
|
|
|
## Layout
|
|
|
|
- `app/app.py` — FastAPI app, all five pages server-rendered (Home, /cubs, /troop, /calendar?unit=, /join). Interest form appends to `/data/leads.jsonl` + pushes ntfy (`NTFY_URL` stack env). `/contact` 301s to `/join`.
|
|
- `app/events.json` — calendar seed (see above).
|
|
- `docker-compose.yml` — Portainer Repository stack definition (port 8131).
|
|
- Images: **not in the repo.** Bind-mounted read-only from `/srv/scout-website-assets/img`. Source photos live on the NAS (`Scouting-Recruitment-Images`, `scouting-comms/pack-73/assets/social`); web-sized copies in `Scouting-Recruitment-Images/_web`.
|
|
|
|
## Leads
|
|
|
|
`/srv/scout-website/data/leads.jsonl` — one JSON line per interest-form submission, plus an ntfy push per lead.
|