Skip to content

Changelog

All notable changes to Gigmeister are documented here. The app supports Web (PWA), iOS (Capacitor), and Desktop (Electron).


A new dedicated editor page replaces modal-based setlist editing. Songs visually nest inside named sections, you can pre-structure a setlist with empty placeholder sections, multi-select bulk-move blocks of songs, save a selection as a song group template, and run AI Optimize Order directly from the editor. Mobile gets a back button, section reorder, tappable header, and a primary CTA with overflow actions.

Press Kit gets server-side WebP thumbnails so the share page loads fast even with large originals. The public share page adds a Print button, a sticky quick-nav header that jumps between filled-in sections, and a theme toggle for recipients.

Schema for in-app rich-text rider editing shipped in 20260513_add_rider_pack_rich_text (Tiptap JSON columns on band_rider_packs), but the production Tech / Hospitality Rider UI still uses PDF upload — the editor isn’t wired through yet.

Theme preference moved off local browser storage onto your account, so Dark / Light syncs across web, iOS, and desktop. A sweep across ~180 files brings light-mode contrast in line with dark, including chord rendering, the practice session view, and rider pack tables. Pre-auth surfaces (login, signup, reset password) stay locked to dark.

The app now distinguishes confirmed session rejection from transient network failure: it only logs you out on refresh_token_not_found / session_expired, never on NetworkError or timeouts. Supabase’s SIGNED_OUT event (which fires on flaky connections) is suppressed.

The desktop app gets unified update banners across the app, download progress, and renderer-OTA restart prompts. Renderer bundles are published automatically on every push to main.

Three previous MIDI debug surfaces consolidated into a single Log sidebar with an outgoing-send listener and direction column. Toggle with Cmd+Shift+M.

<Button>, <Input>, <Pill>, <Card>, <PageShell> adopted across 40+ locations — auth pages, modals, settings, mail, setlist print, onboarding, song / setlist / group / event cards.

Unauthenticated setlist OG metadata leak closed; Apple Music auth callback scoped and validated; MCP OAuth tokens issued per-band; stem cleanup temp paths constrained; OTA signing secrets isolated in CI; song delete now scopes setlist cleanup.


A full-parity rewrite of the iOS app in bespoke SwiftUI with brand-aligned loading screens, synthwave logo, native search, full Settings coverage, Native Shared Inbox v1, Native Insights v1 (Catalog + Practice), Setlist power-user surfaces, queue-style Practice, and a StageSidebar with collapsible sections and band switcher pill. iOS 26 two-pill TabView with emoji selection halos.

Hono + Zod OpenAPI migration kicks off — health endpoint pilots the new createApiApp + app.openapi pattern. Request-ID middleware now correlates logs and Sentry. Pino structured logger rolled out across routes (replaces console.*). New parseBody() and withRoute() helpers; typed env() accessor (process.env.X banned outside server/lib/env.ts).

Collections migrated from SWR to TanStack React Query in five phases. TanStack DB 0.6+ adapters for SQLite persistence (browser + Capacitor) ship alongside.

OG-tag XSS closed; mail-search where-injection closed; Electron URL schemes allow-listed; HSTS / Permissions-Policy / frame-ancestors / form-action response headers; Paddle successUrl origin allow-list + webhook signing-secret enforcement; timing-safe cron secret comparison; mail display-name / subject validation.

Multi-theme system removed in favor of dark-only — foundation for the 3.5 light-mode sweep.


Real-time in-app chat. Six role-scoped default channels (General, Announcements, Bookings, Core, Musicians, Production) are created automatically; new channels can be typed as general, gig, or setlist. A single global “Chat messages” notification toggle. Chat moves into the first Backstage tab on mobile. See Band Chat.

MIDI Scenes for reusable preset bundles across multiple devices. MIDI Clock master / slave mode with configurable source device. See MIDI.

Attachments, auto-generated AI draft replies, text selection on message bubbles and notes, and a route-driven thread view (/app/inbox/:threadId).

Audio file reuse and trim timing (in / out points without re-encoding), transport-synced (beat-quantized) start, and offline-sync integration.

Agent threads — persistent multi-turn conversations synced across devices. New agent tools: reorder / move setlist songs, structured get_setlist. Song-group structure preserved when building setlists via MCP.

Adjacency-based grouping via section_marker; batch setlist creation; no_response attendance status included in iCal feed; cancelled gigs hidden from iCal.

