125 lines
4.7 KiB
Markdown
125 lines
4.7 KiB
Markdown
---
|
|
title: Basketball Team Manager
|
|
type: note
|
|
status: active
|
|
proposed_folder: 200 projects/Tools Software WebUI
|
|
proposed_toc: "100 Table of Contents/Projects.md → Tools & Software"
|
|
proposed_tags:
|
|
- project
|
|
- architecture
|
|
- go
|
|
- htmx
|
|
- basketball
|
|
- team
|
|
- showcase
|
|
confidence: 0.55
|
|
approved: false
|
|
proposed_for: d0b4eefd4b16
|
|
created: "2026-10-27"
|
|
tags:
|
|
- project
|
|
- basketball
|
|
- showcase
|
|
aliases: []
|
|
skills:
|
|
- Go web service
|
|
- HTMX
|
|
- Python data tooling
|
|
- GraphQL API reverse engineering
|
|
- WhatsApp automation
|
|
- Caddy reverse proxy and basic auth
|
|
- systemd user services
|
|
- n8n scheduling and alerting
|
|
- Apprise notifications
|
|
tools:
|
|
- Go 1.26
|
|
- HTMX 2
|
|
- Python 3
|
|
- Node.js
|
|
- Baileys
|
|
- Caddy
|
|
- PlayHQ API
|
|
- n8n
|
|
- Apprise
|
|
- ntfy
|
|
---
|
|
|
|
# Basketball Team Manager — Overview
|
|
|
|
## 💡 What is this project?
|
|
|
|
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 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 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)
|
|
|
|
- **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, 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 volunteer records one line after a game. The roster, the weekly messages and the alerts follow. Swaps between parents correct themselves.
|
|
|
|
## 📐 Architecture & Flow
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
Phone[Parent on phone] --> Caddy[Caddy .35 - basic auth]
|
|
Caddy --> Site[Go + HTMX site .13:8420]
|
|
Site --> Plan[tools/plan.py]
|
|
Plan --> Data[(data JSON files)]
|
|
Site -->|record result| Data
|
|
Site -->|POST /send| Bridge[wa-bridge .13:8421]
|
|
Bridge --> Group[WhatsApp group CW U18 B10]
|
|
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]
|
|
Fetch --> 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.
|
|
|
|
## 📇 Contacts
|
|
|
|
| Who | Number |
|
|
|---|---|
|
|
| Coach — Chris Ride | +61 402 080 949 |
|
|
| Team manager — Sam Rolfe | +61 423 274 487 |
|
|
| Club admin (in the group as an admin) | +61 460 323 123 |
|
|
| Ella Parker, Competitions Coordinator | +61 3 9000 5632, ella.parker@collingwoodbasketball.com.au |
|
|
|
|
The website lists the same contacts on the home page.
|
|
|
|
## 🔗 Related Notes & Links
|
|
|
|
- Live site: https://basketball.lab.audasmedia.com.au (basic auth, user `sam`)
|
|
- WhatsApp bridge: https://wa.lab.audasmedia.com.au
|
|
- 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)
|
|
- 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
|
|
|
|
<!--
|
|
NOTES FOR THE AGENT WRITING THIS NOTE
|
|
* `type: note` is intentional. This note sits in the INBOX and the
|
|
obsidian-sorter assigns the real type from its final folder.
|
|
* Keep `skills:` and `tools:`. The sorter preserves these custom fields.
|
|
* Do NOT set another `type`, and do NOT pick a folder.
|
|
* The `project` tag keeps the sorter inside the projects bucket.
|
|
-->
|