redesign 00 — foundation: the redesign stack (rails, covers, typographic system) #5

Merged
michalvankodev merged 46 commits from redesign/00-foundation into main 2026-09-10 16:09:31 +02:00

What

The redesign foundation lands on main — the full slice stack merged into redesign/00-foundation (docs + decided feature set, terminal chrome, typographic system, layout rails, article covers, syndication/perf and a11y sweeps).

Highlights of the final slices:

  • One content rail: all standard subpages share the masthead max-w-image rail (container lives in base.html, overridable page_container block); custom layouts opt out
  • Article cover field: per-post cover image, cover: false to disable; thumbnail keeps feeding listings + og:image
  • Further reading: header spans exactly the width of its preview list

Deploy

Merge triggers the Forgejo Actions deploy pipeline (test → release build → SSG export → rsync to katelyn).

Stack maintenance policy

We always merge slices into redesign/00-foundation with rebase-merge (keeps the branch linear).

Do NOT rebase the whole stack after each merge. Only the branch we are about to work on next gets updated — rebase it onto the refreshed redesign/00-foundation (and retarget its PR base if needed) just before starting on it. The remaining stacked branches stay untouched until their turn comes, saving per-merge churn.

## What The redesign foundation lands on `main` — the full slice stack merged into `redesign/00-foundation` (docs + decided feature set, terminal chrome, typographic system, layout rails, article covers, syndication/perf and a11y sweeps). Highlights of the final slices: - **One content rail**: all standard subpages share the masthead `max-w-image` rail (container lives in `base.html`, overridable `page_container` block); custom layouts opt out - **Article `cover` field**: per-post cover image, `cover: false` to disable; `thumbnail` keeps feeding listings + og:image - **Further reading**: header spans exactly the width of its preview list ## Deploy Merge triggers the Forgejo Actions deploy pipeline (test → release build → SSG export → rsync to katelyn). ## Stack maintenance policy We always merge slices into `redesign/00-foundation` with **rebase-merge** (keeps the branch linear). **Do NOT rebase the whole stack after each merge.** Only the branch we are about to work on next gets updated — rebase it onto the refreshed `redesign/00-foundation` (and retarget its PR base if needed) **just before starting on it**. The remaining stacked branches stay untouched until their turn comes, saving per-merge churn.
docs: redesign kickoff — decided feature set + DESIGN.md rewrite
All checks were successful
test / cargo test (push) Successful in 52s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m17s
0313022c8a
specs/redesign-feature-set-decided.md is the closed decision record for
the redesign iteration; DESIGN.md is rewritten from it as the target
system (three type voices, terminal chrome, book body). Old DESIGN.md
described the previous direction.
michalvankodev force-pushed redesign/00-foundation from 0313022c8a
All checks were successful
test / cargo test (push) Successful in 52s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m17s
to a1c48cbc1d
Some checks failed
test / cargo test (push) Successful in 1m7s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Has been cancelled
2026-08-23 12:36:45 +02:00
Compare
redesign: typography — three self-hosted type voices
All checks were successful
test / cargo test (push) Successful in 48s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
af8531dad7
Final voices after live trials on the dev server:
- Display: Baloo 2 (variable 400–800, latin+latin-ext, restored) —
  ramp extrabold 800 / bold 700 / semibold 600 via --text-display-*
- Reading: Adwaita Sans (GNOME's Inter derivative; variable opsz 14–32
  + wght 100–900), self-subsetted from the upstream TTF to a single
  170 KB woff2 covering latin+latin-ext — full Slovak charset verified
  in-file (ľščťžôäŕĺďň ĽŠČŤŽÔÄŔĹĎŇ + typographic punctuation)
- Machine: Noto Sans Mono (variable), metrics identical to Noto Sans

Candidates tried and settled: Noto Sans → Exo 2 (reading) → Inter →
Archivo → Adwaita Sans (winner). Overlock and Cotham Sans rejected —
their latin-ext lacks ľ č ť ď ň ŕ ĺ entirely; charset gate is now a
hard rule (documented in DESIGN.md).

- --font-display/--font-read/--font-mono; --font-sans points at the
  reading voice. Legacy dirs (cantarell comfortaa orbitron sansation
  ubuntu) and all fallback-metric @font-face hacks removed
- Fixed reading size: --text-read 1.25rem/1.75 all viewports (rem —
  browser preference respected; viewport scaling rejected); measure
  42rem, note 36rem; viewport type ramps on article content dropped
