Skip to main content
ngockhoi96
← Roadmap
Shipped v0.4.0 ·

Media & polish

A responsive image pipeline (build-time optimization plus on-demand R2 edge transforms), rich 404/500 pages, and the Stream — a short-form feed for notes and links.

Read-path polish, no new audience-facing infra. The headline fix: real build-time image optimization that kills the feature-image LCP regression.

What shipped

  • Build-time image pipeline (ADR-0014) — hybrid image service + a getImage() core behind <FeatureImage>/<Cover>/<MdImage>/<GalleryImage>
  • Lane C (ADR-0017) — R2 originals + /cdn-cgi/image/ edge transforms, responsive ladders in code, proven by a draft fixture
  • /stream (ADR-0015) — a short-form feed; a Note with a link becomes a Link; All/Notes/Links filter; its own RSS
  • Trending rollup — plumbing only (post_daily_views); data accrues now, UI in Phase 4
  • Error pages — a rich 404 (search + Popular + recent) and a static-safe 500 (no D1/islands)
  • Advanced filter + popularity sort on /blog (Track B) — deferred to Phase 4

The image axis

The pipeline splits on when optimization happens — build-time (Astro built-ins → static files) vs edge-runtime (CF Images transforms on R2). Not “manual vs built-in.”

in git → src/.../images/ ──build(sharp)──► dist/_astro/* (Lane A)
out of git→ R2 files.* ──edge──► /cdn-cgi/image/<opts>/<key> (Lane C)

Reflections

To write: the LCP bug that started it, why Lane C is “manual” only because <Picture> can’t target a runtime origin, and shipping plumbing (trending, Lane C) ahead of content.