Skip to content

docs: ADR-0016 records the CLAUDE.md typography fix - #3

Merged
neramc merged 15 commits into
mainfrom
claude/linux-distro-webapp-astro-5dn8qn
Oct 16, 2026
Merged

neramc merged 15 commits into
mainfrom
claude/linux-distro-webapp-astro-5dn8qn

Conversation

@neramc

@neramc neramc commented Oct 16, 2026

Copy link
Copy Markdown
Owner

No description provided.

claude added 15 commits October 4, 2026 03:53
Some projects (antiX, Bodhi Linux, SparkyLinux) publish their logo only as
a raster image. Tracing it into SVG would modify the official mark, so the
catalog now accepts <slug>.png, prepared by scripts/assets/raster-logo.ts
(trim + fit to 256 px, no recoloring) and checked by validate-catalog.
OG images take the logo as a data: URI of either type. ADR-0012.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
…o os sources

Release modules for seven more catalog distros, each read from the
project's own index (Kali SHA256SUMS, manjaro.org download payload,
deepin/Devuan/Parrot release directories, KDE neon image listings,
TUXEDO OS checksums), with the first synced data. A dry run right after
reports all seven unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
The header, footer, favicon, apple-touch-icon and Open Graph images now
show Tux (File:Tux.svg on Wikimedia Commons, unmodified, svgo-optimized).
The mark is a cached <img> instead of inline SVG so its 12 KB (gzip) load
once. Credits for Larry Ewing and The GIMP, Simon Budig's required notice
and Garrett LeSage (CC0) are in src/assets/brand/README.md and on /about/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
A new sync kind, popularity, ranks catalog distros by the previous UTC
day's English Wikipedia pageviews (Wikimedia Pageviews REST API, CC0,
agent=user), with the day before kept as prevRank. One request per
article through the polite client, a no-op once the day is stored, a
majority-published-day rule and a 10-minute budget. Retries now honour
Retry-After. ADR-0013 amends ADR-0008 for this one signal.

serve.ts and the Playwright config accept a build snapshot (--root,
--config, E2E_PORT/E2E_ROOT/E2E_CONFIG) so parallel checkouts can test
side by side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
GNOME app-icon tiles (AppTile) for every distro logo, libadwaita accent
palette and depth tokens (raised top bar, icon drop shadow, popover-level
hover elevation, OSD buttons), use-case chips, two callout looks, a
simpler main menu that replaces the mobile bottom bar, a one-row footer,
badge-free distro cards, and the quiz renamed to 배포판 추천. ADR-0014.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Home: a Flathub-style "오늘의 인기 배포판" carousel on top (yesterday's
English Wikipedia pageviews, editorial fallback), slides tinted with the
nearest libadwaita accent of each official logo, then use-case chips,
recommended distros, grouped new releases and a guide row. An APG
carousel shell (rotation control, OSD arrows, dots, no autoplay under
reduced motion) with a 1.9 KB script.

Detail: two actions, eight key facts plus "더 보기", last-checked time,
fewer link sublabels, three related distros. Install guide and learn
pages no longer scroll sideways on phones; sources fold into a details
row. Catalog filters live in one disclosure with use-case chips; search
shows typed results with logos; learn uses list rows and a two-column
chapter layout; finder reasons are text; compare has fewer rows; the
family timeline is grouped by decade; releases group Ubuntu flavors;
About explains the ranking and folds the logo credits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Five project skills in .claude/skills/, loaded by local and cloud sessions:
frontend-design (anthropics/claude-plugins-official, Apache-2.0, verbatim)
and frontend-ui-engineering, browser-testing-with-devtools,
performance-optimization and code-review-and-quality (addyosmani/
agent-skills, MIT), each with a "Linuxhub overlay" block that maps the
generic advice to Astro + vanilla islands, the CSP, Adwaita tokens, Bun
and lab-only performance evidence. WCAG 2.2 and LCP/INP/CLS references
are adapted from addyosmani/web-quality-skills (MIT) instead of
installing its overlapping skills. Provenance and local changes are in
.claude/skills/README.md.

