Phase 7 is mostly authored assets. This commit is the asset half; the
template half is a Builder child issue because this phase must not write
application code.
DoD items satisfied or advanced:
- [x] Eight diagrams present, both themes, readable at 1x and on mobile
8 SVGs, one byte-identical <style> block across all 8 (one visual
language by construction). Light and dark resolve from a single file
via prefers-color-scheme, verified per file in Chrome: 8/8 return two
distinct palettes. Geometry verified with getBBox(), not estimated:
0 findings after fixing 74 (text overflow, partial overlap, empty
text, out-of-viewBox). Mobile type at the 900px minimum is 14.1/12.2px.
- [x] Six code exhibits with a two-sentence rationale each
212 verbatim lines across five eras, copied with cp/sed from the
read-only archive. Every rationale is exactly two sentences about why
the code is good; every exhibit also carries an honest_note, and where
the code is not good the note says so (the 3,400-line procedural PHP
script is presented for its operational judgement, not its structure).
- [~] Every image optimised; total page weight budgeted and recorded
BUDGET.md records measured raw and gzip weights for all 15 served
files: 63,802 B raw / 13,220 B gzipped. Zero rasters by design. Page
weight of a real page is not measurable until Phase 2 templates and
Phase 3 serving exist, and is recorded as open rather than asserted.
- [x] Archive never linked or exposed
No mount paths or volume names under content/. Provenance recorded as
"private archive, path withheld".
- [ ] Client wall reads as deliberate -> needs markup/CSS (Builder)
- [ ] Lighthouse held at >= 95/95 -> needs a served page (Phase 3)
Also: the client wall is authored as data (45 entries, 44 distinct names) with
the 45-vs-46 discrepancy and the Diajio -> Diageo correction recorded
rather than papered over. No commercial marks are enabled: that is a
permission decision for Sam, so availability is recorded and permission is not
implied.
3.7 KiB
content/assets — authored exhibits
Everything the site shows that is not Markdown prose. Authored in Phase 7; wired into templates by Phase 2's builder.
content/assets/
├── BUDGET.md measured weights for every asset, and the budget
├── VERIFY.md what was checked, with the output pasted in
├── diagrams/ 8 SVGs, light and dark in one file each
│ ├── README.md the visual language and the presentation contract
│ └── manifest.yaml id, area, level, title, alt text per diagram
├── code/ 6 verbatim excerpts, 212 lines, 5 eras
│ ├── README.md the rules these follow
│ └── manifest.yaml era, language, shows, rationale, honest note
└── logos/
└── clients.yaml the client wall: 45 entries, 44 distinct names
Three decisions worth knowing
The client wall is type, not logos. Forty-five names in one typeface at one size on an even grid. Nothing is an image, so nothing can break, and no client is visually ranked above another. Ten client marks do exist in Simple Icons; none is enabled, because using a company's mark on a public portfolio is a permission question for Sam, not a design choice for an agent.
Diagrams carry both themes in one file. Not two files that can drift: one
<style> block with the light palette and the same selectors repeated under
prefers-color-scheme: dark. The eight files therefore share one palette by
construction.
Code excerpts are copied, never retyped. Including the defects. An excerpt that has been tidied is a claim, not evidence — and this site's whole argument is that the claims are checkable.
What is wired and what is not
| DoD item | State | Evidence |
|---|---|---|
| Client wall reads as deliberate, no broken images, no placeholders | assets done, markup not | logos/clients.yaml — 45 entries, zero image references by design. The grid is CSS and belongs to Builder |
| Eight diagrams, both themes, readable at 1× and on mobile | done | VERIFY.md §1–§3: 0 geometry findings, 8/8 resolve two palettes, rendered widths measured |
| Six code exhibits with a two-sentence rationale each | done | code/manifest.yaml, VERIFY.md §5 |
| Every image optimised; total weight budgeted and recorded | assets done, page weight not | BUDGET.md. Zero rasters. A full page cannot be weighed until a page exists |
| Lighthouse ≥ 95 / 95 after assets | not measurable yet | Needs a served page (Phase 3) |
| Archive never linked or exposed | done | VERIFY.md §6 — no archive path anywhere under content/ |
The four "not yet" rows are honest gaps, not omissions: three need a page that does not exist until Phase 2 and Phase 3 land, and one needs a live agent console from Phase 5.
Consuming these from templates
// diagrams: "assets/diagrams/01-homelab-topology.svg"
<img src="/assets/diagrams/01-homelab-topology.svg"
alt="{{ .Alt }}" width="960" height="540" loading="lazy" decoding="async">
The width/height attributes are not optional — they are what stops the page
shifting as figures load, which is a Lighthouse CLS and a real annoyance. alt
comes from manifest.yaml; if it is set to "" the SVG's own <title>/<desc>
are not read out.
Figures go inside a horizontally scrollable wrapper (diagrams/README.md), or a
960 px schematic becomes 5 px type on a phone.
Adding an asset
- Put the file in the right folder; no external references of any kind.
- Add an entry to the folder's
manifest.yamlwithaltand, for code,rationaleandhonest_note. - Re-measure and update
BUDGET.md. A budget nobody updates is a wish.