Skip to content

feat: image-rich, interactive changelog galleries - #151

Merged
crs48 merged 3 commits into
mainfrom
feat/changelog-galleries-0196
Jun 17, 2026
Merged

feat: image-rich, interactive changelog galleries#151
crs48 merged 3 commits into
mainfrom
feat/changelog-galleries-0196

Conversation

@crs48

@crs48 crs48 commented Jun 17, 2026

Copy link
Copy Markdown
Owner

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 a pr, the page now fetches that manifest at build time and renders every captured screenshot — no manual curation:

status: "unchanged" surfaces are dropped; a 404 (pre-0189 PR) or offline build falls back to the curated hero/images[].

Interactive + richer

  • Tag-filter chips + client search (combined), ?tag= persisted in the URL
  • Copy-link button per entry; GitHub author avatars
  • LCP fix: first hero is eager/fetchpriority=high, others lazy
  • New images/video/author fields on ChangelogEntry (manual override / fallback), surfaced in the JSON feed and covered by validate:changelog
  • New real entry: xNet Cloud onboarding (feat: xNet Cloud onboarding UI — marketing, signup→provision, claim flow (0192) #140) — demonstrates a live before/after slider

Design choice: Option D (zero-dep)

Native <dialog> lightbox instead of PhotoSwipe; hand-rolled CSS input[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)

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

xNet Test and others added 3 commits June 17, 2026 12:46
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>
@crs48
crs48 temporarily deployed to pr-151 June 17, 2026 20:02 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jun 17, 2026
@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #151.

@crs48
crs48 merged commit 6177f1b into main Jun 17, 2026
8 of 9 checks passed
@crs48
crs48 deleted the feat/changelog-galleries-0196 branch June 17, 2026 20:08
github-actions Bot added a commit that referenced this pull request Jun 17, 2026
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant