Files
compass_teams_nhs/docs/archify/architecture.architecture.json
Sam Rolfe b4bbd6d3f9 Phase 9: publish the documentation set (README, map, Outline, Vikunja)
- README: Phase 9 status, the architecture diagram + map link, and the
  explicit "Teams (FR-15) is DEFERRED" statement.
- docs/architecture.mmd + docs/diagrams/architecture.png (mmdc).
- docs/archify/architecture.architecture.json -> docs/architecture-map.html
  (Archify showcase, 9/9 checks).
- docs/outline/: the five AI-context documents (STE style).
- docs/vikunja-tasks.json: the live Vikunja board (project 21).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-15 20:00:23 +11:00

326 lines
6.1 KiB
JSON

{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "Compass / NHS school service",
"output": "architecture-map.html",
"quality_profile": "showcase",
"viewBox": [
1180,
610
],
"views": [
{
"id": "morning-run",
"label": "Morning run",
"focus": [
"n8n",
"service",
"patchright",
"compass",
"apprise",
"family"
],
"note": "n8n runs the scan and the sends at 06:00 every day."
},
{
"id": "read-path",
"label": "Read path",
"focus": [
"sam",
"caddy",
"service",
"hub"
],
"note": "Sam and the Hub both read the same Go service over HTTP."
},
{
"id": "writes",
"label": "Writes outside the school",
"focus": [
"service",
"ha",
"apprise",
"omni"
],
"note": "The calendar write and the briefs are the only writes."
}
]
},
"components": [
{
"id": "n8n",
"type": "external",
"label": "n8n (.13)",
"sublabel": "06:00 daily trigger",
"pos": [
40,
200
],
"size": [
150,
60
]
},
{
"id": "sam",
"type": "external",
"label": "Sam",
"sublabel": "browser dashboard",
"pos": [
40,
430
],
"size": [
150,
60
]
},
{
"id": "caddy",
"type": "security",
"label": "Caddy (.35)",
"sublabel": "session login",
"pos": [
250,
315
],
"size": [
150,
60
],
"tag": "school.lab"
},
{
"id": "service",
"type": "backend",
"label": "Compass / NHS service",
"sublabel": "Go + SQLite :8792",
"pos": [
470,
310
],
"size": [
165,
70
],
"tag": "source of truth"
},
{
"id": "patchright",
"type": "backend",
"label": "patchright scraper",
"sublabel": "headless Playwright",
"pos": [
700,
315
],
"size": [
150,
60
]
},
{
"id": "compass",
"type": "external",
"label": "Compass NHS",
"sublabel": "read-only login + pages",
"pos": [
920,
315
],
"size": [
160,
60
]
},
{
"id": "omni",
"type": "cloud",
"label": "OmniRoute",
"sublabel": "importance only",
"pos": [
470,
120
],
"size": [
160,
60
]
},
{
"id": "ha",
"type": "cloud",
"label": "Home Assistant",
"sublabel": "calendar.school",
"pos": [
700,
120
],
"size": [
160,
60
]
},
{
"id": "hub",
"type": "external",
"label": "Hub",
"sublabel": "read-only /ask :8788",
"pos": [
250,
500
],
"size": [
150,
60
]
},
{
"id": "apprise",
"type": "cloud",
"label": "Apprise (.35)",
"sublabel": "Email + WhatsApp :8210",
"pos": [
470,
500
],
"size": [
160,
60
]
},
{
"id": "family",
"type": "external",
"label": "Family briefs",
"sublabel": "per-boy + combined",
"pos": [
790,
500
],
"size": [
160,
60
]
}
],
"boundaries": [
{
"kind": "region",
"label": "Home lab - Docker on .13, Caddy and Apprise on .35",
"wraps": [
"caddy",
"service",
"patchright",
"omni",
"ha",
"apprise",
"hub"
]
}
],
"connections": [
{
"id": "n8n-to-service",
"from": "n8n",
"to": "service",
"label": "scripts/morning-brief.sh",
"variant": "dashed"
},
{
"id": "sam-to-caddy",
"from": "sam",
"to": "caddy",
"label": "HTTPS",
"variant": "emphasis",
"fromSide": "top",
"toSide": "bottom"
},
{
"id": "caddy-to-service",
"from": "caddy",
"to": "service"
},
{
"id": "service-to-patchright",
"from": "service",
"to": "patchright",
"label": "scan",
"labelDy": 30
},
{
"id": "patchright-to-compass",
"from": "patchright",
"to": "compass",
"label": "login + fetch"
},
{
"id": "service-to-omni",
"from": "service",
"to": "omni",
"label": "importance",
"variant": "dashed",
"fromSide": "top",
"toSide": "bottom"
},
{
"id": "service-to-ha",
"from": "service",
"to": "ha",
"label": "create event",
"fromSide": "right",
"toSide": "left"
},
{
"id": "service-to-apprise",
"from": "service",
"to": "apprise",
"label": "briefs",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "apprise-to-family",
"from": "apprise",
"to": "family",
"label": "email + WhatsApp"
},
{
"id": "hub-to-service",
"from": "hub",
"to": "service",
"label": "Bearer /ask",
"variant": "dashed"
}
],
"cards": [
{
"dot": "cyan",
"title": "Compass / NHS service",
"items": [
"Go and SQLite are the source of truth",
"Go stores items, scans and the send log",
"Serves the dashboard, the Hub API and the briefs"
]
},
{
"dot": "amber",
"title": "Read-only against the school",
"items": [
"patchright logs in and fetches pages only",
"The Cloudflare login POST needs a real browser",
"No post, message or submit ever runs"
]
},
{
"dot": "rose",
"title": "Deferred: Teams (FR-15)",
"items": [
"Teams homework is DEFERRED and not built",
"Compass answers what is due and overdue",
"No Teams section is scanned"
]
}
]
}