docs(state): record the 2026-10-27 hybrid archive and portfolio delivery
Deploy / build (push) Successful in 40s

This commit is contained in:
hoelee committed 2026-10-27 04:07:00 +08:00
1 parent 09596fe7a5
commit b6d70a8b80
2 files changed
+61

No files matched your search

+34
View File
@@ -26,6 +26,8 @@ Living list of what's done and what's next for blog.hoelee.com. Work through the
- ✅ Author card + `Person`/`ProfilePage` JSON-LD (E-E-A-T), article meta, reading time, related posts
- ✅ Full SEO: canonical, Open Graph (+dims), twitter:card, favicon (all sizes), RSS + sitemap
- ✅ Category pages (`/categories/`, `/categories/[category]/`)
- ✅ `/posts/` hybrid archive + case-study portfolio (2026-10-27): fixed-slug flagship cards,
collapse-on-filter, portfolio hero, action links, 44 px tap targets — see §4e
- ✅ Locale scheme: English flat in `posts/`, Chinese in `posts/zh/` (lang derived from folder)
- ✅ Language switcher in nav — links to the **same post** in the other language (auto-matches by `zh/` prefix)
- ✅ Locale-aware nav labels (EN/ZH)
@@ -430,6 +432,38 @@ A paid reviewer read `how-i-built-an-automated-music-video-pipeline`, `uploading
session's paragraphs rode into the other's commit — content survived, but the history stopped attributing correctly.
---
## 4e. Live re-check — 2026-10-27 (hybrid archive + case-study portfolio)
Delivered the four work orders in `docs/consultant-review-2026-10-27-posts-and-casestudies-plan.md`.
Measured, not assumed — `node scripts/probe-layout.mjs` drives a headless Chrome over CDP and
reports **72/72** page×viewport checks with `scrollWidth == clientWidth`, plus the collapse test.
- **`/posts/` and `/zh/posts/` are hybrid, not paginated.** Three fixed-slug flagship cards
(`src/lib/featured.ts`, 3 on the archive, 4 on the home page) sit above the complete
year/month archive, which still lists every post and keeps `Ctrl+F` working. Typing in the
filter or clicking a category chip collapses the flagship block (`inert`, height 0,
`data-collapsed="true"`) and the status line switches from `All 91 posts` to
`Showing 27 of 91 posts`; clearing restores it. Verified at 1280 and 390 in both languages.
- **`/categories/case-studies/` is a portfolio.** `src/components/PortfolioHero.astro` — copy left,
a 21:9 architecture banner right (2400×1029, 33 KB WebP + a 1200 px variant, generated
deterministically by `scripts/gen-case-studies-banner.mjs`; pure geometry, no baked text).
Ordering comes from `src/lib/portfolio.ts` (`CASE_STUDY_FLAGSHIPS`, narrative order
scale → local AI → automation → shipped commercial result), not from `pubDate`, so publishing
a new post cannot rewrite the story. Every card carries a measured pill (container counts, VRAM,
cron counts — all read from the post body, never invented).
- **One shipped narrative.** `lib/featured.ts` and `lib/portfolio.ts` share `pickFeatured()`, so the
home page, the archive and the portfolio can never disagree about which write-ups are flagship.
- **Listing rows name their action**: `Read article →` / `Read case study →`
(`阅读文章 →` / `阅读案例复盘 →`), as a redundant link kept out of the tab order (`tabindex="-1"`,
one keyboard stop per card). Mobile title links get a 44 px minimum tap height.
- **ZH leak fixed at the source.** `Archive.astro` printed raw category slugs in the row tail and in
the category chips; both now go through `categoryLabel(category, lang)` (运维架构 / 工程案例 / …).
- **Smaller craft fixes found while reviewing screenshots**: the two chip strips were unlabelled and
read as one list with a duplicated `devops` (category 30 vs topic 6) → labelled *Category* / *Topic*,
stacked above the chips below 700 px; rows now cap tags at four plus a `+N` chip so card rhythm
stops breaking; the nav gained `aria-current="page"` (it had no active state at all).
- **Docs:** `scripts/probe-layout.mjs` is committed as the repeatable gate for this class of bug.
## 5. Conventions (non-negotiable)
- Push git.hoelee.com first, then GitHub