sam-4screen-desktop 2026-10-27:14:51:30

This commit is contained in:
2026-10-27 14:51:30 +11:00
parent 648c0cf715
commit b4caf1b5e3
2 changed files with 36 additions and 11 deletions

View File

@@ -10,10 +10,11 @@ proposed_tags:
- go - go
- htmx - htmx
- basketball - basketball
- team
- showcase - showcase
confidence: 0.69 confidence: 0.61
approved: false approved: false
proposed_for: 97b2f145f8be proposed_for: 3388e05ba083
created: "2026-10-27" created: "2026-10-27"
tags: tags:
- project - project
@@ -28,6 +29,8 @@ skills:
- WhatsApp automation - WhatsApp automation
- Caddy reverse proxy and basic auth - Caddy reverse proxy and basic auth
- systemd user services - systemd user services
- n8n scheduling and alerting
- Apprise notifications
tools: tools:
- Go 1.26 - Go 1.26
- HTMX 2 - HTMX 2
@@ -36,7 +39,9 @@ tools:
- Baileys - Baileys
- Caddy - Caddy
- PlayHQ API - PlayHQ API
- n8n
- Apprise - Apprise
- ntfy
--- ---
# Basketball Team Manager — Overview # Basketball Team Manager — Overview
@@ -45,15 +50,15 @@ tools:
A parent volunteers to run the score sheet roster for an under-18 basketball team. Eight families take turns. One parent fills in the paper score sheet at each game. A parent volunteers to run the score sheet roster for an under-18 basketball team. Eight families take turns. One parent fills in the paper score sheet at each game.
This project does the bookkeeping. It keeps the season fixtures, works out whose turn it is, and writes the messages that go into the team WhatsApp group. It shows the same information on a small private website, so any parent can check the roster from a phone. This project does the bookkeeping. It keeps the season fixtures, works out whose turn it is, and writes the messages for the team WhatsApp group. A small private website shows the same information, so any parent can check the roster from a phone.
The club does not publish a usable fixture feed for parents. PlayHQ holds the data, so the project reads it from the PlayHQ API and fills in the time, venue and opponent. The volunteer does not retype anything. The club publishes no usable fixture feed for parents. PlayHQ holds the data, so the project reads the PlayHQ API and fills in the time, venue and opponent. The volunteer types nothing twice.
## 🌟 Key Highlights (Portfolio & Employment) ## 🌟 Key Highlights (Portfolio & Employment)
- **Concept**: A small service that turns a weekly volunteer chore into an automatic roster, plus a published web page and group messages. - **Concept**: A small service that turns a weekly volunteer chore into an automatic roster, a web page and group messages.
- **Tools & Skills Showcase**: One Go binary with HTMX and no build step. Python owns the rules and the Go layer only renders. The PlayHQ GraphQL endpoint was found from the public site bundle. WhatsApp posting uses a linked-device client behind a small HTTP bridge, so other tools can post through it. Deployed behind Caddy with basic auth and systemd user units. - **Tools & Skills Showcase**: One Go binary with HTMX, no build step. Python owns the rules and Go only renders, so the site, the CSV and the messages cannot disagree. The PlayHQ GraphQL endpoint was found by reading the public site bundle and needed a `tenant` header. WhatsApp posting uses a linked-device client behind a small HTTP bridge. n8n runs the weekly schedule and alerts by email and phone through Apprise when a run fails.
- **Practical value**: The roster, the messages and the website cannot disagree, because one Python module builds all three. A swap between parents is recorded once, and the roster moves the people automatically. - **Practical value**: The volunteer records one line after a game. The roster, the weekly messages and the alerts follow. Swaps between parents correct themselves.
## 📐 Architecture & Flow ## 📐 Architecture & Flow
@@ -64,21 +69,38 @@ flowchart LR
Site --> Plan[tools/plan.py] Site --> Plan[tools/plan.py]
Plan --> Data[(data JSON files)] Plan --> Data[(data JSON files)]
Site -->|record result| Data Site -->|record result| Data
Site -. copy draft .-> Bridge[WhatsApp bridge .13:8421] Site -->|POST /send| Bridge[wa-bridge .13:8421]
Bridge --> Group[Team WhatsApp group] Bridge --> Group[WhatsApp group CW U18 B10]
Apprise[Apprise or cron] --> Bridge N8N[n8n on .13] --> Site
N8N -->|failure alert| Apprise[Apprise .35:8210]
Apprise --> Email[samuelrolfe@gmail.com]
Apprise --> Ntfy[ntfy topic btm-alerts]
PlayHQ[PlayHQ API] --> Fetch[tools/fetch_fixtures.py] PlayHQ[PlayHQ API] --> Fetch[tools/fetch_fixtures.py]
Fetch --> Data Fetch --> Data
EDJBA[EDJBA season dates] --> Data EDJBA[EDJBA season dates] --> Data
``` ```
## 🗓 The week
| When | What |
|---|---|
| Thursday 3pm | Training reminder. Names the next game's timekeeper so parents can swap. |
| Friday 9am | Refresh fixtures from PlayHQ. |
| Friday 9:05am | Game details with map link, arrival time and scorer. |
| Friday 4pm | Post again only if the message changed. |
| Holiday Thursday | "No training tonight", with the date training resumes. |
| Friday, no game | "No game this weekend", with the next round named. |
Training is Thursday 7:45pm to 8:45pm at Bundha Sports Centre, 111 Queens Parade, Fitzroy North. No training in school holidays.
## 🔗 Related Notes & Links ## 🔗 Related Notes & Links
- Live site: https://basketball.lab.audasmedia.com.au (basic auth, user `sam`) - Live site: https://basketball.lab.audasmedia.com.au (basic auth, user `sam`)
- WhatsApp bridge: https://wa.lab.audasmedia.com.au - WhatsApp bridge: https://wa.lab.audasmedia.com.au
- Interactive map: [Archify map](https://maps.lab.audasmedia.com.au/basketball_team_manager/docs/) - Interactive map: [Archify map](https://maps.lab.audasmedia.com.au/basketball_team_manager/docs/)
- Gitea repo: https://gitea.lab.audasmedia.com.au/sam/basketball-team-manager (private) - Gitea repo: https://gitea.lab.audasmedia.com.au/sam/basketball-team-manager (private)
- Deploy notes: `DEPLOY.md`. Weekly schedule: `ROUTINES.md`. - Alerts: ntfy topic `btm-alerts` at https://ntfy.lab.audasmedia.com.au/btm-alerts, plus email
- Project files: `DEPLOY.md` (hosting), `ROUTINES.md` (the week), `README.md` (how it works)
- AI context (Outline): not created yet - AI context (Outline): not created yet
<!-- <!--

View File

@@ -20129,3 +20129,6 @@ What the watcher did, newest last.
### 2026-10-27 13:12:12 ### 2026-10-27 13:12:12
- **re-proposing** `Basketball Team Manager.md` — you edited it - **re-proposing** `Basketball Team Manager.md` — you edited it
- **proposed** `Basketball Team Manager.md` → `200 projects/Tools Software WebUI` (folder already set — kept) (confidence 0.69) - **proposed** `Basketball Team Manager.md` → `200 projects/Tools Software WebUI` (folder already set — kept) (confidence 0.69)
### 2026-10-27 14:51:25
- **proposed** `Basketball Team Manager.md` → `200 projects/Tools Software WebUI` (confidence 0.61)