- One heading rule: base-layer h1–h4 = display voice + blue-950; named
  display ramp tokens with baked weight + line-height; ad-hoc
  font-extrabold/weight drift normalized; text-blue-900 heading
  stragglers fixed; portfolio h2/h1 mismatch fixed
- ::selection brand pink (bg-pink-200 text-blue-950), :focus-visible
  blue outline kept
- DESIGN.md updated: voices table, metrics notes, charset gate
Author
Owner

Integration log: typography (PR #6) merged into 00 — fast-forward a1c48cb → af8531d, branch redesign/01-typography deleted.

Operational note for future slice merges (hard-won): Forgejo auto-closes the PR above when its base branch is deleted. Order: retarget the dependent PR's base to redesign/00-foundation (API PATCH pulls/{n}) BEFORE deleting the merged branch. PR #7 needed reopen+retarget after the fact.

Integration log: typography (PR #6) merged into 00 — fast-forward a1c48cb → af8531d, branch redesign/01-typography deleted. Operational note for future slice merges (hard-won): Forgejo auto-closes the PR above when its base branch is deleted. Order: retarget the dependent PR's base to redesign/00-foundation (API PATCH pulls/{n}) BEFORE deleting the merged branch. PR #7 needed reopen+retarget after the fact.
redesign: site chrome — masthead nav, colophon footer, main, kickers
All checks were successful
preview / preview hostname (pull_request) Successful in 0s
test / cargo test (push) Successful in 48s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
4cd79163c7
- Masthead: terminal path nav /blog /broadcasts /showcase /contact in
  Noto Sans Mono, wordmark in Exo 2 left, id=top anchor (main had NO
  masthead navigation — structure ported from v2, styling from v3);
  /portfolio rehomed to footer, /search omitted (postponed)
- Colophon footer: hairline rule, mono license line with CC badges,
  /portfolio + RSS links, print:hidden, view-transition names kept
- <main> landmark in base.html
- section_header macro (templates/macros.html): kicker + lowercase
  Exo 2 title + hairline rule + 'all →' affordance; .kicker machine-
  voice class (mono, pink-700)
- Page headers on /blog /broadcasts /showcase /contact /portfolio get
  ~/path kickers + lowercase titles; tag rows on list pages mono
chore: stop tracking styles/output.css — build artifact
All checks were successful
test / cargo test (push) Successful in 48s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m8s
e5a06021be
Nothing consumes the tracked copy: deploy.yaml and preview.yaml build
CSS fresh (just tailwind_build), tests never read it, dev mode writes
it via the tailwind watcher, and the server serves styles/ from disk.
Tracking it only produced diff noise in every PR and merge conflicts
on every restack (it was the sole conflict in most of them).

.gitignore now matches what AGENTS.md already documented. If you
check out a branch and run the server directly without building CSS
first, you'll see the last build's artifact — run just tailwind_build
(just dev does it automatically).
redesign: homepage — about intro, lead story hero, plain chapters
All checks were successful
preview / preview hostname (pull_request) Successful in 0s
test / cargo test (push) Successful in 51s
preview / teardown preview (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
688ab07839
Ported from modern-technical reference with the decided type system.
Live-review amendments on top of the initial port:

- intro block restored (decision override of the spec's earlier
  'intro REJECTED'): bare ~ kicker, lowercase 'about me' h1 in Baloo,
  bio paragraph, talent rows stacked (Baloo headings, reading-voice
  body, one display step below the h1; compact on mobile)
- lead story: 'latest blog' chapter header, 288px cover plate
  (md:w-72, 560px source), 5-line excerpt, tags+date metadata row
  (date left, tags right)
- previews: metadata row (date left / tags right) + title + 4-line
  excerpt, old footer dropped; thumbnails unchanged
- chapters renamed: featured / broadcasts / showcase / social; all
  kickers removed except the intro ~
- social cards: centered flex-wrap group, card gap doubled (gap-8)
- all → and read → affordances disabled (postponed cluster in spec)
- spec: homepage intro decision updated + section affordance links
  moved to Postponed
redesign: list pages — year-grouped archives, 2-col rows
All checks were successful
test / cargo test (push) Successful in 50s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m7s
0752a8aa32
- PostYearGroup + group_posts_by_year (port v3.1): posts grouped by
  publication year, newest first
- List pages single-column max-w-read: sticky year headers (2px navy
  rule, bg-blue-50, print:hidden) + mono post counts; ↑ top
  back-to-top link at the end (id=top anchor from chrome slice);
  socials/showcase columns dropped (they live on the homepage)
- Post rows restructured to the decided 2-column layout:
  date | content — mono date left, title + clamped excerpt + tags in
  the content column, thumbnail top-right inside it (w-20 mobile,
  w-36 md+), wrapped on narrow; hover = subtle blue tint
  (hover:bg-blue-100/50), never a white flash
- All view-transition-names kept alive through the restructure
  (blog_post_preview_, post_date_, post_title_, post_tags_)
redesign: list rows get hr separators like index; static year headers with light rule; fix line-clamp blockified by grid
All checks were successful
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
test / cargo test (push) Successful in 57s
1373642afa
redesign: article page — kicker, cover plate, TOC rail, drop cap, end matter
All checks were successful
test / cargo test (push) Successful in 56s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m29s
aaf4a4dd08
- Kicker ~/segment · date · n min read (220 wpm); mono tag row
- Cover as chapter-intro side plate (~480px, float right, rounded-xs)
- Sticky 'on this page' TOC rail: extract_headings anchors (TOC
  contract), scroll-spy, back-to-top on rail; 2xl+ only, print:hidden
- Drop cap on article first paragraph (display voice, float)
- Further reading: tag-overlap ranked then date, 2 picks
- Reading progress hairline: 2px pink, RM-gated, print:hidden
- Smooth anchors site-wide (RM-gated), scroll-margin-top on headings
redesign: center article images on content; reserve rail gutter so they never slide under the TOC
All checks were successful
test / cargo test (push) Successful in 1m31s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 2m31s
c595d562e6
Review found .article-body img overrode preflight max-width:100% with
lg:max-w-image inside the 640px figure — pictures overflowed rightward
only, sliding under the sticky TOC rail while scrolling, and mx-auto
cannot center an overflowing box so they sat off-center of captions.

- 2xl article grid becomes [gutter | 42rem content | 30rem rail] in a
  90rem container; images keep full max-w-image (63rem cap tried,
  rejected) and the 256px content-to-rail gap absorbs their 224px
  centered overhang (44px clearance verified at 1536/1720)
- figure is a flex column with items-center: symmetric overflow,
  caption centered under the picture
- header and further-reading footer join the same grid column, fixing
  the ~136px jog between page-centered title and body text
- below 2xl unchanged: no rail, max-w-image images
redesign: listing geometry — content-width rows, centered containers, reading-measure text
All checks were successful
test / cargo test (push) Successful in 53s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
2d9a936549
- alternative thumbnails use the display font (Baloo 2) like titles
- article header: date + reading time left, tags right, big title (listing row style)
- blog/tag/further-reading rows: container fits content (thumbnail + capped text), centered
- preview excerpts and meta header capped at max-w-read; row separators span the row, not the page
- homepage: lead story, featured and broadcasts get the same content-width centered treatment
- article footer back-link centers on the page when the TOC rail is reserved
Merge pull request 'redesign 05 — article page (TOC rail, cover plate, drop cap)' (#10) from redesign/05-article-page into redesign/00-foundation
All checks were successful
test / cargo test (push) Successful in 1m0s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m24s
4b5e1eb26e
redesign: content rendering — light code, ruled quotes, v3 tables, affordances
All checks were successful
test / cargo test (push) Successful in 52s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m27s
35c820fb84
- Code blocks: LIGHT syntect theme (InspiredGitHub — base16-ocean.dark
  was accidental, not a choice); light card styling + nested-pre
  normalization (syntect emits its own <pre>); copy button on every
  block (hover-revealed, clipboard, ✓ flash)
- Blockquote: border-l-2 blue-500 + indent + slate-700 roman text —
  pink callout card and italics retired
- Tables (v3 wholesale): mono lowercase header row, 2px navy rule,
  zebra blue-50 rows on white
- Figure captions: bookish — reading voice, smaller + muted, roman
  (mono and italics rejected); photos rounded-xs
- Blue list markers (pink rejected); hr styling ported
- Heading anchor affordance: # on hover copies the deep link
  (ids already existed via the TOC contract); modifier-clicks keep
  native link behavior
- Inline code kept as-is (chips rejected)
ci(preview): rebuild previews on pushes to branches with open PRs
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 59s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m24s
preview / build + deploy preview (pull_request) Successful in 1m18s
13b9ba72fe
Stacked-PR merges land as pushes to the base branch and fire no
pull_request event for the PRs headed by it, so dependent previews went
stale (found live: foundation preview froze pre-merge while slice 06 was
in review). preview.yaml now also triggers on push (main excluded) and
deploys iff some open PR's head branch equals the pushed branch —
head-matched only, so pushes to already-merged branches can't resurrect
orphaned previews. Decision recorded in specs/CI-deploy.md D11.
redesign: dark code cards with working copy button; content-rendering geometry pass
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 55s
preview / build + deploy preview (push) Successful in 1m34s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
2761578a2b
- Code blocks reworked into .code-card (filter emits card + button, no more
  pre/code/pre nesting); syntect theme back to base16-ocean.dark — deliberate
  terminal-chrome accent (reverses the light-theme claim, recorded in DESIGN.md)
- Copy button works: clipboard + '✓ copied' flash, hover/focus-visible reveal,
  print:hidden, transitions off under reduced motion
- Tables v3 actually break out: w-max up to max-w-image, centered via
  left-1/2/-translate-x-1/2 (auto margins can't center overflow)
- Blockquote: blue-25 plate (new token), mx-6 inset, leading-normal
- --spacing-image 70rem -> 50rem: leaner articles; w-fit listing containers
  uncapped so rows keep the 42rem reading measure
- Article 2xl grid rail 30rem -> 24rem: TOC closer, text column ~page-centered;
  TOC capped at w-72 so long headings wrap instead of overlapping content
- clear-both on breakout boxes: nothing heavy sits beside the floated cover
- dedupe duplicated drop-cap rule; comment out redox post's duplicate cover image
- preview.yaml: rebuild previews on pushes to branches with open PRs (D11 update)
- DESIGN.md: tokens corrected (read 42rem, note 36rem, image 50rem), palette
  gains blue-25, content-rendering section matches reality
Merge pull request 'redesign 06 — content rendering (dark code cards, tables v3, quotes, copy affordance)' (#11) from redesign/06-content-rendering into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m0s
preview / build + deploy preview (push) Successful in 1m35s
4712d0ac15
redesign: components — definition rows, plates, social cards, terminal 404
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
test / cargo test (push) Successful in 1m1s
preview / build + deploy preview (push) Successful in 1m17s
preview / build + deploy preview (pull_request) Successful in 1m20s
6abf01f9cc
- Talent/skill cards → definition rows (v3): icon cue 32-40px
  fill-blue-950, semibold blue-950 term, reading-voice description,
  hairline border-b separators — no box/border/bg (the description gets
  the space the chrome was wasting; rows are not clickable so they
  don't look like UI units)
- Project cards → borderless plates (v3): hairline rounded-xs cover,
  title link, description, mono classification+tags footer;
  view-transition-name kept. Rework flag stays open — layout/typography
 /content upgrade to be iterated during review
- Social cards: white cards + blue hover border (rounded-md), brand
  hover effects preserved (twitch shift, youtube scale, instagram dim,
  tiktok glitch)
- Contact page: definition rows in reading voice (not mono), each row a
  simple full-row link; email note
- Terminal 404: $ GET <real url> → 404: page not found (NotFoundPage
  gains url field), quiet link suggestions
- anime.js logo: kept, displayed cover-style (w-56/md:w-72 side plate
  beside the intro, replacing the 320px m-10 block); pointer events
  live; animation skipped for reduced-motion users (static final state)
- header: max-w-image two-col hero, name/tagline breathe, contact links
  as v3 definition rows (hover via fill-current), logo back to 320px,
  vertically centered; reduced-motion static state now also sets the
  gradient stop (matches animation end state)
- rhythm: symmetric bottom margins after header and after intro
  (pb-12/16, mb-12/16)
- skillsets: 3-col grid dropped — one topic at a time in the read
  measure, order Skills → Technologies → Work experience → Education;
  flush headings (no m-5/m-6 grid insets), mt-12/16 between topics
- skill cards: white plates → definition rows (border-b, hairline,
  reading-voice description), matching talent cards; row lists gap-0
- technologies: add AI, Agents, Automation
redesign: 404 kicker + display heading; contact definition-row hover fix
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 53s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m20s
preview / build + deploy preview (pull_request) Successful in 1m21s
d8c389b645
- 404: $ GET line → kicker (~/{url}, leading slash trimmed in handler,
  overflow-wrap for long query strings); 404 heading to text-display-1;
  suggestions copy: check out introduction page, blog or get in touch
- contact: rows keep text-blue-950 but hover now actually flips
  icon+label to blue-500 (fill-current, color on the anchor)
redesign: showcase two-tier rework — featured plates + archive rows
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 55s
preview / build + deploy preview (push) Successful in 1m27s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
2943dc84e3
- featured projects become editorial plates (16:9 cover side-plate,
  article-listing meta line above the name, technology list at bottom)
- non-featured become quiet hairline rows with 48px thumbnails (blue
  initial plate for cover-less projects), same anatomy as plates
- fake masonry grid removed; section pulled onto the max-w-image rail
- year derived from slug; tags duplicating classification filtered
- HeyLady! promoted to featured; beIN Sports cover recomposed on a
  square canvas (was a 5.6:1 strip butchered by center-crop); The
  Expert SVG cover cropped to 16:9 to match the other plates
- homepage featured projects sorted newest-first (was fs order)
Merge pull request 'redesign 07 — components (rows, plates, cards, 404)' (#12) from redesign/07-components into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m4s
preview / build + deploy preview (push) Successful in 1m44s
782c83abd2
Reviewed-on: ⁨#12⁩
redesign: syndication & perf — JSON feed, sitemap, OG/Twitter, lazy images
All checks were successful
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 2m43s
preview / build + deploy preview (pull_request) Successful in 1m44s
preview / build + deploy preview (push) Successful in 1m26s
aad70e4681
specs: decision record for absolute URLs in feed content
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m7s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 2m29s
preview / build + deploy preview (pull_request) Successful in 1m17s
15a50f3378
cards: og/twitter images always raster — og-default.png for svg or missing thumbnails
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m27s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m25s
preview / build + deploy preview (pull_request) Successful in 1m16s
ec2d7f29de
chore: track Cargo.lock — reproducible dep resolution for the server binary
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m33s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 3m4s
preview / build + deploy preview (pull_request) Successful in 1m19s
5329a1cfe4
cards: per-post descriptions — front-matter override with auto-excerpt fallback (og/twitter/meta + feed summary)
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 54s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m21s
preview / build + deploy preview (pull_request) Successful in 1m14s
989eda4f58
cache: no-cache for css (constant filename changes per deploy), 30d for versioned assets
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 57s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m26s
preview / build + deploy preview (pull_request) Successful in 1m18s
40c4767f28
cache: content-hashed css in prod exports (TARGET=PROD), immutable caching; dev keeps fixed name
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m2s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (push) Successful in 1m21s
preview / build + deploy preview (pull_request) Successful in 1m19s
e94c96bb2c
chore: gitignore hashed tailwind artifacts (styles/output.*.css)
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m0s
preview / build + deploy preview (push) Successful in 1m24s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
1ff187f7f2
Merge pull request 'redesign 08 — syndication & perf (JSON feed, sitemap, OG)' (#13) from redesign/08-syndication-perf into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 55s
preview / build + deploy preview (push) Successful in 1m17s
fc63e2b27a
- Skip-to-content link as first tab stop → <main id=main-content
  tabindex=-1> landmark; visually hidden until focused
- aria-current=page on the active masthead nav item (tiny inline script —
  the header is a static include and must survive the static export).
  Active styling lives in CSS: #site-nav a[aria-current='page'] — not a
  JS-injected class, so it can't silently fall out of the Tailwind bundle
- Print: white page surface; chrome already carries print:hidden
- Reduced motion: the four social brand hovers (twitch shift, youtube
  scale, instagram dim, tiktok glitch) gated behind
  prefers-reduced-motion: no-preference; smooth scrolling was already gated
- View transitions: authored hero cover ↔ article cover plate morph via
  post_cover_<slug> on both ends (list-row ↔ title names already existed)
- Dropped from the stale draft of this slice: per-post lang front matter
  (site is English-only) and the contrast sweep (deferred, see
  specs/contrast-sweep.md)
specs: contrast sweep decision record — actual vs proposed state (deferred)
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / build + deploy preview (push) Has been skipped
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m4s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
7c4c442277
Metadata text on the blue-50 page surface: slate-500 measures 4.37:1 and
slate-400 2.36:1 — both below the 4.5:1 AA bar for normal-size text.
slate-600 (6.96:1) is the floor. Inventory of the 8 failing spots with
proposed fixes; white-plate card labels already pass and are optional to
normalize. Review separately before implementing.
Merge pull request 'redesign 09 — a11y & print sweep (rebuilt on current base)' (#15) from redesign/09-a11y-print-v2 into redesign/08-syndication-perf
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / build + deploy preview (push) Has been skipped
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 59s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
68c5ba277d
Reviewed-by: checkmate

Rebuild of #14 re-implemented from intent on the current base: skip link, aria-current nav (CSS attribute selector), print surface, reduced-motion gating, cover morph. Contrast sweep deferred (specs/contrast-sweep.md); per-post lang dropped (English-only site).
Merge pull request 'redesign: a11y & print sweep into foundation' (#16) from redesign/08-syndication-perf into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m2s
preview / build + deploy preview (push) Successful in 1m20s
547e26836a
Upsert a marker comment (<!-- preview-link -->) via GITHUB_TOKEN after
deploy — POST first, PATCH on re-deploys (one comment per PR, no spam).
Teardown PATCHes it to 'removed' so closed PRs keep no dead link. Both
steps are best-effort (:⚠️: on API failure, never fail the job).
Tunnel host is the only Forgejo route; katelyn LAN ssh is host-admin
only; fj CLI installed and authenticated. No usernames, ports or key
material — those live in ~/.ssh/config and fish vars on phoebe.
ci(preview): comment survives re-deploys + reports deploy metadata
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / build + deploy preview (push) Has been skipped
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 57s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
2ad80d7c36
- meta now resolves and outputs the PR number for push-triggered
  re-deploys (github.event.pull_request is empty on push events — the
  comment step used to silently skip them); comment/teardown steps take
  PR_NUMBER from meta either way
- deploy step captures previous preview size before rsync --delete plus
  new size, page count and UTC timestamp (GITHUB_ENV)
- comment upserts a marker comment with commit, deploy time, dist size
  delta (numfmt) and page count; teardown marks it removed
- HEAD_SHA falls back to github.sha on push events
Merge pull request 'ci(preview): preview-link PR comments — survive re-deploys, report deploy metadata' (#17) from ci/preview-comment into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 59s
preview / build + deploy preview (push) Successful in 1m30s
d0243d8d42

🪦 Live preview

removed (PR closed)

<!-- preview-link --> ## 🪦 Live preview removed (PR closed)
Container moves into base.html (overridable page_container block) so
every standard page inherits the same max-w-image rail as the masthead
nav — blog/broadcasts (previously uncapped w-fit), contact (was
max-w-read), showcase, portfolio, 404. Custom layouts (index, blog_post,
egg_fetcher) opt out by overriding page_container.
redesign: further-reading header spans its list; per-post cover field
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / build + deploy preview (push) Has been skipped
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 53s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
97e8486de9
- further reading: heading + its rule share a w-fit wrapper with the
  preview list, so both span exactly the content width (same macro style
  as the homepage section headers)
- Cover enum in BlogPostMetadata: cover: <path> (explicit image, may
  differ from thumbnail), cover: false (no article cover; thumbnail
  still feeds listings + og:image), omitted = thumbnail fallback
- cover: false on Letter for Daniel, Lovely London Trip, Rusty jam
  Weekly #25 — their bodies already show the image
Merge pull request 'redesign: one rail for all subpages + article cover field' (#18) from redesign/09-rails-and-covers into redesign/00-foundation
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 58s
preview / build + deploy preview (push) Successful in 1m12s
8dc77295b6
Reviewed-on: ⁨#18⁩
michalvankodev changed title from WIP: redesign 00 — foundation (docs: decided feature set + DESIGN.md) to redesign 00 — foundation: the redesign stack (rails, covers, typographic system) 2026-09-10 16:01:14 +02:00
Merge remote-tracking branch 'katelyn/main' into foundation-merge-main
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
test / cargo test (push) Successful in 1m6s
preview / build + deploy preview (push) Successful in 1m28s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
7227d88865
# Conflicts:
#	.forgejo/workflows/preview.yaml
#	specs/CI-deploy.md
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
michalvankodev/michalvankodev-site!5
No description provided.