Changelog

v0.16.2

v0.16.2

February 23, 2026
Feature
Version label and hover-delete button on style cards — delete user-created styles without entering the editorstyles
Feature
StatusBadge supports active/draft/archived color mappingsstyles
Fix
Style picker excludes drafts — only active styles shownsettings

v0.16.1

February 23, 2026
Fix
Job-playlist counting uses job_id FK instead of 2-hour time-window heuristicapi
Fix
Batch jobs stay 'processing' until playlists actually complete (no premature completion)api
Fix
Cancel scoped to active job only — no longer cancels unrelated playlistsapi

v0.16.0

February 19, 2026
Feature
Toast notification system — auto-dismiss, click-to-dismiss, accessible (aria-live), stackingweb
Feature
apiRoute() wrapper for consistent error handling across all 21 API routesapi
Fix
10+ silent failure points now show error toasts — style editor, queue board, playlist detail, schedule formweb
Refactor
Unified save/error feedback — replaced ad-hoc Saving/Saved patterns with canonical toast systemweb

v0.15.3

February 19, 2026
Docs
Add missing style creator improvements to v0.15.2 changelog entrychangelog

v0.15.2

February 18, 2026
Fix
Fix timeline timezone parsing — append Z suffix to D1 UTC timestamps to prevent double-shiftapi
Refactor
Unify tick type, step, and trigger labels into shared constants — eliminate duplicated definitionsweb
Fix
Add error states to activity page and queue board initial load with retry buttonweb
Fix
Fix semantic HTML — replace misused output tags with div/span role=statusweb
Fix
Add meaningful alt text to cover images, error tooltip to activity tick tableweb
Fix
Add missing animate-fade-out keyframe for watcher saved confirmationweb
Fix
Consistent strokeLinecap/strokeLinejoin on all trigger icon SVGsweb
Fix
Style creator: image counter, placeholder slots, client-side resize before upload to avoid body size limitsstyles

v0.15.1

February 18, 2026
Fix
Switch style analysis from Anthropic to OpenAI GPT-4o vision — uses existing configured keyapi
Fix
Fix changelog crash from invalid entry types (ui, test) not in ChangelogEntryType unionchangelog

v0.15.0

February 18, 2026
Fix
Replace aHash with dHash for perceptual hashing — robust to Spotify CDN re-encoding, eliminates false-positive integrity flagsworker
Fix
Lower phash match threshold from 25 to 10 (dHash same-image distances are 0-5)worker
Fix
Add cross-trigger guard preventing cron/auto-detect duplicate generation on same dayworker
Feature
Empty queue columns now show card-height dashed placeholder instead of collapsed textqueue
Feature
Cover art images show skeleton pulse loader with fade-in transitionqueue
Feature
Watcher toggle and interval now show Saving/Saved feedback with disabled state during savequeue
Feature
Distinct trigger type icons — clock (Scheduled), cursor (Manual), radar (Auto-detect)dashboard
Feature
Add Auto-detect to trigger filter chipsdashboard
Fix
Cost tooltip now uses portal to prevent table overflow on bottom rowsdashboard
Feature
Standardize trigger display names — Manual, Scheduled, Auto-detect — across all viewsglobal

v0.14.1

February 18, 2026
Fix
Hash compressed JPEG instead of raw Replicate output — phash now matches what Spotify actually stores, eliminating false positivesworker
Fix
Use Hamming distance (threshold 12) instead of exact phash match — tolerates Spotify re-encoding without false flagsworker
Fix
Backfill /hash endpoint now compresses to JPEG before hashing, consistent with pipelineapi
Chore
Add hammingDistance unit tests (identical, single-bit, opposite, multi-bit)worker

v0.14.0

February 18, 2026
Feature
Cover integrity system — watcher automatically detects removed or replaced covers and resets playlists for regenerationworker
Feature
Perceptual hashing (aHash) — compares generated cover to live Spotify cover to distinguish CDN URL rotation from actual replacementworker
Feature
Generation soft-delete — integrity failures mark generations as deleted rather than removing themdb
Feature
Admin backfill-phash endpoint — retroactively computes phash for existing generations and seeds cover URLsapi
Feature
Activity page shows integrity check counts per watcher tick (verified/flagged)ui
Feature
Playlist detail page shows cover source indicator — Generated by DISC or Spotify coverui
Fix
All generation queries now exclude soft-deleted rows (8 query sites updated)db
Feature
Worker /hash endpoint for phash computation in Cloudflare Workers runtimeworker

