${[
['v3.8.28', '2026-09-23', ['Applied MY Yacht PMS maritime palette to jobs landing and demo', 'Aligned navy, panel, blue accent and gold action tokens with the main product']],
['v3.8.27', '2026-09-23', ['Added PMS-style recruitment demo at /jobs-demo.html', 'Added live demo links from the free jobs landing page']],
['v3.8.26', '2026-09-23', ['Added free crew jobs directory at /jobs.html', 'Search, department filters, saved roles and apply flow for crew']],
['v3.8.25', '2026-09-20', ['Language controls collapsed into one accessible globe menu', 'Updated sail-and-wave MY Yacht mark across login surfaces', 'Simplified auth chrome for a calmer mobile-first entry']],
['v3.8.23', '2026-09-20', ['Admin yacht: vessel with slug "admin" created in Supabase', 'Captain of admin yacht sees all vessels in Setup → Vessel Manuals section', 'Select any vessel → see its manuals, upload new PDF, delete existing', 'No separate panel — everything inside the normal app UI', 'uploadManualForVessel() routes to selected vessel_id instead of current yacht']],
['v3.8.20', '2026-09-20', ['AI Chat: equipment context fixed — get_ai_context RPC fields (brand/model_name/category) now mapped correctly', 'loadEquipmentFromSB normalizes DB columns → client names (make/model/equipment_type)', 'saveEquipment writes correct column names to vessel_equipment table (category/brand/model_name)', 'DB.vessel_equipment fallback in chat context if RPC fails', 'vessel_equipment.next_service_hours column added to Supabase']],
['v3.8.19', '2026-09-20', ['Register Equipment: photo now auto-triggers AI scan — one tap fills brand/model/serial', 'eqAIScan: fixed brand field mapping (Edge Function returns brand, not make)', 'Equipment type mapping: engine→Engine, generator→Generator, hvac→HVAC etc.', 'Scan Again button appears after first scan', 'horExportPDF + Reports: popup blocker handled with user toast']],
['v3.8.18', '2026-09-20', ['TOTP secret removed from localStorage — read from Supabase crew.totp_secret only (XSS hardening)', 'horExportPDF + buildReports: popup blocker now shows toast instead of crashing', 'saveWork: temp ID uses timestamp instead of array length (no collision risk)', 'Reports window.open null check added']],
['v3.8.17', '2026-09-19', ['Budgets (month_budget + categories) now persist in Supabase vessels.settings JSONB — permanent yacht history, not lost on device change', 'loadVesselFromSB loads settings field; saveVesselSettings() helper patches vessels table', 'Removed dead loadOrdersFromSB() call from Tier-3 (Orders tab removed in v3.8.15)', 'callVerifyPassword + callSetPassword: added try/catch with network error messages', 'scanWorkPhoto: replaced empty catch with user-facing toast']],
['v3.8.16', '2026-09-19', ['Secure registration: 4-digit code entered FIRST — no public yacht list visible', 'Crew step 3 (vessel picker) replaced with code-first entry — same security model', 'newPickNext() replaced with findYachtByCode() — code validates before vessel name is revealed', 'loadYachtList() no longer called on page load — zero public vessel data leaked']],
['v3.8.15', '2026-09-19', ['Orders tab removed — platform is inventory tracking only, not procurement', 'Logbook tab added to Captain, First Officer, Engineer nav', 'Stewardess gets Inventory tab — for crockery, linens, provisions tracking', 'Bosun gets Inventory + Certs tabs', 'Deckhand gets Inventory + Certs tabs', 'AI Chat context enhanced — low stock items and spare parts included', 'Recurring maintenance: ↻ toggle in Add Work, auto-creates next occurrence on Mark Done', 'Upcoming Tasks card on Maintenance tab — Overdue/Due today/Upcoming with Mark Done button']],
['v3.8.13', '2026-09-19', ['Inventory by departments — Engine Room, Galley, Deck, Stew, Medical etc', 'Add custom department with one click (stored per yacht)', 'Per-department collapsible sections with LOW stock badges', 'Add Item button inside each department', 'Remove empty departments', 'dept field added to inventory Supabase table']],
['v3.8.12', '2026-09-19', ['No more browser alert/confirm/prompt — all inline UI', 'showConfirm bar for delete actions', 'schedMarkDone inline overlay (engine hours)', 'schedAddNote inline textarea in day panel', 'System Logs removed from nav (dev-only feature)', 'Dev themes removed — Maritime, Classic Dark, Classic Navy only', 'Appearance moved to ⚙ gear icon in header', 'Title updated — Professional Yacht Management', 'Empty states for Defects and Inventory tabs', 'Browser language auto-detection (EN/RU/FR/IT/ES/DE)', 'Leaflet attribution removed from Marina map', 'uploadManualForce() — replace existing manual without prompt', 'Hardcoded gold colors → var(--gold) throughout']],
['v3.8.11', '2026-09-18', ['--gold CSS fix — gold accent was rendering white', '2FA bypass fixed on all login paths (OTP, email, code)', 'schedMarkDone crash fixed (STATE undefined)', 'saveEdit now uses correct DB column names', 'Cache keys fixed (finances/snag/vessel_engines)', 'adjustStock works for new items (strict equality fix)', 'loadDefects/Inventory now includes photo_url', 'Tier-3 uses Promise.allSettled — one failure no longer kills all', 'Role guards: Log Hours, View Certs link', 'buildCrew: added First Officer option', 'saveSetup uses toast + refreshes weather', 'budget_edit_mode scoped per-yacht']],
['v3.8.10', '2026-09-18', ['2FA Google Authenticator for Captain and Owner', 'Weather widget on Home tab (Open-Meteo, no key)', 'Budget vs Actual in Finance tab', 'Inventory consumption — parts used logged when job closed', 'Critical bug fixes: chat polling, equipment save, parts links', 'Mobile performance — localStorage cache, tiered loading']],
['v3.8.9', '2026-09-18', ['Register Equipment with AI photo scan (Claude Vision)', 'Upcoming Service block with parts kit and Request Quote', 'PDF Manual upload with deduplication check', 'identify-equipment and parts-request Edge Functions']],
['v3.8.8', '2026-09-18', ['AI Assistant in Chat tab with vessel context', 'Chat memory — AI remembers previous Q&A', 'Similar question detection from history', 'Vessel equipment, maintenance, manuals in AI context']],
['v3.8.7', '2026-09-18', ['bcrypt passwords via server-side Edge Function', 'Password hash never exposed to browser', 'Auto-upgrade SHA-256 → bcrypt on first login', 'Change password also uses bcrypt server-side']],
['v3.8.6', '2026-09-18', ['Security: crew join always requires captain approval', 'OTP rate limit — 60s between code requests', 'Role guard on crew approve/reject (captain/FO only)', 'Status check before login — pending crew see wait screen', 'File uploads validated — max 5 MB, JPG/PNG/WebP only', 'Logout clears all in-memory data and caches']],
['v3.8.5', '2026-09-13', ['Captain confirms crew join requests', 'Duplicate yacht check on registration']],
['v3.8.3', '2026-04-21', ['Access code badge hidden for non-captain roles', 'Logout button fixed on mobile for long role names', 'Chat empty state placeholder added'], ['v3.8.2', '2026-04-21', ['Passage Log completely removed from codebase']]],
['v3.8.0', '2026-04-21', ['Theme switcher — 14 themes, 9 accent colors', 'New 2026 design variant — sidebar navigation on desktop', 'Appearance tab added for all roles', 'Classic design unchanged — switch anytime in Appearance']],
['v3.7.5', '2026-04-21', ['Topbar: hide empty location — no more · — when port not set']],
['v3.7.4', '2026-04-20', ['Black box audit log — every change is recorded with timestamp in the yacht\'s timezone', 'System Logs now load history from Supabase on login', 'Watch Roster and HoR changes now appear in logs']],
['v3.7.3', '2026-04-19', ['Timezone field in Yacht Setup — Caribbean, Europe, Pacific and more', 'New login system — email/phone OTP, 30-day sessions', 'Change password from profile']],
['v3.7.0', '2026-04-17', ['Passage Log and Fuel Log tabs added', 'HoR duplicate fix — unique constraint added', 'MLC rolling 7-day window calculation fixed']],
['v3.5.3', '2026-04-15', ['Watch Roster rebuilt as a calendar', 'HoR rebuilt as a calendar', 'Timezone bug fixed', 'German language added (6 languages total)']],
].map(([ver,date,items])=>`
${ver}
${date}
${items.map(i=>`- ${i}
`).join('')}
`).join('')}