From 286aa12bb09afd8d6de5bc5a296823548ca0b318 Mon Sep 17 00:00:00 2001 From: Documenter Date: Wed, 28 Oct 2026 15:48:09 +1100 Subject: [PATCH] site: cut the template's own labels out of the pages Point 7 of the page-wording review. The pages no longer show their data structure as headings, and they no longer explain their own conventions. - Level 1 is one screen: claim, status badge, three figures, the technology row, and one sentence carrying one link. Measured in headless Chrome at 1440x900: 1404-1845 px tall before, exactly 900 px (no scroll) after, on all six area pages. - DocPage: no kicker line, no visible level label, no "Evidence for this page" heading or instruction note, no "Drill-downs" list, no "Status - sentence" footer. The artefact table starts at level 2, under the heading "Artefacts"; the history timeline is level 2 only. - Landing page: "Start here" link text gone, "How to read this site" panel gone, the footer's status-label explainer gone. - Content, presentation only, no claim softened: the leading H1 that duplicated the page title removed from all 41 documents; level 1 bodies reduced to the constraint as ordinary prose plus the way in; "**Status: ...**" prefixes removed from the artefact stubs; "## Drill-downs" and "## Period and confidence" removed from the level 2 pages, with the cross-area links moved into the prose. - The six level 1 claims are now sentences with a subject, and use commas instead of middots. Same facts, no new ones. Not in this commit: the 35 level 2 and 3 claims still use the compact CV style. That is a voice decision for Sam, not a wording tidy-up. make validate: 41 documents, 0 violations. go test ./...: pass. (cherry picked from commit 03009f80fc7815ad7719412e125df9297a6e653f) --- content/about/about-narrative.md | 15 +---- content/about/about-overview.md | 13 +--- content/about/l3/about-education.md | 4 +- content/about/l3/about-interests.md | 2 - content/about/l3/about-non-it-work.md | 4 +- content/ai/ai-overview.md | 13 +--- content/ai/ai-systems.md | 16 +---- content/ai/l3/ai-guardrails.md | 4 +- content/ai/l3/ai-hub-architecture.md | 4 +- content/ai/l3/ai-memory-layers.md | 4 +- content/ai/l3/ai-omniroute-routing.md | 4 +- content/ai/l3/ai-paperclip-pipelines.md | 4 +- content/ai/l3/ai-rag-corpus.md | 4 +- content/ai/l3/ai-voice-pipeline.md | 4 +- content/edge/edge-fleet.md | 16 +---- content/edge/edge-overview.md | 13 +--- content/edge/l3/edge-architecture.md | 4 +- content/edge/l3/edge-failures.md | 4 +- content/edge/l3/edge-front-door.md | 4 +- content/edge/l3/edge-lora-sprinkler.md | 4 +- content/edge/l3/edge-sensors.md | 4 +- content/edge/l3/edge-snapcast.md | 4 +- content/edge/l3/edge-zigbee.md | 4 +- content/history/history-engagements.md | 12 +--- content/history/history-overview.md | 13 +--- content/history/l3/history-client-wall.md | 4 +- content/history/l3/history-code-exhibits.md | 4 +- content/platform/l3/platform-backups.md | 4 +- content/platform/l3/platform-containers.md | 4 +- content/platform/l3/platform-network.md | 4 +- content/platform/l3/platform-nixos.md | 4 +- content/platform/l3/platform-signage.md | 4 +- content/platform/l3/platform-tuios-package.md | 4 +- content/platform/platform-estate.md | 15 ----- content/platform/platform-overview.md | 13 +--- content/products/l3/products-signage.md | 4 +- .../products/l3/products-websitebuilder.md | 4 +- content/products/l3/products-where-woof.md | 4 +- content/products/products-business.md | 13 +--- content/products/products-overview.md | 13 +--- internal/site/fragments.go | 2 +- internal/site/site.go | 21 +++---- internal/web/static/site.css | 28 --------- internal/web/templates/components.templ | 14 +---- internal/web/templates/pages.templ | 59 +++++++------------ internal/web/templates/view.go | 52 ++++------------ 46 files changed, 86 insertions(+), 365 deletions(-) diff --git a/content/about/about-narrative.md b/content/about/about-narrative.md index 73762ac..fd7391f 100644 --- a/content/about/about-narrative.md +++ b/content/about/about-narrative.md @@ -49,7 +49,7 @@ The honest framing is in the evidence notes and is repeated here: *full-time par ## What next -The same three areas at a larger scale: AI and agentic systems, the platform engineering underneath them, and the constrained devices at the edge. Melbourne based and flexible about location and format — remote, hybrid, office, or travel. +The same three areas at a larger scale: [AI and agentic systems](../ai/ai-systems.md), the [platform engineering underneath them](../platform/platform-estate.md), and the [constrained devices at the edge](../edge/edge-fleet.md). Melbourne based and flexible about location and format — remote, hybrid, office, or travel. ## Contact policy @@ -60,16 +60,3 @@ This site publishes no address, no phone number and no family details. Contact i - **No computer science degree.** The trade is a longer, broader practical education; the pages on this site are the argument, not the certificate. - **A period of self-employment is described as such.** It is not dressed up as a sabbatical or as consulting. - **Interests are one honest sentence each.** The previous version of this site invented venues and results. That has been deleted rather than corrected in place. - -## Drill-downs - -- [Non-IT working history](l3/about-non-it-work.md) — level 3 -- [Education](l3/about-education.md) — level 3 -- [Interests — one honest line each](l3/about-interests.md) — level 3 -- [The AI estate](../ai/ai-systems.md) — level 2 -- [The platform estate](../platform/platform-estate.md) — level 2 -- [The edge fleet](../edge/edge-fleet.md) — level 2 - -## Period and confidence - -`period: 1999–`. Confidence is `running`: this is the current self-description, verified against the evidence notes on 2026-10-26. diff --git a/content/about/about-overview.md b/content/about/about-overview.md index a1f8b91..e14d288 100644 --- a/content/about/about-overview.md +++ b/content/about/about-overview.md @@ -3,7 +3,7 @@ id: about-overview area: about level: 1 title: "About" -claim: "Twenty-five years of shipping software — built through self-teaching · a non-IT working life · and five years overseas — now aimed at AI systems · the platforms under them and the devices at the edge." +claim: "Sam has shipped software for twenty-five years — self-taught, through a non-IT working life and five years overseas — and now builds AI systems, the platforms under them and the devices at the edge." confidence: running period: "1999–" tech: [NixOS, Neovim, Python, JavaScript, React, Go, HTMX] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [about, narrative, background] --- - -# About - -**Claim.** A career built by self-teaching — from a childhood in the 1980s with a borrowed language reference, through fifteen years of agency delivery, a working life outside technology, and five years overseas — now concentrated on AI systems, the platforms they run on, and the hardware at the edge. - -**Status.** Current. Melbourne based, and flexible about how the work is done — remote, hybrid, office, or travel. - -**What this page is for.** The other five areas prove what can be built. This one explains where the judgement came from: a non-technical working life, a fine-arts and philosophy education, and a period spent building a business while raising two children. - -**Start here.** [The narrative](about-narrative.md) — including an honest account of 2020 to 2026. +The other five areas prove what can be built; this one explains where the judgement came from. The narrative, including 2020 to 2026, is on the [narrative page](about-narrative.md). diff --git a/content/about/l3/about-education.md b/content/about/l3/about-education.md index 160f3a3..0c918ee 100644 --- a/content/about/l3/about-education.md +++ b/content/about/l3/about-education.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [about, education, artefact] --- -# Artefact — Education - -**Status: stub.** Formal presentation lands in Phase 7. No certificates, transcripts or student identifiers are published. +Formal presentation lands in Phase 7. No certificates, transcripts or student identifiers are published. ## The record diff --git a/content/about/l3/about-interests.md b/content/about/l3/about-interests.md index 240f0e0..61bafbb 100644 --- a/content/about/l3/about-interests.md +++ b/content/about/l3/about-interests.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [about, interests, artefact] --- -# Artefact — Interests · one honest line each -**Status: stub for the visual treatment.** ## Music Blues and jazz piano and blues harp; played in two bands. Studied music composition at university and kept the piano as the thing that resets the week. diff --git a/content/about/l3/about-non-it-work.md b/content/about/l3/about-non-it-work.md index 06f537d..3341d59 100644 --- a/content/about/l3/about-non-it-work.md +++ b/content/about/l3/about-non-it-work.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [about, history, work, artefact] --- -# Artefact — Non-IT working history - -**Status: stub for the visual treatment.** The roles are final; the presentation lands in Phase 7. +The roles are final; the presentation lands in Phase 7. ## The roles diff --git a/content/ai/ai-overview.md b/content/ai/ai-overview.md index 4f001e5..9689cf4 100644 --- a/content/ai/ai-overview.md +++ b/content/ai/ai-overview.md @@ -3,7 +3,7 @@ id: ai-overview area: ai level: 1 title: "AI & Agentic Systems" -claim: "Builds and operates sixteen or more AI pipelines — agent harnesses · model routing and cost control · retrieval over a tagged corpus · and a voice front-end that runs a house." +claim: "Sam builds and operates sixteen or more AI pipelines: agent harnesses, model routing and cost control, retrieval over a tagged corpus, and a voice front-end that runs a house." confidence: running period: "2020–" tech: [LangGraph, Prefect, n8n, Qdrant, OmniRoute, Whisper, Piper, MiniMax] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [ai, agents, routing, retrieval, voice] --- - -# AI & Agentic Systems - -**Claim.** Sixteen or more AI pipelines are maintained in production — ten or more on n8n, Prefect and LangGraph, six on Paperclip — with one gateway in front of six model providers, retrieval over a metadata-tagged corpus, and a voice front-end that controls the house. - -**Status.** Running. Every figure on this page traces to the evidence notes; the verification date is 2026-10-26. - -**Why it reads as engineering rather than enthusiasm.** The pipelines run against real obligations — school portals, calendars, email, household audio — and they are operated: routed for cost, guarded before they act, and observed while they run. - -**Start here.** [The capability page](ai-systems.md) explains what is actually run and what the trade-offs were. The three chips above resolve to artefacts below it. +The pipelines run against real obligations — school portals, calendars, email, household audio — and they are operated rather than demonstrated. What actually runs, and what it cost to get there, is on the [capability page](ai-systems.md). diff --git a/content/ai/ai-systems.md b/content/ai/ai-systems.md index c38bdf5..96d1e3e 100644 --- a/content/ai/ai-systems.md +++ b/content/ai/ai-systems.md @@ -14,8 +14,6 @@ last_verified: 2026-10-26 tags: [ai, agents, routing, retrieval, voice, guardrails] --- -# Agent systems that are operated rather than demonstrated - **Capability statement.** This is a working estate, not a prototype: more than sixteen pipelines in production, six providers behind a single gateway, retrieval that filters on metadata before it searches, and a voice front-end used daily by people who did not build it. ## What is actually run @@ -55,16 +53,4 @@ tags: [ai, agents, routing, retrieval, voice, guardrails] - **Not everything is automated.** Parts of the house are automated end to end and parts still need a person to press the button. The estate is described as it is run, not as it was imagined. - **Cost is bounded by routing, not by hope.** Caps and a refusal path exist so a runaway session cannot become a bill; the routing layer keeps the median request on a cheap model. -## Drill-downs - -- [House AI hub — service topology](l3/ai-hub-architecture.md) — level 3 -- [Model routing and cost control](l3/ai-omniroute-routing.md) — level 3 -- [Paperclip and n8n pipelines in production](l3/ai-paperclip-pipelines.md) — level 3 -- [Retrieval corpus and query graph](l3/ai-rag-corpus.md) — level 3 -- [Voice pipeline — speech in and speech out](l3/ai-voice-pipeline.md) — level 3 -- [Guardrails — hooks in the model path](l3/ai-guardrails.md) — level 3 -- [Memory in two layers](l3/ai-memory-layers.md) — level 3 - -## Period and confidence - -`period: 2020–`. The start is anchored on the homelab year in the evidence notes, because the AI estate and the homelab have the same origin. Confidence is `running`: this is the current arrangement, verified 2026-10-26 against the evidence notes. +The period starts at the homelab year in the evidence notes: the AI estate and the homelab have the same origin. diff --git a/content/ai/l3/ai-guardrails.md b/content/ai/l3/ai-guardrails.md index 2ff41e7..2a496a7 100644 --- a/content/ai/l3/ai-guardrails.md +++ b/content/ai/l3/ai-guardrails.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, guardrails, security, artefact] --- -# Artefact — Guardrails · hooks in the model path - -**Status: stub.** A redacted injection-test result lands in Phase 6, when the guardrail library is wired into this site's own assistant. +A redacted injection-test result lands in Phase 6, when the guardrail library is wired into this site's own assistant. ## What the artefact is diff --git a/content/ai/l3/ai-hub-architecture.md b/content/ai/l3/ai-hub-architecture.md index 46d8c95..b39529c 100644 --- a/content/ai/l3/ai-hub-architecture.md +++ b/content/ai/l3/ai-hub-architecture.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, architecture, artefact] --- -# Artefact — House AI hub service topology - -**Status: stub.** The diagram and the generated topology dump land in Phase 7 (polish). This stub exists so the level 2 page has no dangling reference. +The diagram and the generated topology dump land in Phase 7 (polish). This stub exists so the level 2 page has no dangling reference. ## What the artefact is diff --git a/content/ai/l3/ai-memory-layers.md b/content/ai/l3/ai-memory-layers.md index 74525c6..aebf844 100644 --- a/content/ai/l3/ai-memory-layers.md +++ b/content/ai/l3/ai-memory-layers.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, memory, context, artefact] --- -# Artefact — Memory in two layers · Engram and Headroom - -**Status: stub.** A redacted session handoff and a before-and-after context measurement land in Phase 7. +A redacted session handoff and a before-and-after context measurement land in Phase 7. ## What the artefact is diff --git a/content/ai/l3/ai-omniroute-routing.md b/content/ai/l3/ai-omniroute-routing.md index 400722d..0665708 100644 --- a/content/ai/l3/ai-omniroute-routing.md +++ b/content/ai/l3/ai-omniroute-routing.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, routing, cost, artefact] --- -# Artefact — Model routing and cost control - -**Status: stub.** The routing decision path and a redacted cost table land in Phase 7. No keys or account identifiers are ever published. +The routing decision path and a redacted cost table land in Phase 7. No keys or account identifiers are ever published. ## What the artefact is diff --git a/content/ai/l3/ai-paperclip-pipelines.md b/content/ai/l3/ai-paperclip-pipelines.md index 03c14d0..b2a4c27 100644 --- a/content/ai/l3/ai-paperclip-pipelines.md +++ b/content/ai/l3/ai-paperclip-pipelines.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, pipelines, agents, artefact] --- -# Artefact — Paperclip and n8n pipelines in production - -**Status: stub.** A redacted run log of one pipeline lands in Phase 7, alongside the pipeline inventory. +A redacted run log of one pipeline lands in Phase 7, alongside the pipeline inventory. ## What the artefact is diff --git a/content/ai/l3/ai-rag-corpus.md b/content/ai/l3/ai-rag-corpus.md index 47daddd..62422f9 100644 --- a/content/ai/l3/ai-rag-corpus.md +++ b/content/ai/l3/ai-rag-corpus.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, retrieval, rag, artefact] --- -# Artefact — Retrieval corpus and query graph - -**Status: stub.** The query graph diagram and an ingest run log land later; this site's own corpus build is Phase 4. +The query graph diagram and an ingest run log land later; this site's own corpus build is Phase 4. ## What the artefact is diff --git a/content/ai/l3/ai-voice-pipeline.md b/content/ai/l3/ai-voice-pipeline.md index 8c96c4a..3bc4ded 100644 --- a/content/ai/l3/ai-voice-pipeline.md +++ b/content/ai/l3/ai-voice-pipeline.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [ai, voice, audio, artefact] --- -# Artefact — Voice pipeline · speech in and speech out - -**Status: stub.** A short recording of music ducking under a spoken announcement lands in the optional voice phase. Text describes the chain until then. +A short recording of music ducking under a spoken announcement lands in the optional voice phase. Text describes the chain until then. ## What the artefact is diff --git a/content/edge/edge-fleet.md b/content/edge/edge-fleet.md index 380944d..4f3344d 100644 --- a/content/edge/edge-fleet.md +++ b/content/edge/edge-fleet.md @@ -14,8 +14,6 @@ last_verified: 2026-10-26 tags: [edge, iot, esp32, lora, zigbee, audio] --- -# Constrained devices · custom radio · and a record of what broke - **Capability statement.** Devices that must run for months on a small battery, talk over radio that was chosen for range rather than convenience, and fail in ways that are visible. Twenty or more nodes, nine zones, twenty automations, and a voice layer on top of all of it. ## What is actually run @@ -50,16 +48,4 @@ tags: [edge, iot, esp32, lora, zigbee, audio] - **Some things are still manual.** The garden automation is partly manual — some watering and lighting is scheduled, some is a person turning something on. The page says which is which instead of implying full coverage. - **The failures cost money and are kept.** A lizard destroyed a feeder built for it. The garden cameras were postponed with the parts already bought. The doorbell is being rebuilt rather than declared finished. Those are the most honest evidence of production experience on this site. -## Drill-downs - -- [Edge architecture — power · radio · deep sleep](l3/edge-architecture.md) — level 3 -- [LoRa irrigation under solar power](l3/edge-lora-sprinkler.md) — level 3 -- [Hand-built Zigbee routers and lighting](l3/edge-zigbee.md) — level 3 -- [Distributed audio — eight endpoints with ducking](l3/edge-snapcast.md) — level 3 -- [Front door — vision · voice · and a rebuild](l3/edge-front-door.md) — level 3 -- [Sensors and actuation](l3/edge-sensors.md) — level 3 -- [The failures, kept in the record](l3/edge-failures.md) — level 3 - -## Period and confidence - -`period: 2020–`, anchored on the homelab year in the evidence notes. Confidence is `running` for the fleet as a whole; individual nodes carry their own label, and the ones being rebuilt or postponed are labelled that way on their pages. +Individual nodes carry their own label, and the ones being rebuilt or postponed are labelled that way on their pages. diff --git a/content/edge/edge-overview.md b/content/edge/edge-overview.md index 5bfda09..09e9204 100644 --- a/content/edge/edge-overview.md +++ b/content/edge/edge-overview.md @@ -3,7 +3,7 @@ id: edge-overview area: edge level: 1 title: "Edge & Devices" -claim: "Builds and maintains a twenty-node edge fleet — constrained devices · custom radio · solar power · deep sleep · and sensors — reporting into a single automation layer." +claim: "Sam builds and maintains a twenty-node edge fleet — constrained devices on solar power and deep sleep, with custom radio and sensors — that reports into a single automation layer." confidence: running period: "2020–" tech: [ESP32, LoRa, Zigbee, MQTT, Home Assistant, Snapcast, Raspberry Pi] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [edge, iot, esp32, lora, zigbee] --- - -# Edge & Devices - -**Claim.** Twenty or more nodes — ten ESP32 devices, two hand-built Zigbee routers and eight Pi audio endpoints — across nine lighting zones and twenty automations, all reporting into one automation layer. - -**Status.** Running. Some of it is finished, some is being rebuilt, and at least one thing was destroyed by the animal it was built for. All three states are shown. - -**Why it is credible.** These devices are outdoors, on solar, in deep sleep, and they must keep working when nobody is looking. The failures on this page cost real time and are documented as failures. - -**Start here.** [The capability page](edge-fleet.md) covers the architecture, the radio, the audio and what broke. +The devices are outdoors on solar and asleep most of their lives, and they have to keep working when nobody is looking; what failed is written down. The architecture, the radio and the failures are on the [fleet page](edge-fleet.md). diff --git a/content/edge/l3/edge-architecture.md b/content/edge/l3/edge-architecture.md index ce4221f..ad357e8 100644 --- a/content/edge/l3/edge-architecture.md +++ b/content/edge/l3/edge-architecture.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, architecture, power, artefact] --- -# Artefact — Edge architecture · power · radio · deep sleep - -**Status: stub.** One annotated diagram of a representative node and the radio path lands in Phase 7. +One annotated diagram of a representative node and the radio path lands in Phase 7. ## What the artefact is diff --git a/content/edge/l3/edge-failures.md b/content/edge/l3/edge-failures.md index 87eb26c..d43beba 100644 --- a/content/edge/l3/edge-failures.md +++ b/content/edge/l3/edge-failures.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, failures, artefact] --- -# Artefact — The failures · kept in the record - -**Status: in progress.** Two items are being rebuilt, one is postponed. The page is not finished because the work is not finished. +Two items are being rebuilt, one is postponed. The page is not finished because the work is not finished. ## What the artefact is diff --git a/content/edge/l3/edge-front-door.md b/content/edge/l3/edge-front-door.md index edb2853..2cbac24 100644 --- a/content/edge/l3/edge-front-door.md +++ b/content/edge/l3/edge-front-door.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, doorbell, vision, voice, artefact] --- -# Artefact — Front door · vision · voice · and a rebuild - -**Status: in progress.** The device was built and is being rebuilt. The page states this rather than describing it as finished. +The device was built and is being rebuilt. The page states this rather than describing it as finished. ## What the artefact is diff --git a/content/edge/l3/edge-lora-sprinkler.md b/content/edge/l3/edge-lora-sprinkler.md index 4dd12ff..9afab1f 100644 --- a/content/edge/l3/edge-lora-sprinkler.md +++ b/content/edge/l3/edge-lora-sprinkler.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, lora, solar, irrigation, artefact] --- -# Artefact — LoRa irrigation under solar power - -**Status: stub.** The bill of materials and the wake-on-radio change land in Phase 7. +The bill of materials and the wake-on-radio change land in Phase 7. ## What the artefact is diff --git a/content/edge/l3/edge-sensors.md b/content/edge/l3/edge-sensors.md index 1fdf8bc..d99147a 100644 --- a/content/edge/l3/edge-sensors.md +++ b/content/edge/l3/edge-sensors.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, sensors, actuation, artefact] --- -# Artefact — Sensors and actuation - -**Status: stub.** A sensor and actuator table lands in Phase 7. +A sensor and actuator table lands in Phase 7. ## What the artefact is diff --git a/content/edge/l3/edge-snapcast.md b/content/edge/l3/edge-snapcast.md index 65cf988..32b9ea4 100644 --- a/content/edge/l3/edge-snapcast.md +++ b/content/edge/l3/edge-snapcast.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, audio, snapcast, artefact] --- -# Artefact — Distributed audio · eight endpoints with ducking - -**Status: stub.** The topology diagram and a short recording of ducking land in Phase 7. +The topology diagram and a short recording of ducking land in Phase 7. ## What the artefact is diff --git a/content/edge/l3/edge-zigbee.md b/content/edge/l3/edge-zigbee.md index b2617f1..3ffbf01 100644 --- a/content/edge/l3/edge-zigbee.md +++ b/content/edge/l3/edge-zigbee.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [edge, zigbee, lighting, artefact] --- -# Artefact — Hand-built Zigbee routers and lighting - -**Status: stub.** The router build and a zone map land in Phase 7. +The router build and a zone map land in Phase 7. ## What the artefact is diff --git a/content/history/history-engagements.md b/content/history/history-engagements.md index 128add5..bd4a607 100644 --- a/content/history/history-engagements.md +++ b/content/history/history-engagements.md @@ -14,8 +14,6 @@ last_verified: 2026-10-26 tags: [history, agencies, brands, exhibits] --- -# Fifteen years of delivery for agencies and their clients - **Capability statement.** Range under deadline. The work in this period ran from car classifieds and online betting to a bank's pitch piece, a broadcaster's on-demand banners and a publisher's education platform — usually with a date attached that could not move. ## The eras, briefly @@ -52,12 +50,4 @@ The point of the exhibit set is that the tooling changed repeatedly and the deli - **No client has been named beyond a brand.** Brands are named because they were public campaigns. Individuals, internal contacts and unpublished commercial detail are excluded. - **The exhibits are excerpts.** Around forty lines each, chosen to show judgement — structure, error handling, an exit plan — not to demonstrate volume. -## Drill-downs - -- [The client wall](l3/history-client-wall.md) — level 3 -- [Six code exhibits across five eras](l3/history-code-exhibits.md) — level 3 -- [Products — the commercial era that followed](../products/products-business.md) — level 2 - -## Period and confidence - -`period: 1999–2014`. Confidence is `historic`: this is work that is finished, and it is presented in the past tense throughout. +This work is finished, and it is presented in the past tense throughout. diff --git a/content/history/history-overview.md b/content/history/history-overview.md index 64fb4a7..76a0f00 100644 --- a/content/history/history-overview.md +++ b/content/history/history-overview.md @@ -3,7 +3,7 @@ id: history-overview area: history level: 1 title: "History" -claim: "Delivered interactive work for twenty-two agencies and twenty-three brands between 1999 and 2014 — the commercial apprenticeship that produced the range." +claim: "Sam delivered interactive work for twenty-two agencies and twenty-three brands between 1999 and 2014 — the commercial apprenticeship that produced the range." confidence: historic period: "1999–2014" tech: [ActionScript, PHP, JavaScript, MySQL, XML, React, Python, Go, HTMX] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [history, agencies, brands, career] --- - -# History - -**Claim.** Fifteen years of agency and product work — national campaigns, bank and broadcaster platforms, betting front-ends, and a lot of rescue missions — for twenty-two agencies and twenty-three brands. - -**Status.** Historic. This is the 1999–2014 era, presented as what it was: the commercial apprenticeship that produced the range. - -**What it is not.** It is not a Flash page. The languages changed six times across this period — ActionScript, PHP, JavaScript, React, Python, and now Go with HTMX — and the exhibits are chosen to show that rather than to show a decade. - -**Start here.** [The engagement record](history-engagements.md) explains the eras, the work and what each exhibit demonstrates. +The languages changed six times across the period — ActionScript, PHP, JavaScript, React, Python, and now Go with HTMX — and the exhibits are chosen to show that rather than to show a decade. The era-by-era record is on the [engagement record](history-engagements.md). diff --git a/content/history/l3/history-client-wall.md b/content/history/l3/history-client-wall.md index 05c03b5..be8fb89 100644 --- a/content/history/l3/history-client-wall.md +++ b/content/history/l3/history-client-wall.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [history, clients, artefact] --- -# Artefact — The client wall - -**Status: stub for the visual treatment.** The names are final; the layout, logo set and typography land in Phase 7 (the logo set is explicitly a Phase 7 decision). +The names are final; the layout, logo set and typography land in Phase 7 (the logo set is explicitly a Phase 7 decision). ## The agencies diff --git a/content/history/l3/history-code-exhibits.md b/content/history/l3/history-code-exhibits.md index 96a796e..be06a2c 100644 --- a/content/history/l3/history-code-exhibits.md +++ b/content/history/l3/history-code-exhibits.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [history, code, exhibits, artefact] --- -# Artefact — Six code exhibits across five eras - -**Status: stub.** The excerpts are selected from source that exists on disk; each one lands in Phase 7 with two sentences on why it is good code. +The excerpts are selected from source that exists on disk; each one lands in Phase 7 with two sentences on why it is good code. ## The six diff --git a/content/platform/l3/platform-backups.md b/content/platform/l3/platform-backups.md index a55de55..f1ef341 100644 --- a/content/platform/l3/platform-backups.md +++ b/content/platform/l3/platform-backups.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, backups, restore, artefact] --- -# Artefact — Backups and restore runbook - -**Status: stub.** Redacted job definitions and the restore runbook land in Phase 7. Passphrase locations and remote paths are removed before publication. +Redacted job definitions and the restore runbook land in Phase 7. Passphrase locations and remote paths are removed before publication. ## What the artefact is diff --git a/content/platform/l3/platform-containers.md b/content/platform/l3/platform-containers.md index 663d0a8..92a1e0c 100644 --- a/content/platform/l3/platform-containers.md +++ b/content/platform/l3/platform-containers.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, docker, artefact] --- -# Artefact — Container inventory - -**Status: stub.** A digest of the inventory — grouped by purpose, with addresses removed — lands in Phase 7. +A digest of the inventory — grouped by purpose, with addresses removed — lands in Phase 7. ## What the artefact is diff --git a/content/platform/l3/platform-network.md b/content/platform/l3/platform-network.md index 9f889f0..7951ebd 100644 --- a/content/platform/l3/platform-network.md +++ b/content/platform/l3/platform-network.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, networking, security, artefact] --- -# Artefact — Network layout and remote access - -**Status: stub.** The topology diagram lands in Phase 7 with addresses and hostnames redacted. +The topology diagram lands in Phase 7 with addresses and hostnames redacted. ## What the artefact is diff --git a/content/platform/l3/platform-nixos.md b/content/platform/l3/platform-nixos.md index 1a1ecbd..cdb1b8d 100644 --- a/content/platform/l3/platform-nixos.md +++ b/content/platform/l3/platform-nixos.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, nixos, artefact] --- -# Artefact — Declarative multi-host configuration - -**Status: stub.** A redacted excerpt of the configuration tree lands in Phase 7. No hostnames, addresses or keys are published. +A redacted excerpt of the configuration tree lands in Phase 7. No hostnames, addresses or keys are published. ## What the artefact is diff --git a/content/platform/l3/platform-signage.md b/content/platform/l3/platform-signage.md index 8ddd2f0..741ca0c 100644 --- a/content/platform/l3/platform-signage.md +++ b/content/platform/l3/platform-signage.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, signage, hdmi-cec, artefact] --- -# Artefact — Signage infrastructure · screens as a managed fleet - -**Status: stub.** The CEC command set and a layout diagram land in Phase 7. +The CEC command set and a layout diagram land in Phase 7. ## What the artefact is diff --git a/content/platform/l3/platform-tuios-package.md b/content/platform/l3/platform-tuios-package.md index bca24c5..ceda93c 100644 --- a/content/platform/l3/platform-tuios-package.md +++ b/content/platform/l3/platform-tuios-package.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [platform, nix, packaging, artefact] --- -# Artefact — A hand-written Nix package with an exit plan - -**Status: stub.** The whole file is short enough to publish verbatim; it lands in Phase 7. +The whole file is short enough to publish verbatim; it lands in Phase 7. ## What the artefact is diff --git a/content/platform/platform-estate.md b/content/platform/platform-estate.md index c42c3ba..3a45f21 100644 --- a/content/platform/platform-estate.md +++ b/content/platform/platform-estate.md @@ -14,8 +14,6 @@ last_verified: 2026-10-26 tags: [platform, devops, nixos, docker, backups, networking] --- -# A small estate run to a documented standard - **Capability statement.** Four hosts, fifty or more containers, configuration in version control instead of in a shell history, and one place where traffic enters. The estate is deliberately small because it is run rather than demonstrated. ## What is actually run @@ -51,16 +49,3 @@ tags: [platform, devops, nixos, docker, backups, networking] - **Self-hosting is a choice with a cost.** Monitoring, backups, ingress and the AI gateway are all operated here, which means the failure modes are also operated here. The mitigation is documentation and measurement, not optimism. - **Rejected on purpose.** A long list of tools was evaluated and refused — Airflow for RAM, self-hosted Langfuse for six containers it could not afford, LiteLLM because it would duplicate the existing gateway, and a pile of documentation platforms. "Alternatives considered" is kept because the reasoning is the senior artifact. - **Not everything is automated.** Some operations are still a documented command run by a person. The runbook exists precisely because the automations do not cover everything. - -## Drill-downs - -- [Declarative multi-host configuration](l3/platform-nixos.md) — level 3 -- [A hand-written Nix package with an exit plan](l3/platform-tuios-package.md) — level 3 -- [Container inventory](l3/platform-containers.md) — level 3 -- [Backups and restore runbook](l3/platform-backups.md) — level 3 -- [Network layout and remote access](l3/platform-network.md) — level 3 -- [Signage infrastructure — screens as a managed fleet](l3/platform-signage.md) — level 3 - -## Period and confidence - -`period: 2020–`, anchored on the homelab year in the evidence notes. Confidence is `running`: this is the current estate, verified 2026-10-26. diff --git a/content/platform/platform-overview.md b/content/platform/platform-overview.md index 34bd33e..f073d00 100644 --- a/content/platform/platform-overview.md +++ b/content/platform/platform-overview.md @@ -3,7 +3,7 @@ id: platform-overview area: platform level: 1 title: "Platform & Infrastructure" -claim: "Runs a multi-machine NixOS and Proxmox estate — fifty-plus containers · declarative configuration · encrypted backups with a written restore runbook · and public ingress — sized to the hardware rather than the budget." +claim: "Sam runs a multi-machine NixOS and Proxmox estate sized to the hardware rather than the budget: fifty-plus containers, declarative configuration, encrypted backups with a written restore runbook, and public ingress." confidence: running period: "2020–" tech: [NixOS, Proxmox, Docker, Caddy, Tailscale, Borg, Kopia, AWS S3] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [platform, devops, nixos, docker, backups] --- - -# Platform & Infrastructure - -**Claim.** Fifty or more containers on a four-host estate, configuration declared rather than hand-applied, encrypted backups on three machines with a restore runbook beside them, and one public listener at the edge. - -**Status.** Running. Figures trace to the approved metric set and the infrastructure reference; verified 2026-10-26. - -**The constraint that shaped it.** The runtime host is memory-bound rather than CPU-bound. Every service in this estate carries a memory cap and is bound to loopback, which is why the platform reads as engineering under constraint instead of hardware shopping. - -**Start here.** [The capability page](platform-estate.md) covers what runs, where, and what was rejected. +The runtime host is memory-bound rather than CPU-bound, so every service carries a memory cap and is bound to loopback. What runs, where, and what was rejected is on the [estate page](platform-estate.md). diff --git a/content/products/l3/products-signage.md b/content/products/l3/products-signage.md index df348ef..ba4f7e9 100644 --- a/content/products/l3/products-signage.md +++ b/content/products/l3/products-signage.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [products, signage, artefact] --- -# Artefact — Commercial signage on commodity hardware - -**Status: delivered, with a rebuild in progress.** The product shipped and customers still run it. The rebuild on the current stack is not finished and is labelled as unfinished everywhere it is mentioned. +The product shipped and customers still run it. The rebuild on the current stack is not finished and is labelled as unfinished everywhere it is mentioned. ## What the artefact is diff --git a/content/products/l3/products-websitebuilder.md b/content/products/l3/products-websitebuilder.md index 99df252..72e9bd0 100644 --- a/content/products/l3/products-websitebuilder.md +++ b/content/products/l3/products-websitebuilder.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [products, cms, media, artefact] --- -# Artefact — The site builder behind the signage - -**Status: delivered, retained.** Retired as a general-purpose product; kept as the content engine for the signage. +Retired as a general-purpose product; kept as the content engine for the signage. ## What the artefact is diff --git a/content/products/l3/products-where-woof.md b/content/products/l3/products-where-woof.md index f19652e..b7a249d 100644 --- a/content/products/l3/products-where-woof.md +++ b/content/products/l3/products-where-woof.md @@ -14,9 +14,7 @@ last_verified: 2026-10-26 tags: [products, where-woof, artefact] --- -# Artefact — Where-Woof · deployed and pre-market - -**Status: running, pre-market.** This is the exact wording the site uses, deliberately: deployed is true, commercial is not. +Deployed is true, commercial is not — that is the exact wording the site uses, deliberately. ## What the artefact is diff --git a/content/products/products-business.md b/content/products/products-business.md index 4d87859..a7bdccc 100644 --- a/content/products/products-business.md +++ b/content/products/products-business.md @@ -14,8 +14,6 @@ last_verified: 2026-10-26 tags: [products, business, signage, where-woof, positioning] --- -# Software sold and operated — with the status stated - **Capability statement.** Building software for a client and building software as a product are different jobs. This page is the second one: a market that was overpriced, a substitute built on hardware that costs a fraction of the incumbent systems, customers who adopted it, and the operational cost of keeping it running. ## The commercial story @@ -55,13 +53,6 @@ The third product is different in kind: Where-Woof is a QR and RFID tag system f - **One product is pre-revenue by design.** Where-Woof is deployed before it is sold. Describing it as commercial would be a lie that a careful reader would find in a minute. - **Support is the hidden cost.** Customers running the product for years is the strongest evidence of value and the strongest argument for keeping the surface small. -## Drill-downs +Signage infrastructure is also platform work: [screens as a managed fleet](../platform/l3/platform-signage.md). -- [Commercial signage on commodity hardware](l3/products-signage.md) — level 3 -- [The site builder behind it](l3/products-websitebuilder.md) — level 3 -- [Where-Woof — deployed and pre-market](l3/products-where-woof.md) — level 3 -- [Signage infrastructure — screens as a managed fleet](../platform/l3/platform-signage.md) — level 3 - -## Period and confidence - -`period: 2014–`, anchored on the first freelance product work in the résumé. Confidence is `running`: the products exist and customers still use one of them. Individual products carry their own status, and the two caveats — a rebuild in progress and a launch not yet made — are in the table above rather than in a footnote. +Each product carries its own status, and the two caveats — a rebuild in progress and a launch not yet made — are in the table above rather than in a footnote. diff --git a/content/products/products-overview.md b/content/products/products-overview.md index 318a762..e0acf33 100644 --- a/content/products/products-overview.md +++ b/content/products/products-overview.md @@ -3,7 +3,7 @@ id: products-overview area: products level: 1 title: "Products" -claim: "Identified an overpriced market and shipped a cheaper substitute on commodity hardware — twelve adoptions over time and three businesses still running it." +claim: "Sam identified an overpriced market and shipped a cheaper substitute on commodity hardware: twelve adoptions over time and three businesses still running it." confidence: running period: "2014–" tech: [PHP, JavaScript, three.js, FFmpeg, ImageMagick, HDMI-CEC, Raspberry Pi, ESP32] @@ -13,13 +13,4 @@ public: true last_verified: 2026-10-26 tags: [products, signage, business, where-woof] --- - -# Products - -**Claim.** A digital signage product built as deliberate disruption to thousand-dollar wall systems — three businesses still run it — plus the site builder that produced the marketing sites and a lost-property tag system that is deployed but not yet sold. - -**Status.** Running. The counts are the corrected ones: three businesses active now, twelve adoptions over time, and Where-Woof deployed without a market launch. - -**Why it is on an engineering CV.** Selling, deploying and still supporting software for other businesses is a different discipline from writing it. Two of the three products carry honest caveats that are stated rather than hidden: the signage platform is being rebuilt, and Where-Woof has not gone to market. - -**Start here.** [The commercial story](products-business.md) covers what each product is, what state it is in, and what it cost to run. +Building, selling, deploying and still supporting software for other businesses is a different discipline from writing it, and the caveats on these three products are stated rather than hidden. The commercial story is on the [products page](products-business.md). diff --git a/internal/site/fragments.go b/internal/site/fragments.go index 1e69a44..6522118 100644 --- a/internal/site/fragments.go +++ b/internal/site/fragments.go @@ -120,7 +120,7 @@ func (s *Site) docFragment(d *content.Document) *Fragment { DocID: d.ID, Kind: stage.KindText, Title: d.Title, - subtitle: area.Title + " · " + templates.LevelLabel(d.Level), + subtitle: area.Title, body: templ.Raw(d.HTML), confidence: d.Confidence, docURL: d.URL, diff --git a/internal/site/site.go b/internal/site/site.go index 11ed63f..e276e6e 100644 --- a/internal/site/site.go +++ b/internal/site/site.go @@ -257,7 +257,6 @@ func (s *Site) Home() templates.HomeView { // Doc builds the view for one document at any depth. func (s *Site) Doc(d *content.Document) templates.DocView { area, _ := content.AreaByKey(d.Area) - levelLabel := templates.LevelLabel(d.Level) view := templates.DocView{ Layout: s.Layout(LayoutOpts{ @@ -267,16 +266,14 @@ func (s *Site) Doc(d *content.Document) templates.DocView { Crumbs: s.crumbs(d), Binding: s.RouteBinding(), }), - Doc: d, - AreaTitle: area.Title, - Role: area.Role, - Body: templates.MarkdownBody(d.HTML), - Metrics: make([]templates.MetricView, 0, len(d.Metrics)), - Tech: d.Tech, - Evidence: s.evidence(d), - Backlinks: s.backlinks(d), - SubPages: s.subPages(d), - LevelLabel: levelLabel, + Doc: d, + Role: area.Role, + Body: templates.MarkdownBody(d.HTML), + Metrics: make([]templates.MetricView, 0, len(d.Metrics)), + Tech: d.Tech, + Evidence: s.evidence(d), + Backlinks: s.backlinks(d), + SubPages: s.subPages(d), } for _, m := range d.Metrics { view.Metrics = append(view.Metrics, templates.MetricView{Label: m.Label, Value: content.MetricValue(m.Value)}) @@ -334,7 +331,7 @@ func (s *Site) evidence(d *content.Document) []templates.LinkView { func (s *Site) backlinks(d *content.Document) []templates.LinkView { out := make([]templates.LinkView, 0, len(d.Backlinks)) for _, b := range d.Backlinks { - out = append(out, templates.LinkView{Label: b.Title, Href: b.URL, Kind: templates.LevelLabel(b.Level)}) + out = append(out, templates.LinkView{Label: b.Title, Href: b.URL}) } return out } diff --git a/internal/web/static/site.css b/internal/web/static/site.css index ef5e464..9d3cebb 100644 --- a/internal/web/static/site.css +++ b/internal/web/static/site.css @@ -600,11 +600,6 @@ samp { color: var(--text-muted); } -.pillar-go { - font-weight: 600; - border-bottom: 0; -} - .pillar-count { font-family: var(--font-mono); font-size: 0.74rem; @@ -658,28 +653,6 @@ samp { color: var(--text-dim); } -.honesty { - padding: 1.2rem 1.4rem; - background: var(--surface); - border: 1px solid var(--line); - border-left: 3px solid var(--accent); - border-radius: var(--radius); -} - -.honesty h2 { - margin-top: 0; - font-size: 1.05rem; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--text-dim); -} - -.honesty ul { - margin: 0; - padding-left: 1.1rem; - color: var(--text-dim); -} - .doc-head { padding-bottom: 1.1rem; border-bottom: 1px solid var(--line); @@ -1289,7 +1262,6 @@ figure.media figcaption { .hero, .pillar, .result, - .honesty, .drill-list li, .stage, .prose blockquote { diff --git a/internal/web/templates/components.templ b/internal/web/templates/components.templ index a3d0ca0..632faa6 100644 --- a/internal/web/templates/components.templ +++ b/internal/web/templates/components.templ @@ -264,13 +264,6 @@ templ PillarCard(c PillarCardView) { }

- - if c.Level == 1 { - Start here - } else { - Read the capability page - } - { strconv.Itoa(c.Pages) } pages { c.Confidence }

@@ -301,15 +294,10 @@ templ CodeBlock(c stage.Code) { } -// Footer closes the page with the honesty notes a recruiter needs. +// Footer closes the page. templ Footer(v LayoutView) {