feat: image-rich, interactive changelog galleries - #151
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auto-pull every captured screenshot for a release from its PR's durable diff-manifest (visuals/pr/<N>/), rendered as a zero-dep gallery: before/after comparison sliders for changed surfaces, a scroll-snap thumbnail strip into a native <dialog> lightbox, and click-to-play video for interaction flows. A 'View all N screenshots on PR #N' link ties each entry to its source. Adds curated images/video/author fields to ChangelogEntry (manual override / fallback for pre-0189 entries), tag-filter chips + client search, per-entry copy-link buttons, GitHub author avatars, and an LCP fix (first hero eager). validate:changelog and the JSON feed cover the new fields. New changelog entry for xNet Cloud onboarding (#140) demonstrates a real before/after slider. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Shipped Option D (zero-dependency): native <dialog> lightbox, hand-rolled CSS before/after slider, substring search. Auto-gallery pulls diff images from each PR's durable manifest; deferred items (WebP, in-app gallery, formal a11y audit) noted inline. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
|
Preview removed for PR #151. |
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
Backfills the notable user-facing PRs that merged before the changelog automation existed (or were flagged `needs-changelog`): | Entry | PR | |---|---| | A richer, interactive changelog | #151 | | xNet adapts to your phone (mobile workbench) | #156 | | See your local agent in the AI panel | #163 | | Paid plugins | #157 | | Agent-native Connectors | #160 | | A new look — cosmic-web app icons | #153 | Each fragment carries its **original** PR number, so `resolve-prs` leaves it untouched and the gallery/link point at the right PR. The **#156 entry auto-pulls its real mobile-vs-desktop before/after sliders** from `visuals/pr/156/` — confirming the auto-gallery works on a backfilled entry. This PR also exercises the new flow itself: it **adds fragments**, so the required `changelog-section` check passes via the fragment-present path (no `skip-changelog` label). Verified locally: `validate:changelog` → 19 fragments valid; `astro build` clean; all 6 articles + the #156 before/after gallery render. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
## What Backfills the changelog so it reflects what's live on `main`. The per-PR fragment system (exploration 0197) was current through PR #163 (PR #178 backfilled #151/#153/#156/#157/#160/#163), but the recent **0198/0199 batch** and a couple of stragglers shipped without entries. This adds 7 fragments, with prose lifted from each PR's own `## Changelog` block where present. | PR | Entry | Tags | |---|---|---| | #143 | AI chat that knows your workspace | `ai` | | #167 | Linear-grade Tasks | `tasks` `app` | | #169 | Cleaner page editor typography | `editor` | | #170 | Bring your Slack data into xNet | `plugins` `platform` | | #171 | Smoother, more consistent motion | `app` | | #173 | Airtable-grade database grids | `app` | | #174 | A redesigned chat & channels experience | `app` | ## Deliberately excluded - **In-editor AI (#154 / #158)** — shipped the transform engine + diff/approval logic, but both PRs state the `/ai` UI wiring into the running app is **deferred**, so it isn't user-visible yet. An entry would overclaim. - **Slack (#170)** — entry scoped to the migration connector + compatibility layer (genuinely live); avoids claiming the webhook/slash-command hub endpoints work, since they're generic-over-an-injected-sink and not mounted in a running server yet. - Pure infra/ops/docs PRs (cloud M1/M2, CI, runbooks) — not user-facing. ## Verification - `validate-changelog.ts` → **26 fragments valid** (19 existing + 7 new) - `prettier --check` on all new files → clean - Newest-first ordering confirmed — the 7 entries slot in at the top ## Changelog <!-- This PR only adds changelog fragments for already-merged work; it ships no user-facing change of its own. --> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements exploration 0196 — makes the changelog page show the actual UI that shipped, pulled straight from CI's visual captures, plus the interactive touches that make it browsable. Zero new dependencies.
The headline: auto-pulled diff galleries
Every PR's visual-capture run publishes a durable manifest at
xnet.fyi/visuals/pr/<N>/diff-manifest.json. Since each changelog entry already stores apr, the page now fetches that manifest at build time and renders every captured screenshot — no manual curation:changedsurfaces (e.g. the xNet Cloud entry's Settings redesign, from PR feat: xNet Cloud onboarding UI — marketing, signup→provision, claim flow (0192) #140)<dialog>lightbox fornew/curated imagesstatus: "unchanged"surfaces are dropped; a 404 (pre-0189 PR) or offline build falls back to the curatedhero/images[].Interactive + richer
?tag=persisted in the URLeager/fetchpriority=high, otherslazyimages/video/authorfields onChangelogEntry(manual override / fallback), surfaced in the JSON feed and covered byvalidate:changelogDesign choice: Option D (zero-dep)
Native
<dialog>lightbox instead of PhotoSwipe; hand-rolled CSSinput[type=range]before/after slider instead of<img-comparison-slider>; substring search instead of Fuse.js. Matches the repo's zero-dep ethos — no lockfile/CDN/CSP surface, site stays framework-free.Verified (build + headless browser)
ai→3), search (dictation→1), copy-link, lightbox (correct image + "1/2"), slider--cl-pos→20% ✓astro buildclean; JSON feed carries new fields ✓Scope is site-only (no
apps//packages/changes), so the required CI checks aren't affected. Deferred (noted in the doc): WebP/srcset, in-app gallery rendering, formal axe/Lighthouse audit.🤖 Generated with Claude Code