Add /release-notes/[tag] Route Handler for Sparkle WebView#2
Merged
Conversation
Sparkle's update alert loads sparkle:releaseNotesLink from the appcast in
an embedded WKWebView. Pointing that link at the existing site page pulls
in DM_Sans, Vercel Analytics, and the rest of the marketing chrome on
every update prompt — bad fit for a 460px alert window.
This Route Handler bypasses app/layout.tsx entirely and returns a single
self-contained HTML document with an inline stylesheet, system font
stack, and prefers-color-scheme dark mode. Fetches one release at a time
via GET /repos/fujacob/tabby/releases/tags/{tag}, edge-cached for 5 min.
Tag input accepts both v1.2.3 and 1.2.3 because the appcast template
uses the raw git tag today.
Companion human-facing /release-notes index page is unchanged. The Tabby
appcast generator will be updated in a separate PR to point at this URL.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
… accent, Cotabby metadata Pivot type to Bricolage Grotesque (display) + Inter (body) via next/font. Re-anchor accent from terracotta to the new logo's electric blue (#2b7fff), recolor selection, and rename site title/applicationName/siteName to Cotabby. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Switch body Inter -> Inter Tight, base weight 500, bump weight utilities one class (medium->semibold->bold). BETA badge styling left untouched. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Point header/footer/legal/feedback logos at new-logo.png, fix alt text, and regenerate all favicons + app/apple icons from the new mark. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Rename visible 'tabby' copy -> 'Cotabby', model names -> cotabby-fast-1/ balanced-1, support email -> support@cotabby.app, and TabbyLogoChip -> CotabbyLogoChip. Convert privacy release-notes link to next/link. External repo/domain/.dmg URLs left intact. BETA styling untouched. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace the original grey 40px grid with the navy + baby-blue diagonal striped grid (96px, fixed). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… models - Enlarge grid to a fixed full-site background; drop the spotlight mask - Add sleeping cat draped over the hero card edge (trimmed asset) - Replace eyebrow tags with lucide icons beside card headers - Update to four model names (swift / swift-pro / balanced / careful) - Rework permissions cards: icon row, parallel copy, prominent privacy footer - Flatten the models preview list (no nested boxes, stacked name/note) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Drop cotabby-balanced-1, rename swift-pro to balanced (3 models total) - Reword "on-device" to "local" across marketing + legal copy - Round logo corners, regenerate app/apple icons - Add full-bleed fading "cotabby" wordmark below the footer - Polish permissions cards, install visual, CTA paws, nav report-bug link Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… to align with new naming convention
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.
Summary
Adds
frontend/app/release-notes/[tag]/route.ts— a Route Handler that returns a single self-contained HTML document for one release. This is what Sparkle's update alert will load via<sparkle:releaseNotesLink>in the next Cotabby appcast (separate PR in the tabby repo).Why a Route Handler and not a page:
/release-notespage is wrapped byapp/layout.tsx(DM_Sans from Google Fonts, Vercel Analytics, the fullProviderstree). All of that loads on every Check for Updates click — wrong fit.prefers-color-scheme: darkparity, and nothing else.Companion human-facing
/release-notesindex page is left untouched.Validation
Manual smoke (once deployed): hit
https://cotabby.app/release-notes/v1.6.0(or any tag that exists) in a real browser — should render a slim release-notes page with no nav, no footer, no analytics beacon.How releases are fetched
GET /repos/fujacob/tabby/releases/tags/{tag}per request, withnext: { revalidate: 300 }so the GitHub API call is edge-cached for 5 min. Response also carriesCache-Control: public, s-maxage=300, stale-while-revalidate=86400so Vercel's CDN absorbs spikes during the "Check for Updates" UX.Setting
GITHUB_TOKENin Vercel env vars is recommended (existing fetch already supports it) — unauth limit is 60/hr per IP; authenticated is 5000/hr.Failure mode
If GitHub 404s or rate-limits, the handler returns a 404 with a minimal page that links to
https://github.com/FuJacob/tabby/releasesso the user always has a path forward. Negative responses use a much shorter cache TTL (30s s-maxage, 5min SWR) so transient GitHub blips don't get pinned for hours.Linked issues
None. Companion PR coming in
fujacob/tabbyto flipscripts/generate_appcast.pyto point at this route.Risk / rollout notes
/release-notes/v1.2.3and/release-notes/1.2.3(normalizes internally) so a future caller that drops thevdoesn't 404.encodeURIComponentcall defends against../%2Fstyle inputs but the broader URL pattern restriction is enforced by GitHub returning 404 for unknown tags.