Repository navigation
Redesign: About page - #41
Conversation
About gets the home's intro (label, title, text and the topic map at the same place), then one part per island of the map: the heading under the intro text, staying in view while its part is read, and the text under the map in Newsreader 20px/32px (18px/29px on phones). Below 1120px the parts are one column of up to 720px. The map's dots link to the parts. The Person JSON-LD is kept, and the page drops the legacy class. Going from Home to About moves the map without drawing it again: Layout now renders Astro's ClientRouter on the pages with the intro map (introMap, on by default without the text column), held to Home and About. TopicMap carries its canvas over to the next page's map and Background keeps its element; links to any other page load in full, as before, and nothing is prefetched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2
The router was on every page without the text column, so the temporary /map-preview/ had it too: going from there to About kept map-preview's pick listener running on About. src/lib/intro-pages.ts now lists Home and About, and Layout and IntroRouter both read it, so the pages that get the router and the pages it goes to can't drift apart. Layout's introMap prop is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2
|
Preview: https://pr-41-meaningfool.josselin-perrus.workers.dev Built from 1f36b5e with the latest content. The link stays the same and shows the latest push. Search engines are asked not to index it. |
|
Independent review checkpoint: accepted at Setup: Node 24.22.1, Bun 1.4.4, content submodule at Note on the base: What I checkedIssue #33 requirements
Against the prototype (
The move, on this branch alone (legacy Home) and merged with
Outside the scope
Notes, not blocking: the 170-byte Generated by Claude Code |
Implements #33 (part of #35). It builds on #36 (foundations), #37 (share images), #39 (article page) and #38 (background and topic map), and runs alongside #31 (home).
What changes
src/pages/about.astro) follows the prototype's#aboutview. Its<main>drops thelegacyclass.Intro, with "About", the title "Customer success, / Product, / AI agents." (the full stop in the accent colour) and the issue's text. The map's dots link to the three parts:links={{ 'customer-success': '#customer-success', product: '#product', 'ai-agents': '#ai-agents' }}..chapter), written in the page.prose.cssstyles links differently (accent text instead of an accent underline), so I didn't reuse it.meaningfool/skillsrepository; I cloned it and checked thatskills/boundary-model/(with its README) is onmain./share.png).ClientRouter, limited to Home and About. It is built into the shared pieces, so Home gets it with no change toindex.astro:src/lib/intro-pages.tslists/and/about/.Layoutrenders the newIntroRouter.astroin the<head>of those two pages only.transition:animate="none"for the root), and a plain swap where view transitions aren't supported (fallback="swap").<topic-map>. It records what each canvas has drawn by canvas (aWeakMap), so the next page's map sees the canvas as drawn and only draws it again if its size changed by more than a tenth.<page-background>element, with its drawing and listeners, and its hole moves to the next page's map. This applies only to Home and About; articles have their own mask.astro:before-preparationsends the browser there directly, so the page isn't fetched twice. Articles, activity logs,/404.html,/documents/and/map-preview/have no router.prefetch: falseinastro.config.mjs). With the router, Astro would otherwise prefetch every link the pointer goes over.LayoutandBackgroundonly gain things:Backgroundgets an optionalpersistprop, andIntroand TopicMap's API (links,topicmap:pick,data-picked) are unchanged.legacy.cssstays.For #31: what the home can rely on
/is insrc/lib/intro-pages.ts. PuttingIntroin the page, inside aLayoutwithouttextColumn, is all it takes for the map to stay drawn between Home and About.<topic-map>is always its own, with button dots,aria-pressed, nodata-pickedon arrival, and no listeners from About. About's map has link dots. So the issue in Redesign: page background and topic map, drawn from prepared images #38, where a kept element keeps the markup of the page it came from, doesn't arise.document.addEventListener('topicmap:pick', …)also hears About's dots after a visit to About. Return early when not on Home, for exampleif (!document.getElementById('writing')) return;.data-picked, the hidden rows) rather than in a module variable, or reset it onastro:page-load.astro:page-load.Choices to check
linksintends. As in the prototype, they scroll smoothly to the part, 24px from the top. Unlike the prototype, the address gets the part's#fragmentand Back returns to where you were. The smooth scroll is CSSscroll-behavior: smooth, set only while About is shown and only without reduced motion, so the native fragment move (focus, screen readers) is kept. It also makes the skip link and a direct/about/#productscroll smoothly.data-astro-transition-persist, the attributetransition:persistwrites, set by hand. The directive would also add Astro's view-transition CSS (keyframes and a reduced-motion rule) to every page with the background,/404.htmland/documents/included. If an Astro upgrade ever renames the attribute, the map and background are simply drawn again on each move.Layoutpage, including articles and logs, now has ClientRouter's.astro-route-announcerrule (about 170 bytes) in its CSS. It only applies to an element the router creates, and those pages render pixel-identically.pushState, automatic setup included, so they are still counted. The router doesn't run the injected beacon script a second time, since itssrcis the same. I couldn't check this end to end locally, because the beacon is only added at Cloudflare.Validation
Head commit
1f36b5ea7e5746d0e16bfe77f1bd158574352ab2, on base78b78fdcbeda08341f25c4c84560d04d8aa5d36f(origin/redesign, with #38). Node 24.22.1, Bun 1.4.4, content submodule atbf783ba(git submodule update --init --remote; the pointer is not changed).bun install, thenbun run buildfrom an emptydist/: passes, 63 pages.bun run test:documents: 10 tests, 10 passed.astro check(TypeScript 6, in a scratch copy): 0 errors, 0 warnings, 0 hints.docs/redesign/prototype/index.html#about):@paper-design/shaders@0.0.81, and the site's Newsreader in place of Google Fonts'.Introthe way Redesign: home page #31 will; not committed): 43 and 41 checks passed. In short:/about/once.aria-pressed, and the pick is gone after visiting About./map-preview/→ About case found in review is a full load, with no pick left on About./404.html,/documents/,rss.xml, the sitemap,_redirects,_headers,robots.txtand the share images.llms*.txtdiffer only in their timestamp..astro-route-announcerrule./map-preview/gains the same rule, TopicMap's new script and the canvas attribute./, three articles, a daily log, an unknown URL,/documents/and/map-preview/were compared at 1440px and 375px, base against head.agent-frameworks-for-the-rest-of-us) matched pixel for pixel.structured-extraction, andthoughts-on-human-ai-collaboration, which has YouTube embeds.thoughts-on-human-ai-collaborationmatched at both widths.structured-extractiondiffered once more, but it also differs between two loads of the base build itself. Base against head then matched 3 times out of 3.Review gate
4 passes over the whole change:
/map-preview/included. Going from there to About kept map-preview's pick listener running on About. The pages are now listed once, insrc/lib/intro-pages.ts, whichLayoutandIntroRouterboth read. The other points it raised are explained under "Choices to check".🤖 Generated with Claude Code
https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2