v0.13.1

February 18, 2026
Fix
Health pills use neutral gray for inactive non-critical services instead of alarming redui
Fix
Success rate excludes skipped ticks from denominator — disabled watchers no longer deflate the percentageapi
Fix
Summary cards show processed/attempted ratio, failure count, and duration range in secondsui
Fix
Stale-while-revalidate loading — keeps previous data visible with subtle spinner instead of full-page flashui
Fix
Activity times display in browser local timezone with abbreviated label (e.g. EST)ui
Feature
Auto-poll activity data every 30s when viewing todayui
Fix
Add aria-live, aria-hidden, sr-only labels, and role attributes to health bar, spinner, and tooltipa11y
Fix
Remove min-width constraint from timeline chart for mobile responsivenessui

v0.13.0

February 18, 2026
Feature
Add worker_ticks table and tick logging for all execution flows (watcher, cron, heartbeat, manual, auto)worker
Feature
Add daily midnight heartbeat — refreshes Spotify tokens for all users regardless of settings, preventing silent token revocationworker
Feature
Add 30-day automatic tick pruning to keep D1 table smallworker
Feature
Add /api/settings/activity endpoint with timeline, summary stats, and health indicatorsapi
Feature
Add Activity tab to settings with 24h timeline chart, health status pills, summary cards, and tick log tableui

v0.12.1

February 17, 2026
Fix
Fix stuck batch jobs — auto-complete jobs when all playlists finish, reduce stale job timeout from 2hr to 30minqueue
Fix
Fix negative elapsed time by parsing D1 timestamps as UTCqueue
Fix
Fix horizontal scrolling on mobile — wrap filter chips, adjust queue column widths, add body overflow guardui

v0.12.0

February 17, 2026
Feature
Add billing & usage tracking — every AI API call (OpenAI LLM + Replicate image gen) is now logged with cost, tokens, and metadatabilling
Feature
Refactor settings into sidebar layout with General and Billing sub-pagessettings
Feature
Add stacked bar chart (Recharts) showing daily OpenAI vs Replicate costs with time range selectorbilling
Feature
Add usage audit table with color-coded action badges, relative timestamps, and paginationbilling
Refactor
Move pricing module from worker to shared package for cross-workspace reuseshared

v0.11.2

February 17, 2026
Fix
Fix missing album art on tracks with Spotify name suffixes via fuzzy snapshot matching + music note placeholdertracks

v0.11.1

February 17, 2026
Feature
Add collaborative filter toggle — hides collaborative playlists by default, persists preference in localStoragequeue

v0.11.0

February 17, 2026
Feature
Store enriched Spotify data: snapshot_id, is_public, contributor detection via added_by, track metadata (addedAt, releaseDate, explicit)spotify
Feature
Detect collaborative playlists by analyzing track contributors — badge on dashboard + detail page, generation blocked for multi-contributor playlistscollab
Feature
Pause/resume auto-detect watcher independently of cron — toggle + configurable 5/10/15 min poll interval in queue bannerwatcher
Feature
One-time backfill endpoint to scan all existing playlists for contributor dataadmin
Fix
Style preview generation now uses the style's own model, LoRA, guidance, and seed instead of hardcoded flux-dev defaultsstyles
Fix
Add timeout + consecutive error tolerance to thumbnail and preview Replicate pollingstyles
Feature
Dynamic robots.txt, sitemap.xml, page titles with template, OpenGraph metadataseo
Feature
Auto-detect watcher with 10-minute stabilization, smart cron skip, soft delete, retry utilityinfra

v0.10.0

February 16, 2026
Feature
Live cron/batch progress panel replaces kanban when a job is running — shows pending/in-progress/done columns with per-playlist step trackingqueue
Feature
'Next scheduled run' banner with local timezone display when idlequeue
Feature
Queue nav icon pulses green when a job is active; hover shows rich tooltip with current playlist, step, and progressnav
Feature
Stat cards and generation history table update live during active jobs — no page refresh neededdashboard
Feature
Time picker auto-detects browser timezone — displays and accepts local time, converts to UTC behind the scenessettings
Feature
New GET /api/queue/status endpoint powers global queue awareness via QueueProvider contextapi

