Changelog

Latest release notes, updates and fixes from goosebumps.fm.

Release history is published with each goosebumps.fm update.

2.102.2 (2026-10-07)

Bug Fixes

  • telemetry: make failure and recovery emails actionable (#372) (ffb9317)

2.102.1 (2026-10-07)

Bug Fixes

  • telemetry: correct Analytics Engine quantiles (#371) (66fbb24)

2.102.0 (2026-10-07)

Bug Fixes

  • api: preserve audio pages when optional metadata fails (c35a34e)

  • tweets: keep reader chrome stable while navigation metadata loads (79260eb)

  • tweets: size the replies placeholder from the known reply count (071b0d4)

  • www: highlight Tweets on tweet detail routes (6930ef2)

  • www: replace audio detail API fan-out with one page read (a163947)

  • www: retain empty audio description fallbacks (6db335d)

  • www: stop scrollbar and tweet breadcrumb from shifting layout (b9f343f)

Features

  • api: include parent show on audio detail (5413c92)

  • api: load audio detail with one authenticated read (1b54c6c)

  • navigation: let readers reset their tweet reading history (437796f)

  • posts: include reply count when reading a tweet by slug (ce9855e)

  • tweets: expose nearest newer unread neighbour (f5da586)

  • tweets: replace reader controls with a bottom reading dock (4c4399a)

  • tweets: resume tab reading and separate unread navigation (1d41d03)

  • www: add a form action that resets tweet reading history (2b1ef6d)

  • www: add About page and consolidate site links (ff0e68a)

  • www: add breadcrumbs to content detail pages (0e51601)

  • www: add icon-only variant for public actions (f0b6146)

  • www: redesign content detail page (d96cb76)

  • www: refresh home and station branding (7e2af2c)

  • www: show account avatar in station navigation (09ee07c)

  • www: show parent show and slug in mix breadcrumb (6b8deb5)

Performance Improvements

  • audio: load detail tags in the authorized query (43bf9ac)

  • auth: resolve sessions and users in one D1 read (0d2f0fb)

  • shows: compose page data in one authorized API request (9fbc5bc)

  • shows: project labels within content queries (b091bc6)

Unreleased

Session recap: faster mix and show pages (2026-10-06)

In brief

Reduced authenticated page-loading times while keeping real remote D1 reads. Mix pages measured 0.63–0.71 seconds, down from 1.00–1.14 seconds; show pages measured 0.68–0.77 seconds, down from 1.44–1.72 seconds. Changes are committed locally, not pushed or deployed; these are local-to-remote measurements, not production benchmarks.

Narrative

The earlier audio-page consolidation removed duplicate requests, but signed-in pages still spent roughly a second waiting on sequential database reads. Anonymous probes did not reproduce an intermittent 9–16-second spike and later exposed transient database failures. Authenticated testing became available through secret injection with 2password.

The key correction was to stop treating “the spike did not reproduce” as a reason to stop improving normal response times. Three GPT-6.1 Sol agents worked on audio queries, show-page composition, and authentication/transport. The first integrated measurements improved mixes but left shows above a second. Traces then identified separate show-label reads as the next avoidable cost; combining those queries brought shows below 0.8 seconds in the final sample.

Decisions and lessons

  • Fetch session and user together in one D1 statement. Keep cookie caching disabled so revocation and role changes take effect on the next authenticated request.

  • Fetch ordered tags within audio/show content queries instead of making separate label requests. Preserve empty-tag semantics, pagination, and draft visibility.

  • Load show detail through one API request instead of six. Reuse loaded content for metadata and run episodes, navigation, and subscription reads concurrently once the show is available.

  • Keep remote D1 for latency measurements and disposable D1 for correctness fixtures. Final measurements included 13 successful authenticated reads, both serial and with three concurrent callers.

  • D1 uses Worker bindings, not an application-managed database connection pool. Local remote development adds a preview-worker network leg that production does not use. Fewer database round trips benefit both paths, but production gains still need measurement.

Work and references

  • Audio query projection: apps/server/src/services/audio.service.ts and apps/server/src/db/entity-label-projection.ts.

  • Authentication: apps/server/src/lib/auth.ts and disposable-D1 coverage in auth.d1.test.ts.

  • Show composition: apps/server/src/services/show-page.ts, packages/api/src/shows.ts, and apps/www/src/page/shows/detail-page-data.ts.

  • Browser coverage: apps/www/e2e/show-page.spec.ts.

  • Plan: .specs/www-content-performance/03-read-latency-plan.md.

  • Transport findings: .specs/www-content-performance/04-session-transport-findings.md.

  • Measurements, trace IDs, and verification details: .specs/www-content-performance/05-read-latency-results.md.

Commands and verification

  • bun precommit: passed after integration and after the final label-query changes.

  • bun run test in apps/server: 647 tests passed before the final label follow-up; that follow-up passed 67 targeted tests across eight suites.

  • bun run unit in apps/www: 132 tests passed. API tests: 30 passed.

  • bun run build in apps/www: passed; the existing large-client-chunk warning remains.

  • Audio/show Playwright coverage initially passed all 16 Mobile Safari/Chrome cases. After the final query changes, 15 passed and one Safari navigation case was blocked by a Vite/Foldkit request-body error overlay. Both navigation cases passed in isolation; the parallel run is not claimed fully green.

Commits

  • dba98f42: plan parallel read-latency improvements.

  • 43bf9ac9: load audio detail tags in the authorized query.

  • 0d2f0fbe: resolve sessions and users in one D1 read.

  • 9fbc5bc4: compose show pages in one API request.

  • fd6b92d1: cover composed show pages in mobile browsers.

  • b091bc69: project show and episode labels within content queries.

  • 37252c13: record remote latency gains and validation.

Open threads

  • The remaining critical path is approximately three sequential remote waits. Investigate further overlap or deployment placement with measurements rather than adding speculative caching or retries.

  • The earlier intermittent latency spike and database failures remain unexplained, not fixed by assertion.

  • Investigate the Vite/Foldkit “Response body object should not be disturbed or locked” error seen during parallel browser testing.

  • Smart Placement and selective replica reads remain proposals. Neither was applied; authentication consistency must be preserved.

2.101.0 (2026-10-03)

Features

  • www: introduce Foldkit SSR replacement (parity in progress) (#356) (24e19c1), closes #365

2.100.3 (2026-09-27)

Bug Fixes

2.100.2 (2026-09-26)

Bug Fixes

  • alchemy: apply D1 migrations on deploy (#354) (d8bffbd)

2.100.1 (2026-09-26)

Bug Fixes

2.100.0 (2026-09-24)

Bug Fixes

  • www: align composer widths and surface editorial artwork (61bf5a9)

Features

  • www: add # tag autocomplete to the markdown editor (7d8b692), closes #fragment

  • www: hide editor view-mode toggle in the composer (4923b7c)

  • www: two-step composer with autosave drafts and a publish modal (7edc96f)

2.99.0 (2026-09-24)

Bug Fixes

  • editorial: stop hashtag stripping from corrupting markdown and word-joined text (91f1ac8)

Features

  • www: unify tweet and editorial into one /new composer (89e1475)

2.98.1 (2026-09-24)

Bug Fixes

2.98.0 (2026-09-24)

Features

  • tweet dx (0e65f77)

  • www: redesign tweet capture around the resolve-first flow (0da7c1a)

2.97.1 (2026-09-23)

Bug Fixes

  • editor: stop pointing TypeScript SDK at tsgo (5769b15)

2.97.0 (2026-09-19)

Features

2.96.1 (2026-09-18)

Bug Fixes

  • social: render generated images in workerd (#336) (7087dc8)

2.96.0 (2026-09-17)

Features

2.95.0 (2026-09-13)

Features

  • social: unify generated tweet share images (#328) (76df302)

2.94.0 (2026-09-13)

Features

  • www: render tweet metadata at the edge (#327) (88b081a)

2.93.1 (2026-09-06)

Bug Fixes

  • music: fail fast on unknown entity types (d2eb19e)

2.93.0 (2026-09-05)

Bug Fixes

  • editorial: keep embed pickers inside the workspace dialog (16902fc)

  • gap on editor toolbar (44b725c)

  • spotify: load every album and playlist track page (0cd2065)

Features

  • music: share track lists and listening controls across embeds (c7e3518)

2.92.0 (2026-09-05)

Bug Fixes

  • music: derive link identity from parsed source (6c16d67)

  • music: enforce parser-supported link identity (1128cad)

  • music: keep playlist link sync best effort (006c0db)

  • music: make identity refresh deterministic (f3340ea)

  • music: preserve canonical metadata on verification (f6d280a)

  • music: preserve legacy link workflows (bca5e22)

  • music: return copied artist artwork URL (1126eab)

  • music: sanitize playlist enrichment failures (47085c8)

  • server: restore atomic remote D1 batches (80bd26d)

  • server: restore valid remote D1 queries (310f453)

Features

  • editorial: share music resolution cache (bdd895f)

  • music: add canonical source identity schema (0cf831f)

  • music: add identity maintenance tooling (7089351)

  • music: add identity rollout telemetry (6981bf5)

  • music: resolve canonical source identities (b0126d8)

  • music: route callers through canonical identity (7264dc1)

2.91.0 (2026-09-03)

Bug Fixes

  • dev: pin local worker ports (f53bb1c)

  • editorial: clarify description field (6869700)

  • editorial: consolidate writing controls (06c508f)

  • editorial: place linked music after prose (2fe1f1c)

  • editorial: refine the writing workspace (eef49f2)

Features

  • editorial: add safe external media embeds (ba37b3c)

  • editorial: create immersive writing workspace (56739ea)

  • editorial: embed pasted Spotify links (82ce028)

  • editorial: resolve pasted music entities (dd2d6db)

  • editorial: share reusable post tags (785dc3f)

  • pdf: isolate QR generation worker (8b8e1fb)

  • replace legacy markdown editor (661da0f)

  • tags: unify post tag discovery (e4862cd)

  • www: add editorial music entity embeds (256e02a)

  • www: redesign editorial workspace (bcce7be)

2.90.0 (2026-09-02)

Features

  • cdn: serve responsive image variants (665fef1)

Performance Improvements

  • www: request responsive artwork (25bdd99)

2.89.1 (2026-09-02)

Bug Fixes

  • www: recover failed featured artwork (52b3f42)

  • www: stabilize the public first load (68d336d)

2.89.0 (2026-08-31)

Bug Fixes

  • db: make the 0054 postgres migration valid postgres (bcd42b0)

  • server: annotate the request span callback return type (f7230f8)

  • server: populate replyCount on micro post listings (35fc367)

  • server: stop publishing a localhost sitemap (503d02f)

  • server: use bare crypto global so typecheck passes on clean installs (056d0f3)

  • www: show reply context in tweet search results (6f1848d)

  • www: stop tweet nav blocking on background work (918eb03)

Features

  • www: add navigation head model and local tweet trail (db683b1)

  • www: show reply counts in tweet search results (8dc181a)

Performance Improvements

  • db: index navigation lookups for the anti-join (bb5cd14)

  • server: cut navigation round trips from six to one (2315d59)

2.88.1 (2026-08-30)

Bug Fixes

2.88.0 (2026-08-27)

Bug Fixes

  • effect: remove broad error channels (ae3561a)

Features

  • dev: serve web app through Portless (ecc0dcb)

  • observability: export Worker telemetry (1942762)

2.87.0 (2026-08-23)

Bug Fixes

  • config: point non-prod stages at their own CDN router (946066e)

  • deps: patch cloudflare-runtime's undefined asset-config logger (7390d32)

  • dev: bind local API to production D1 (fa3c9f4)

  • dev: run www on Vite port (392519d)

  • effect: add monotonic members to Clock test doubles (c02a8ff)

  • effect: rename Schema.TaggedErrorClass to Schema.TaggedError (d886ff5)

  • infra: adapt to alchemy beta.72 Worker API and pin a supported compat date (fb9a68f)

  • music: enforce resolver identity invariants (67f12b3)

  • music: preserve provider outcome semantics (bdf924e)

  • music: stop hiding cover upload failures on resolve (ef43f4d)

Features

  • infra: bind dev secrets as secret_text instead of the Secrets Store (1042170)

  • music: archive provider artwork (017f662)

  • music: resolve entities across trusted sources (2d5948b)

2.86.1 (2026-08-14)

Bug Fixes

  • mobile: satisfy type-aware linting (ef80286)

  • packages: satisfy type-aware linting (39f9c45)

  • server: satisfy type-aware linting (a122627)

  • tooling: declare Worker types for root checks (b1a83db)

  • www: satisfy type-aware linting (2d52f6b)

2.86.0 (2026-08-14)

Bug Fixes

  • add actor to request (1e35a52)

  • infra: restore R2 bucket CORS and port the QR PDF expiry sweep (dca249e)

  • music: expose resolution unavailability (8a8cf01)

  • music: identify goosebumps.fm to MusicBrainz (00ada0b)

  • music: make URL resolution idempotent (58d730f)

  • music: map resolution contention (e6effb0)

  • music: recover stale resolution claims (7dac630)

  • music: return bad request for unresolved links (1ee388c)

  • server: harden music resolution persistence (936308b)

  • server: harden music URL resolution (5e78fd5)

  • www: add music resolution retry UX (7281839)

Features

  • music: add admin link rescrape (2e8926a)

  • server: rescrape Odesli entity links (d68f150)

2.85.0 (2026-08-13)

Bug Fixes

  • dev: proxy www dev server to the D1 worker without going cross-site (830ae1c)

  • make ox tooling production-ready (c3b14e6)

  • migrate: baseline the migration ledger from Cloudflare's d1_migrations (950e875)

  • mobile: satisfy anti-slop lint rules (3ff99fe)

  • navigation: persist replayed cursor moves (b693976)

  • restore anti-slop enforcement (bcccd7c)

  • satisfy anti-slop lint in libraries (617d810)

  • server: add deterministic secondary sort key to music-entity list queries (OPS-249) (de79e3d)

  • server: add missing 0000 baseline to Postgres migration chain (OPS-252) (321a5c7)

  • server: allow blank aws storage credentials in production validation (OPS-244) (5563d02)

  • server: bind Worker secrets for OPS-244 (7214b0c)

  • server: boot D1 staging worker (OPS-249) (986813f)

  • server: defer MDX compiler evaluation (OPS-257) (754779a)

  • server: guard favorite writes against D1 concurrent-insert races (OPS-258) (36ac95c)

  • server: harden D1 production migration (OPS-249) (840db8f)

  • server: parse Postgres naive timestamps as UTC in the D1 migration script (OPS-249) (52a0a1c)

  • server: repair 0013 migration so it replays on a fresh chain (OPS-252) (a7c0b77)

  • server: return null, not [], for entities with no tags or genres (OPS-249) (0625214)

  • server: satisfy anti-slop lint rules (1ddef6e)

  • server: serialize Spotify imports (OPS-259) (e2e4682)

  • server: trust the gbfm.localhost dev origin (OPS-244) (b74aaed)

  • tweets: distinguish route loading from navigation sync (c11c0e6)

  • tweets: eliminate cold-render layout shifts (a363a02)

  • tweets: keep navigation status out of document flow (d3be9a1)

  • tweets: navigate without blocking on neighbor preloads (2976942)

  • vps: point unit test harness at Miniflare D1 instead of pg Pool (0c32492)

  • vps: stop timeQuery from resolving Database via the module singleton (OPS-254) (e334d2f)

  • vps: use Cloudflare Sentry in worker (OPS-248) (905e048)

  • vps: use SQLite-compatible like() in relational-queries smoke test (f6452ea)

  • worker: bind the R2 signing account (OPS-244) (f7ed96c)

  • worker: split scheduled jobs by cron (OPS-244) (09a12f3)

  • worker: use native R2 storage (OPS-244) (563af34)

  • www: satisfy anti-slop lint rules (57ae96c)

Features

  • cdn: port the CDN router to Alchemy on the prod R2 buckets (5b82877)

  • cdn: serve cdn.goosebumps.fm from the Alchemy CDN router (50488cc)

  • db: add database context layer (OPS-246) (74986ff)

  • db: translate schemas to D1 (OPS-247) (0b375bf)

  • dev: start Alchemy with SST (2fe82c4)

  • email: replace SES with Cloudflare sending (fded1ba)

  • infra: add Alchemy V2 stack for Cloudflare Workers migration (6fc3c90)

  • infra: declare Worker secrets in the Cloudflare Secrets Store (cdec70a)

  • infra: port www, redirects and auth URL into Alchemy (665b837)

  • infra: serve goosebumps.fm from the Alchemy site worker (d4b0545)

  • migration: target deployed D1 from the pg import (b1e114c)

  • navigation: expose effective forward destination (0495d25)

  • navigation: show pending route feedback (1d96140)

  • server: add Postgres to D1 data migration tooling (OPS-249) (0dcac42)

  • server: read secrets from the Cloudflare Secrets Store (7ba398a)

  • server: run the Bluesky sync and retention sweep on a Worker cron (b70fefb)

  • vps: add ReminderQueue capability and idempotent claim (OPS-248) (63fdbb1)

  • vps: add SitemapCache KV-backed capability (OPS-248) (4421c7c)

  • vps: add worker.ts composition seam; delete Bun loops/shutdown (OPS-248) (b566c63)

  • vps: replace bluesky sync SSE route with polled status endpoint (OPS-248) (683cbc8)

  • vps: replace navigation FOR UPDATE lock with a Durable Object (OPS-248) (036d988)

Performance Improvements

  • navigation: batch result snapshot reads (55f90d0)

  • navigation: batch session snapshot reads (31b1003)

  • navigation: collapse destination and write round trips (01e8dd1)

  • navigation: execute replay reads concurrently (e141a43)

  • navigation: resolve destinations with post references (c2a41a7)

  • navigation: run independent reads concurrently (c5a133c)

  • posts: assemble rich posts concurrently (8e7dae4)

  • tweets: batch reply list reads (c6eef1d)

  • tweets: batch rich post reads (d98d05c)

  • tweets: load post and navigation state concurrently (2cd2633)

  • tweets: preload and optimistically open neighbours (e01ea40)

  • tweets: preload layout-affecting dependencies (9f76fa7)

  • tweets: remove redundant rich post reads (07dedb5)

2.84.1 (2026-08-08)

Bug Fixes

  • ci: bridge interrupted SST asset paths (d86df47)

2.84.0 (2026-08-08)

Bug Fixes

  • ci: stop building retired backup image (7d3275e)

  • http: provide identity resolver to router (afc0873)

  • observability: batch named local traces (a9d7632)

  • tweet-nav: resume navigation session (f7c1fcf)

  • vps: compute navigation read capabilities (fa81735)

  • vps: isolate scheduled maintenance failures (66b3c1c)

  • vps: map missing navigation opens to not found (885c0fa)

  • vps: preserve navigation session identity (726711d)

  • vps: reopen evicted navigation entries (cbe7bf5)

  • vps: scope device token cookie to origin (fa9f5c4)

  • www: drop hover styles on disabled tweet arrows (34616a7)

  • www: update navigation capabilities atom (e1257d4)

Features

  • api: add micro post navigation contract (f582541)

  • db: add navigation session migration (95a775c)

  • db: add navigation session schema (76f2e67)

  • migration: verify R2 object parity (3293885)

  • observability: trace navigation requests (31048cd)

  • storage: add provider configuration (67028ca)

  • storage: construct object store clients (0627a38)

  • storage: deploy R2 CDN router (ed169f7)

  • tweet-nav: preload navigation neighbours (d006d80)

  • vps: add navigation domain transitions (2890f09)

  • vps: add optional navigation identity resolver (995f834)

  • vps: persist navigation session transitions (b6467f8)

  • vps: scaffold navigation session service (1f35db3)

  • vps: serve micro post navigation (ca9c663)

  • vps: sweep expired anonymous navigation sessions (2325960)

  • www: add navigation command client (ac1e83e)

  • www: navigate tweets with commands (0768457)

  • www: open tweets through navigation session (a170110)

2.83.0 (2026-08-08)

Bug Fixes

  • api: move random exclusions to post body (cd4cbeb)

  • bluesky: harden sync event protocol (f9f51c0)

  • bluesky: preserve imported post dates (89d820f)

  • bluesky: repair dates on reimport (8de08ec)

  • bluesky: require post-create role to import (2602952)

  • bluesky: skip unresolved music entities (42ee7e3)

  • logging: classify client aborts (b68ebed)

  • logging: omit query strings from request logs (4cb6351)

  • logging: parse relative request URLs (32115a5)

  • logging: preserve annotations and limit sentry logs (7fbe291)

  • logging: retain app logger in request fibers (c6ecd3c)

  • nav: remove station loading skeleton (5b0017e)

  • vps: repair local request handling (97ff116)

  • www: add search query clear button (b2af59f)

  • www: hold tweet arrow slots and tie reply count to its thread (818f995)

  • www: keep floating elements clear of the bottom nav (3d4c1ba)

  • www: serialize tweet navigation intents (495bfd2)

  • www: standardize reply actions (32dce34)

  • www: stop infinite redirect loop on dashboard content routes (3b3e8a9)

Features

  • admin/creator can see draft content (17ad06a)

  • admin: add offset based table pagination control (e2b025d)

  • admin: persist content table state in the url (c5361bf)

  • audio: sort managed mixes server side (9326256)

  • bluesky: add archive sync control (a8bee8c)

  • bluesky: add external account schema (5bc379d)

  • bluesky: add sync event stream (e94948a)

  • bluesky: detect source conflicts (bc2767a)

  • bluesky: expose account integration API (f6f96ad)

  • bluesky: expose Effect import boundary (b9e45b9)

  • bluesky: expose sync runs and source status (196d75a)

  • bluesky: normalize music import signals (7bacda2)

  • bluesky: page bounded archive sync (febfb1c)

  • bluesky: persist connected accounts (fbe96a1)

  • bluesky: queue manual syncs (e251ae7)

  • bluesky: refresh sync sessions (5687ebf)

  • bluesky: resolve imported music entities (2768662)

  • bluesky: run durable archive sync (ae444db)

  • bluesky: schedule opted-in syncs (bcf599b)

  • bluesky: stream sync progress (f5d5ca4)

  • bluesky: surface source attribution (301f927)

  • bluesky: unify connect, sync, and draft review on one page (aebd8a9)

  • bluesky: verify app password identity (6e5cb34)

  • bluesky: write imported archive posts (06139c3)

  • dashboard: add bluesky imports surface (adc4b16)

  • dashboard: add personal content surface (ad8b699)

  • infrastructure: add database lock service (3c59923)

  • logging: emit one structured request event (760f128)

  • posts: filter managed posts by source, status, and query (7a013cc)

  • search: add global content search (b078281)

  • security: add encrypted secret service (da5044e)

  • studio: one workspace shell and a page per content type (4fdb791)

  • www: add hold-to-random navigation (af53b48)

  • www: add ring logo mark to the desktop nav (2043120), closes 414042/#A58730

  • www: add tweet card actions (4796581)

  • www: centralize service integrations (0f120b2)

  • www: flank tweet prev/next arrows on desktop (2ad11b9)

  • www: inline reply-to-a-reply with capped nesting (0269d03)

  • www: move desktop nav to the bottom (af50935)

  • www: restore real goosebumps logo art with hover motion (036845a)

  • www: static desktop nav, fold admin into dashboard (3c7ef1a)

  • www: white logo mark only, no wordmark (9628e8f)

2.82.0 (2026-08-01)

Features

  • www: add tags index page (a2ae1f5)

  • www: link tags as hashtags to a tag page (81fa3da), closes #hashtag

  • www: render full post content on tag pages (1e8f992)

2.81.1 (2026-08-01)

Bug Fixes

  • www: restore control clicks inside tweet replies (e05bed0)

  • www: unify stream control sizing on music cards (b1055f7)

2.81.0 (2026-08-01)

Bug Fixes

  • style (3fc91c0)

  • www: stop tweet nav arrows from also skipping tracks (1d71355)

Features

  • indicate reply count on tweet (3072f3a)

  • www: add tweet entry actions (bb2870b)

  • www: auto-detect quoted tweet from body text (526a4cc)

  • www: link tweet replies and parents (69c95f1)

  • www: make tweets the canonical landing route (c7db133)

  • www: persist tweet browse progress (f0b2ee5)

  • www: record loaded tweet progress (e3667a1)

2.80.0 (2026-08-01)

Bug Fixes

  • test (d6fba22)

  • vps: exclude replies from prev/next and random tweet nav (9d378d2)

  • www: show matched artist/track in tweet search results (737cd61)

Features

  • support music entity embeds on tweet replies (65c1928)

  • tweet ux (0bdffa9)

  • vps: add community reply endpoint + fix missing create-post role gate (f31c687)

  • vps: add direct replies read endpoint (32641c4)

  • vps: add full thread read endpoint (a4d3b85)

  • vps: add quote-tweet backend (quotedPostId) (26567d1)

  • vps: add thread fields to posts schema (parentPostId, rootPostId, depth) (dc2c97b)

  • vps: exclude replies from tweet feed, add createMicroPostReply (47867bf)

  • vps: make slug optional on generic post create (6765485)

  • vps: reject non-replyable and invisible reply parents (20d2693)

  • vps: strip thread fields from post update payload (defense-in-depth) (aaba8cd)

  • www: add flat reply UI to the tweet page (3a21807)

  • www: add floating compose button on tweet page (c5a3e87)

  • www: add listen-reminder button to tweet music entity card (b6d1846)

  • www: quote-tweet UI in both composers and tweet/reply rendering (a9669d7)

2.79.0 (2026-08-01)

Features

2.78.0 (2026-08-01)

Features

2.77.0 (2026-08-01)

Bug Fixes

  • theme: format generated css so ci passes (0cfdd3c)

  • theme: make destructive foreground readable in dark (5bb5cdd)

  • ui: animate sheets with tailwindcss-animate (938d825)

  • ui: apply artwork hover ring to wrapper (246f9f3)

  • ui: declare animation keyframes in ui package (265fcbe)

  • ui: follow system theme in ladle (9c68d2c)

  • ui: match shows skeleton to the real shows layout (68a3176)

  • ui: scope sheet close button to custom headers (6f1f943)

  • ui: stop play toggle label shifting layout (64dffd8)

  • www: dedupe Home in nav menu, align Follow icons, hide scrollbar (8cfebcf)

  • www: dedupe Radio Shows nav entry, restore history on mix back-link (1dc2267)

  • www: keep episode play control next to the title (1bb6c15)

  • www: scrollbar-hide utility not compiling (11b4085)

  • www: show loading feedback while a track buffers (90d3213)

  • www: wire favorite button in fullscreen player (8f4351e)

Features

  • ui: add Artwork and PlayToggle primitives (3baff2a)

  • vps: add episode number backfill script (2b080b7)

  • www: desktop top bar and mobile bottom tabs for nav (7ff13af)

  • www: drop desktop mini player for fullscreen playback (2dd4d16)

  • www: drop the every mix feed for browse by show (7cf96ad)

  • www: native view transitions on route navigation (fdaaa04)

  • www: persistent desktop dock with now-playing chip (dd42319)

  • www: persistent mini-player tab, thicker progress ticker (eaf3ec3)

  • www: playback progress ticker in desktop chrome (40003cf)

  • www: redesign episode rows and show rail for scanability (2eb03c1)

  • www: replace floating menu with a station nav (12edf93)

  • www: richer episode rows on shows browse (1cf1910)

  • www: sticky show context bar on browse page (9f6353a)

  • www: text-forward episode rows on shows browse (518b54f)

  • www: tighten shows browse layout and match skeletons (21aa04d)

2.76.7 (2026-07-31)

Bug Fixes

  • ci: avoid rollout gate false failures (a5506a3)

  • ci: budget telemetry verification phases (03c46d9)

  • ci: harden production verification gate (dafd0c5)

  • ci: identify primary ECS deployment (204a5c0)

  • ci: wait for telemetry convergence (a286e59)

2.76.6 (2026-07-30)

Bug Fixes

  • vps: prevent raw SQL telemetry (3b9bdac)

2.76.5 (2026-07-30)

Bug Fixes

  • vps: unify OpenTelemetry provider (078c4b2)

2.76.4 (2026-07-30)

Bug Fixes

  • vps: register database tracing provider (998321d)

2.76.3 (2026-07-30)

Bug Fixes

  • vps: trace queries at the pool boundary (dd14fbe)

2.76.2 (2026-07-30)

Bug Fixes

  • vps: join database spans to Effect context (4dfc332)

2.76.1 (2026-07-30)

Bug Fixes

  • vps: instrument pg at runtime boundary (c39bc3f)

2.76.0 (2026-07-30)

Bug Fixes

  • close observability review gaps (dbde52f)

Features

  • harden production observability (224cf4a)

2.75.4 (2026-07-30)

Bug Fixes

  • vps: centralize creator membership and cover relational query paths (bdfcf5b)

  • vps: correlate creator filters via inArray in relational queries (7f59103)

2.75.3 (2026-07-30)

Bug Fixes

  • vps: resolve audio thumbnailUrl from show at read time instead of copying at write time (993dbc8)

2.75.2 (2026-07-27)

Bug Fixes

  • vps: include creators when fetching show episodes (a19830b)

  • vps: use Drizzle relational queries for creators/hosts (c8e6dda)

2.75.1 (2026-07-26)

Bug Fixes

  • player: arm completion after playback starts (147dde4)

  • www: finish media session layer rename (4d54bb5)

2.75.0 (2026-07-26)

Features

  • uploads: images direct-to-S3 presign + upload-asset lifecycle table (#225) (4af56d6), closes #220 #220

2.74.0 (2026-07-26)

Features

  • uploads: switch multipart part upload to direct-to-S3 presigned URLs (#220) (10d43a3)

2.73.0 (2026-07-26)

Features

2.72.1 (2026-07-25)

Bug Fixes

  • admin: report label creation failures (686c601)

  • db: preserve label creator provenance (fe6ca65)

  • mobile: type playback rejection (6d46d92)

  • player: reject stale source status (011b8ad)

  • www: restore fullscreen player state (9c1666f)

  • www: restore player source integrations (d09a0f9)

2.72.0 (2026-07-25)

Features

  • music: migrate labels to music entities (#217) (d16e10e)

2.71.1 (2026-07-25)

Bug Fixes

  • player: restore position for cached sources (1053a54)

2.71.0 (2026-07-25)

Features

  • spotify: extract shared package and add mobile playback (#215) (4fdf4ab), closes #208

2.70.1 (2026-07-25)

Bug Fixes

  • lockfile (b361ba6)

  • tweet: restore scroll position on back navigation (c65a8c6)

2.70.0 (2026-07-25)

Bug Fixes

  • music: destructure status in useAddAdminEntityLink (21a07af)

  • spotify: attribute Spotify branding on links and playback controls (3de87e8), closes #1DB954

  • spotify: compact play/queue buttons, drop redundant badge (8707ace)

  • spotify: group entity actions after the platform link list (a1ba145)

  • tweet: gate music entity card skeleton on links query (0845629)

Features

  • observability: route Effect spans into the existing Sentry tracer (e09c3fe)

  • spotify: play and queue music entities from verified links (d2c978f), closes #207 #209 #210

2.69.0 (2026-07-25)

Bug Fixes

  • mobile: restore active tab contrast (521d6fe)

Features

  • mobile: add shared screen primitive (1c085c2)

  • theme: add semantic light-mode tokens (8d44d8c)

2.68.0 (2026-07-25)

Bug Fixes

  • content: authorize draft management (2031ddd)

  • content: keep drafts out of public surfaces (214b322)

  • mobile: advance playback reliably (9a3f219)

  • mobile: make playback controls accessible (ae45ab9)

  • mobile: make playback queue deterministic (4cef1a4)

  • mobile: synchronize playback intent (a18de4d)

  • upload: bind idempotency keys to requests (f671c48)

  • upload: clean up canceled multipart uploads (a038405)

  • upload: enforce retry-safe completion (0b22e00)

Features

  • mobile: confirm queued tracks with a toast (3ba3897)

  • mobile: redesign now-playing with theme-aware colors (e14bdc3)

2.67.0 (2026-07-23)

Bug Fixes

  • corss header (0e4a68a)

  • corss header (ee18805)

  • effect: align Spotify SDK with beta.99 (3938260)

  • mobile: sync fonts ready flag in useEffect, not during render (2729763)

  • use stack options (50ad623)

  • www: import theme tokens via relative path in Vite plugin (b09d5f7)

Features

  • dev: expose mobile stack over Tailscale (487ad8a)

  • mobile fonts (e88d0b9)

  • mobile home page (a6f84c9)

  • mobile: add expo-audio provider and secure persistent auth via expo-secure-store (87b4577)

  • mobile: add native tabs and appearance settings (7226210)

  • mobile: add persistent playback queue (06795bc)

  • mobile: add tab layout, now-playing screen, and NowPlayingProvider (5530048)

  • mobile: migrate to @effect/atom-react@4, bump react 19.2.7 and effect 4.0.0-beta.99 (691e9d8)

  • mobile: redesign home screen with featured mix and update profile with appearance section (b16aa52)

  • mobile: refine home screen hierarchy (64f92e0)

  • mobile: use Effect for authentication (1a199ed)

  • theme: export brandDark and brandLight tokens (c62a8f2)

2.66.0 (2026-07-18)

Bug Fixes

  • email: tighten input validation (ca45177)

  • password reset flow - when passwords arent matching (89fb3fa)

  • upload: partNumber must decode from a string in multipart bodies (1b19994), closes #187

  • vps: add missing packages/api copy to Dockerfile (9ad0050)

  • vps: address adversarial review findings on music album/track/playlist port (ff48fa0)

  • vps: address adversarial review findings on music entity-links port (4191370)

  • vps: auto-default OTel endpoint to localhost in dev stages (acbf6ea)

  • vps: avatar upload 400 from Schema.File multipart mismatch (6a8d78c)

  • vps: complete resolve HttpApi cutover (Step 6) (88921f5), closes #161

  • vps: confirmInvite as a real HttpApiEndpoint, not a raw route (8f326b0)

  • vps: correct music/albums gap attribution, document middleware ordering (76704a6), closes #189

  • vps: remove no-op type assertion flagged by oxlint (0c402d0), closes #151

  • vps: restore email/UUID format validation and await on newsletter unsubscribe (7157dfe)

  • vps: restore non-empty-string validation on file-manager fields (36983bc), closes #165 #166

  • vps: restore UUID format validation on favorites audioId/showId (72d40fc)

  • vps: restore UUID validation on shows subscribe/unsubscribe id param (a5c19d0)

  • vps: tighten email validation to match zod's z.email() (bf6b12f), closes #170

  • vps: use real URL parsing for spotify enrich endpoint (b2dbadb)

  • www: convert Date fields before sending artist metadata updates (df07f39), closes #184

  • www: make 'Resend email' link visibly clickable (77cdbe1)

  • www: wire SocialLinksCard into the actual profile route (8a7eb11)

Features

  • api: scaffold packages/api with health group contract (c9b5235)

  • email: port email vertical slice (36913ab)

  • vps: add unused Effect toWebHandler + Hono fallback (Step 2a) (9899df5)

  • vps: dual-export traces to motel alongside Jaeger (3a59df8)

  • vps: move CORS/rate-limit/logging/Sentry to Effect global middleware, remove HonoFallback (Step 8) (cfb13e8)

  • vps: port admin to HttpApiBuilder.group (Step 6) (b0ec807)

  • vps: port audio group to HttpApiBuilder (step 6) (0539002)

  • vps: port auth middleware to HttpApiMiddleware (Step 3b) (28ffae7)

  • vps: port better-auth route onto the Effect router (Step 2c) (300b58c)

  • vps: port favorites to HttpApiBuilder.group (Step 6) (e82ef4f)

  • vps: port file-manager to HttpApiBuilder.group (Step 6) (54ba078)

  • vps: port health to HttpApiBuilder.group (Step 3a) (bca15fb)

  • vps: port invite to HttpApiBuilder.group (Step 6) (65a091a)

  • vps: port label group to HttpApiBuilder (step 6) (d438195)

  • vps: port music albums/tracks/playlists CRUD to HttpApiBuilder.group (Step 6c) (40873cf)

  • vps: port music entity-links/resolve/scrape/pending-queue (Step 6d) (7d9ad0c), closes #191

  • vps: port music-artists CRUD to HttpApiBuilder.group (Step 4) (18dafca)

  • vps: port music-reminders to HttpApiBuilder.group (Step 6) (5cc0c45)

  • vps: port newsletter to HttpApiBuilder.group (Step 6) (eb1a2a6)

  • vps: port post group to HttpApiBuilder (step 6) (374a480)

  • vps: port profile to HttpApiBuilder.group (Step 6) (095ab24)

  • vps: port release group to HttpApiBuilder (step 6) (1db4dd8)

  • vps: port rss/seo/share routes to plain HttpRouter (Step 7) (24e57e9)

  • vps: port search to HttpApiBuilder.group (Step 6) (d052ce8)

  • vps: port shows to HttpApiBuilder.group (Step 6) (b8c5d91)

  • vps: port spotify to HttpApiBuilder.group (Step 6) (34ea0a5), closes #165 #166 #167

  • vps: port upload + upload-multipart to HttpApiBuilder.group (Step 7) (e3b78d4), closes 175/#184

  • vps: port user group to HttpApiBuilder (step 6) (0fe5c29)

  • vps: swap entry point to Effect toWebHandler (Step 2b) (5454eea)

  • vps: wire newsletter group into routes.ts/api.ts, delete old Hono trio (98f8d47)

  • vps: wire OtlpLive into AppLayer to export traces (732e625)

  • www: add music reminder deletion (92d6dbb)

  • www: add typed HttpApiClient for the music-artists group (7aa6dd0)

  • www: improve auth navigation (4a70fd6)

  • www: replace useAdminArtists' fetcher with the typed client (90b6622)

  • www: self-service social links editor in dashboard (ccb2a38)

  • www: swap admin-group hooks to typed HttpApiClient (step 6b) (35bfb5b)

  • www: swap audio-group hooks to typed HttpApiClient (step 6b) (1779b7f), closes #176 #177 #175

  • www: swap favorites hooks to typed HttpApiClient (step 6b) (c98bc94)

  • www: swap label+release hooks to typed HttpApiClient (step 6b) (150031a), closes 171/#172

  • www: swap music-artist hooks to typed HttpApiClient (step 6b) (fd0cd90)

  • www: swap newsletter hooks to typed HttpApiClient (step 6b) (6843733)

  • www: swap newsletter hooks to typed HttpApiClient (step 6b) (15b4240)

  • www: swap post-group hooks to typed HttpApiClient (step 6b) (9e86ca7), closes #176

  • www: swap resolve slug consumer to typed Effect client (step 6b) (d8ebe7d)

  • www: swap search + profile consumers to typed Effect client (step 6b) (d1179a8)

  • www: swap shows-group hooks to typed HttpApiClient (step 6b) (0c1f9bb)

  • www: swap spotify hooks to typed HttpApiClient (step 6b) (fb238c7)

  • www: swap user-group hooks to typed HttpApiClient (step 6b) (7bce140)

  • www: toast feedback for dashboard profile settings (11b8edd)

  • www: warn when reset-password link is opened with an active session (b71cb61)

2.65.4 (2026-07-10)

Bug Fixes

2.65.3 (2026-07-10)

Bug Fixes

  • www: apply 60s cache-control to root path, not just *.html (437cad4)

2.65.2 (2026-07-10)

Performance Improvements

  • www: cache index.html at edge, lazy-load auth dialogs (#141) (23987c5), closes #139

2.65.1 (2026-07-10)

Performance Improvements

  • www: cut homepage entry bundle 45%, LCP 1.8s -> 1.0s (#139) (d515b76)

2.65.0 (2026-07-10)

Bug Fixes

  • www: render artwork in webkit tweet exports (#137) (94ec18b)

Features

  • vps: add granular OTEL spans to slow trace paths (#138) (382f952)

2.64.0 (2026-07-06)

Features

2.63.0 (2026-07-06)

Bug Fixes

  • www: collapse tweet actions into kebab menu, fixes mobile crowding (31db000)

Features

  • www: download tweet as png for socials (a383799)

  • www: qr code to post url in social exports, drop liner notes label (96db4e1)

2.62.0 (2026-07-04)

Bug Fixes

  • www: use highlight-foreground on highlight surfaces (0879df5)

Features

  • theme: align light/dark palette with blue brand colors (7a3cb2e), closes #e8eef7

2.61.0 (2026-07-03)

Features

  • www: inline streaming-link verify in tweet composer (#135) (4bc4214)

2.60.1 (2026-07-01)

Bug Fixes

  • dev: serve SPA auth pages and trust localhost origin (#134) (e3c32f5)

  • www: resolve auth context before guarding routes and preserve redirect target (#133) (0510949)

2.60.0 (2026-07-01)

Features

  • www: shared logger writes to console and Sentry (#132) (908d2bd)

2.59.0 (2026-06-21)

Features

2.58.0 (2026-06-21)

Features

2.57.4 (2026-06-21)

Bug Fixes

  • vps: lower multipart chunk size under API Gateway 10MiB limit (#130) (fb8a9d6)

2.57.3 (2026-06-21)

Bug Fixes

  • www: move Sentry.init to module-level in main.tsx (#129) (b52fbef)

2.57.2 (2026-06-21)

Bug Fixes

  • www: send credentials on resumable upload requests (#128) (e452925)

2.57.1 (2026-06-21)

Bug Fixes

2.57.0 (2026-06-21)

Features

  • upload: resumable chunked mix audio upload (#126) (cc25ff3)

2.56.0 (2026-06-21)

Features

2.55.0 (2026-06-16)

Bug Fixes

  • shows: align selected show hero with sidebar top (73b8bcb)

  • user: persist admin user image via app-owned profile route (1581120)

Features

  • admin: edit mix and post metadata from the content tab (d5d4162)

  • mix-upload: pick audio and artwork from S3 media picker (a5086c1)

  • shows: browse mixes inline with a selectable show list (f75a021)

2.54.0 (2026-06-15)

Bug Fixes

Features

2.53.0 (2026-06-14)

Bug Fixes

  • theme: add explicit .ts extensions for Node ESM resolution (cc0981e)

  • ui: use foreground color for form input text and caret (64c4f25)

  • www: use dvh and safe-area-inset for iOS Safari layout (cc7e9af)

Features

  • gbpm: add --version and --help flags, suppress ffmpeg stderr on success (d972718)

  • theme: add backgroundHex token for theme-color meta tags (6dfc274)

  • tools: add Rust process-mix CLI (7ac955d)

  • www: add theme-colors Vite plugin for index.html (8c2b7a2)

  • www: admin sidebar nav and dedicated tab routes (9992e4a)

  • www: keyboard-navigable floating menu tiles (7521b60)

  • www: sync theme-color meta with ThemeProvider (20b993f)

2.53.0 (2026-06-14)

Bug Fixes

  • theme: add explicit .ts extensions for Node ESM resolution (cc0981e)

  • www: use dvh and safe-area-inset for iOS Safari layout (cc7e9af)

Features

  • gbpm: add --version and --help flags, suppress ffmpeg stderr on success (d972718)

  • theme: add backgroundHex token for theme-color meta tags (6dfc274)

  • tools: add Rust process-mix CLI (7ac955d)

  • www: add theme-colors Vite plugin for index.html (8c2b7a2)

  • www: sync theme-color meta with ThemeProvider (20b993f)

2.53.0 (2026-06-14)

Bug Fixes

  • theme: add explicit .ts extensions for Node ESM resolution (cc0981e)

  • www: use dvh and safe-area-inset for iOS Safari layout (cc7e9af)

Features

  • theme: add backgroundHex token for theme-color meta tags (6dfc274)

  • tools: add Rust process-mix CLI (7ac955d)

  • www: add theme-colors Vite plugin for index.html (8c2b7a2)

  • www: sync theme-color meta with ThemeProvider (20b993f)

2.52.0 (2026-06-13)

Bug Fixes

  • ci: add vitest include pattern and fix allowedHosts type (7f9995a)

  • infra: clear VITE_VPS_BASE_URL for local dev (2e62545)

  • remove reference to missing otel.ts (65ac2fd)

  • vps: handle missing SST resources gracefully (448edb5)

Features

  • www: proxy API requests through Vite dev server (cdff26f)

2.51.0 (2026-05-31)

Bug Fixes

  • sentry: reduce local analytics noise (613127b)

  • www: batch playlist saved-track checks (499e1c4)

Features

  • www: add creator actions to dashboard (96ac92c)

2.50.4 (2026-05-31)

Bug Fixes

2.50.3 (2026-05-26)

Bug Fixes

2.50.2 (2026-05-26)

Bug Fixes

  • apply biome formatting to pass CI lint check (#115) (f34772a)

2.50.1 (2026-05-25)

Bug Fixes

  • tweet: restore titles and shorten slugs (33e9702)

2.50.0 (2026-05-25)

Bug Fixes

  • replaced search.token! with a guarded mutation (9fcf975)

Features

2.49.0 (2026-05-24)

Features

  • admin: add newsletter subscribers tab (080c07a)

  • email: add personal newsletter welcome email with reply-to support (eab6f81)

  • newsletter: add email-based unsubscribe flow (b2dd9f3)

  • newsletter: collect optional name on subscribe (6a00921)

2.48.0 (2026-05-24)

Bug Fixes

  • backup: use direct port 5432, typed errors for email alerts (9aa97ee)

  • dockerfile (5eb7a3d)

  • docker: upgrade backup task to postgresql18-client (a097693)

  • vps: switch sentry tracing to bun preload (592ff15)

Features

  • backup: add verify-backup script and dev commands (87a3c4c)

2.47.0 (2026-05-24)

Bug Fixes

  • vps-tracing: add parent span. (292b700)

Features

  • vps-health: cache responses (b0e9e0c)

  • vps-health: split live and ready check (78a2169)

2.46.0 (2026-05-24)

Bug Fixes

  • ci: gate prod release on docker build (f9ced51)

Features

  • db-backup: minimal integrity check (091ce72)

  • expire old backups (9b87da7)

2.45.1 (2026-05-24)

Bug Fixes

  • ci: trigger prod deploy explicitly (58df86e)

2.45.0 (2026-05-24)

Bug Fixes

Features

2.44.0 (2026-05-21)

Features

2.43.0 (2026-05-21)

Bug Fixes

  • automatically verify manually added links + TS! (e879b98)

Features

2.42.0 (2026-05-17)

Bug Fixes

  • admin: move entity detail route out of music catalog nesting (21e6f01)

  • dialog animation (b7dd375)

  • ui: make playground themes switchable (a3de85f)

Features

  • add stream links to tweet card (0e4b414)

  • admin: music entity catalog + edit pages (669879d)

  • db_schema: defaultAuditFields (e2e31a4)

  • edit music entity links (b4a5fe2)

  • tweet edit flow (67067da)

  • ui: add internal design system playground (93acdb6)

  • ui: music entity detail/edit components + playground panel (4b4b2fa)

  • ui: replace playground with Ladle (294b9e9)

  • vps: integration test infrastructure + music-entity service split (561fa9b)

  • www: add playlists tab to admin/music (2b9d495)

2.41.0 (2026-05-13)

Features

  • admin: add frontend error simulator (654680b)

  • www: report API outages to Sentry (26ffc2c)

2.40.1 (2026-05-12)

Bug Fixes

  • vps: Removed the loopback hostname (7149bbf)

2.40.0 (2026-05-11)

Bug Fixes

  • formatting (4031b07)

  • infra: use 127.0.0.1 instead of localhost in CORS and auth origins (a9649a4)

  • raycast runtime (fc92d9a)

Features

  • vps: add playlist import and management endpoints (c7f0c09)

  • vps: expose spotifyUrl on playlist payloads (535ad31)

  • vps: queue Spotify playlist enrichment (cea1aad)

  • www,vps: wire Spotify card into playlists and track curator on imports (3b396a3)

  • www: add dedicated admin playlists page with editor (c2170a7)

  • www: add Spotify client ID to environment (72ef629)

  • www: add Spotify PKCE auth library and connection card (e450129)

  • www: queue playlist imports and sync links (3e77e5a)

  • www: spotify playlist integration (7468bdd)

  • www: sync changelog content into app (8d7df6d)

2.39.0 (2026-05-09)

Bug Fixes

  • www: place biome suppression on key prop line (0943e97)

Features

  • www: add tweets and editorial to nav and command palette (f56f102)

  • www: refresh tweet post page (52dcc2a)

2.38.1 (2026-05-09)

Bug Fixes

2.38.0 (2026-05-09)

Features

  • vps: unified logger with sentry logs fanout (767d4c9)

2.37.0 (2026-05-09)

Features

  • db: extend posts with music entity linking (95e1ff8)

  • music: add entity resolver endpoint (1194f1c)

  • sentry BE (fed2902)

  • www: add music capture UI for creating posts from URLs (0f9d13d)

2.36.0 (2026-05-09)

Features

  • QoL: port check before running server (2b99d94)

2.35.0 (2026-05-08)

Bug Fixes

Features

2.34.2 (2026-04-28)

Bug Fixes

2.34.1 (2026-04-28)

Bug Fixes

  • e2e: theme-toggle session (44415ff)

2.34.0 (2026-04-28)

Features

2.33.0 (2026-04-28)

Features

2.32.0 (2026-04-28)

Bug Fixes

  • dockerfile (f92358e)

  • www: disable autocap on auth inputs, polish welcome modal mobile (5d19903)

  • www: make reminder date picker accessible (d1e06e0)

  • www: prevent mobile auth horizontal scroll (91cdf3f)

  • www: reminders datetime picker not opening on desktop (c6e975d)

  • www: responsive dashboard layout on mobile (9ecb59a)

Features

  • reminder form improvements (dc361f0)

  • ui (bb1342c)

  • www: add appearance settings (4c24b34)

  • www: add reminders to floating nav, restructure dashboard entry points (4b8f083)

2.31.0 (2026-04-27)

Bug Fixes

  • cmd: keep keyboard-selected items in view (d12293a)

  • cmd: polish keyboard handling and footer (421b54b)

  • tsconfig (a4c83d3)

  • verification email (aea5dd0)

Features

  • auth: live username availability check on sign-up (9ade9d2)

  • auth: signup ux groundwork (fec619f)

  • auth: verify-email banner, signup success state, terms/privacy (957910e)

  • forgot password ux (446fc59)

2.30.0 (2026-04-17)

Bug Fixes

Features

2.29.0 (2026-03-18)

Features

  • add auth docs to scalar (e2fa6ea)

  • auto-create and link artists during scrape with idempotency (24206ad)

  • music: complete platform-agnostic music metadata system (cb6bc79)

  • platform-agnostic music metadata system (8f11e70)

  • remove entityId from scrape endpoint (cf1b58e)

2.28.0 (2026-03-15)

Features

2.27.3 (2026-03-11)

Bug Fixes

  • force trigger ci👀: document ssl redirect loop (e06f186)

2.27.2 (2026-03-11)

Bug Fixes

2.27.1 (2026-03-11)

Bug Fixes

2.27.0 (2026-03-07)

Features

  • seo: fix sitemap routing, add posts, and add JSON-LD structured data (2e68fb0)

  • seo: route sitemap dynamic entries through VPS /s/ pre-render routes (5410220)

2.26.1 (2026-03-07)

Bug Fixes

2.26.0 (2026-03-06)

Features

  • consolidate shows page (022042e)

  • desktop sidenav enhancements (e7c21bf)

2.25.0 (2026-03-01)

Features

  • core: add mix processing module with Effect-based job queue (7958b38)

  • raycast: add process-mix command with async job polling (f07aaf4)

  • vps: add async mix processing endpoints with job status tracking (4cc4b4f)

2.24.2 (2026-02-20)

Bug Fixes

2.24.1 (2026-02-20)

Bug Fixes

2.24.0 (2026-02-20)

Features

2.23.0 (2026-02-18)

Bug Fixes

Features

2.22.1 (2026-02-17)

Bug Fixes

  • db: allow user deletion by updating user FKs to cascade/set null (af442c7)

2.22.0 (2026-02-17)

Features

2.21.1 (2026-02-16)

Bug Fixes

  • www: sync resolve with profile (f84477b)

2.21.0 (2026-02-16)

Features

  • clickable link to post author (dfa680c)

  • restyle mix list item (9b96ef1)

  • www: styling (dispatch and profile) (88e4b12)

2.20.0 (2026-02-15)

Features

2.19.0 (2026-02-13)

Bug Fixes

  • run precommit (48cd614)

  • www: extract MixListItem component and fix mobile overflow (227e3f4)

Features

2.18.0 (2026-02-13)

Bug Fixes

Features

  • audio player improvements (b98c9c7)

2.17.0 (2026-02-13)

Bug Fixes

Features

  • vps: add post by slug endpoint with MDX compilation (38c8d56)

  • vps: add post share/redirect handler (0e4750b)

  • www: add dispatch and pings post routes with show page improvements (46b1e55)

2.16.0 (2026-02-10)

Features

2.15.0 (2026-02-10)

Features

  • favourites and subscribing (67dcde5)

  • favourites/subscribe triggers modal sign up/login (ff67687)

  • onboarding improvements (ef1de3f)

2.14.0 (2026-02-04)

Features

  • audio player and profile improvements (e3c36dd)

2.13.3 (2026-02-04)

Bug Fixes

  • clickable username on audio player (e021dc5)

2.13.2 (2026-02-04)

Bug Fixes

2.13.1 (2026-02-03)

Bug Fixes

2.13.0 (2026-02-03)

Bug Fixes

  • www: address critical production issues (00a9fda)

Features

  • vps: add rate limiting to public endpoints (3b428f0)

2.12.0 (2026-01-30)

Features

  • add show support to favourites (a658638)

  • Implement a cron job to clean up expired QR PDF files from S3 using a new S3 object listing capability. (4847842)

  • qr service (75b6394)

  • restrict QR download functionality to admin and creator roles. (c84d587)

2.11.0 (2026-01-29)

Features

2.10.0 (2026-01-28)

Features

  • Enhance admin user editing to include username, display name, profile image, email verification, and real-time username availability checks. (fd308bd)

2.9.0 (2026-01-28)

Features

  • add user search functionality for admin and implement reserved slug generation and validation (86676b4)

  • Implement banner image support for shows and enhance host linking with user profiles. (33edb38)

  • Implement newsletter subscription functionality and add an admin tab for show management. (834ed96)

  • implement slug resolution to user profiles or shows and enhance authentication context attachment. (196161f)

  • Redesign show page to include a new banner, detailed header, and structured content sections. (d13262d)

2.8.0 (2026-01-28)

Features

  • Add 'Radio Shows' navigation, enhance mix details with queueing and creator links, and introduce show skeleton loading. (eba130d)

2.7.3 (2026-01-28)

Bug Fixes

2.7.2 (2026-01-28)

Bug Fixes

  • revert to absolute positioning for music player (cbbc976)

2.7.1 (2026-01-28)

Bug Fixes

2.7.0 (2026-01-27)

Features

2.6.0 (2026-01-27)

Features

  • Implement user display names and admin user creation/management. (3ff6b33)

2.5.0 (2026-01-27)

Features

  • observability improvements (3723b98)

2.4.0 (2026-01-27)

Bug Fixes

Features

2.3.0 (2026-01-24)

Features

  • backup: extract LogCapture to shared utilities with idiomatic Effect (e7507dc)

  • preload track (95a6d22)

  • remiinders styling (207ed8d)

  • seo: add SEO to index pages and create sitemap/robots.txt (c71ca4c)

  • seo: add SEO utilities and metadata to dynamic routes (ea906c4)

  • settngs and dashboard (eb7e817)

  • update mixes layout (4063e27)

  • updateTagsMutation (3ef1277)

2.2.1 (2026-01-22)

Bug Fixes

  • only fetch favourites when logged in (1163f92)

2.2.0 (2026-01-22)

Bug Fixes

Features

  • Add structured Effect logging to services and API handlers, and document implementation progress. (b0e3740)

  • Implement comprehensive performance monitoring for database queries and HTTP requests with severity-based logging and health checks. (5cf2da1)

  • Integrate OpenTelemetry distributed tracing with Effect and add initial service spans. (47101fb)

  • Introduce Effect-based logging middleware and integrate it across the application services. (27381c1)

2.1.0 (2026-01-18)

Bug Fixes

  • Remove system-wide Pulumi binaries in deploy workflow to prevent conflicts with SST Ion. (545966c)

Features

  • add Bandcamp URL support to Spotify service (0a0160f)

  • add HTML fallback parsing for Bandcamp metadata (f5a1d30)

2.0.2 (2026-01-18)

Bug Fixes

2.0.1 (2026-01-18)

Bug Fixes

2.0.0 (2026-01-18)

Bug Fixes

  • update core auth login to use /auth endpoint (6687db7)

Documentation

  • update Effect migration status for Phase 6 content/label handler completion (040f252)

Features

  • Add new Effect-based services for labels, audio, music reminders, posts, and releases, and refactor music reminder handlers to use the new service layer. (09c2d21)

  • complete Phase 5 Effect migration - implement remaining services (66a0f73)

  • enhance remaining routes and update migration documentation (384148d)

  • migrate auth handlers to use UserService (c6cabb7)

  • migrate auth routes to user routes and update routing (de02785)

  • migrate content handlers to use Effect services (429224f)

  • migrate processUpload handler to Effect (8934835)

  • migrate release handlers to use ReleaseService (1eafe08)

  • update runtime to include new Effect services (df248b5)

BREAKING CHANGES

  • Route improvements may affect internal handler structure

  • Runtime now includes additional services that may affect service resolution

  • Auth API endpoints moved from /auth to /user

  • Auth handlers now use Effect-based services instead of direct database operations

  • Release handlers now use Effect-based services instead of direct database operations

  • Handler migration continues with type-safe service adoption

  • Content handlers now use Effect-based services instead of direct database operations

  • Services now use Effect-based functional programming

1.10.0 (2026-01-17)

Bug Fixes

Features

1.9.0 (2025-12-28)

Features

1.8.3 (2025-12-28)

Bug Fixes

1.8.2 (2025-12-28)

Bug Fixes

1.8.1 (2025-12-28)

Bug Fixes

1.8.0 (2025-12-28)

Bug Fixes

Features

  • Dynamically configure CORS origin with FRONTEND_URL and remove www subdomain from production site URL. (542f72c)

1.7.0 (2025-12-27)

Bug Fixes

Features

  • new mix upload page (9cf3b54)

  • style www to be a bit more brutalist (83a3fc4)

1.6.2 (2025-12-27)

Bug Fixes

1.6.1 (2025-12-27)

Bug Fixes

1.6.0 (2025-12-27)

Bug Fixes

Features

  • fix player layout on mixes page (1ffe28f)

1.5.0 (2025-12-27)

Features

1.4.0 (2025-12-27)

Features

1.3.0 (2025-12-27)

Features

1.2.0 (2025-12-14)

Bug Fixes

Features

1.1.2 (2025-12-06)

Bug Fixes

1.1.1 (2025-11-23)

Bug Fixes

1.1.0 (2025-11-23)

Features

  • Add Open Graph meta tags for link sharing (#70) (9161d49)

1.0.0 (2025-11-23)

  • Add default pagination to VPS GET endpoints (#68) (77fa9d6)

BREAKING CHANGES

  • Response format changed from arrays to paginated objects

  • chore: Remove migration 0008 for regeneration

Removed migration 0008_next_echo.sql to regenerate it cleanly. This ensures the migration is properly generated from the current schema state after rebasing with prod.

  • fix: Handle count query result properly and fix TypeScript errors

  • Fix count() result destructuring - handle potentially undefined first element

  • Remove unused 'desc' import from publication handlers (orders by name not createdAt)

  • Remove unused 'and' import from label handlers

  • All pagination queries now properly handle count results with nullish coalescing

  • Publications table orders by name instead of non-existent createdAt field

  • Pass typecheck and biome checks

  • feat: Update UI clients to support pagination

  • Updated www app API client (http.ts) to use useInfiniteQuery for paginated endpoints

  • Added pagination controls to mixes, tracks, and labels list pages

  • Added "Load More" functionality to label detail page releases

  • Updated Raycast extension to automatically load all pages on mount

  • All clients now support the new paginated API response format

Changes:

  • apps/www/src/lib/http.ts: Converted useAudioByType, useAllLabels, useReleasesByLabel to useInfiniteQuery

  • apps/www/src/routes/mixes/index.tsx: Added "Load More" button

  • apps/www/src/routes/labels/index.tsx: Added "Load More Labels" button

  • apps/www/src/routes/tracks/index.tsx: Added conditional "Load More" buttons for each audio type

  • apps/www/src/routes/labels/$labelSlug.tsx: Added "Load More Releases" button

  • apps/raycast/src/list-content.tsx: Auto-load all pages of mixes

  • apps/raycast/src/edit-mix.tsx: Auto-load all pages of mixes in dropdown

  • apps/raycast/src/edit-label.tsx: Auto-load all pages of labels in dropdown

  • wip

  • format

0.36.1 (2025-11-23)

Bug Fixes

0.36.0 (2025-11-23)

Features

0.35.0 (2025-11-23)

Features

0.34.0 (2025-11-03)

Features

0.33.0 (2025-10-26)

Features

0.32.0 (2025-10-26)

Features

  • application level query timer (7349957)

  • new mix notification email (6c69212)

0.31.0 (2025-10-26)

Bug Fixes

Features

0.30.1 (2025-10-09)

Bug Fixes

  • add links to spotify components (cf3ef23)

0.30.0 (2025-10-09)

Bug Fixes

Features

0.29.0 (2025-10-07)

Features

0.28.4 (2025-10-06)

Bug Fixes

0.28.3 (2025-10-06)

Bug Fixes

  • remove redundant typecheck (55e081c)

0.28.2 (2025-10-06)

Bug Fixes

0.28.1 (2025-10-06)

Bug Fixes

0.28.0 (2025-10-06)

Bug Fixes

Features

0.27.1 (2025-10-06)

Bug Fixes

0.27.0 (2025-09-28)

Features

0.26.0 (2025-09-24)

Features

0.25.1 (2025-09-14)

Bug Fixes

0.25.0 (2025-09-14)

Features

0.24.0 (2025-08-09)

Features

  • audio player + keyboard shortcuts (5abc7bc)

0.23.0 (2025-08-08)

Features

0.22.0 (2025-08-07)

Features

0.21.0 (2025-08-06)

Features

0.20.2 (2025-08-05)

Bug Fixes

0.20.1 (2025-08-05)

Bug Fixes

0.20.0 (2025-08-05)

Features

0.19.1 (2025-08-05)

Bug Fixes

0.19.0 (2025-08-05)

Bug Fixes

Features

0.18.0 (2025-08-05)

Features

  • audio player improvements (5577abe)

0.17.0 (2025-08-03)

Bug Fixes

  • grid on single mix page was wonky (aeb46e8)

  • remove redundant frontmatter processing (103b086)

Features

0.16.0 (2025-08-01)

Features

0.15.0 (2025-07-27)

Features

0.14.0 (2025-07-26)

Features

0.13.0 (2025-07-26)

Features

0.12.0 (2025-07-26)

Bug Fixes

Features

0.11.0 (2025-07-26)

Features

0.10.4 (2025-07-25)

Bug Fixes

  • add pnpm workspace file to container (92e5034)

0.10.3 (2025-07-25)

Bug Fixes

0.10.2 (2025-07-25)

Bug Fixes

0.10.1 (2025-07-25)

Bug Fixes

0.10.0 (2025-07-25)

Features

  • content migration scripts (b5881b2)

0.9.0 (2025-07-25)

Features

  • migrating from mixes schema to generic audio (c5335f0)

0.8.0 (2025-07-23)

Features

0.7.0 (2025-07-23)

Bug Fixes

Features

0.6.5 (2025-07-22)

Bug Fixes