v26.6.53Jun 15, 2026
The Mac desktop app now completes browser sign-in more reliably and ships as a desktop release.
Fixed- **Mac desktop sign-in**: verifies that the signed-in session is visible to the protected return route before continuing in Electron, keeps local auth on a single loopback host, and adds release handling so the desktop app receives the fix.
v26.6.52Jun 13, 2026
Desktop auth callback no longer falls through to the PWA offline page.
Fixed- **Desktop login auth callback (JOV-3119)**: unregisters stale PWA service workers in Electron sessions, bypasses offline fallback on auth/OAuth routes, and stamps the desktop user agent on the auth handoff window so callback navigations reach the network.
v26.6.50Jun 11, 2026
Infra train refresh after ui train merge; desktop security ships with DMG release handling.
Improved- **VERSION**: bumps train integration to v26.6.50 so desktop security hardening ships with DMG release handling.
Fixed- **PersistentAudioBar tests**: align dismiss and region aria-label assertions with Title Case labels.
- **Shell AudioBar neutral play control**: moves central transport play/pause from accent fill onto neutral System B primary button tokens.
v26.6.49Jun 11, 2026
Calendar date selection uses neutral System B controls.
Fixed- **Calendar neutral selected date**: moves selected days and calendar focus rings off accent tokens onto neutral System B button and ring tokens while preserving fixed day and navigation control dimensions.
v26.6.48Jun 11, 2026
Display menu switches use neutral System B controls.
Fixed- **Display menu neutral switch**: moves checked switch tracks from raw primary fill onto neutral button tokens and guards the layout-stable control against accent drift.
v26.6.47Jun 11, 2026
The iOS auth loading state keeps the central browser action neutral.
Fixed- **iOS auth neutral loading indicator**: removes the accent-blue spinner from the Continue in Browser primary action and guards the button against future accent-color drift.
v26.6.46Jun 11, 2026
Merch confirmation actions in chat now use the neutral System B primary button surface.
Fixed- **Chat merch neutral action**: moves non-destructive merch confirmation buttons from raw primary color fills onto neutral primary button tokens while preserving the destructive archive styling.
v26.6.45Jun 11, 2026
Infra train version bump for desktop release guard; post-onboarding interview modal uses shared System B surfaces.
Improved- **VERSION**: bumps train integration to v26.6.45 so desktop security changes ship with DMG release handling.
Fixed- **Onboarding interview modal System B cleanup**: replaces hardcoded modal colors, white-alpha input styling, raw shadows, and glyph progress with tokenized System B surface classes, the shared textarea primitive, and stable progress dots.
v26.6.44Jun 11, 2026
Desktop security hardening plus neutral System B action controls.
Fixed- **Electron shell security (JOV-3014)**: bumps Electron to 42.4.0 and removes sandbox-weakening macOS entitlements so desktop releases ship with defense-in-depth defaults.
- **System B neutral action controls**: moves admin speed presets, celebration card size selection, audio transport buttons, and the listening overlay icon from primary/accent fills onto neutral primary button tokens while leaving progress and status accents intact.
v26.6.43Jun 11, 2026
Chat slash picker scroll clearance avoids redundant observer work while typing.
Fixed- **Chat slash picker scroll effect**: keeps picker-open transcript clearance stable without rebuilding scroll observers on every composer keystroke, and falls back cleanly if `ResizeObserver` setup fails.
v26.6.42Jun 11, 2026
Chat slash-command suggestions reserve real transcript clearance in populated threads.
Fixed- **Chat slash picker clearance**: grows the virtualized transcript scroll range while the root slash picker is open so active thread content stays clear of the suggestion surface without moving the composer dock.
v26.6.41Jun 11, 2026
Codex issue shipper GBrain capture metadata no longer carries a redundant slug assignment.
Fixed- **Codex issue shipper capture metadata**: removes the unused initial `captureSlug` assignment so the capture result is assigned exactly once from either the successful GBrain capture output or the captured failure fallback.
v26.6.40Jun 11, 2026
Codex issue shipper success and blocker label handling is resilient to GitHub comment and label edge cases.
Fixed- **Codex issue shipper cleanup**: clears the `codex-in-progress` label after a PR is found, logs success-comment failures without marking completed work blocked, and adds `codex-blocked` independently from best-effort claim-label removal.
v26.6.39Jun 11, 2026
Codex issue shipper dispatch is gated, sandboxed, and resilient to GBrain capture failures.
Fixed- **Codex issue shipper hardening**: requires the maintainer-applied `codex-approved` label before dispatch, bounds untrusted issue prompt text, runs Codex with a workspace-write sandbox and explicit approval policy, exits nonzero on fatal job failures, and lets dispatch continue when GBrain capture fails instead of retry-looping the issue.
v26.6.38Jun 11, 2026
Admin execution actions now use neutral System B primary button surfaces instead of raw colored fills.
Fixed- **Admin execution neutral actions (JOV-3036)**: removes local primary-token and primary-color fills from the impersonation `End Session` and ops `Dispatch worker` actions, preserving warning/status color while keeping central execution controls neutral.
v26.6.37Jun 11, 2026
Founder demo approval actions now use the neutral System B primary button instead of a local colored fill.
Fixed- **Founder demo neutral approval action (JOV-3034)**: replaces the raw `bg-primary-token` `Approve drop` CTA in the recording demo with neutral primary button tokens while preserving demo timing, copy, and progress accents.
v26.6.36Jun 11, 2026
Settings SMS access requests now use the neutral System B primary button instead of a colored fill.
Fixed- **Settings SMS neutral action (JOV-3031)**: replaces the colored `bg-primary-token` request CTA in the SMS access settings section with neutral primary button tokens, keeping accent color reserved for the surrounding informational state.
v26.6.35Jun 11, 2026
Dashboard header creation actions now use neutral toolbar controls instead of colored fills.
Fixed- **Dashboard header neutral actions (JOV-3030)**: removes colored `bg-primary-token` fills from release creation and task creation header actions, preserving compact toolbar behavior while keeping accent colors reserved for status, progress, and selection states.
v26.6.34Jun 10, 2026
Library share submit actions now use neutral System B button surfaces instead of colored fills.
Fixed- **Library share neutral actions (JOV-3026)**: replaces colored `bg-primary-token` fills on the share-drop creator and passphrase gate submit buttons with neutral System B primary button tokens, keeping accent color reserved for progress, status, marks, and highlights.
v26.6.33Jun 9, 2026
Library release assets can now be shared as a branded press-kit drop with optional passphrase and download controls.
New- **Library branded share page (JOV-2936)**: adds `library_share_drops` storage, authenticated share-drop creation from the Library drawer, public `/drop/[token]` press-kit surfaces with grid/list/reel layouts, optional comment + download toggles, and passphrase gating with expiry handling.
v26.6.32Jun 9, 2026
Library thumbnails now expose hover scrub previews for audio waveforms and canvas videos.
New- **Library scrubbable media thumbnails (JOV-2935)**: adds hover waveform and video scrub overlays to library grid, list, and drawer artwork while mapping canvas video URLs and deterministic waveform seeds from release data.
v26.6.31Jun 8, 2026
Chat merch generation now requests photorealistic Printful mockups after artwork is created.
New- **Printful merch mockup pipeline (JOV-2621)**: adds a mockup catalog, Printful mockup task creation/polling, authenticated `/api/merch/mockups`, and async chat merch enrichment that merges photorealistic mockup URLs into design options.
Fixed- **Shell scroll + right rail stickiness (JOV-2639)**: makes `app-shell-scroll` a non-scrolling clip, wraps the right rail in a dedicated `app-shell-right-rail` slot outside that pane, and tightens the shell child height chain so context panels no longer ride along when lists or grids scroll.
v26.6.30Jun 8, 2026
Library grid cards and list rows now line up with the page toolbar instead of sitting on a tighter inset.
Improved- **Library grid spacing and header alignment (JOV-2647)**: normalizes library grid gap and horizontal padding to the shared shell header/content tokens so toolbar meta, grid cards, list rows, loading skeletons, and the status bar share the same left edge.
v26.6.29Jun 8, 2026
Tasks now use the same shell header search entry as Releases and Library.
Improved- **App-wide search entry (JOV-2644)**: routes task title search through the shared `useRegisterHeaderSearch` header pill surface, removes the duplicate `HeaderSearchAction` from the tasks workspace toolbar, and adds guardrails so tasks stay on the canonical shell header search contract.
v26.6.28Jun 7, 2026
Admin settings headings now use the quiet app-scale typography instead of tracked all-caps or oversized display sizes.
Fixed- **Admin settings heading typography (JOV-2102)**: normalizes `/app/settings/admin` and admin settings surfaces onto `text-app font-[540]` row and panel headings, removes tracked eyebrow styling from campaign settings metrics, and replaces the oversized effective-rate display with compact settings-scale copy.
v26.6.25Jun 7, 2026
The Venmo payment method selector now uses neutral action chrome with provider color only on the logo.
Fixed- **Venmo method selector neutrality (JOV-2901)**: replaces the provider-blue Venmo payment method button fill with neutral primary styling, keeps Venmo blue on the logo mark, and extends the TipSection guard so payment method selection cannot regress to provider-filled central action styling.
v26.6.24Jun 7, 2026
Public DSP/listen actions now stay neutral, with provider color limited to service marks.
Fixed- **DSP listen CTA neutrality (JOV-2900)**: removes provider-colored fills from shared DSP buttons, the exported DSP button HTML helper, and public playlist Spotify CTAs while preserving provider color on logos/icons, and adds focused guards so central listen actions cannot regress to Spotify-green or provider-filled buttons.
v26.6.23Jun 7, 2026
Dashboard link swipe edit actions now use neutral chrome instead of blue fills.
Fixed- **Link swipe action neutrality (JOV-2899)**: replaces blue-filled dashboard link swipe edit actions with neutral System B surface styling while preserving destructive red for delete, and extends the link action guard so non-destructive swipe actions cannot drift back to accent-filled colors.
v26.6.22Jun 7, 2026
Shared Button accent variants now render as neutral primary controls instead of accent-filled CTAs.
Fixed- **Button accent variant neutrality (JOV-2898)**: maps the legacy `Button` `accent` variant to neutral primary button tokens, updates the `/ui/buttons` gallery to show upgrade actions as primary, and adds package-level coverage so accent-filled CTA styling cannot return silently.
v26.6.21Jun 7, 2026
The onboarding checkout upgrade CTA now has a guardrail that keeps it on neutral primary styling.
Fixed- **Onboarding checkout CTA guard (JOV-2890)**: adds focused coverage that prevents the central upgrade checkout action from regressing to accent-filled button styling.
v26.6.20Jun 7, 2026
Detected social profiles now use neutral panel chrome instead of accent-tinted framing.
Fixed- **Social suggestion panel neutrality (JOV-2889)**: replaces the detected-profile suggestion panel's accent border, background, and dividers with neutral System B surface tokens, and extends the focused chat/social style guard so accent panel chrome cannot return silently.
v26.6.19Jun 7, 2026
Inline dashboard chat user bubbles now use neutral transcript chrome instead of accent fill.
Fixed- **Inline chat bubble neutrality (JOV-2888)**: replaces `InlineChatArea` user message accent fill with neutral System B surface/text tokens, and extends the focused chat rendering guard so ordinary transcript bubbles cannot drift back to accent-filled chrome.
v26.6.18Jun 7, 2026
Artist selection no longer uses purple/blue ambient accent orbs behind the central action.
Fixed- **Artist selection accent cleanup (JOV-2887)**: removes decorative gradient orb layers from the artist-selection route while preserving the neutral grid/background surface, and adds a focused guard so ambient purple/blue/cyan accent decoration cannot return silently.
v26.6.17Jun 6, 2026
Pricing conversion actions now stay neutral instead of leaning on plan accent color.
Fixed- **Pricing CTA neutrality (JOV-2886)**: replaces the legacy home pricing Pro CTA accent variant with the neutral primary button, removes colored plan-card glows from reusable marketing pricing cards, and adds focused guards so pricing conversion actions cannot drift back to purple/blue/accent fills.
v26.6.16Jun 6, 2026
Dead homepage-era accent CTA components no longer survive outside the System B surface.
Removed- **Dead home accent actions (JOV-2885)**: removes unused `ArtistSearch`, `FeatureFlaggedArtistSearch`, and `WaitlistLink` components that still carried purple/blue filled central action styles, and adds a focused guard so those orphaned action recipes cannot return silently.
v26.6.14Jun 6, 2026
Static comparison CTAs now use neutral primary controls instead of accent fills.
Fixed- **Marketing comparison CTAs (JOV-2881)**: replaces accent-filled final CTAs on static alternatives and compare pages with neutral primary button tokens, while preserving semantic accent highlights and adding a source guard for central conversion actions.
v26.6.12Jun 6, 2026
Chat social-link Add actions now stay on neutral System B primary controls.
Fixed- **Chat social Add actions (JOV-2879)**: replaces accent-filled Add buttons in the live chat link confirmation card and social suggestion rows with neutral primary button tokens, and adds a source guard so central chat/social actions cannot drift back to accent-filled styling.
v26.6.11Jun 6, 2026
System B primary actions now stay neutral across onboarding, alerts, demo, and release-task surfaces.
Fixed- **Neutral primary actions (JOV-2728, JOV-2853, JOV-2854, JOV-2877)**: replaces accent-filled central CTAs and action buttons with neutral primary tokens across onboarding demo, release workspace actions, alert capture, onboarding checkout, and handle claim controls, with focused source guards.
v26.6.10Jun 5, 2026
Root 404 now keeps its oversized System B code contrast-safe on dark backgrounds.
Fixed- **Root 404 a11y contrast (JOV-2831)**: removes the extra opacity from the decorative 404 code, keeps the neutral System B token, and guards the primitive against future contrast-reducing opacity.
v26.6.9Jun 5, 2026
Chat transcript entity chips now reserve stable width and thumbnail slots for long labels and fallback accents.
Fixed- **Transcript entity chip stability (JOV-2830)**: bounds transcript chip width, keeps fallback accent dots and resolved thumbnails in the same reserved slot, and adds a System B guard for long-label truncation and media stability.
v26.6.8Jun 5, 2026
Shared text-entry controls now use neutral System B tracking instead of hardcoded negative letter spacing.
Fixed- **Text field typography contract (JOV-2829)**: normalizes the shared `Input` and `Textarea` atoms to `tracking-normal`, and adds focused guards so shared text-entry controls cannot drift back to negative tracking.
v26.6.7Jun 5, 2026
Desktop recovery now reports the actual runtime platform while shipping through the desktop release path.
Fixed- **Desktop recovery runtime label (JOV-2823)**: derives the recovery footer runtime label from Electron's `process.platform` instead of hardcoding macOS, keeps Windows and Linux recovery surfaces honest, and bumps the desktop release trigger so the next desktop build carries the fix.
v26.6.6Jun 5, 2026
Shared button controls now use neutral System B tracking instead of hardcoded negative letter spacing.
Fixed- **Button typography contract (JOV-2826)**: normalizes the shared `Button` atom and `whitePill` variant to `tracking-normal`, and adds a focused guard so shared controls cannot drift back to negative tracking.
v26.6.5Jun 5, 2026
Chrome extension signed-in sidepanel actions now keep stable System B geometry while switching from insert preview to confirm/cancel/copy.
Fixed- **Extension action dock (JOV-2824)**: adds action-count layout hooks, keeps signed-in entity action labels neutral, and locks the dock frame across two- and three-action states.
v26.6.4Jun 4, 2026
Auth sign-in is now wired across the web app, Electron desktop app, iOS shell, and Chrome extension for dev, staging, and production verification.
Fixed- **Chrome extension sign-in**: opens sign-in on the active Jovie origin and grants dev, staging, and production host permissions.
v26.6.3Jun 3, 2026
Electron now ships the System B desktop recovery shell through the desktop auto-update path.
Fixed- **Electron recovery shell**: moves the native BrowserWindow background and load-failure recovery surface onto tracked System B desktop tokens, removes the legacy gradient/raw-color fallback styling, and keeps the recovery card centered in the native window.
v26.6.2Jun 2, 2026
Memory Core v0 now has fixture-backed loops for ingest, identity, enrichment, matching, graph reads, and review-gated opportunities.
New- **Memory Core loop services**: adds the thin ingest harness plus thick memory workers for entity resolution, enrichment, graph querying, review actions, calendar/photo matching, catalog/voice-memo matching, and pending opportunity generation.
- **Memory dev fixtures**: adds deterministic chat, photo, calendar, catalog song, release, voice memo, Wikipedia, Wikidata, and MusicBrainz fixtures for provider-free tests.
- **Memory graph API**: adds a scoped `/api/memory/graph` read endpoint backed by the existing Memory Core v0 schema.
Fixed- **Memory evidence and scope guards**: requires source evidence for facts, sanitizes Gmail raw-body metadata at the store boundary, and rejects cross-profile source/observation writes.
v26.6.1Jun 1, 2026
Native auth now starts in the system browser while desktop and iOS keep only the app handoff surface.
Fixed- **Electron auth bridge**: installs the runtime marker and bridge before auth handoff actions so the desktop shell can open the browser reliably.
- **Segmented input cleanup**: clears the deferred blur timer after teardown so jsdom test runs do not report late `document` access.
v26.6.0Jun 1, 2026
Jovie now has an onboarding robot that validates the shipped QA path instead of relying on manual incognito-window checks.
New- **Onboarding funnel event contract (JOV-2681)**: adds typed internal event constants for `onboarding_started`, `auth_completed`, `chat_started`, `chat_completed`, `qualified`, `waitlisted`, `profile_created`, and `dashboard_loaded`.
Fixed- **Release notification scheduling**: stops inserting `campaignId` as a top-level fan-notification field; campaign context remains in the dedup key and metadata, matching the schema.
v26.5.58May 25, 2026
Native auth now completes through the hardened Mac OS and iOS callback paths, and release pitching now starts from Jovie chat instead of a dedicated sidebar builder.
New- **Chat-first pitch tool (JOV-2594)**: added a centralized `generateReleasePitch` tool and command that drafts one destination-aware pitch for playlists, radio, Sirius XM, installs, playback/music supervisors, editorial posts, record labels, or collaborators.
- **Pitch action menus (JOV-2594)**: added `Generate pitch` to release action menus and pitch-related task menus, with task-derived destination context when the task title/category is clear.
Improved- **Pitch chat artifact (JOV-2594)**: renders a copy-ready pitch draft with subject/body support instead of four fixed platform tabs.
- **Agent catalog alignment (JOV-2594)**: registered pitch generation in the shared agent tool catalog and command registry, and captured the broader UI-to-tool consolidation audit in JOV-2595.
Fixed- **Auth surfaces**: replaces the oversized unavailable state with the compact centered auth sheet and reduces the iOS splash logo footprint.
- **Customer-facing runtime copy**: maps desktop session activity from internal runtime names to `Mac OS` and adds a deterministic guard for forbidden vendor/runtime copy.
Removed- **Dedicated pitch builder UI (JOV-2594)**: removed the release sidebar `Pitch` tab, target-playlist editor, pitch dashboard API route, and client mutation hook.
v26.5.56May 25, 2026
Native auth test harnesses now stay rate-limited in production even if simulator-only auth tokens are present.
Fixed- **Native auth exchange production guard**: restricted the real-browser auth harness rate-limit bypass to non-production deployments and added regression coverage for production and preview environments.
v26.5.55May 25, 2026
Fixed- **Build-info release version (JOV-2586)**: synced `version.json`, `VERSION`, and workspace package versions so `/api/health/build-info` reports the current release version.
v26.5.53May 25, 2026
Admin People is now stable enough to trust during waitlist review, with flatter insights, clearer chat qualification, and proof of the full waitlist path.
New- **Waitlist golden-path coverage (JOV-2572)**: adds local browser coverage for homepage to signup, chat qualification, waitlisting, admin approval, and app entry, with screenshots and video artifacts.
- **Waitlist integrity signal (JOV-2572)**: Admin > People > Waitlist now surfaces missing user/waitlist links so signup drift is visible instead of looking like a clean table.
Improved- **Cleaner admin People tables**: Waitlist, Users, Releases, and Feedback use flatter shells, fixed row geometry, and compact release artwork so real data no longer blows up table rows.
- **White homepage outcome cards**: artist-profile bento cards now use white surfaces with black text for the sharper Apple-style treatment.
- **More useful chat qualification**: onboarding chat now pushes toward concrete artist, release, and profile context before putting qualified users on the waitlist.
Fixed- **Feedback visibility**: feedback posts now require confirmed persistence, and Admin Feedback reports load errors instead of disguising them as zero feedback.
- **Insight card over-framing**: chat and dashboard insight cards drop the extra nested card treatment.
v26.5.52May 25, 2026
Shell chrome now reads calmer, with the sidebar collapse control in the header, the library route using one shell, and the chat composer/settings surfaces tightened up.
Fixed- **Shell navigation chrome**: removed the highlighted `New chat` treatment, moved the web collapse control into the header cluster, and kept the thicker collapse icon so the shell behaves the same in web and desktop contexts.
- **Library shell cleanup**: registered the library route sidebar override, removed duplicate sidebar loading fallback behavior, and retuned the filter, release-date, and status surfaces to the shell-v1 accent palette.
- **Chat composer stability**: tightened focus restoration after send, simplified the attachment menu copy, and gave dictation a visible active state with the updated shell button treatment.
- **Settings hierarchy and usage meter**: flattened duplicated settings headers, normalized sidebar labels, and updated usage counters and progress fills to the Geist accent colors.
v26.5.51May 25, 2026
iOS native sign-in now completes the HTTPS browser callback path, exchanges the custom-scheme return, persists the session, and lands in the authenticated shell.
New- **HTTPS ASWebAuthenticationSession coverage**: added `pnpm test:auth:ios` with deterministic callback parser tests, custom-scheme simulator tests, and a real-browser HTTPS mode that launches through `ASWebAuthenticationSession` and returns via `ie.jov.jovie://auth/complete`.
v26.5.50May 24, 2026
Chat now keeps profile and entity context visible in the right rail while tool work reads like a native inline activity feed instead of boxed status cards.
New- **Inline tool activity feed**: generic tool calls now render as compact activity rows, with multi-tool responses connected by a timeline line and failed/denied calls exposed as inline alert rows.
Improved- **Chat error and artifact polish**: composer failures now render inside the transcript with retry/support-reference affordances, generation artifacts share a cyan-accent surface, and composer icons use heavier strokes without changing the current button footprint.
- **Library selection polish**: selected library grid/list items use the cyan rail/ring treatment scoped to the library surface instead of changing global table selection tokens.
v26.5.46May 24, 2026
Virtualized chat threads now reserve slash-command picker clearance in the scroll geometry itself.
Fixed- **Virtualized slash-command clearance (JOV-2566)**: adds flyout clearance to the virtualized message spacer height instead of fixed-height padding, so long threads keep the latest message clear of the slash picker.
v26.5.45May 24, 2026
Chat slash-command flyouts and rich chip previews now stay above the transcript, clear active messages, and preserve composer geometry across desktop and mobile shells.
Fixed- **Chat slash-command flyout layering (JOV-2566)**: the active thread now reserves scroll clearance when the root slash picker opens, keeps the composer pinned, and prevents the picker from colliding with recent assistant replies, tool status rows, and user bubbles.
- **Rich chip preview surfaces**: transcript entity chips and image attachment chips now use the chat overlay tier, opaque popover surfaces, viewport-bounded sizing, and safer placement around nearby messages.
v26.5.43May 24, 2026
The Mac Electron auth handoff now fails closed on callback replay and keeps the browser-open retry controls bounded.
Improved- **Electron auth handoff window**: extracted the handoff window bounds and removed the indirect `showWindow` path when foregrounding the auth handoff window.
Fixed- **Desktop auth browser retry state**: `Continue in browser` is disabled only while an open attempt is pending, then becomes retryable after success, failure, or timeout.
- **Desktop auth bridge errors**: explicit IPC failure reasons now reach the renderer instead of being masked by a browser fallback.
v26.5.42May 24, 2026
The Mac Electron app now keeps browser sign-in in a dedicated handoff window, returns through the `jovie://` protocol, and avoids auth-route cookie banner noise.
Improved- **Electron auth handoff**: the Mac app now hides the main app shell while the browser handoff is active, reports failed browser launches back to the renderer, and declares the production `jovie://` auth-return protocol in the app bundle.
Fixed- **Native auth callback**: `/auth/callback` now consumes the already-validated auth state without re-reading it after native exchange creation, preventing valid Electron callbacks from falling into the `Auth state expired` response.
- **Auth-surface cookie banner**: the visible cookie banner is suppressed on desktop/native auth utility routes while the normal cookie preferences controller remains mounted elsewhere.
v26.5.41May 24, 2026
Jovie can now create Jovie-owned merch cards from chat, publish them to public artist profiles, collect payment through platform Stripe Checkout, route paid orders to Printful, and accrue manual artist payout liability.
New- **Merch MVP (JOV-2560)**: added the `merch_mvp` rollout gate, `canAccessMerchCreation` entitlement, merch chat tools, deterministic production-art generation, Jovie merch card records, public product pages, Stripe Checkout, Printful webhook/fulfillment handling, and a manual payout ledger.
- **Merch persistence**: added `merch_generation_batches`, `merch_design_options`, `merch_cards`, `merch_orders`, `merch_payout_ledger_entries`, and `merch_fulfillment_jobs` with Printful variant IDs stored as the purchasable/order source of truth.
- **Merch profile rail**: public profiles now render live merch cards behind the merch gate between the release/tour primary card and alerts. Empty, paused, archived, or gated states render no fake fallback.
v26.5.35May 21, 2026
The page header now lives inside the elevated content card and moves with the sidebar when you collapse it — matching Linear's layout. The "Update available" button in the desktop app is no longer a tiny featureless circle; it shows the full "Update" pill with icon and label.
Improved- **Electron desktop shell: header inside content card.** Moved `DashboardHeader` out of the top reserved titlebar and into the elevated content card so the entire card (header + body) collapses/expands with the sidebar. Removed the duplicate-render hack that previously rendered the header twice (one copy hidden via `display: none`) and zeroed `#main-content`'s top radius to fake a stitched surface.
Fixed- **Update pill no longer renders as an empty circle.** Removed `UpdateAvailablePill`'s `compact` prop entirely so the pill is always full text+icon when an update is available. The 28px compact circle was rendering as a featureless white dot in the squished sidebar-cell.
v26.5.36May 21, 2026
Chat home no longer advertises album-art generation when the provider is down or feature-flagged off — the suggestion pill is hidden instead of showing as a disabled button, and the "Draft album-art brief" fallback takes its place. Pro upsells stay visible.
Improved- **Chat suggestions: hide unavailable album-art capability (JOV-2524)**: `SuggestedPrompts` now omits the "Generate album art" pill entirely when `albumArtCapability.reasonCode` is `PROVIDER_UNAVAILABLE` or `FEATURE_DISABLED`, surfacing the "Draft album-art brief" suggestion in its place. Plan-gated (`PLAN_UNAVAILABLE`) and onboarding-pending (`PROFILE_REQUIRED`) reasons retain the existing disabled-with-tooltip behavior so the upsell affordance is preserved. Sourced from prod chat audit (JOV-2524).
v26.5.34.1May 21, 2026
The investor pitch deck at `/pitch` now opens straight into the slides with a quiet presentation chrome instead of the consumer marketing nav, and a handful of slides got line-break and alignment cleanup so headlines stop orphaning words.
Improved- **`/pitch` page world-class redesign**: moved the route out of the `(marketing)` group so the marketing header no longer renders above the investor deck. New `apps/web/app/pitch/layout.tsx` is a minimal dark pass-through. `apps/web/app/pitch/page.tsx` is rewritten as a 44px presentation top bar (Jovie wordmark on the left, `Present` and `PDF` chrome links on the right) above a full-bleed iframe that lets the deck's own 16:9 letterboxing create the framing. A mobile fallback below `sm` shows the wordmark, a "Designed for desktop" message, and Download PDF + email CTAs.
Fixed- **Pitch deck inline-style cleanup (no copy changes)** in `apps/web/public/pitch/index.html`: removed a broken `width: 100px` on `.suno-title` that was crushing the heading and dropped the font from 150px to 132px so slide 2 stops orphaning "people" onto its own line; removed redundant inline `font-size` + `margin` on the `<span class="dim">` inside `.problem-title`; deleted the empty `<p class="problem-sub">` that was leaving a hairline gap on slide 3; removed a broken `width: 140px` on `.bs-title` that was crushing the bad-solutions headline.
v26.5.29May 18, 2026
Fixed- **Profile scroll jank (JOV-1983)**: added `touch-action: pan-y`, `will-change: scroll-position`, and `contain: layout style` to all profile scroll containers — compact surface, desktop surface, drawer shell, and the releases list — eliminating scroll jank on iOS and Android.
v26.5.28May 18, 2026
Fixed- **Desktop dictation bridge hardening (JOV-2402)**: validates `getDictationStatus()` IPC payloads before storing them in renderer state, pins the desktop contract test to the main-process handler registration, and keeps Web Speech feature detection scoped through the shared browser window reference.
v26.5.27May 18, 2026
Fixed- **Desktop dictation bridge (JOV-2277)**: added a guarded Electron dictation capability probe and preload/main IPC contract. Browser contexts keep the normal Web Speech path, stale Electron builds disable dictation quietly, and the desktop media permission handler now only allows audio-only requests from the trusted Jovie app origin.
v26.5.26May 17, 2026
First-run cinematic boot: the very first time you land in the app each tab, Jovie greets you with a soft cinematic — logo cinematic fade, gentle reverse spin, frame settles, sidebar slides in, welcome content appears. Subsequent navigations skip straight to the skeleton — no repeat motion.
New- **Cinematic app boot — first-mount-per-tab (JOV-2364)**: new `CinematicAppBoot` organism wraps the `(shell)/layout.tsx` Suspense fallback. On the first shell mount of each browser tab, plays a 2.4s forward-only cinematic over a dark canvas (Jovie mark fades in → reverse spin → mark fades off → frame fades in → sidebar slides in → welcome content fades up). On subsequent shell suspensions in the same tab the cinematic is skipped and the route-specific skeleton renders directly. SSR-safe via a `mounted` guard, honors `prefers-reduced-motion`, and gates per-tab via the `jovie:cinematic-boot-played` sessionStorage flag. Final composed state mirrors the post-resolve `AppShellFrame` so the natural unmount-on-resolve is visually seamless. New atomic vitest suite (5 assertions) covers the gating logic.
v26.5.24May 17, 2026
The Jovie pitch deck is now available at jov.ie/pitch with a one-click PDF download.
New- **Public pitch deck route at `/pitch`**: 10-slide investor deck reusing the existing slide viewer, with keyboard, swipe, and dot navigation, a fullscreen mode, and a one-click PDF download of the same content. The page is search-engine hidden (NOINDEX) so it only shows up when shared directly. (JOV-2357)
v26.5.22May 17, 2026
The empty Ask Jovie screen now wears a soft electric outline of the Jovie mark behind your input — a subtle glow that reads as ambient atmosphere, not chrome.
Improved- **Empty chat state — electric Jovie mark backdrop**: replaced the static giant "j" glyph behind the Ask Jovie empty state with a faint outline of the Jovie mark, softened by a radial mask and accented with a slow traveling spark when motion is permitted. Reduced-motion users see the same outline without the spark, preserving the visual idiom. The mark sits at `clamp(220px, 44vw, 440px)` so it scales gracefully from phone to desktop. Reuses canonical design tokens; no new accent colors introduced. Follow-ups tracked as JOV-2364 (first-run-only cinematic boot) and JOV-2365 (reuse `JovieMarkElectric` in other empty/loading surfaces).
v26.5.6May 16, 2026
Connect Gmail and Google Calendar to your Jovie account. Once connected, Jovie scans your inbox for confirmed booking emails and proposes calendar events — all reviewable before anything is added.
New- **Gmail + Google Calendar OAuth connector**: Connect your Google accounts from Settings → Connectors. The OAuth flow requests read-only Gmail and Calendar access, stores encrypted tokens, and shows connection status with the connected email address.
- **AI booking extractor**: New `extractEventSignal` function uses Claude to identify confirmed DJ booking emails from your inbox and extract event details (title, venue, city, dates, confidence score). Prompt-injection defense and Zod-validated structured output prevent malformed data from reaching the UI.
- **Suggested actions UI**: Extracted events surface as pending action cards on the Connectors settings page. Each card shows event title, dates, venue, rationale, and the source email subject — ready to accept or dismiss.
- **Token vault**: Encrypted storage layer (`token-vault.ts`) for OAuth access and refresh tokens using AES-256-GCM, with automatic refresh-if-expired logic.
- **Dev fixtures**: Dev-only seed endpoint (`/api/dev/connectors/seed-fixtures`) populates mock Gmail and Calendar accounts with realistic booking email fixtures so the extraction pipeline can be tested without real OAuth credentials.
v26.5.5May 16, 2026
Rich chips in chat now render cleanly on the white user bubble, lift artwork from cached release data, and reveal a richer preview on hover. Image attachments use the same chip language, so a message with a release reference and a dragged-in image reads as one coherent strip.
Improved- **Rich chips reveal details on hover/tap/focus**: Transcript chips wrap in a popover trigger with full keyboard (Enter/Space/Escape), touch (tap), and pointer-hover (200ms open, 120ms close) affordances. Popover body shows artwork + kind eyebrow + label + compact stats, with an "Open release" CTA when the side-panel flag is enabled.
- **Image attachments render as inline chips with full-preview popover**: User messages no longer drop a 128×128 grid; pasted/dragged images render as compact `ImageAttachmentChip`s matching the rich-chip visual language, and the full image (max 480×480) appears in a hover/tap popover with filename caption.
- **Transcript chips lift artwork from already-loaded cache**: New `EntityResolutionProvider` consults `queryClient.getQueryData` for releases and events without triggering fetches, so chips light up with artwork whenever the slash menu has loaded data and degrade gracefully (label + accent dot) when it hasn't or when no provider is mounted (e.g. onboarding chat).
- **Skill input pills extracted into shared `SkillChip`**: `ChipTray` no longer duplicates ~30 lines of input-pill styling; future chip-style changes touch one place.
Fixed- **Chat user-message chips no longer render as dark rectangles on the white bubble**: `EntityChip` is now surface-aware (`tone='onLight' | 'onDark'`) and uses neutral text with accent-tinted thumbnail/dot/border on light, so release/artist/track/event chips stay readable inside the user bubble without candy-coloring across kinds.
v26.5.0May 15, 2026
Chat now uses the dark app-native composer across shell surfaces, with hardened focus, picker, attachment, and typed-entity states.
Improved- **Chat composer surface and controls**: Replaced the white command-style composer with a dark System B surface, two-zone text/toolbar layout, stable 36px controls, corrected focus affordances, bounded multiline autosize, inline structured chips, and Geist-accented entity chips.
- **App shell chat chrome**: Aligned the Electron titlebar controls with the Codex-style back/forward layout, moved New thread into the sidebar navigation, tightened chat message presentation, and removed assistant avatars from the chat transcript.
- **Attachment and picker polish**: Hardened the attachment menu, slash picker, entity picker, and dropzone layering so menus float without clipping and composer layout remains stable across empty, typing, mobile, and compact states.
Fixed- **Textarea focus-ring leakage**: Suppressed raw textarea focus outlines in chat and task document fields while preserving compound-widget focus states at the containing surface.
- **Chat shell loading and thinking states**: Added a dark conversation-loading skeleton, smoother pending/thinking placeholders, verbose dev-only tool state output, and stable drag cursors for Kanban/task cards.
v26.4.248May 14, 2026
Onboarding now opens in the canonical app-shell chat front door with hardened tool artifacts, picker stability, and performance gates.
Improved- **Canonical onboarding chat front door**: `/onboarding` and waitlist entry now route into `/start`, preserving onboarding query params while leaving `/onboarding/checkout` as the checkout handoff.
- **App-shell onboarding experience**: `/start` now renders inside the Shell V1 app frame with the sidebar collapsed, shared chat composer primitives, polished onboarding tool artifacts, and stable slash-picker geometry across desktop and mobile.
Fixed- **Chat layout stability and visible implementation leakage**: Removed the app-shell entrance animation that caused screen flashes, replaced generic tool rows with purpose-built onboarding cards, hid raw tool internals from the transcript, and hardened error, loading, thinking, retry, and artist-pick states.
v26.4.247May 14, 2026
Artist profiles now display the background atmosphere correctly even when the hero image fails to load — instead of a blank screen, the page falls back to a subtle gradient.
Fixed- **Profile hero background no longer goes blank on image failure**: When a hero image URL is invalid or the CDN returns an error, `ProfileCompactTemplate` now degrades gracefully to the gradient placeholder background instead of rendering blank. Root cause: `ImageWithFallback`'s fallback container used `h-full w-full` (normal flow) but `<Image fill>` generates `position: absolute; inset: 0`, so the fallback had zero height in the ambient background context. Fixed by using `absolute inset-0` for fill-layout fallbacks, and tracking image failure state in `ProfileCompactTemplate` to render the gradient instead of a centred avatar icon.
v26.4.244May 12, 2026
Improved- **YC homepage flow tightened**: The public homepage now keeps the hero, proof logos, Meet Jovie AI plan demo, Go live in 60 seconds, Workspace, Artist Profiles, Free/Pro pricing, FAQ, and final CTA visible while keeping Friday Rhythm and feature/spec-grid content hidden by default.
- **Minimal marketing chrome by default**: Marketing headers render logo plus Sign in and Start Free Trial unless the shared center-nav flag is explicitly enabled. Marketing footers render only legal links unless the full-footer flag is explicitly enabled.
- **Free + Pro pricing defaults**: Marketing pricing cards and pricing-page JSON-LD now use the visible plan set, defaulting to Free and waitlisted Pro. Pricing copy follows the visible paid plan set so future plan exposure does not leave Pro-only copy around Team or Enterprise cards.
Fixed- **AI demo layout stability**: The homepage AI composer reserves enough space across states so the typing animation does not shift the surrounding section.
- **Mobile center-nav fallback**: If center navigation is re-enabled, the glass header hides inline mobile auth actions when the hamburger nav is active, avoiding duplicate auth controls and header crowding.
v26.4.240May 12, 2026
Pricing pages now use a single source of truth for plan names, prices, and CTAs. "Request Access" and "Waitlist" copy is removed; all plans link directly to signup with the plan pre-selected.
New- **Pricing source of truth** (`constants/plans.ts`): new `CANONICAL_PLANS` export — the single source of truth for plan display names, monthly/yearly prices, CTA labels, and signup URLs. Prices derive from `PLAN_PRICES`; feature lists derive from the entitlement registry. Marketing pages and onboarding import from here instead of duplicating values.
- **Fixture invariant tests** (`tests/unit/seed/seed-fixture-invariants.test.ts`): enforces that demo persona seed data contains no known placeholder titles, correctly credits collaborators (no Tim White identity collision in Calvin demo), and has consistent Spotify ID + artwork pairing. (JOV-2077, JOV-2078)
- **Screenshot player timestamp invariants** (`tests/unit/product-screenshots/screenshot-player-timestamps.test.ts`): enforces unique `playerTimestamp` values across all marketing screenshot scenarios that show a visible audio player, and validates the timestamp format (`M:SS` / `MM:SS`). (JOV-2087)
- **Pricing contract tests** (`tests/unit/pricing/pricing-source-of-truth.test.ts`): 16 tests enforcing plan IDs, prices, CTA copy (no banned phrases), and signup href `?plan=` params all flow from canonical sources.
- `playerTimestamp` field on `ScreenshotScenario` type; Tim White profile mobile variants (listen, pay, live, subscribe) now declare unique timestamps.
Improved- **Pricing pages** (`/pricing`, `/launch/pricing`): removed "Request Access", "Waitlist", and "Paid plans open from the waitlist" copy. CTAs updated to "Claim your profile" (free) and "Start Free Trial" (Pro/Max). Availability changed to `InStock` in JSON-LD structured data.
- `MarketingPricingPlans` component: removed `isMarketingPlanActive`/`getMarketingPlanCtaLabel`/`getMarketingPlanHref` helpers; CTA labels and hrefs now come directly from the data layer.
- `data/marketingPricingPlans.ts`: replaced `team`/`enterprise` plans with `max`; replaced `activeCtaLabel`/`waitlistCtaLabel` with single `ctaLabel`/`ctaHref`; prices now reference `PLAN_PRICES`.
v26.4.239May 12, 2026
Artist profile cards no longer stretch too tall on large monitors, footer sections breathe a bit more, and the spec-wall animations on the homepage now stagger instead of firing all at once.
Improved- **Artist profile height cap**: at 1280px+ viewports the hero card no longer stretches past 640px (640px at xl, 680px at 2xl), keeping proportions tight on large monitors.
- **Footer vertical padding**: all footer variants now use responsive vertical padding — the regular footer uses split pt/pb values (pt-12/pb-10 mobile, pt-16/pb-14 desktop, pt-20/pb-16 ultrawide) while the marketing footer and minimal variant use py-* clamp values — giving each footer section more breathing room.
- **Homepage spec-wall animation stagger**: spec-wall cards now animate in with staggered delays (0ms, −600ms, −1200ms … −3675ms) so the pulse effect ripples across cards instead of triggering all at once.
v26.4.231.0May 10, 2026
New- **`AuthShell` component**: unified auth surface shared by the full-page sign-in/sign-up routes and the intercepted modal. Provider guard and appearance config are applied in one place so disabled OAuth buttons cannot re-appear (JOV-2064).
Improved- **Sign-in page** and **sign-up page**: refactored to delegate rendering to `AuthShell`; each page retains only its URL-parameter extraction and toast logic.
v26.4.228May 9, 2026
Refreshed the Mac download page copy: clearer hero, six-feature grid, an expanded FAQ, and a final download call-to-action at the bottom.
Improved- **Mac download page copy refresh**: rewrote `/download` hero subhead, expanded the feature grid from 4 to 6 items, added a "Do I need a Jovie account?" FAQ entry, and added a final CTA section. Replaced "Universal" with "Apple Silicon + Intel" and split signing/notarization metadata onto its own line.
v26.4.225May 9, 2026
Jovie now has a real download page for the Mac app at jov.ie/download — version, system requirements, FAQ, and a button that always serves the latest signed release.
New- **Download page (`/download`)**: public marketing page for the Mac app with hero, features, system requirements, FAQ, and legal footer. Designed to match the rest of jov.ie.
- **Auto-updating download link**: the download button always serves the latest signed DMG without manual page edits — the link resolves at click time against our public release feed.
v26.4.223May 9, 2026
The homepage now leads with a sharper release command center, verified proof, and a product-led workspace story without leaking internal tools into marketing screenshots.
New- **Homepage product statement break**: adds a Linear-inspired "Meet Jovie" statement between verified logos and the Workspace chapter so the page has better pacing before the second large product screenshot.
- **Integrated Workspace chapter**: replaces the old command-center/workflow pair with one product-led section using the seeded releases workspace and anchored release-management callouts.
Improved- **Homepage hero and proof strip**: tightens the sticky header, verified-logo treatment, hero carousel framing, and section transitions around the current Shell v1 product screenshots.
- **Marketing screenshot fixtures**: seeds Shell v1 releases/library captures with real Tim White and verified release data, full tables, matching artwork, and an open release rail.
Fixed- **Admin-free marketing captures**: Shell v1 screenshot routes now use `capture=marketing` so homepage assets do not expose admin/internal navigation.
v26.4.217May 8, 2026
You can now update Jovie from right inside the app. A blue "Update" pill appears in the header when a new version is ready — click it to apply instantly.
New- **Update pill in app header**: a compact "Update" button appears in the `/app/*` titlebar row when a new version is available. Click triggers an instant update — no need to manually refresh or relaunch.
- Desktop (Electron) update detection uses `electron-updater` IPC events (`update-available`, `update-downloaded`) for background update checks.
- Web update detection polls the build hash every 5 minutes; on drift the pill appears and clicking reloads to the new build.