v0.9.0

February 16, 2026
Feature
Two-step Schedule → Run workflow replaces single Generate button — stage playlists, configure, then triggerqueue
Feature
Per-item analysis mode: choose 'with lyrics analysis' (full pipeline) or 'without' (light extraction from your description)queue
Feature
Column-contextual actions: Select All + Schedule on To Do, Run on Scheduled, Retry Failed on Donequeue
Feature
Collaborative and non-owned playlists shown as locked with 'Not included' badge — excluded from generationqueue
Feature
Playlist name now steers theme selection — cover art aligns with what the playlist name evokespipeline
Feature
Light extraction mode: one LLM call derives object + aesthetic context from your text descriptionpipeline

v0.8.11

February 16, 2026
Feature
Custom object override in image review modal — specify your own subject to bypass AI extractionqueue

v0.8.10

February 16, 2026
Fix
Queue page now flows naturally with footer at bottom instead of fixed viewport heightqueue
Fix
Queue action bar sticks below navbar when scrolling down the pagequeue
Fix
Optimistic UI on Generate — items move to Scheduled instantly instead of waiting 15s for worker responsequeue

v0.8.9

February 16, 2026
Feature
Auto-refresh when new version deployed — users always see latest codeinfra
Feature
Global error boundary with ChunkLoadError auto-recovery after deploysinfra

v0.8.8

February 16, 2026
Fix
Persist style version preview images to R2 instead of expiring Replicate URLsstyles

v0.8.7

February 17, 2026
Fix
Fix thumbnail rendering — use native img for R2-proxied imagesstyles
Fix
Restore viewport-height kanban with internal column scrollingqueue

v0.8.6

February 17, 2026
Fix
Footer now always pinned to bottom of every page via flex column layoutlayout
Fix
Persist style thumbnails to R2 instead of storing expiring Replicate URLsstyles

v0.8.5

February 17, 2026
Fix
Add retry logic to deploy verification for CDN propagation lagci

v0.8.4

February 17, 2026
Fix
Fix image generation crash for flux-2-pro models (output is string, not array)pipeline

v0.8.3

February 17, 2026
Fix
Exclude /api/version from auth so CI can verify deploymentsdeploy

v0.8.2

February 17, 2026
Fix
Fix Vercel and CI builds failing due to missing HugeIcons npm auth tokendeploy
Feature
Add deployment verification — CI now confirms live site version after each deployci
Feature
Add /api/version endpoint for programmatic version checksapi

v0.8.1

February 16, 2026
Fix
Add explicit type="button" to all non-submit buttonsa11y
Chore
Remove dead prompt-builder module, stale style definitions, and outdated planning docscleanup

v0.8.0

February 16, 2026
Feature
Canonical thumbnails: every style card shows a generated boombox image in that style's aestheticstyles
Feature
Style deletion with custom confirmation modal and cascading version cleanupstyles
Feature
Default style picker in Settings using custom searchable dropdownsettings
Feature
Style creator → analysis → editor flow: upload images, Claude analyzes, generates heuristicsstyles
Feature
Reusable ConfirmDialog component using native dialog element with destructive variantui
Feature
Custom Dropdown component with keyboard navigation, search filtering, and ARIA supportui
Fix
KGO thumbnail now uses Flux 2 Pro model (migration 010 applied to D1)styles
Fix
Stale RSC cache after style deletion — added revalidatePath and router.refreshui

v0.7.0

February 16, 2026
Feature
Kuro Gin Orenjiiro style: FLUX LoRA trained on 16 reference images (60% black / 30% silver / 10% orange, faceted stone, amber backlight)styles
Feature
Seed all 7 styles into D1 database — styles table was previously emptystyles
Feature
Generation history table with stale-while-revalidate caching, cost tracking, and breakdown tooltipsdashboard
Feature
Playlist detail page with full analysis transparency: track extractions, convergence, object scoring, generation historyplaylists
Feature
Song-level extraction caching via song_extractions table — skip LLM calls for previously analyzed trackspipeline
Feature
Object scoring with tier weights (high=3, medium=2, low=1) aggregated into convergence promptpipeline
Feature
Cost tracking end-to-end: token counts, per-step breakdown, total cost per generationpipeline
Fix
Dark-mode safe colors replacing hardcoded Tailwind green/yellow/redui
Fix
R2 key path validation in image proxy — reject traversal and non-PNG pathssecurity

