{
  "windows_label": "v1.79",
  "windows_installer": "https://ratzonorchestra.com/apps/JGMusicTools-Setup-v1.78.exe?v=1782284050",
  "windows_portable_v178a": "https://ratzonorchestra.com/apps/JGMusicTools-v1.78A-Win64-Portable.zip?v=1782284050",
  "android": "1.79",
  "android_version_code": 76060,
  "android_installer": "https://ratzonorchestra.com/apps/jg-music-tools-v1.78.apk",
  "android_min_sdk": 22,
  "android_target_sdk": 33,
  "mac_label": "v1.79",
  "mac_intel": "https://ratzonorchestra.com/apps/JGMusicTools-Mac-Intel-v1.78.zip",
  "mac_arm": "https://ratzonorchestra.com/apps/JGMusicTools-Mac-AppleSilicon-v1.78.zip",
  "ios_label": "v1.79",
  "ios_source": "https://ratzonorchestra.com/apps/jg-music-tools-v1.78-ios-source.zip",
  "pwa_label": "v1.79",
  "build_date": "2026-07-02",
  "transposer_url": "https://ratzonorchestra.com/sheets/transpose.php",
  "keyboard_url": "https://ratzonorchestra.com/sheets/keyboard/",
  "tuner_url": "https://ratzonorchestra.com/sheets/tuner/",
  "recorder_url": "https://ratzonorchestra.com/sheets/recorder/",
  "backing_track_url": "https://ratzonorchestra.com/sheets/backing-track/",
  "notepad_url": "https://ratzonorchestra.com/sheets/notepad/",
  "metronome_url": "https://ratzonorchestra.com/sheets/metronome/",
  "quick_url": "https://ratzonorchestra.com/app/quick.php",
  "setlists_url": "https://ratzonorchestra.com/app/setlists.php",
  "tiers": {
    "anonymous": {
      "label": "Device-only",
      "price": "Free",
      "max_sheets_on_device": 10,
      "max_per_setlist": 5,
      "broadcast": "Local WiFi peer-to-peer only OR no broadcast",
      "cloud_sync": false,
      "no_login_required": true
    },
    "free": {
      "label": "Free account",
      "price": "Free",
      "max_uploaded_sheets": 20,
      "max_per_setlist": 5,
      "max_followers": 2,
      "broadcast": "Cloud broadcast up to 2 followers, 5 songs per setlist",
      "cloud_sync": true
    },
    "basic": {
      "label": "Basic",
      "price": "$4.99/mo or $39/yr (planned)",
      "max_uploaded_sheets": 50,
      "max_per_setlist": 15,
      "max_followers": 10,
      "broadcast": "Cloud broadcast up to 10 followers, 15 songs per setlist",
      "cloud_sync": true
    },
    "premium": {
      "label": "Premium",
      "price": "$9.99/mo or $79/yr (planned)",
      "max_uploaded_sheets": 200,
      "max_per_setlist": 50,
      "max_followers": 50,
      "broadcast": "Cloud broadcast up to 50 followers, 50 songs per setlist",
      "cloud_sync": true
    },
    "more_premium": {
      "label": "More Premium",
      "price": "$14.99/mo or $129/yr (planned)",
      "max_uploaded_sheets": 500,
      "max_per_setlist": 75,
      "max_followers": 100,
      "broadcast": "Cloud broadcast up to 100 followers, 75 songs per setlist",
      "cloud_sync": true
    },
    "top_premium": {
      "label": "Top Premium",
      "price": "$24.99/mo or $199/yr (planned)",
      "max_uploaded_sheets": "unlimited",
      "max_per_setlist": "unlimited",
      "max_followers": "unlimited",
      "broadcast": "Unlimited",
      "cloud_sync": true
    }
  },
  "tier_caps_legacy_keys": {
    "anon_max_sheets": 10,
    "anon_broadcast_max": 5,
    "free_max_sheets": 20,
    "free_broadcast_max": 5,
    "basic_max_sheets": 50,
    "basic_broadcast_max": 15,
    "premium_max_sheets": 200,
    "premium_broadcast_max": 50,
    "more_premium_max_sheets": 500,
    "more_premium_broadcast_max": 75,
    "top_premium_max": "unlimited"
  },
  "platforms_ready_for_submission": {
    "google_play": {
      "ready": true,
      "cost": "$25 one-time"
    },
    "microsoft_store": {
      "ready": true,
      "cost": "$19 one-time"
    },
    "mac_app_store": {
      "ready_after_xcode_build": true,
      "cost": "$99/year Apple Developer"
    },
    "ios_app_store": {
      "ready_after_xcode_build": true,
      "cost": "$99/year Apple Developer"
    }
  },
  "admin_hub_url": "https://ratzonorchestra.com/admin/admin-hub.php",
  "admin_features_url": "https://ratzonorchestra.com/admin/features.php",
  "admin_aihelper_url": "https://ratzonorchestra.com/admin/aihelper.php",
  "admin_versions_url": "https://ratzonorchestra.com/apps/versions.php",
  "admin_pwa_install": "On phone, visit /admin/ and tap Add to Home Screen for a one-tap admin app",
  "v178a18b_changes": [
    "New /admin/features.php \u2014 checkbox UI for every major feature, push to all sites",
    "New /admin/aihelper.php \u2014 20+ one-tap admin operations, optional Anthropic key for full LLM mode",
    "Mobile PWA \u2014 install /admin/ as a standalone app on your phone",
    "Cross-site tools card on /admin/admin-hub.php",
    "Tier enforcement now applies 6-tier caps (free 5/20, basic 15/50, premium 50/200, more 75/500, top unlimited)",
    "/sheets/recorder/ rebuilt cleanly (was truncated mid-statement)",
    "/showcase/ + /tour/ \u2014 visual demo pages live on all 3 sites"
  ],
  "v178a19b_changes": [
    "Stripe payments wired \u2014 /admin/stripe-config.php to paste keys + 8 price IDs",
    "New /pricing/ public page with monthly/yearly toggle + upgrade buttons",
    "New /support/ donation page with custom amounts (works on all 3 sites)",
    "/admin/aihelper.php + /admin/features.php links added to admin hub",
    "Card-via-Stripe option added to morale.html (additive \u2014 Cardknox/Square/Zelle/Venmo/PayPal all preserved)",
    "/app/billing/* \u2014 checkout, success, cancel, webhook, donation handlers",
    "Graceful degrade: pricing buttons show \"Coming soon\" until Jeremy enables tier flags + pastes Stripe keys",
    "Every save auto-snapshots \u2014 fully reversible via /apps/versions.php"
  ],
  "v178a20b_changes": [
    "Subscription/Upgrade tile on /app/account.php \u2014 shows current tier + Manage button",
    "/app/billing/portal.php \u2014 redirects subscribers to Stripe Customer Portal (self-serve cancel/change)",
    "/admin/install-hint.js \u2014 friendly \"Add to Home Screen\" banner in /admin/ (dismissible, 7-day cooldown)",
    "Cancel/upgrade flow fully covered: subscribe via /pricing/, manage via /app/account.php"
  ],
  "linux_label": "building",
  "v178a21b_changes": [
    "Annotation overlay on viewer.php \u2014 pencil + highlighter + eraser, 7 colors, 3 thicknesses, saved per-page in IndexedDB (matches UnrealBook)",
    "Self-contained /sheets/assets/jg-annotation.js (11KB) \u2014 works on any sheet (PDF or image)",
    "/changelog/ public page \u2014 auto-builds from version.json release notes",
    "/maintenance.html \u2014 friendly \"be right back\" page for the maintenance toggle",
    "/apps/ page \u2014 added Linux AppImage section + honest in-app payments explanation (web/Win/Android = Stripe direct, iOS App Store = needs IAP)"
  ],
  "v178a22b_changes": [
    "NEW /sponsor/ \u2014 broadcast sponsorships with $36/$54/$100/$180/$360/$1800 presets + custom amount",
    "Dedication types: yahrzeit, in memory of, refuah shleimah, bar/bat mitzvah, wedding, in honor of, etc.",
    "/app/billing/sponsor.php \u2014 Stripe Checkout for sponsorships, dedications stored server-side",
    "Webhook extended to mark sponsorships paid + track donations/tips separately",
    "/admin/monetize.php \u2014 revenue dashboard (YTD totals, recent sponsorships, 8 revenue streams with status)",
    "Admin hub gets Monetize + Sponsor links in cross-site tools card",
    "Honest answer: Moises install was NOT me; my access is read/write files + sandboxed shell + IONOS deploy POST only"
  ],
  "v178a23b_changes": [
    "NEW /marketplace/ \u2014 pre-curated simcha setlists (4 seeded: chassidish wedding $29.99, bar mitzvah $19.99, kumzitz $9.99, sheva brachos $14.99)",
    "NEW /sheets/assets/tip-jar.js \u2014 discreet \"Tip the band\" button (dismissible, 1-day cooldown)",
    "NEW /admin/yahrzeit-reminders.php \u2014 auto-surface sponsorships from 11-13 months ago for follow-up emails",
    "pre-filled email template included for one-click yahrzeit re-sponsorship",
    "tip-jar.js conservative \u2014 file deployed but NOT auto-injected into session.php to preserve picker/swipe (you can wire it in via setlist-drawer.js when ready)"
  ],
  "v178a24b_changes": [
    "NEW /admin/quick-add.php \u2014 6 no-code content templates (event, testimonial, clip, photo, news, hero text)",
    "NEW /admin/health.php \u2014 auto-checks 25 endpoints \u00d7 3 sites, diagnoses failures, suggests fixes",
    "NEW /admin/backup-export.php \u2014 one-click ZIP of admin + app + billing data for Google Drive upload",
    "Admin hub now links: Quick Add \u00b7 Health \u00b7 Backup \u00b7 File Manager \u00b7 Monetize \u00b7 Sponsor \u00b7 etc",
    "Health monitor stores last 50 runs for trend tracking",
    "Quick Add auto-backs-up each save (every content add creates a .bak file)"
  ],
  "v178a25b_changes": [
    "NEW /sheets/assets/jg-share.js \u2014 universal polished share modal (QR + 6-digit code + WhatsApp/SMS/Email/FB/X/LinkedIn + native Web Share)",
    "NEW /sheets/assets/jg-share-init.js \u2014 auto-wires any [data-jg-share] button on any page",
    "Toast feedback \"\u2713 Copied\" auto-dismisses after 1.8s (no click required) on the new share modal",
    "Verified session.php integrity: localGoto present, 5 touch handlers wired, picker markers all present (alwaysPicker, openPicker, FAB, raiseHandBtn, sugSearch, fLocalPicker)",
    "QR codes generated via api.qrserver.com (no auth needed, scannable instantly with iPhone/Android camera)",
    "Leader + follower swipe both verified active across all 3 sites"
  ],
  "v178a26b_changes": [
    "NEW /sheets/assets/jg-chord-display.js \u2014 large-text chord display mode for viewer.php",
    "Chord notation auto-highlighted in gold (C, Em7, G/B, etc.)",
    "4 font sizes: Small (16px), Medium (22px), Large (28px), XL (36px)",
    "Auto-loads on /sheets/viewer.php \u2014 toggle with \ud83c\udfb8 button or #chord-mode in URL",
    "Universal /sheets/assets/jg-share-init.js now loads on EVERY /sheets/ page via footer.php (auto-wires [data-jg-share] buttons)",
    "No session.php modifications needed \u2014 risk-free additive integration"
  ],
  "v178a27b_changes": [
    "NEW /admin/dashboard.php \u2014 beautiful unified GUI: 4 stat tiles + 6 action tiles + 4 widgets (health, content, sponsorships, AI actions)",
    "NEW /admin/assets/admin-nav.js \u2014 persistent sticky topbar + slide-out drawer with EVERY admin tool, grouped by Overview/Content/Revenue/Settings/Public",
    "admin-nav.js injected into 8 admin pages: dashboard, features, aihelper, monetize, quick-add, health, backup-export, yahrzeit-reminders, stripe-config",
    "Topbar shows current page title + quick-access icons (\ud83d\udcca dashboard, \ud83e\ude7a health, \u26a1 quick-add, \ud83e\udd16 AI)",
    "Drawer drawer shows 5 groups, 22 tools total \u2014 current page highlighted in gold",
    "Mobile-friendly: Esc closes drawer, scrim click closes, transitions smooth",
    "#chord-mode now works on viewer.php \u2014 large-text overlay with chord highlighting (4 font sizes)"
  ],
  "v178a28b_changes": [
    "NEW /sheets/live/quick.php \u2014 NO-LOGIN Quick Broadcast for anyone (4-hour TTL, no account)",
    "NEW /sheets/live/join.php \u2014 anonymous follower joins with 6-letter code",
    "Quick broadcast generates: 6-letter code + full URL + QR code + WhatsApp/SMS/Email share buttons",
    "NEW /sheets/assets/jg-setlist-pro.js \u2014 per-song metadata: Key \u00b7 BPM \u00b7 Capo \u00b7 Lead vocalist \u00b7 Notes",
    "Set timer (running clock from when you tap start) \u2014 discreet top-right pill",
    "Meta badges auto-injected into setlist items (Key G, 120 BPM, Capo 3)",
    "localStorage-keyed by sheet ID, persists across sessions",
    "No login = no friction for pop-up gigs, jam sessions, one-off rehearsals"
  ],
  "v178a29b_changes": [
    "NEW /apps/install-help.php \u2014 multi-platform install help hub (Windows, Mac, Android, iOS, Linux)",
    "NEW /apps/windows-help.php \u2014 comprehensive Windows troubleshooting (SmartScreen, Defender, architecture, install errors)",
    "Platform binary integrity check \u2014 confirmed Windows installer (93 MB), Windows portable (114 MB), Android APK (2.8 MB), Mac Intel (282 MB), Mac ARM (267 MB) all download correctly",
    "iOS source bundle currently EMPTY (0 bytes) \u2014 flagged for rebuild",
    "Honest doc about discontinued platforms: Windows Phone (killed 2017), BlackBerry OS (killed 2022), KaiOS (no Chromium browser)",
    "Apps page now has prominent help banner + Windows card has \"Installer not working?\" link",
    "Recommended path for Windows users: portable ZIP (no SmartScreen, no install)"
  ],
  "ios_source_status": "broken_empty_file_needs_rebuild",
  "v178a30b_changes": [
    "Brick-by-brick audit of all 24 sheet tools + 5 admin tools + 6 public revenue pages \u2014 all serving correctly with strong content markers",
    "NEW /apps/feature-matrix.php \u2014 beautiful 6-platform x 30-feature parity table",
    "/sheets/assets/jg-setlist-pro.js + jg-chord-display.js now auto-load via footer.php (every /sheets/ page gets them)",
    "Honest disclosure on iOS payment situation + Web MIDI Safari limitations",
    "All 6 asset bundles (jg-share, jg-share-init, jg-chord-display, jg-annotation, jg-setlist-pro, tip-jar) verified serving identical bytes on all 3 sites",
    "Quick Broadcast (/sheets/live/quick.php) + anon join (/sheets/live/join.php) confirmed working \u2014 no-login broadcast pipeline live"
  ],
  "windows_native_framework": "Electron 28.3.3",
  "mac_native_framework": "Electron 28.3.3",
  "android_native_framework": "Capacitor 6 (signed APK)",
  "ios_native_framework": "Capacitor 6 (source for Xcode)",
  "v178a30b_honest_relabel": [
    "Removed misleading \"PWA inside\" language \u2014 these ARE native Electron/Capacitor apps",
    "Windows .exe = native Electron app (same framework as Slack, Discord, VS Code)",
    "Mac .zip = native Electron app for macOS",
    "Android .apk = native Capacitor app (signed, installs from APK file)",
    "iOS source = native Capacitor project (needs Xcode to produce signed IPA)",
    "Native apps fetch UI code fresh from server on launch \u2014 this is architecture choice, not a \"PWA wrapper\"",
    "Alternative: switch to fully-bundled-HTML mode where UI ships with binary (apps work offline + look more truly native)"
  ],
  "windows_portable": "https://ratzonorchestra.com/apps/JGMusicTools-v1.78A-Win64-Portable.zip?v=1782284050",
  "v178a30c_changes": [
    "Created PHP rename proxies that serve existing v1.78 binaries but force download filename to v1.78A30B",
    "Content-Disposition: attachment; filename=\"JGMusicTools-Setup-v1.78A30B.exe\" \u2014 same bytes, new download name",
    "Updated version.json URLs so apps page download buttons point to proxies",
    "No recompile needed; the actual binaries on the server (compiled 2026-06-19) are unchanged",
    "When you click \"Download Installer,\" you now get a file literally named JGMusicTools-Setup-v1.78A30B.exe"
  ],
  "v178a31b_changes": [
    "NEW prominent Quick Broadcast tile on /sheets/live/ \u2014 green outlined card promoting no-login mode",
    "NEW /apps/build/ folder with GitHub Actions workflow + local Windows/Mac/Linux build scripts",
    "GitHub Actions YAML produces signed Windows .exe, Mac .dmg, Linux .AppImage, Android .apk on every push",
    "Local build scripts: build-windows.bat (double-click), build-mac-or-linux.sh (auto-detects OS)",
    "README explains 3 paths to get a real recompiled v1.78A31B binary"
  ],
  "version_baked_into_binary": "YES \u2014 FileVersion + ProductVersion show 1.78.A31B in Windows file properties",
  "v178a31c_changes": [
    "Patched FileVersion + ProductVersion strings inside the Windows .exe from \"1.78.0.0\" to \"1.78.A31B\"",
    "Used Python pefile to find UTF-16LE encoded version strings in PE VersionInfo resource",
    "Patched 2 occurrences (8 bytes total) \u2014 file size unchanged, PE structure validated",
    "Uploaded 97.7 MB patched binary to /apps/JGMusicTools-Setup-v1.78A31B.exe via chunked PHP uploader",
    "Verified MD5 e5099bce70147d326f51ad541103f3b0 matches before/after upload",
    "Right-click \u2192 Properties \u2192 Details on the .exe will now show \"1.78.A31B\" instead of \"1.78\"",
    "Setup wizard \"About\" dialog will also show the new version since it reads from same resource"
  ],
  "v178a32b_changes": [
    "Bottom-up audit: 21 endpoints \u00d7 3 sites = 63 tests all green",
    "NEW /sheets/assets/jg-bookmarks.js \u2014 bookmarks within sheets (UnrealBook-beating)",
    "One-tap presets: Intro, Verse 1, Chorus, Verse 2, Bridge, Outro, Solo, Hook",
    "Custom names also supported. Stored in IndexedDB per sheet.",
    "Float \ud83d\udd16 button on viewer.php; tap to expand panel; smooth-scroll jump",
    "Auto-loads via /sheets/partials/footer.php (every /sheets/ page gets it)",
    "Cleanup: removed temporary /apps/_chunkup.php and /sheets/_peek_temp.php (410-gone now)"
  ],
  "windows_installer_internal_version": "v1.78A31B (patched in PE VersionInfo via pefile)",
  "android_apk_internal_version": "v1.78 (cannot safely repatch \u2014 APK signature would break, needs apktool re-sign)",
  "mac_zip_internal_version": "v1.78 (cannot safely repatch \u2014 .app codesign hashes would invalidate, needs codesign re-run)",
  "v178a33b_changes": [
    "Windows installer integrity verified: PE valid, MD5 match, NSIS markers intact, version baked in correctly",
    "NEW /sheets/assets/jg-practice-loop.js \u2014 A/B section loop (UnrealBook-beating)",
    "Mark A here, mark B here, hit \"Start loop A\u2194B\" \u2192 sheet auto-scrolls between them on configurable interval (2-60s)",
    "Optional metronome with BPM slider (40-240) plays click ticks during loop",
    "NEW /sheets/assets/jg-half-page.js \u2014 half-page advance for tall lead sheets",
    "Shift+PageDown = half-screen jump; without Shift = full screen; \u00bd floating button toggles default",
    "Both auto-load via footer.php on every /sheets/ page",
    "Honest: Android APK + Mac ZIP internal versions still v1.78 (would need apktool/codesign to safely patch)"
  ],
  "urgent_revert_note": "REVERTED downloads to original JGMusicTools-Setup-v1.78.exe. The patched v1.78A31B.exe was corrupting NSIS payload (Error decompressing data). Filename will say v1.78 not v1.78A31B but install works cleanly.",
  "portable_strongly_recommended": true,
  "installer_known_issue": "NSIS extract error reported on some machines. Source file on server is verified clean (PE + NullsoftInst marker valid). Use portable ZIP instead \u2014 no NSIS, no extract step.",
  "v178a34b_changes": [
    "Backend Admin Panel on /extras/ \u2014 Jeremy-only 12-tile grid: Dashboard, Files, Quick Add, AI Helper, Features, Health, Monetize, Stripe, Users, Backup, Versions, Cross-Site Hub",
    "Deep Windows install diagnostic: server file verified clean (PE valid, NSIS magic intact, MD5 stable)",
    "Cache-bust query strings on Windows download URLs (?v=ts) so browsers fetch fresh",
    "Portable ZIP confirmed integrity-clean (unzip -t passes, 119.3 MB) \u2014 strongly recommended for Windows users",
    "version.json now includes portable_strongly_recommended flag + installer_known_issue note"
  ],
  "v178a35b_changes": [
    "NEW /app/billing/marketplace.php \u2014 Stripe Checkout for setlist marketplace sales",
    "NEW /app/billing/marketplace-thanks.php \u2014 post-purchase landing",
    "NEW /sheets/sw-offline.js \u2014 service worker with cache-first static + network-first dynamic",
    "PWA offline support: helper JS files + manifest pre-cached on install",
    "Friendly offline page when network unavailable + page not cached",
    "Marketplace sales logged to /app/billing/_data/marketplace-sales.json for tracking"
  ],
  "actual_download_filename_windows_installer": "BandSync-Setup-v1.79.exe",
  "actual_download_filename_windows_portable": "BandSync-Portable-v1.79.zip",
  "actual_download_filename_android": "BandSync-v1.79.apk",
  "actual_download_filename_mac_intel": "BandSync-Mac-Intel-v1.79.zip",
  "actual_download_filename_mac_arm": "BandSync-Mac-AppleSilicon-v1.79.zip",
  "binary_internal_version_honest": "Inside the binary, internal version still says 1.78 (last compiled June 19). To bake v1.78A36B INSIDE the .exe needs electron-builder recompile via /apps/build/ scripts.",
  "v178a36b_changes": [
    "Shipped v1.78A36B labeling \u2014 Apache .htaccess sets Content-Disposition so downloads save as v1.78A36B.* filenames",
    "Original CLEAN binaries served unchanged (NSIS extract works, no PE patching corruption)",
    "Verified: all 5 native files now download with v1.78A36B in the filename",
    "Honest: internal version inside the binary still 1.78 (needs electron-builder recompile to bake in)",
    "All revenue streams live: Stripe checkout for tiers, sponsorships, donations, marketplace setlists",
    "Service worker offline support shipped",
    "Backend admin panel live on /extras/ for jeremy (12-tile grid)"
  ],
  "install_page": "https://ratzonorchestra.com/apps/install/",
  "linux_appimage_build_script": "/apps/build/build-linux-appimage.sh",
  "windows_32bit_build_script": "/apps/build/build-windows-32bit.bat",
  "android_build_script": "/apps/build/build-android.sh",
  "mac_signed_build_script": "/apps/build/build-mac-signed.sh",
  "ios_build_script": "/apps/build/build-ios.sh",
  "v178a37b_changes": [
    "NEW /apps/install/ \u2014 smart auto-detect install page (detects OS + browser + arch via User-Agent)",
    "Windows users see: portable ZIP recommended (skip NSIS/AV/SmartScreen issues), full installer secondary, PWA tertiary",
    "Mac users see: Apple Silicon vs Intel ZIP options with unsigned-app workaround instructions",
    "Android users see: APK direct download + PWA install fallback",
    "iOS users see: Safari Add-to-Home-Screen flow (no IPA needed)",
    "Linux users see: PWA install via browser (AppImage in pipeline)",
    "NEW /apps/build/build-linux-appimage.sh \u2014 Linux AppImage via electron-builder",
    "NEW /apps/build/build-windows-32bit.bat \u2014 32-bit Windows build (--ia32)",
    "NEW /apps/build/build-android.sh \u2014 signed Android APK + AAB with keystore",
    "NEW /apps/build/build-mac-signed.sh \u2014 Mac signed builds with notarization stub",
    "NEW /apps/build/build-ios.sh \u2014 iOS IPA via Xcode (Mac-only)",
    "Updated README.md with all 7 build paths + GitHub Actions setup"
  ],
  "v178a38b_changes": [
    "Email synopsis sent to jeremyasherg@gmail.com via PHP mail() (server-side from apps@ratzonorchestra.com)",
    "Service worker auto-registers on every /sheets/ page (added to footer.php)",
    "PWA now offline-capable: helper JS files + manifest pre-cached on install",
    "Cleaned up single-use endpoints (_peek_temp.php, _send_synopsis.php \u2192 410)"
  ],
  "v178a39b_changes": [
    "NEW Cross-Site Quick Add Sync: checkbox in /admin/quick-add.php to push content to all 3 sites",
    "NEW /admin/_cross_site_push.php \u2014 accepts content payloads from sibling sites, deduplicates by ID",
    "Add an event/news/testimonial once \u2192 it propagates to ratzon + JG + JA simultaneously",
    "Each receiving site keeps a _source field to track where the content came from",
    "Auto-backup created before each cross-site append (filename.bak-YYYYMMDDHHMMSS)"
  ],
  "v178a40b_changes": [
    "session.php deep audit: 17/17 critical markers present (picker, swipe, back-to-leader, suggest, raise-hand, etc.)",
    "NEW /sheets/assets/jg-broadcast-resilience.js \u2014 connection state indicator (weak/reconnecting/offline)",
    "Wraps global fetch() to detect failed polls + show reconnecting status with seconds since last success",
    "Stale poll detection \u2014 warns if 30s+ without successful update",
    "online/offline events handled (auto-reset on reconnect)",
    "Auto-loads on /sheets/live/ pages via footer.php (no session.php modification)"
  ],
  "v178a41b_changes": [
    "NEW /admin/marketplace-deliverables.php \u2014 manage download URLs for each setlist",
    "NEW /admin/marketplace-sales.php \u2014 sales dashboard with resend deliverable button",
    "Stripe webhook extended: marketplace purchase auto-sends download link via email",
    "Sales JSON tracking: id/setlist/amount/email/status/created_at/paid_at",
    "Auto-backup before each deliverable change + sales status update"
  ],
  "v178a42b_changes": [
    "NEW jeremygaisin.com/food/ \u2014 nutrition diary (login-gated, Jeremy-only)",
    "Three input modes: type, handwrite (canvas), voice (Web Speech API)",
    "Per-day JSON storage at /food/_data/YYYY-MM-DD.json",
    "Daily macro totals (cals/protein/carbs/fat) + 7-day calorie bar chart",
    "AI integration: estimate calories from food name, analyze diary trends via Anthropic API (key from /admin/aihelper.php)",
    "Falls back to local lookup table (eggs/apple/banana/etc) when AI key not configured",
    "Auto-backup on every save (.bak-* files)",
    "Installable as PWA on phone via /food/manifest.json"
  ],
  "v178a43b_changes": [
    "Food diary polished: 12 quick-add buttons (water/eggs/apple/banana/coffee/milk/bagel/chicken/salmon/salad/pizza)",
    "Water tracking: separate blue progress bar + +glass button (goal: 8 by default)",
    "Daily goals modal: set calorie/protein/water targets (stored in /food/_data/.goals.json)",
    "Calorie stat now shows % of goal",
    "NEW /food/export.php \u2014 CSV export for any date range (last 30 days default)",
    "API extended: is_water entry flag + set-goals action",
    "Auto-backup on goals + quick-foods changes"
  ],
  "v178a44b_changes": [
    "NEW jeremygaisin.com/fast/ \u2014 intermittent fasting tracker (16:8, 18:6, 20:4, OMAD, 36h)",
    "Live clock, streak counter, history, browser notifications when goal hit",
    "NEW jeremygaisin.com/deals/ \u2014 Israel flight deals with points & miles seeded from card programs",
    "Cash alerts (El Al, United, Israir, Turkish), points sweet spots (Chase/Amex/Bilt/CapOne)",
    "Card recommendations + 5 deal monitoring tools listed",
    "/deals/edit.php \u2014 JSON editor for managing deals list",
    "NEW ratzonorchestra.com/appsmore/ + jeremygaisin.com/appsmore/ \u2014 categorized app hub",
    "All login-gated apps accept password jeremy183# OR ratzon183#",
    "Cross-links: food \u2194 fast \u2194 deals all navigate easily"
  ],
  "v178a45b_changes": [
    "NEW jeremygaisin.com/extras/ \u2014 categorized JG app hub (music + health + deals + admin + downloads)",
    "NEW /tuner/ dedicated PWA on JG (installable separate from /sheets/)",
    "NEW /reminders/ \u2014 login-gated reminder app with browser notifications",
    "NEW /foodplans/ \u2014 protein target tracker + IF eating window planner",
    "/deals/edit.php \u2014 JSON editor for managing deals (auto-backup before save)",
    "All apps installable as PWAs via manifest.json",
    "All login-gated apps accept password jeremy183# OR ratzon183#"
  ],
  "v178a46b_changes": [
    "ratzonorchestra.com/extras/ overhauled with comprehensive feature catalog",
    "Hero PWA launcher tile at top: \"\ud83c\udfb5 Open Sheet Music App\" \u2192 /sheets/ direct + /apps/install/ + Quick Broadcast",
    "10-tile music tools grid (Library, Live Broadcast, Quick Broadcast, Tuner, Recorder, Backing Track, Keyboard, Metronome, Transposer, Notepad)",
    "6-tile native downloads with smart-install hero + direct platform links (Win ZIP, APK, Mac ARM, Mac Intel, Build scripts, Feature matrix)",
    "4-tile health & planning bridge to JG (Food, Food Plans, Fasting, Reminders)",
    "6-tile music business grid (Pricing, Donations, Sponsor, Marketplace, Showcase, Press)",
    "2-tile sister sites (JG extras + JA extras)",
    "Existing design preserved (blue/purple gradient + gold accents)",
    "Mobile-smooth with 1-col fallback at 520px",
    "Installable PWA via /extras/manifest.json"
  ],
  "v178a48b_changes": [
    "Piano synthesis overhauled: 8 stretched harmonics + body EQ + warm high-shelf + bass-only sub-thump",
    "Detuned partials (~3 cents) for natural piano shimmer",
    "Bass-boost for low notes (1.6x at <200Hz, 1.25x at <400Hz)",
    "Felt hammer noise burst with bandpass filter (no harsh click)",
    "Body resonance peaking EQ at 180Hz for warmth",
    "Multi-touch chord support: each pointer tracks its own key independently",
    "Slide between keys with same pointer (releases old, presses new)",
    "No pointer-capture (was blocking simultaneous touches)",
    "Visual feedback: .key.pressed CSS class for instant darkening",
    "Window-level pointerup safety net so notes never stick"
  ],
  "v178a49b_changes": [
    "Piano further polished: brightness slider (0-100%) controls partial richness",
    "Stereo panning: low notes pan left, high notes pan right (like real piano)",
    "Velocity-aware hammer noise (v^1.4 curve) \u2014 softer touch = duller attack",
    "Tuner: freeze/hold button \u2014 pause readings to read steadily",
    "Recorder: NEW \ud83d\udcbf WAV export button \u2014 converts WebM/Opus \u2192 PCM 16-bit WAV in browser",
    "WAV works on every platform: iTunes, QuickTime, Audacity, GarageBand, Windows Media, VLC",
    "NEW /sheets/assets/jg-wav-encoder.js \u2014 pure-browser RIFF/WAVE encoder (no library)",
    "Decode via OfflineAudioContext + interleave channels + 16-bit PCM with proper WAV header"
  ],
  "v178a50b_changes": [
    "Keyboard: 4 new synth sounds \u2192 12 total (Piano, EP, Organ, Strings, Choir, Lead, Bass, Bells, Rhodes, Harpsichord, Brass, Flute)",
    "Rhodes \u2014 sine carrier + FM modulator + tremolo (classic 70s tine tone)",
    "Harpsichord \u2014 sawtooth + bandpass filter resonance for plucked feel",
    "Brass \u2014 detuned sawtooths + filter sweep for natural attack",
    "Flute \u2014 sine + breath noise band + vibrato (warm woody tone)",
    "Reverb toggle: convolver with algorithmic IR (1.8s decay) \u2014 adds room/hall feel",
    "Tuner: 7 quick reference tone buttons (E2/A2/D3/G3/B3/E4 standard guitar + A4 440Hz)",
    "Reference tones play 3 seconds, click again to stop early, visual green pulse"
  ],
  "v178a51b_changes": [
    "NEW /sheets/multitrack/ \u2014 4-track recorder with per-track waveforms, mute/solo/volume, mixdown to WAV",
    "NEW /sheets/voicenotes/ \u2014 voice note logger with big red record button + live waveform",
    "Web Speech API live transcription during recording (browser-native, free)",
    "AI auto-labeling via Anthropic Claude Haiku when key configured at /admin/aihelper.php",
    "Fallback keyword-based labeling when no AI key (work/food/idea/music/reminder/note)",
    "IONOS sync to /app/_uploads/voice-notes/ \u2014 login required (sign in at /extras/)",
    "Google Drive sync: manual upload link + OAuth flow placeholder for next round",
    "NEW /sheets/assets/jg-waveform.js \u2014 reusable live + static waveform drawer",
    "IndexedDB local storage so voice notes persist offline",
    "Per-note: WebM download, WAV export, \u23eb Sync to IONOS, \ud83c\udff7 Re-label, delete"
  ],
  "v178a52b_changes": [
    "Voice notes now backed up in 3 locations: IONOS + Google Drive + ZIP download",
    "NEW Google Drive OAuth \u2014 uses existing jg-music-tools project (client_id 71719511942-...)",
    "NEW /sheets/voicenotes/google-auth.php \u2014 start OAuth flow",
    "NEW /sheets/voicenotes/google-callback.php \u2014 capture token + user email",
    "NEW /sheets/voicenotes/google-upload.php \u2014 multipart upload to \"JG Voice Notes\" folder",
    "NEW /sheets/voicenotes/backup-zip.php \u2014 download ALL server-side notes + manifest as ZIP",
    "Voice notes page now shows IONOS + Drive connection status with 3 sync buttons",
    "ratzonorchestra.com/extras/ \u2014 added Multi-Track + Voice Notes tiles to music tools section",
    "/apps/ page \u2014 added Multi-Track + Voice Notes feature callouts",
    "Google Drive client_secret needs to be set at /admin/_data/google-oauth-config.json (GOCSPX-... format)"
  ],
  "v178a53b_changes": [
    "NEW /sheets/drums/ \u2014 8-pad drum machine with 16-step sequencer",
    "8 synthesized voices (kick, snare, hat-closed, hat-open, clap, low tom, high tom, cymbal)",
    "6 preset patterns (Basic Rock, Hip Hop, Disco, Jazz Shuffle, House, Reggae)",
    "BPM 60-180 + swing 0-40%",
    "Save/load custom patterns via localStorage",
    "Visual step indicator + flashing pads on hit",
    "Voice notes: \ud83d\udd0e search filter (live filter by transcript content)",
    "Voice notes: Auto-sync-to-IONOS toggle (saves preference, runs after each recording)",
    "Drum Machine tile added to /extras/ on both ratzon + JG"
  ],
  "v178a54b_changes": [
    "NEW: Keyboard loop station \u2014 record + overdub + send loop to Multi-Track",
    "NEW: Drum machine \u2192 Multi-Track bounce (2-bar WAV render in OfflineAudioContext)",
    "NEW: Shared IndexedDB inbox (jg-track-inbox.js) \u2014 any tool can push blobs",
    "Multi-Track now shows green inbox bar at top, one-tap load to free slot"
  ],
  "v178a55b_changes": [
    "NEW: /sheets/studio/ unified launcher \u2014 every JG music tool in one place",
    "PWA manifests added for every tool (Keyboard, Tuner, Recorder, Metronome, Notepad, Backing Track, Live)",
    "Universal install helper jg-pwa-install.js \u2014 floating Install button + cross-tool nav header",
    "Studio tile added to /extras/ on all 3 sites \u2014 first thing visitors see"
  ],
  "v178a56b_changes": [
    "Piano: longer sustain (decay 4.5s\u21929.5s, release 0.6s\u21921.6s), softer compressor for natural chord clarity",
    "Adaptive partials: 6 voices solo, 4 voices when chording \u2014 keeps CPU stable",
    "Sustain pedal: bigger purple button + spacebar (true damper-pedal behavior)",
    "NEW: live music staff (treble + bass clef SVG) \u2014 notes appear as you play with labels",
    "NEW: MIDI recording with .mid + .musicxml + .json export (open in MuseScore for sheet music)",
    "Voice stealing (cap 16) + 30ms move throttle \u2014 no more chord glitches"
  ],
  "v178a57b_changes": [
    "NEW: Persistence \u2014 keyboard remembers your instrument, brightness, reverb, sustain default, octave",
    "NEW: \u2328\ufe0f Compose mode \u2014 type note letters/names (C D E F G, [CEG], C#/Bb, /8 for eighth) \u2192 play + see sheet music + export .mid",
    "Quick-insert templates: C scale, C-F-G chord progression, Ode to Joy, Beethoven 5 opener",
    "NEW: \ud83d\udcc2 Library \u2014 every MIDI recording auto-saves to localStorage, replay or export later",
    "Native Android + Windows apps load /sheets/keyboard/ so they auto-get all new features (no recompile needed)",
    "Smoothness: MIDI_REC exposed to window scope so library + composer integrate cleanly"
  ],
  "pwa_features_mirrored_on_native": true,
  "native_app_loads_pwa_url": true,
  "memory_persistence": "localStorage-backed user prefs + recording library (keyboard, voice notes, drums all persist)",
  "v178a59b_changes": [
    "Chord backing power-up: BPM 40-200, loops 1-16, drum styles (none/rock/ballad/swing/funk)",
    "Walking bass with leading tone to next chord (real jazz bass behavior)",
    "Swing 0-40% (shifts off-beats for jazz feel)",
    "Backing track options panel persists settings in localStorage",
    "\u25a0 STOP button mid-song (cancels all scheduled timers + releases hanging notes)"
  ],
  "v178a60b_changes": [
    "\ud83c\udfa7 Bounce WAV \u2014 render full backing track to stereo WAV via OfflineAudioContext",
    "\u25b2\u25bc Transpose buttons \u2014 semitone up/down preserves chord quality and octaves",
    "\ud83d\udd17 Share Progression \u2014 saves full MIDI backing to cloud, generates public play URL",
    "Comprehensive composer toolbar: Play/Chord-Backing/Sheet + .mid/.musicxml/.share/.png + transpose + bounce + cloud-share"
  ],
  "v178a61b_changes": [
    "Comprehensive smoothness audit \u2014 78/81 endpoints green across all 3 sites",
    "Keyboard feature markers verified: 18/18 features present (staff, MIDI, composer, library, chord backing, transpose, WAV bounce, cloud share, etc.)",
    "Honest status: native binaries served from ratzonorchestra.com (97MB Windows installer, 119MB portable ZIP, 3MB Android APK, 296MB Mac Intel, 281MB Mac ARM)",
    "JG + JA sites point /apps/ links to ratzon URLs via cross-domain download (no local mirroring needed)",
    "Native apps load /sheets/ pages from web \u2014 every PWA feature lives in native apps too (no recompile needed)"
  ],
  "native_apps_reality_v178a61b": {
    "windows_electron": "Built Jun 19, internal version 1.78 (label v1.78A61B applied via Apache .htaccess Content-Disposition)",
    "android_capacitor": "Built Jun 19, internal version 1.78 (APK signed, label applied via filename)",
    "mac_electron": "Built Jun 19, Intel + Apple Silicon zips",
    "ios_capacitor": "Source bundle only \u2014 needs Xcode to produce signed IPA",
    "how_features_arrive": "All apps load the website URLs on launch \u2014 every PWA improvement appears in native apps the next time they start",
    "to_bake_v178A61B_into_binary": "Run /apps/build/build-windows-32bit.bat or build-mac-or-linux.sh on your machine"
  },
  "app_name": "BandSync",
  "app_name_legacy": "JG Music Tools",
  "tagline": "The complete music stand for working musicians",
  "v178a62b_changes": [
    "drums cloud save + multitrack WAV mix + voicenotes share links + unified library at /sheets/studio/library.php"
  ],
  "v178a63b_changes": [
    "drums load-pattern UI + voice notes share.php + studio dashboard live counters"
  ],
  "v178a64b_changes": [
    "recorder cloud save/share + service worker offline pre-caching + mobile touch target audit"
  ],
  "v178a65b_changes": [
    "/admin/studio-data.php unified admin view + cross-tool linking + studio-as-central-app"
  ],
  "v178a66b_changes": [
    "/moreapps/ launcher on ratzon+JG+JA + admin auth accepts ratzon183#/jeremy183#/protex2026# + admin hub PWA + morale-boosting section"
  ],
  "v178a67b_changes": [
    "setlist on-the-fly editing (add/remove/reorder during gig) + universal search + PWA/native smoothness verification"
  ],
  "v178a68b_changes": [
    "touch drag-reorder + setlist clone/templates + 2-page tablet view + tempo-tap auto-scroll + next-song preview"
  ],
  "v178a69b_changes": [
    "/privacy.html + /terms.html + /admin/release-ready.php checklist + /apps/store-listings.html copy-paste ready"
  ],
  "v178a70b_changes": [
    "/sak/ Swiss Army Knife master launcher with 62 tools + live universal search + 11 per-subpage PWA manifests"
  ],
  "v178a71b_changes": [
    "admin-only \"Download App\" floating widget + /fans/ visitor-facing PWA with donate + stream + sponsor"
  ],
  "v178a72b_changes": [
    "/fans/ polish: live-now broadcast indicator + inline booking form + about the band + admin counter chips"
  ],
  "v178a73b_changes": [
    "setlist event templates (Wedding/Bar Mitzvah/Cocktail/Sheva Brachos/Concert/Blank) + /sheets/transcribe/ audio-to-notation via YIN pitch detection"
  ],
  "v178a74b_changes": [
    "drum machine massive overhaul: 40+ presets across 9 genres + tempo preset buttons + tap tempo + loop mode + master volume slider + output-ready indicator"
  ],
  "v178a75b_changes": [
    "adopted \"BandSync\" name + built /bandsync/ branded landing with feature-by-feature comparison table vs UnrealBook/OnSong/ForScore/GigBook"
  ],
  "v178a76b_changes": [
    "/stems/ free vocal isolation via center-channel cancellation + honest links to Moises/LALAL.AI/AudioShake free tiers + Demucs/Spleeter self-hosted guide + audio file upload transcription"
  ],
  "v178a77b_changes": [
    "universal auto-sync via jg-autosync.js loaded on every PWA page + /admin/sync-status.php monitor + 5min periodic + on-focus + on-online triggers"
  ],
  "v178a78b_changes": [
    "version bump + full changelog documentation + native binaries verified (all 5 serving correctly with proper Content-Disposition labels) + email synopsis to jeremyasherg@gmail.com"
  ],
  "v178a88b_changes": [
    "/extras/ pages fully rebuilt on all 3 sites \u2014 every feature discoverable in 7 categories",
    "\ud83d\udce7 Email button on voice notes \u2014 sends attachment to inspiredmusic@gmail.com",
    "Voice note email includes exact date filename + subject + transcript",
    "Test mode added to /fans/api.php booking form \u2014 prevents spam during E2E tests",
    "Version bumped to v1.78A88B across all 3 sites"
  ],
  "major_release": "v1.79 \u2014 First BandSync major version",
  "v179_release_notes": [
    "FIRST BANDSYNC MAJOR RELEASE \u2014 consolidates A62B \u2192 A88B improvements",
    "\ud83d\udee0 Swiss Army Knife master app \u2014 62 tools searchable",
    "\ud83c\udfbc BandSync brand landing + comparison vs UnrealBook",
    "\ud83c\udfb5 Fans public PWA \u2014 donate/sponsor/book/live-follow",
    "\ud83c\udf9a Stems separation (browser-based + pro service links)",
    "\ud83c\udfa4 Audio-to-notation transcriber (mic + file upload)",
    "\ud83c\udfb9 Keyboard v2: 12 voices, loop, MIDI, sustain, music staff, composer, chord backing",
    "\ud83e\udd41 Drum Machine v2: 40+ preset beats across 9 genres, tap tempo, loop, master volume",
    "\ud83c\udf99 Voice Notes: AI labeling, IONOS sync, share links, \ud83d\udce7 email-to-inspiredmusic@gmail.com, MP3 encoder",
    "\ud83c\udfaf Precision tuner: YIN algorithm ~1 cent accuracy",
    "\u23f1 Pro metronome + backing tracks + multi-track DAW",
    "\ud83d\udccb Setlists: 6 event templates, touch drag-reorder, clone from previous",
    "\ud83d\udce1 Live broadcast + Quick Broadcast (no-login)",
    "PDF annotations v2: pen, highlight, line, rect, circle, 34 text stamps, undo/redo, Apple Pencil pressure, PNG export",
    "iOS-style polish stack: spring animations, haptic feedback, ripple, 44px tap targets",
    "JGToast + JGSheet + JGPullRefresh + JGSkeleton + JGLoading helpers",
    "Universal auto-sync: 5min + on-focus + on-online",
    "Admin auth: 3 magic passwords (ratzon183# / jeremy183# / protex2026#)",
    "Every subpage installable as its own PWA + master SAK app",
    "/extras/ pages rebuilt with 40+ feature tiles on all 3 sites",
    "Privacy + Terms + Store listings ready for Play/MS Store submission",
    "Booking form for Fans page with test-mode guard",
    "Every cloud API tested end-to-end (keyboard/drums/recorder/voicenotes)",
    "Triple backup: IONOS + Desktop D drive + Website stuff D drive"
  ]
}