Silent Capgo OTA updates on every commit. Skip the OTA build when changes don’t affect the bundle. Toast only for minor / major updates. Old OTA bundles auto-cleaned from S3 (keep last 20).

Deprecated lyrics and pageContent fields unified into a single content field. Genius lyrics source replaced with LRCLIB. next_practice_songs table dropped. CapacitorUpdateToast removed (silent updates only).


Auto-fill key, tempo, time signature, and duration from MusicBrainz. Lyrics fetched from LRCLIB (replacing Genius) with AI fallback. YouTube scrape fallback for mediaUrl. YouTube video embedding in native (iOS / Electron).

A new Insights tab with four sections — Gigs, Catalog, Practice, Financial. The Gigs section ships with a date range selector (All Time / This Year / 12 / 6 / 3 Months); the other sections show across-all-data metrics today. See Insights.

Band-scoped functionality across calendar, groups, and practice. Glass pill nav lands on web mobile. Consent-page band selection.

create_setlist_with_songs and other agent enhancements.


3.0.x — February → March 2026 (33 patches)

Section titled “3.0.x — February → March 2026 (33 patches)”

The v3.0.0 framework migration plus 33 patch versions consolidating native, OTA, and UX polish.

Complete platform rebuild from Next.js to Vite + Hono + React Router v7 (hash router). API routes ported to a standalone Hono server (port 3001). Shared libraries made framework-independent. Playwright e2e updated.