v0.6.1

February 15, 2026
Feature
Mobile responsive kanban: horizontal snap-scroll below md breakpoint, 4-column grid on desktopqueue
Feature
Dynamic footer clearance via ResizeObserver — column padding adapts to actual footer heightqueue
Feature
ARIA landmarks: region roles on board and columns, aria-live progress summary, role=alert on errors, sr-only loading texta11y
Fix
Done bucket thumbnails now show generated images instead of original Spotify coversqueue
Fix
Progress summary hidden when no playlists loaded (no more '0 of 0 generated')queue
Refactor
Scale pass: 48px cover art, 24px checkboxes (WCAG 2.5.8), text-sm status labels, larger action buttons and footer controlsqueue
Refactor
Color consistency: amber-* replaced with --color-warning tokens, Done bucket uses neutral badge (distinct from Selected green)queue
Refactor
Layout fix: fragment replaced with flex container, broken calc() height removed, viewport-filling dvh-based sizingqueue
Refactor
Footer uses .glass class instead of inline glassmorphism, safe-area padding for macOS dock, min-h-[48px] action bar prevents layout shiftqueue

v0.6.0

February 15, 2026
Feature
Queue page with 3-column kanban board for batch cover generationqueue
Feature
Batch trigger: select multiple playlists, choose style override, generate all at oncequeue
Feature
Live progress tracking: step-by-step status (fetching tracks, extracting themes, generating image, uploading)queue
Feature
Image review modal with side-by-side comparison (generated vs Spotify current) and revision notesqueue
Feature
Worker /trigger endpoint: POST-only with bearer token authenticationworker
Feature
Revision notes support: prepend guidance to image generation prompt for iterative refinementpipeline
Feature
New API routes: /api/playlists/generate-batch, /api/playlists/[id]/regenerate, /api/generations, /api/stylesapi
Feature
Queue nav link added between Playlists and Settingsui
Feature
Dashboard quick action cards linking to Queue and Playlistsui
Refactor
Renamed dall_e_prompt column to prompt (migration 004)db
Fix
Stale processing detection: playlists stuck >5 minutes auto-reset to idleapi
Fix
SPEC.md updated: DALL-E 3 → Replicate Flux Schnell, fixed file paths, removed Clerk referencesdocs

v0.5.1

February 15, 2026
Feature
Universal button standard (px-3 py-2 text-xs) applied across all componentsui
Feature
Login page redesign: breathing DISC logo background, large Spotify CTA, 'Welcome to DISC' headingui
Feature
DISC logo footer button with green fireworks easter egg (fireworks-js)ui
Refactor
Max-width standardized to 1280px (max-w-7xl) across dashboard, changelog, and footerui
Performance
Lighter skeleton loader and staleTimes RSC caching for faster navigationui
Fix
BackToTop only shows on scrollable pages; breathing logos avoid hero zone and footerui

v0.5.0

February 15, 2026
Feature
Changelog page at /changelog with search, fuzzy word matching, and highlighted resultsui
Feature
What's New? nav link visible on all pages (authenticated and unauthenticated) with pulsing unread indicatorui
Feature
5 new art styles: Neon Noir, Soft Watercolor, Brutalist Collage, Chromatic Glass, Ukiyo-e Wavestyles
Feature
Structured changelog.json with types, utilities, and version-bump.sh integrationinfra
Feature
Production deployment: disc.400.dev live with Spotify OAuth, TLS, and all worker secretsinfra
Feature
Footer with 400 Faces branding, dynamic copyright year, and clickable Changelog version badgeui
Feature
Pulsing blue unread indicator on user avatar when new changelog entries existui
Feature
What's New menu item in user dropdown with unread dotui
Feature
Auto-mark changelog as seen on visit, per-user tracking in D1ui
Feature
Breadcrumb navigation on changelog page (Home > Changelog)ui
Fix
Fix Vercel env vars with trailing newline causing INVALID_CLIENT on Spotify OAuthauth
Fix
Set AUTH_URL to production domain for correct OAuth redirectauth
Refactor
Refined versioning strategy: PATCH for invisible changes, MINOR for user-visible, MAJOR for breakinginfra
Chore
version-bump.sh now scaffolds changelog.json entries automaticallyinfra

