sam-4screen-desktop 2026-10-15:20:6:28

This commit is contained in:
2026-10-15 20:06:28 +11:00
parent 8dab0ee5b6
commit be8999f676
3 changed files with 142 additions and 1 deletions

View File

@@ -212,6 +212,7 @@
},
"active": "26813e16e829b798",
"lastOpenFiles": [
"010 inbox/Compass NHS — Harry and Finn's School Service.md",
"010 inbox/Ai Resume RAG Architecture Ideas.md",
"200 projects/210 AI Resume/Ai Resume RAG Architecture Ideas.md",
"000 daily/Daily Notes and To Do.md",
@@ -239,7 +240,6 @@
"100 inbox",
"010 inbox/Hindsight AI Resume Tool.md",
"200 projects/210 AI Resume/Hindsight AI Resume Tool.md",
"010 inbox/Alibaba Code Review AI Tool.md",
"010 inbox/_WATCHER",
"300 areas/355 AI Research and Techniques",
"300 areas/355 Ai Research and Techniques",

View File

@@ -0,0 +1,137 @@
---
type: note
proposed_folder: 200 projects/Tools Software WebUI
proposed_toc: "100 Table of Contents/Projects.md → Tools & Software"
proposed_tags:
- project
- family
- architecture
- go
- compass
- finn
- school
- service
- sqlite
- htmx
- playwright
- apprise
confidence: 0.38
approved: false
proposed_for: 242a5e5a3d38
created: "2026-10-15 20:00"
tags:
- project
- family
- school
- compass
- go
- sqlite
- htmx
- playwright
- apprise
aliases:
- Compass NHS
- School Service
skills:
- Go service with no heavy framework
- SQLite data modelling with versioned migrations
- HTMX server-rendered dashboard with no build step
- Headless browser automation (patchright) past a Cloudflare challenge
- HTML parsing into structured items
- Read-only HTTP contract for another service (the Hub)
- Docker and Caddy deployment
- n8n scheduling with a restricted SSH trigger
tools:
- Go
- SQLite
- HTMX
- patchright (headless Playwright)
- Docker
- Caddy
- n8n
- Apprise
- Home Assistant
- OmniRoute
---
# [[Compass NHS — Harry and Finn's School Service]]
## What is this project?
This project watches the school for Harry and Finn. Each morning it reads the
school system, Compass, and works out what each boy has due. It shows Sam one
page with what is overdue first. It then sends each boy his own short brief, and
one combined brief to Jo and Sam.
The point is simple. Nobody has to log into Compass in the morning. The family
learns about late work **before** it is late, not after.
## What it does
- **Reads Compass** for both children, twice a day apart or on demand.
- **Stores every item**: homework, tasks, notices and school events, each against
the right child.
- **Finds overdue work** and puts it first. Then due today, then due this week.
- **Shows a dashboard** with one tab per child. It works on a phone.
- **Writes important school events** to the Home Assistant calendar
`calendar.school`.
- **Sends the morning briefs** at 6:00am on Email and WhatsApp.
- **Answers the Hub** to a question such as "what does Harry have on today at
school?" That path is read-only.
## Why it matters (what it shows)
This is a small but complete home-lab product, not a script. The service is one
Go binary with SQLite. It has its own container, its own port, its own login and
its own Caddy route. It is read-only against the school: it logs in and reads,
and it never posts or messages.
The interesting engineering part is the login. Compass sits behind **Cloudflare**,
and the login form is protected by a managed bot challenge. A normal headless
browser gets a 403. The project uses **patchright**, a headless Playwright build
that behaves enough like a real browser to pass the challenge. The parent login
needed **no** two-factor code.
The other deliberate design is honesty about failure. A failed scan must never
look like a quiet day with no homework. The dashboard, the briefs and the Hub
answer all state the real scan state in plain words.
## Architecture
```mermaid
flowchart LR
N8N["n8n on .13<br/>06:00 daily trigger"] --> SVC["Compass / NHS service<br/>Go + SQLite :8792"]
SAM["Sam<br/>browser dashboard"] --> CADDY["Caddy on .35"] --> SVC
SVC -->|scan| PATCH["patchright scraper"] -->|login + pages| COMPASS["Compass NHS<br/>read-only"]
SVC -->|"create event"| HA["Home Assistant<br/>calendar.school"]
SVC -->|briefs| APPRISE["Apprise .35:8210<br/>Email + WhatsApp"]
APPRISE --> BOYS["Harry and Finn<br/>per-boy brief"]
APPRISE --> PARENTS["Jo and Sam<br/>combined brief"]
HUB["Hub :8788<br/>read-only /ask"] --> SVC
```
## What is still missing (state it plainly)
**Teams (FR-15) is DEFERRED.** The project does not scan Teams for homework. This
is a known gap that the brief set aside on purpose. Everything else in the build
spec is built, deployed and running. Compass alone already answers what is due
and overdue.
## Where it lives
- **Code**: Gitea repo `sam/compass_teams_nhs` (`main`).
- **Live**: <https://school.lab.audasmedia.com.au> — its own container on `.13`,
port 8792, behind Caddy on `.35`.
- **Interactive map**:
<https://maps.lab.audasmedia.com.au/compass_teams_nhs/docs/>
- **AI context**: `docs/outline/` in the repo, and the Outline collection
*Compass / NHS (School)*.
- **Tasks**: Vikunja project **Compass / NHS (School)** (id 21).
- **Diagram source**: `docs/architecture.mmd`, rendered to
`docs/diagrams/architecture.png`.
## Status
Built and deployed. Phases 1 to 9 are done. Teams (FR-15) is deferred. The service
scans both children, shows overdue work first, writes important events to the
calendar, and sends the briefs every morning at 6:00am.

View File

@@ -20094,3 +20094,7 @@ What the watcher did, newest last.
### 2026-10-14 16:00:53
- **filed** `Ai Resume RAG Architecture Ideas.md` → `200 projects/210 AI Resume/Ai Resume RAG Architecture Ideas.md` (type project)
### 2026-10-15 19:59:17
- **proposed** `Compass NHS — Harry and Finn's School Service.md` → `200 projects/Tools Software WebUI` (confidence 0.38)
- - Low JEV confidence — recommend human confirmation