# Release 14 — the social icons within reach, and a clear screen until the first Search Written 2026-09-28 against `main` `6f03805b`. Self-contained for a fresh session. Rules: `plans/tools/implementer-rules.md` (one Opus implementer per slice in a worktree, one read-only Opus review, the parent merges; no cut, no deploy and no restart inside a slice). Record file: `plans/release-14.md` (NEW, created by the first slice to start, the shape of `release-12.md`). Facts below were gathered by two read-only passes on 2026-09-28 and carry `file:line` anchors; anything marked UNVERIFIED is a first step for the implementer, not a fact. **Why 14:** release 12 (the source mirror) is merged and release 13 (`release-13.md`) is a parallel session's plan in flight, with its own slice table, merge order and integration gate. These slices are not added to it. No `r13/*` branch touches any file this plan owns (checked: `git diff --stat main...` is empty for the search and header components on all five). ## The operator's words - 2026-09-25: "What if on the export we didn't load all search items until the user hits search, preventing the possibility of an unexpected system overload on re-visit" — shipped in part as release 8 slice E (`00fb567b`): a query restored from localStorage is held, not run. - 2026-09-28: "the export feature … where the search doesn't fire / show results until the first time hitting search after load", then: "I was expecting a clear screen (easy to see the footer) when it's actually the default state of viewing an index of all videos like when you hit search with no items." - 2026-09-28: "I want the social icons (particularly gumroad) to be more accessible, I'm thinking we move changelog link to footer, theme and dark/light behind a single options modal button, and instead of sites dropdown just link to archilyzer home which lists official instances." - 2026-09-28: a link the operator adds is an entry in `settings.json` `socialLinks`, not code; no vendor file goes into the repository, not even as a test fixture. - 2026-09-28: the homepage's social links more visible; a change to the social-link schema is allowed where it has a reason (built as slice HP, below). - 2026-09-28, on the homepage (slice HP): the Changelog link moves to the footer; Base and Accent move behind a single options button with a gear icon that opens a modal; the gear sits in the social icons' rhythm, and the narrow header carries the icons and the gear in its bar; on Official Instances each site's name uses the bold-lead effect of the sites' own headings, with a slight tint or underline in the site's accent. - 2026-09-28, on the homepage chart: light mode has dark lines and dark mode has light lines. - 2026-09-28, on the homepage: on very small screens the header keeps its mark and drops the word; the social icons scroll only when they still cannot fit. - 2026-09-28: the options menu is dropped for now in favour of a three-way toggle (slice HP on the homepage; slice H2 in the export). A later slice drops the Sepia base in every app and removes the accent picker from the export and editor headers (slice T1, below). - 2026-09-28, on the charts: the chart follows standard practice for light and dark grounds; the foreground-coloured separator lines are withdrawn (a 2 px gap in the surface's colour). - 2026-09-28 (T1): Sepia is dropped in every app, the editor included; a reader who chose Sepia gets Light; readers no longer pick an accent — each site shows its own, and stored accent choices are ignored. - 2026-09-28 (H1/H2): every site's header and the hub's carry the social row with the cycling toggle as the last item of the same group, the homepage's; the Sites dropdown becomes a text link to the Archilyzer home's Official Instances (not on the hub); the header's Hub link goes; Changelog joins the footer after Use with AI; narrow widths behave as the homepage's; the slide-out menu keeps the nav; the editor's header keeps the toggle, with no accent picker. - 2026-09-28 (after the branch's review): on narrow screens a site's header keeps the site's NAME and shows only the link(s) marked for the header; the other social links are in the footer. `featured` now means "keep in the header on small screens" (below 520 px only those; from 520 px every link up to four, those kept first). Built on `r14/two-grounds-headers`. - 2026-09-29 (after the re-review): below the switch the header bar's two gaps go from 12 to 8 px; type, the mark–name gap and the reserved width's margin stay as they are. The switch is written in rem (32.5rem), so it moves with the reader's text size, and the wordmark's reserved width is a minimum. A marked link keeps its configured place in the wide row (as built). - Standing: **no copy** beside any social link: icons with accessible names only. ## Decisions and assumptions Decided by the operator's words: the four header moves; the clear screen on load. ASSUMED by the planner (2026-09-28) — each is one line to reverse, and the operator has been told: | # | Question | Assumed | |---|---|---| | A1 | A link that carries a query (`qt=`, legacy `q=`) | Still runs on load and shows its results — "a shared link is the visitor asking" (release 8's rule, kept). | | A2 | Leaving the search page and coming back within one visit | The listing is still there: the gate is once per page life, not once per mount. | | A3 | Which pages get the clear screen | The single-site search page. The hub only if its home renders the same results component (S1 step 0). | | A4 | A per-site switch | None. Every export site behaves the same. | | A5 | The header's **Hub** link | Dropped with the Sites dropdown; the link to the Archilyzer home covers it. `hubUrl` still parses. | | A6 | The footer's social row | Stays, as well as the header's — nothing disappears for a reader who looks there. | | A7 | Phones | The icons are visible in the header at every width, not inside the slide-out menu. | | A8 | The options modal | None: ruled 2026-09-28, a cycling toggle instead (H2); the accent picker is removed in T1. | | A9 | The homepage app's own header | Carries the social row and the theme toggle since slice HP (built), as well as the footer's Elsewhere row; H3 adds only the anchor. | | A10 | Deferring the summaries fetch until the first Search | NOT in S1. Measured and written up as S2, a candidate, because `/ask` reads the same data. | ## Dependency graph ``` HP (homepage social row, toggle, cards + schema, BUILT, merged) ──► T1 ──► H1 (with H3 folded in) ──► H2 BUILT on r14/two-grounds-headers S1 (clear screen) ── independent of H*; touches no header file S2 (defer summaries) ── after S1, only on the operator's word ``` As built (2026-09-28): T1, H1 and H2 are one branch, `r14/two-grounds-headers`, off `main` `c6b8fc70`, in that order, after the final review's Lows and the chart's gap; H3 is folded into H1 (the homepage's anchor ships with the link to it). The record is `release-14.md`, "Branch `r14/two-grounds-headers`". As planned: H1 then H2 stacked on one branch (both rewrite `Header.tsx` and `MobileMenu.tsx`), branched after HP merges, with H3 and S1 on their own branches, T1 after HP and before the production deploy. As built: the one branch above; S1 is next, on its own. ## Verified facts the implementer must not re-derive **The header** (`export/app/components/Header.tsx`): - Sticky, `min-h-14` (56 px), one breakpoint at `md` (768 px) (`:68-72`; `plans/export-responsive-redesign.md:55-62`). - Wide: brand (`:73-80`), nav `hidden md:flex` from `navLinks` (`:50-56`, `:82-92`), then the right cluster `hidden md:flex` (`:94-114`): `SiblingSwitcher` (`:96`), Hub backlink (`:97-106`, shown when `isSite && resolvedHub !== site.siteUrl`, `:35-40`), Changelog (`:107-112`), `ThemeMenu` (`:113`); then, at EVERY width, `ThemeToggle` (`:117`) and the `MobileMenu` trigger (`:118`). - `MobileMenu.tsx` is a Radix `Sheet` from the right carrying nav + Offline + Changelog (`menuLinks`, `Header.tsx:61-65`), the Hub backlink (`MobileMenu.tsx:83-92`), the Sites groups, and Base/Accent as native radiogroups (`:124-147`) — it deliberately does not nest `ThemeMenu`'s dropdown ("a focus-trap fight", `:30-35`). - The Sites dropdown is **related sites, not official instances**: `SiblingSwitcher.tsx:21-62` over `resolveRelatedSites(site, listSites())` (`common/lib/site.ts:146,203`). The footer renders the same groups in `