v0.4.0

February 15, 2026
Feature
Full image generation pipeline: lyrics extraction, tiered object analysis, collision-aware convergence, Replicate Flux Schnell generationpipeline
Feature
9 cron worker modules: crypto, image, replicate, spotify, pipeline, lyrics, openai, extraction, indexworker
Feature
GPT-4o-mini batch extraction and convergence (2 LLM calls per playlist, ~$0.002 total)pipeline
Feature
Collision detection: cross-playlist claimed objects registry with supersede logicpipeline
Feature
Change detection with tiered thresholds (50% for 2 or fewer tracks, 33% for 3, 25% for 4+)pipeline
Feature
lyrics.ovh integration with 5s timeout, concurrency 5, and metadata fallbackpipeline
Feature
@cf-wasm/photon JPEG compression for Spotify upload (under 192KB)pipeline
Feature
D1 schema additions: styles, playlist_analyses, claimed_objects tables; generations audit columnsdb
Feature
Dashboard overview: active style card, pipeline timeline, playlist stats, recent generationsui
Feature
Settings page: schedule configuration, art style selector, account managementui
Feature
NavItems with active state indicator (aria-current)ui
Feature
6 art styles seeded: Bleached Crosshatch, Neon Noir, Soft Watercolor, Brutalist Collage, Chromatic Glass, Ukiyo-e Wavestyles
Feature
R2 image archival with structured key pathsinfra
Feature
AES-256-GCM encryption via Web Crypto API (worker-compatible)infra
Chore
BUILDPLAN.md with full Phase 3.5 implementation notesdocs
Refactor
Playlists grid moved from / to /playlistsui
Refactor
NavDock restructured: logo to /, playlists to /playlists, settings to /settingsui
Fix
Focus-visible rule extended to input, select, and textarea elementsui
Fix
getDashboardData wrapped in try/catch with error state fallbackui

v0.3.0

February 15, 2026
Feature
Design system: glassmorphism, Spotify green aura, 4-concentric-ring logodesign
Feature
CSS custom properties for all design tokens (colors, spacing, radii, typography)design
Feature
Glass utility class with backdrop blur, border, and shadowdesign
Feature
Aura utility class with gradient glow effectdesign
Feature
Text hierarchy with WCAG contrast: primary 15:1, secondary 7.8:1, muted 4.7:1a11y
Feature
Global focus-visible: Spotify green outline on all interactive elementsa11y
Feature
Skip-to-content link for keyboard navigationa11y
Feature
NavDock with server-side auth and client-side UserDropdownui

v0.2.0

February 14, 2026
Feature
Auth.js v5 (beta.30) with Spotify OAuth providerauth
Feature
Single-user gate: only evancnavarro can sign inauth
Feature
AES-256-GCM encrypted refresh token storage in D1auth
Feature
D1 REST API access layer (Vercel cannot bind D1 natively)db
Feature
Spotify API helpers: fetch playlists with paginationspotify
Feature
Dashboard layout with auth middleware protectionui
Feature
Playlist grid with Spotify cover thumbnailsui
Feature
Playlist sync: Spotify to D1 via after() callbackui
Feature
Edge Runtime compatibility: split auth.config.ts (Edge-safe) from auth.ts (Node)infra

v0.1.0

February 14, 2026
Feature
Monorepo scaffolding: apps/web, workers/cron, packages/sharedinfra
Feature
Next.js 16 with Tailwind v4 and DISC design tokensui
Feature
Cloudflare Worker stub with D1 database bindingworker
Feature
Shared types (Spotify Feb 2026 compliant), styles, and version moduletypes
Feature
D1 migration: users, playlists, generations, jobs tablesdb
Chore
Biome linting and formattinginfra
Chore
GitHub Actions CI (lint + typecheck)ci
Chore
Version management: version-bump.sh, version-check.sh pre-push gateinfra
Chore
Husky hooks: pre-commit (lint-staged), commit-msg (commitlint), pre-push (version, lint, typecheck)infra