.mcp.json adds a pinned chrome-devtools-mcp@1.10.1 server (headless,
isolated profile, telemetry and CrUX lookups off) that uses the
preinstalled Chromium in cloud containers. CLAUDE.md gains the web
quality rules and the 11-step UI process; ADR-0015 records the choice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage A of applying the approved design system (ADR-0016) — tokens and the
shared Adwaita components only; pages keep working unchanged and migrate in
the following stages.

- Tokens: an eight-step type scale (title-1 32/28, title-2 22, title-3 19,
  heading 16, body 16, prose 17, control 15, caption 13, code 14) with
  per-level line heights, ko headings at 700, an English prose measure of
  55ch (~70 characters), layout tokens (section/grid spacing, control and
  row heights with 44/56px on coarse pointers, sidebar/aside widths), one
  --tint-bg-color for tinted surfaces (dark: 25% oklab instead of muddy
  sRGB mixes) and a card ring in prefers-contrast.
- base/prose CSS: token-based heading and prose rhythm (36/24/18/12), code
  blocks 14px without the inset ring, layout utilities (.page, .section,
  .card-grid, .button-row), scroll lock while a dialog is open, a
  [data-js-only] hook, toast without the translate.
- Components: ActionRow prefix/title slots and an aligned property grid,
  BoxedList section titles, ExpanderRow class/flush, Button control height,
  Card hover kept on the popover shadow, Callout note/tip/warning with one
  icon per meaning, Chip check cue for the current state, toggle group,
  nav row, SearchEntry, spinner, neutral Badge tones with AA contrast, a
  warning Banner, AppTile dark face #deddda, shared checksum style, and
  forced-colors edges for cards, lists, callouts, buttons, chips, entries.
- Domain/MDX: DocSources on BoxedList, DistroCard 3-line taglines, Tabs on
  the expander look without nested code surfaces, Steps/Anchor/Latest fixes,
  formatDate with one format per locale and a client-safe formatBytes.
- Docs: ADR-0016, /design/ showcase, CLAUDE.md typography tokens.

No new dependencies and no new JavaScript. Verified on the production
build: lint, check, 79 unit tests, 64/64 e2e, Lighthouse 99–100 on the
gated pages, no horizontal scroll at 320/390/768/1366 in light and dark.
Inline CSS grows by 0.92–1.07 KB gzip per page (ADR-0016 budget).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage B of ADR-0016.

- nav.ts: one table keyed by name. The header shows Distros, Linux guide,
  Distro finder and Compare (Compare replaces Family, which moves to the
  main menu with Releases and About); the footer picks its links by name
  instead of by position.
- Header: the primary nav is the toggle group (raised current item, other
  labels dimmed because the raised item is only ~1.2:1 on the trough,
  system Highlight in forced colors) and shows from 768px instead of 900px;
  every header button is 44×44; the search trigger is a flat icon button
  with a tooltip, and from 1100px the entry look with dimmed Ctrl/K caps
  and aria-keyshortcuts; focus rings on toggles sit in the trough so they
  keep ≥ 3:1 on the current item in dark mode.
