redesign 04 — list pages (year archives, 2-col rows) #9

Merged
michalvankodev merged 2 commits from redesign/04-list-pages into redesign/00-foundation 2026-09-04 13:55:46 +02:00

What

Slice 4/9 of the selected redesign (base: #8). List pages (/blog, /broadcasts, tag archives).

  • Year-grouped archives (port v3.1): PostYearGroup + group_posts_by_year() in Rust, static year headers with a light rule (same border-slate-300 as row separators) + mono post counts (2026 3), print:hidden, ↑ top back-to-top at the end of the list.
  • Row separators between posts (border-slate-300 my-5 md:my-8) — same rhythm as the homepage / listings.
  • Single-column max-w-read lists; the socials/showcase side columns are gone (that content lives on the homepage).
  • All view-transition-names kept alive through the restructure (preview, date, title, tags).

Not in this slice (deferred to #12 — slice 07 "components")

  • The 2-column row restructure (date | content, thumbnail top-right, wrapped w-20 → w-36). Rows keep the existing blog_post_preview component unchanged here.
  • Row hover tint (hover:bg-blue-100/50).
  • featured_projects is still loaded per render but no longer used by this template — removal lands with the row work in slice 07.

Review notes

  • group_posts_by_year() sorts descending and groups consecutive equal years; ParseResult only contains successfully parsed posts, so grouping can't hit missing metadata.
  • Empty state moved after the header: tag archives with 0 posts now still render the page title + tag list.
  • Year header uses pt-3 pb-2 so the rule sits close under the year, and mb-5 md:mb-8 keeps the first thumbnail clear of the sticky rule.

Preview: https://redesign-04-list-pages.dev.michalvanko.dev — compare /blog, /broadcasts, a tag page.

Fixes during review (2026-09-04)

  • Year rule lightened to border-slate-300 (matches row separators); headers are plain static <h2>s — sticky + shadow experiments were tried and deliberately removed.
  • Row separators (<hr>) match the /index listing rhythm.
  • Bug fix (affects homepage too): line-clamp-4 was dead — grid items blockify display: -webkit-box to flow-root, so -webkit-line-clamp never engaged; excerpts overflow-clipped mid-glyph. Moved the clamp onto an inner <div> (children of grid items aren't blockified) → clean 4-line clamp everywhere.
## What Slice 4/9 of the selected redesign (base: #8). List pages (`/blog`, `/broadcasts`, tag archives). - **Year-grouped archives** (port v3.1): `PostYearGroup` + `group_posts_by_year()` in Rust, static year headers with a light rule (same `border-slate-300` as row separators) + mono post counts (`2026 3`), `print:hidden`, `↑ top` back-to-top at the end of the list. - **Row separators** between posts (`border-slate-300 my-5 md:my-8`) — same rhythm as the homepage `/` listings. - **Single-column `max-w-read` lists**; the socials/showcase side columns are gone (that content lives on the homepage). - **All `view-transition-name`s kept alive** through the restructure (preview, date, title, tags). ## Not in this slice (deferred to #12 — slice 07 "components") - The 2-column row restructure (date | content, thumbnail top-right, wrapped `w-20` → `w-36`). Rows keep the existing `blog_post_preview` component unchanged here. - Row hover tint (`hover:bg-blue-100/50`). - `featured_projects` is still loaded per render but no longer used by this template — removal lands with the row work in slice 07. ## Review notes - `group_posts_by_year()` sorts descending and groups consecutive equal years; `ParseResult` only contains successfully parsed posts, so grouping can't hit missing metadata. - Empty state moved after the header: tag archives with 0 posts now still render the page title + tag list. - Year header uses `pt-3 pb-2` so the rule sits close under the year, and `mb-5 md:mb-8` keeps the first thumbnail clear of the sticky rule. **Preview:** https://redesign-04-list-pages.dev.michalvanko.dev — compare `/blog`, `/broadcasts`, a tag page. ## Fixes during review (2026-09-04) - Year rule lightened to `border-slate-300` (matches row separators); headers are plain static `<h2>`s — sticky + shadow experiments were tried and deliberately removed. - Row separators (`<hr>`) match the `/index` listing rhythm. - **Bug fix (affects homepage too):** `line-clamp-4` was dead — grid items blockify `display: -webkit-box` to `flow-root`, so `-webkit-line-clamp` never engaged; excerpts overflow-clipped mid-glyph. Moved the clamp onto an inner `<div>` (children of grid items aren't blockified) → clean 4-line clamp everywhere.
redesign: list pages — year-grouped archives, 2-col rows
All checks were successful
test / cargo test (push) Successful in 47s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m14s
8c856f9c8f
- 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_)
michalvankodev force-pushed redesign/04-list-pages from 8c856f9c8f
All checks were successful
test / cargo test (push) Successful in 47s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m14s
to 53162f46a7
All checks were successful
test / cargo test (push) Successful in 58s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m0s
2026-08-21 16:17:03 +02:00
Compare
michalvankodev force-pushed redesign/04-list-pages from 53162f46a7
All checks were successful
test / cargo test (push) Successful in 58s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m0s
to 04832ef7b2
Some checks failed
test / cargo test (push) Successful in 44s
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:37:00 +02:00
Compare
michalvankodev force-pushed redesign/04-list-pages from 04832ef7b2
Some checks failed
test / cargo test (push) Successful in 44s
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
to ee06edb673
Some checks failed
test / cargo test (push) Successful in 51s
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:49:30 +02:00
Compare
michalvankodev force-pushed redesign/04-list-pages from ee06edb673
Some checks failed
test / cargo test (push) Successful in 51s
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
to 3c59ad738a
All checks were successful
test / cargo test (push) Successful in 47s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m19s
2026-08-23 12:57:49 +02:00
Compare
michalvankodev changed target branch from redesign/03-homepage to redesign/00-foundation 2026-08-24 10:15:33 +02:00
michalvankodev force-pushed redesign/04-list-pages from 3c59ad738a
All checks were successful
test / cargo test (push) Successful in 47s
preview / preview hostname (pull_request) Successful in 0s
preview / teardown preview (pull_request) Has been skipped
preview / build + deploy preview (pull_request) Successful in 1m19s
to 0752a8aa32
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
2026-08-24 10:19:37 +02:00
Compare
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
michalvankodev changed title from WIP: redesign 04 — list pages (year archives, 2-col rows) to redesign 04 — list pages (year archives, 2-col rows) 2026-09-04 13:53:43 +02:00
michalvankodev merged commit 1373642afa into redesign/00-foundation 2026-09-04 13:55:46 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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!9
No description provided.