LayerNewOld
FrontendVite SPA + React 19Next.js App Router
BackendHono on Node.jsNext.js API routes
RoutingReact Router v7 (#/path hash router)Next.js file-based routing
StylesTailwind CSS v4Tailwind CSS v3
DeploymentCoolify (self-hosted)Vercel
iOS OTACapgo self-hosted with RSA signingDirect Vercel

Write-Ahead Log with deduplication and retry for offline mutations across all platforms. Pending mutations storage in the persistence adapter. Background queue processor with lifecycle hooks. Sync-status UI and logout warning for pending mutations.

Tech rider, hospitality rider, stage plan, patchlist, and press kit — with a public share token and file uploads. Tech and hospitality riders are PDF uploads; stage plan is a visual editor with an optional uploaded image.

Mail thread infrastructure for band communications — one inbox per band — with notes, templates, activity logging, folder sync state, thread reply_to linking, pg_trgm search, and RLS hardening.

Web push (VAPID) subscriptions. Native iOS push via APNs. Cron job for event reminders with APNs batch sending and focus-songs in rehearsal-reminder notifications. See Push Notifications.

Apple Music token generation, player, and storefront support. YouTube integration for backing tracks. YouTube audio download (3.0.15). Stem separation via Spleeter → native Swift CLI (3.0.17).

Single-song multitrack with preferred recording selection. Multitrack segment grouping. Song MIDI clip name + path.

Onboarding wizard with social login (Apple Sign-In, Google Sign-In) and completion flag. Deep-link handling for iOS (gigmeister:// custom scheme). Implicit OAuth flow for email confirmations. Impersonation session rewrite (real Supabase sessions).

Soft-delete for songs and setlists with a Bin / trash view and 30-day restoration window. Cache invalidation handled across collections.

Five-role system — Owner, Manager, Member, Guest, Tech — with a documented permission matrix. See Band Roles.

Capacitor adds WebSocket, Preferences, Bonjour Discovery, and Filesystem plugins. Native authentication for iOS (Google + Apple Sign-In). Electron deep-link handling for OAuth. Android via Firebase App Distribution. Universal links and Android App Links.

Native iOS-style glass pill navigation (3.0.20). Floating glass nav pill on iOS (3.0.20). Liquid glass UI + sliding nav indicator (3.0.31). Settings promoted to bottom nav; hamburger menu removed (3.0.9). Bottom nav hides on scroll with smooth animation. Inbox swipe gestures.

@capgo/capacitor-updater SDK integrated on every release. OTA release automation on version bump. OTA debug panel. RSA code signing for OTA bundles. Floating toast for OTA updates (later replaced with silent updates in 3.2.1).

MIDI clip auto-play preference (deprecated). Pro billing features hidden during early-adopter period. Linux Electron downloads removed.


CI tag trigger broadened from electron-v* to v*. MIDI control + performance feature polish. Unified hooks (useSongsUnified, useSetlistsUnified, useGroupsUnified) used for offline-first data on native platforms.

  • Storage Migration: Supabase Storage replaced with Garage (S3-compatible) via the new lib/storage.ts client.
  • Runtime Feature Flags: Build-time NEXT_PUBLIC_FEATURE_* flags replaced with runtime feature_flags table — features now toggle per-band without rebuilds.

IMAP/SMTP integration with encrypted credential storage. Thread management with assignment to band members. Internal notes with @mentions (Resend email notifications). Reply templates. Full-text search (FTS + ILIKE fallback). Bulk actions. Thread-to-event linking with auto-suggestions. 12-month historical backfill with progress tracking. Generic activity logging system. Feature-flagged behind shared_mailbox.

Non-destructive switching between multiple bands. Secure email-based invitations with invite codes. RLS policies enforce per-band data isolation. selected_band_id tracked in user profile. Deterministic band resolution via getUserBandId().

Full CRUD for gigs and rehearsals with timezone support. Recurring events (weekly, bi-weekly, custom RRULE) with skip / restore. Per-member attendance tracking. Personal iCal feeds for Google / Apple / Outlook. Event-to-setlist linking. Tally webhook integration for auto-creating gigs from form submissions.

TanStack DB collections for songs, setlists, setlist_songs, song_groups with SQLite persistence on native. Unified hooks abstracting platform differences.

Vercel → Coolify migration (self-hosted on Hetzner via Docker). Sentry monitoring with error tracking, performance tracing, and tunnel (replaced Highlight.io and Vercel monitors). AI Gateway → OpenRouter with Google Gemini 2.0 Flash.


  • Persistent Practice Sessions: Practice sessions now persist across navigation with realtime sync to all band members
  • Active Practice Sessions Database: New active_practice_sessions table with band_id, song_ids array, and RLS policies
  • API Routes: Add active-practice-session routes (GET, POST, DELETE, PATCH)
  • Realtime Subscriptions: Add subscription for active_practice_sessions table changes
  • Mobile UI Improvements: Dropdown menu, hidden font resize buttons (pinch-to-zoom available)
  • Song Editor: Unified step selector for MIDI settings across multiple steps
  • Click Track: Add persistClickTrackAcrossSongs option with debug logging
  • MIDI Clip Loop Count: Configure loop count for MIDI clips per song
  • MIDI Clip Device ID: Associate MIDI clips with specific devices
  • iOS Safe Area: Add safe area top padding for native iOS app (fixes notch/dynamic island positioning)
  • Mobile Z-Index: Fix z-index so bottom navigation appears above practice view
  • Practice Mode: Don’t auto-enter practice view on page load; immediately update state after API calls
  • TTS Announcements: Improve song announcement cleanup, error handling, skip announcement when manually clearing pending transition
  • MIDI: Multiple MIDI fixes and improved MIDI learn functionality
  • UI: Fix stepcard, header, z-index changes, navigation fixes
  • Better song navigation
  • Improved pinch-to-zoom support
  • Better hooks architecture
  • Enhanced playback coordinator
  • Improved autoplay functionality
  • Styling improvements

  • Docker/Coolify Deployment: Add Docker configuration for self-hosted deployment via Coolify
  • MIDI Automation View: New components for visualizing MIDI automation
  • MIDI Content Type: Add MIDI content type to view mode options
  • Per-Song Content Type: Content type preference with auto-save per song
  • Duplicate Finder: Add skip functionality to mark pairs as “not duplicates”
  • Offline Settings: Offline settings tab with enable/disable toggle
  • TTS Song Announcements: Text-to-speech announces current song during performance
  • BPM Animation: Animate BPM display changes
  • MIDI Next Step Control: Add MIDI control for Next Step navigation
  • Alpha Banner: Subtle footer fallback when Alpha banner is dismissed
  • Resolve React 19 peer dependency conflicts
  • Prevent flash of home page before onboarding redirect
  • Use Capacitor MIDI hook to detect MIDI support on native
  • Update file path for lyrics import
  • Add missing use-debounce dependency
  • Replace custom useDebounce with use-debounce library
  • Refactor SongEditor and MidiAutomationView for improved state management
  • Hide header and nav during active practice session
  • Increase z-index of PracticeSessionView for full-screen coverage

  • Phase 1 MVP: Electron app infrastructure with WebView loading from Vercel
  • Phase 2: Enhanced offline support with local API server and IndexedDB
  • Phase 3: Native desktop features (system tray, keyboard shortcuts, auto-updates, notifications)
  • Phase 4: Polish and distribution (macOS, Windows, Linux builds)
  • GitHub Actions CI/CD: Automated builds triggered by electron-v* tags

New MIDI device mappings:

  • Korg MicroKorg, MicroKorg 2, Minilogue XD, Prologue, Wavestate
  • ASM Hydrasynth
  • Modal Cobalt8
  • Behringer DeepMind 12
  • Roland System-8
  • Elektron Digitone, Analog Four
  • And many more…
  • Quick open performance view for songs (Cmd/Ctrl+K)
  • Harden Electron local API server and IPC

  • Song actions UI improvements
  • Skip npm rebuild for Electron (no native modules needed)

  • Song Steps in Chord Sheets: Display step markers in chord sheet view
  • Fumadocs Integration: Public documentation at /docs powered by Fumadocs
  • SWR Integration: Data fetching with SWR for improved caching
  • Better practice mode experience
  • Nicer API design
  • Fix MCP (Model Context Protocol) server

  • Configure auto-advance based on measure count
  • Automatic song progression during performance
  • Upload and manage backing tracks per song
  • Playback during performance
  • MIDI control to advance to next song step

  • Offline enabled preference per user
  • IndexedDB caching for offline access
  • Background sync when connection restored
  • New content view mode for MIDI-focused display
  • Preferred content type saved per song
  • Mark song pairs as “not duplicates” to skip in future scans

  • Model Context Protocol (MCP) server for AI assistant integrations
  • MCP auth codes for secure connection
  • Connect Claude Desktop and other MCP clients
  • Band activation workflow
  • Improved onboarding experience
  • MIDI clips per song step
  • Step-specific MIDI clip names

  • Song Steps: Divide songs into multiple steps/sections
  • Step Sequence: Ordered steps with custom arrangement
  • Step Tempo: Per-step tempo configuration
  • Step MIDI Settings: Individual MIDI settings per step
  • Audio Channel Routing: Route audio to specific outputs
  • Audio Device Preference: Select preferred audio output device
  • Click Track Settings: Configurable click track with measure events
  • Toggle Click MIDI Action: MIDI control to toggle click track
  • Runtime feature flag system
  • Gradual feature rollout capability

  • Custom MIDI program change mappings per user
  • Override default device mappings
  • Content display preferences per user
  • Hide/show lyrics, chords, lead sheets

Five visual themes:

  • Dark (default): Zinc palette with yellow accents
  • Synthwave: Neon magenta/cyan, 80s retro
  • Cyberpunk: Neon green/yellow matrix
  • Vaporwave: Pastel pink/cyan 90s aesthetic
  • Sunset: Warm orange/golden tones

  • User API Keys: Generate long-lived API keys (gig_xxxxxxxxxxxx format)
  • API Usage Logs: Track requests per key with endpoint and timing
  • Usage Statistics: Daily/monthly usage reports
  • Next Practice Songs: Prioritized practice queue
  • Drag-and-drop reordering: Organize practice priorities
  • Smart Suggestions: Recommendations for least-practiced songs

  • Demo data generation for new bands
  • Quick onboarding with sample songs and setlists

  • Per-user, per-song transpose settings
  • Transpose preview in song editor
  • Personal transpose independent from band settings

  • Upload MIDI files (.mid) per song
  • Auto-play option on song selection
  • Playback via Tone.js and @tonejs/midi
  • Supabase Storage (midi-clips bucket)
  • Email notifications for new band signups
  • Admin alerts via Resend

  • PDF Support: Upload and view multi-page PDFs
  • Image Support: Upload PNG/JPG chord charts
  • Pinch-to-Zoom: Zoom and pan on touch devices
  • Full-screen View: Expand during performance
  • Supabase Storage (lead-sheets bucket)
  • Track AI feature usage per band

  • First alternate theme (Synthwave)
  • Neon magenta/cyan aesthetic
  • Add section markers to setlists (SET 1, SET 2, ENCORE)
  • Visual separation in setlist view
  • Row Level Security for file uploads
  • Band-scoped storage access

  • Upload rehearsal recordings with multiple stems
  • Individual track volume control
  • Song markers within recordings
  • Multitrack player component

  • MIDI Devices: Configure up to 4 MIDI devices per user
  • Device Types: Generic, Known (21 devices), MIDI Thru
  • Program Changes: Bank MSB/LSB + Program Change messages
  • Song MIDI Settings: Per-device settings per song
  • MIDI Thru: Forward MIDI input to another device

Initial Known Devices:

  • Nord Stage 4, Stage 3, Electro 6, Piano 5, Lead A1
  • Yamaha CP88/CP73, YC Series
  • Korg Kronos/Nautilus
  • Roland RD-2000
  • Hammond SKX/SK Pro
  • Line 6 Helix
  • Kemper Profiler
  • Fractal FM9/Axe-FX
  • Boss GT-1000
  • Neural DSP Quad Cortex
  • Roland SPD-SX/Pro
  • Moog Subsequent 37
  • Sequential Prophet Rev2
  • Novation Peak/Summit
  • Access Virus TI
  • Arturia PolyBrute
  • Optimized database functions for performance
  • Efficient song/setlist queries

  • Band owner role with elevated permissions
  • Ownership transfer capability

  • Chord sheet two-column display mode
  • Better use of screen real estate
  • Per-user notes on songs
  • Personal annotations independent from shared data

  • Default Transpose: Global transpose offset
  • MIDI Enabled: Show/hide MIDI controls
  • MIDI Clip Auto-Play: Auto-play on song select
  • Hide Lyrics: For instrumentalists
  • Hide Chords: For vocalists
  • Show Chord Diagrams: Visual chord reference
  • Font Size: Small/medium/large text

  • Multi-user Bands: Share songs and setlists
  • Invite Codes: Join bands via unique codes
  • Row Level Security: Data isolation between bands
  • Real-time Sync: Instant updates across all members

  • Lyrics field on songs
  • Full lyrics display in song view

  • Tags: Categorize songs (ballad, opener, 80s, etc.)
  • Practice Sessions: Log rehearsals with notes
  • Media URL: Link to reference recordings

  • Database index for faster song searches
  • Improved query performance

  • Reusable Templates: Create song groups (e.g., ”90s Medley”)
  • Quick Insert: Add entire groups to setlists
  • Ordered Songs: Maintain song order within groups

  • Song Library: Create, edit, delete songs
  • Song Metadata: Title, artist, key, tempo, duration, time signature, notes
  • Chord Sheets: Inline chord markers with [Chord] syntax
  • Setlists: Create and organize setlists
  • Drag-and-Drop: Reorder songs in setlists
  • Duration Tracking: Total setlist duration
  • Soundman View: Share-friendly view for sound engineers
  • Next.js with App Router
  • React with TypeScript
  • Supabase (PostgreSQL + Auth)
  • Row Level Security (RLS)
  • Vercel deployment
  • Mobile-first responsive design

  • Current: Vite + React 19 SPA + React Router v7 (hash router) + TypeScript + Tailwind CSS v4
  • Hono API server (Node.js, port 3001) as a separate process
  • Supabase backend (PostgreSQL + Auth + Row Level Security)
  • TanStack Query + TanStack DB with SQLite persistence on native; Service Worker handles web offline + mutation queue
  • AI features via OpenRouter (Google Gemini 2.0 Flash)
  • Migrated from Next.js to Vite in v3.0.0 (Feb 2026)
  • Capacitor 8 framework
  • Custom MIDI plugin using CoreMIDI
  • Native Apple Sign-In + Google Sign-In (v3.0.0)
  • Capgo self-hosted OTA updates with RSA signing (v3.0.x)
  • Stage app rewrite with bespoke SwiftUI design system (v3.3.0)
  • Haptics, Status Bar, Network, WebSocket, Preferences, Bonjour Discovery, Filesystem plugins
  • Electron with electron-builder
  • Auto-updater (generic HTTP provider) for shell updates
  • Renderer OTA pipeline for hot-swapping the JS bundle without reinstalling (v3.3.0)
  • System tray, keyboard shortcuts
  • macOS (Apple Silicon), Windows (x64). Linux removed in v3.0.x.
  • Distributed via Firebase App Distribution beta channel (v3.0.x)
  • Native MIDI via Capacitor MIDI plugin

VersionDevices AddedTotal
1.0.0Initial 21 devices21
2.6.0+28 devices49
3.0.xApple MainStage, Gig Performer (host software profiles)51

Supported Categories:

  • Stage Keyboards (Nord, Yamaha, Korg, Roland, Hammond, Kurzweil, Dexibell)
  • Synthesizers (Moog, Sequential, Novation, Access, Arturia, Oberheim, Waldorf, Modal, ASM, Behringer, Elektron)
  • Workstations (Roland Jupiter/Fantom, Yamaha Montage)
  • Guitar/Bass Processors (Line 6, Kemper, Fractal, Boss, Neural DSP)
  • Drums (Roland SPD-SX, Nord Drum)
  • Host Software (Apple MainStage, Gig Performer)