- Main menu: shared nav rows (old .menu-item CSS removed), primary
  destinations first below 768px, closes when keyboard focus leaves it,
  the language row keeps the query and hash (not the skip link's #main) at
  click time while the server link stays path-only, style switcher hidden
  without JavaScript, forced-colors edges and Highlight rings.
- Footer: no top border, 44px links on touch screens, 1000px breakpoint,
  "© year Linuxhub" kept on one line; captions use the caption line height.
- Skip link is a 44px target.
- e2e: Compare is the current header item on /compare/, Tab past the menu
  closes it, the language link keeps ?d= (67 tests).

No new dependencies. theme.ts grows by ~0.2 KB gzip (menu focus-out and
language query). Verified on the production build: lint, check, 79 unit
tests, 67/67 e2e, Lighthouse 100 on /, /distros/fedora/ and /learn/, no
horizontal scroll at 390/768/1366 (ko/en, light/dark); the header fits at
768–1366px in Korean and English.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage C of ADR-0016: home, catalog, distro detail with the download
wizard layout, and the install guide.

- New shared pieces: site/Breadcrumb (i18n label, 24px links) and
  AppHeader (128/64px tile, one h1, dim tagline, meta caption, actions row)
  used by the detail and install pages; BoxedList headers reuse
  .section-header; Banner gets a warning icon.
- Home: page/section/card-grid utilities instead of page copies; New
  releases as a list of rows with 36px tiles and one date format; slide
  title at title-3 under the 22px section h2, no decorative star, one
  date format, "View details"; use-case chips in one scrolling line at
  every width.
- Detail: Download in the hero is a default button, so the wizard's final
  download is the only suggested action on the page; the second action is
  the install guide or, for unwritten guides, the official install docs;
  two columns only when an overview exists, otherwise one column without
  the empty overview band; related distros as rows; facts as aligned
  property rows with family and base on separate rows, list formatting,
  and EOL error/warning badges computed at build time; stale data as a
  warning banner.
- Wizard (server side): boxed lists, a "Download ISO · size" label shared
  with download.ts through src/lib/releases.ts, the shared checksum style,
  the true reason when only the official page can be offered, no links to
  #verify/#usb on unwritten guides.
- Install guide: sidebar contents from 1000px and a top disclosure below;
  unwritten guides are noindex, left out of Pagefind and the sitemap, and
  show one honest empty state with a single official-docs action.
- Decisions recorded in ADR-0016: no tinted hero band on detail pages (a
  dim tagline cannot sit on a tint), DistroCard taglines up to three lines.
- e2e: stub detail and install pages, at most one suggested button in the
  first viewport (71 tests).

No new dependencies. download.ts +40 B gzip (shared label helpers).
Verified on the production build: lint, check, 95 unit tests, 71/71 e2e,
Lighthouse 100 on /, /distros/, /distros/fedora/, the Fedora install guide
and /en/; no horizontal scroll at 390/1366 in light and dark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage D of ADR-0016.

- ComboRow (new adw component): the wizard, catalog facets and compare
  pickers use one combo row that wraps instead of cutting values, so no
  select value is truncated at 320px. ChoiceGroup (new) for the finder:
  fieldsets with radio rows, check rows for multiple answers, and a linked
  toggle group from 600px for the short questions — no pills; the
  unchecked toggles are dimmed so the choice is visible beyond the ~1.2:1
  raised fill, and forced colors use Highlight.
- Search dialog: no form method=dialog (Enter no longer closes it); Enter
  opens the first result of the current query; title and 44px close; the
  shared SearchEntry; result rows on nav rows; loading only after 300 ms
  with aria-busy; an 8 s timeout and a retry that works (no memoized
  rejection); error with icon, error color and a link to the catalog;
  empty and truncated states; a full-height sheet below 600px that a tap
  inside does not close; the single-key "/" shortcut is gone (WCAG 2.1.4).
- Download wizard: fetch timeouts and ok checks; while data loads the link
  and checksum are never stale (no href, aria-disabled, spinner after
  300 ms, announced once); failures restore the selects and show an error
  row with retry; releases and mirrors fail independently; mirrors grouped
  by country without the star; the timezone fallback says so; the
  checksum copy button works on detail pages, and a failed copy selects
  the digest and explains it inline.
- Catalog: SearchEntry, neutral filter count, Reset always visible (aria-
  disabled when nothing is set, full-strength focus ring), an inline empty
  row naming the query whose reset returns focus to the entry.
- Toast: a live region present before the first message, 4 s, replaced not
  stacked, forced-colors edge; copy strings and icons only on pages with
  copy buttons.
- Compare: a note for unknown ids, an empty state, "None" instead of "—",
  list formatting in cells.
- The mirror suggestion without any location stays the top-ranked
  official mirror, as before the redesign.
- e2e: 19 new tests for these states (90 in total).

No new dependencies. Page JS stays under 9 KB gzip on every page (detail
page 8.8 KB with the wizard states and copy). Verified on the production
build: lint, check, 108 unit tests, 90/90 e2e, Lighthouse perf 99–100 with
a11y/BP/SEO 100, screenshots of every state at 390/1366 light and dark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage E of ADR-0016: Linux guide, finder, compare, family, releases,
about, 404 and the /design/ showcase.

- DocLayout (new): the install guide and the Linux guide chapters share
  one layout — a 240px sidebar from 1000px and a closed contents
  disclosure below — instead of two copies; its CSS ships only on those
  pages. Chapter navigation on nav rows with the current chapter's
  sections from Toc; no eyebrow kicker (group and reading time are one
  caption); related distros and the previous/next pager as list rows
  (the previous row points back).
- Compare: one table — from 768px a real table with a sticky first
  column and 36px tiles in the column heads; below 768px each attribute is
  a stacked group with one labelled line per distro, keeping table roles,
  so all three distros are readable at 390px without sideways scrolling.
- Family: one column without holes; each family is a list of nav rows
  with 24px tiles and 1px connectors; the timeline is one row per decade
  with "year name" links instead of a cloud of 26 pills.
- Releases: one list per month with 36px tiles and the day as suffix.
- About: lead utility, logo credits in a closed expander (opens for
  #logos) with the shared table, table strings in i18n, lang="en" on the
  English license texts of the Korean page.
- Finder and learn index on the page/page-header utilities; 404 keeps one
  h1 and one action; StatusPage loses its level prop; dead card/status
  CSS removed; a lone button in a button row keeps its own width.
- e2e: compare at 390px and the learn chapter disclosures (94 tests).

No new dependencies, no new JavaScript. Every page stays within +1.5 KB
gzip inline CSS of the pre-redesign baseline (compare +1483 B, chapter
pages +918 B). Verified on the production build: lint, check, 116 unit
tests, 94/94 e2e, Lighthouse performance 100 on every run for /learn/,
a chapter, /compare/, /family/, /releases/, /about/ and the install
guide; screenshots at 320/390/1366 light and dark with a clean console.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Stage F of the design-system rollout (ADR-0016).

- Carousel: no auto-rotation. The rotate button, its two strings, the
  timer and the pause logic are gone; it moves only on the arrows, on
  ArrowLeft/Right on the arrows (modifiers are left to the browser) and
  on swipe. On a slide link the arrow keys do nothing, so focus is never
  dropped. The arrows sit over the card only while the carousel is at
  least 44rem wide (a component container query); below that they flank
  the dots, so the slide text never gets squeezed. Dots fade with
  opacity only. Inline script 1878 -> 1261 B raw.
- Header: the 768px nav and 1100px search-entry breakpoints each wrap a
  rem container query on the header box, so 200% text keeps them in the
  main menu instead of overflowing the header.
- Touch targets: new token --target-size (24px, 44px on coarse pointers)
  and one .target-link utility for text links that stand alone
  (breadcrumb, wizard verify links, ranking link, sources, logo credits).
  Undersized touch targets across 21 pages: 679 -> 0.
- e2e: carousel tests rewritten for the no-autoplay behaviour; a11y.spec
  adds /learn/, a chapter, an install guide and a 390x844 pass.
- ADR-0016 amended and closed with the final before/after numbers.

No new dependencies. Lighthouse mobile medians 100 on 8 URLs, CLS 0,
TBT 0, LCP 1424-1551 ms; page JS <= 8913 B gz; inline CSS +1045 to
+1533 B gz against the pre-redesign baseline (ceiling 1536 B).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8A7WuJeLxG7aBvK6xfgC9
@neramc
neramc merged commit 7bce084 into main Oct 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants