Files
ai-resume/content/assets/diagrams/08-era-timeline.svg
Documenter da18ab2237 Phase 7: authored assets (diagrams, code exhibits, client wall, budget)
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.
2026-10-26 17:35:15 +11:00

107 lines
5.9 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 540" width="960" height="540" role="img" aria-labelledby="ttl dsc">
<title id="ttl">Era timeline</title>
<desc id="dsc">Five consecutive platform eras from Flash and ActionScript through jQuery and PHP, React and TypeScript, server-driven Go with HTMX, to agent systems, on an axis from 2000 to 2026. Era boundaries are approximate; the bands show order.</desc>
<style>
text{font-family:ui-sans-serif,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;fill:#1b222b;font-size:15px}
.hd{font-size:15px;font-weight:600}
.sub{font-size:13px;fill:#5b6673}
.cap{font-size:12px;fill:#5b6673;letter-spacing:.06em;text-transform:uppercase;font-weight:600}
.big{font-size:19px;font-weight:600}
.node{fill:#f4f6f8;stroke:#c3ccd6;stroke-width:1.4}
.node-a{fill:#e9f1fd;stroke:#1a6bc4;stroke-width:1.4}
.node-t{fill:#e6f4f2;stroke:#0f766e;stroke-width:1.4}
.node-w{fill:#fdf1e3;stroke:#b45309;stroke-width:1.4}
.zone{fill:none;stroke:#aab4c0;stroke-width:1.4;stroke-dasharray:7 6}
.rule{stroke:#d0d7df;stroke-width:1}
.ln{stroke:#6b7684;stroke-width:1.6;fill:none}
.ln.d{stroke-dasharray:6 5}
.ln.a{stroke:#1a6bc4}
.ln.t{stroke:#0f766e}
.ln.w{stroke:#b45309}
.mN{fill:#6b7684}
.mA{fill:#1a6bc4}
.mT{fill:#0f766e}
.mW{fill:#b45309}
.dot{fill:#6b7684}
.tick{stroke:#aab4c0;stroke-width:1.2}
@media (prefers-color-scheme: dark){
text{fill:#e7edf4}
.sub,.cap{fill:#98a4b3}
.node{fill:#182028;stroke:#35424f}
.node-a{fill:#11253d;stroke:#5aa2f0}
.node-t{fill:#0d2624;stroke:#38b3a6}
.node-w{fill:#2a1d10;stroke:#d98b3f}
.zone{stroke:#43525f}
.rule{stroke:#2c3743}
.ln{stroke:#8496a6}
.ln.a{stroke:#5aa2f0}
.ln.t{stroke:#38b3a6}
.ln.w{stroke:#d98b3f}
.mN{fill:#8496a6}
.mA{fill:#5aa2f0}
.mT{fill:#38b3a6}
.mW{fill:#d98b3f}
.dot{fill:#8496a6}
.tick{stroke:#43525f}
}
</style>
<defs>
<marker id="aN" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="mN" d="M0,0 L10,5 L0,10 z"/></marker>
<marker id="aA" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="mA" d="M0,0 L10,5 L0,10 z"/></marker>
<marker id="aT" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="mT" d="M0,0 L10,5 L0,10 z"/></marker>
<marker id="aW" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="mW" d="M0,0 L10,5 L0,10 z"/></marker>
</defs>
<text x="24" y="40" class="big">Twenty-five years, five platform shifts</text>
<rect x="28" y="96" width="176" height="118" rx="7" class="node"/>
<text x="42" y="126" class="cap">01</text>
<text x="42" y="144" class="hd">Flash / ActionScript</text>
<text x="42" y="168" class="sub">classes, imports,</text>
<text x="42" y="186" class="sub">encapsulation</text>
<text x="42" y="212" class="sub">client wall</text>
<path d="M205,155 L211,155" class="ln"/>
<rect x="212" y="96" width="176" height="118" rx="7" class="node"/>
<text x="226" y="126" class="cap">02</text>
<text x="226" y="144" class="hd">jQuery + PHP</text>
<text x="226" y="168" class="sub">media pipelines,</text>
<text x="226" y="186" class="sub">FFmpeg, ImageMagick</text>
<text x="226" y="212" class="sub">delivery at scale</text>
<path d="M389,155 L395,155" class="ln"/>
<rect x="396" y="96" width="176" height="118" rx="7" class="node"/>
<text x="410" y="126" class="cap">03</text>
<text x="410" y="144" class="hd">React + TypeScript</text>
<text x="410" y="168" class="sub">typed service</text>
<text x="410" y="186" class="sub">layers, tRPC</text>
<text x="410" y="212" class="sub">typed front ends</text>
<path d="M573,155 L579,155" class="ln"/>
<rect x="580" y="96" width="176" height="118" rx="7" class="node node-a"/>
<text x="594" y="126" class="cap">04</text>
<text x="594" y="144" class="hd">Server-driven</text>
<text x="594" y="168" class="sub">Go + templ + HTMX,</text>
<text x="594" y="186" class="sub">SQLite</text>
<text x="594" y="212" class="sub">this site</text>
<path d="M757,155 L763,155" class="ln"/>
<rect x="764" y="96" width="176" height="118" rx="7" class="node node-t"/>
<text x="778" y="126" class="cap">05</text>
<text x="778" y="144" class="hd">Agent systems</text>
<text x="778" y="168" class="sub">harnesses, routing,</text>
<text x="778" y="186" class="sub">retrieval</text>
<text x="778" y="212" class="sub">AI estate</text>
<path d="M28,268 L932,268" class="ln"/>
<path d="M28,262 L28,274" class="tick"/>
<text x="28" y="292" class="hd" text-anchor="start">2000</text>
<path d="M546,262 L546,274" class="tick"/>
<text x="546" y="292" class="hd" text-anchor="middle">2020</text>
<path d="M932,262 L932,274" class="tick"/>
<text x="932" y="292" class="hd" text-anchor="end">2026</text>
<text x="28" y="314" class="sub">employed delivery</text>
<text x="546" y="314" class="sub">independent engineering practice</text>
<text x="932" y="314" class="sub" text-anchor="end">now</text>
<rect x="28" y="348" width="904" height="118" rx="7" class="node "/>
<text x="42" y="376" class="hd">What the five eras have in common</text>
<text x="42" y="400" class="sub">· every era was learned by shipping with it, not by reading about it</text>
<text x="42" y="424" class="sub">· the artefacts survive: a Flash class, an easing engine, a media pipeline, a typed service layer, a 33-line derivation</text>
<text x="42" y="448" class="sub">· the current era is the first where platform, agents and edge hardware are one system</text>
<text x="28" y="500" class="sub">Era boundaries are approximate: employed 2000–2020 per the résumé, independent practice 2020–.</text>
<text x="932" y="500" class="sub" text-anchor="end">six code exhibits span eras 1–5</text>
</svg>