Changelog
1.7.0 (2026-06-28)
Features
- improve Sentry error coverage and route alerts to agent@getimmersia.com (#1969) (d93d75f)
1.6.10 (2026-06-28)
Bug Fixes
1.6.9 (2026-06-28)
Bug Fixes
1.6.8 (2026-06-28)
Bug Fixes
1.6.7 (2026-06-28)
Bug Fixes
1.6.6 (2026-06-25)
Bug Fixes
1.6.5 (2026-06-24)
Bug Fixes
1.6.4 (2026-06-23)
Bug Fixes
1.6.3 (2026-06-23)
Bug Fixes
1.6.2 (2026-06-22)
Bug Fixes
1.6.1 (2026-06-22)
Bug Fixes
- precache pwa-visit-counter chunk in SW manifest and fix offline e2e test reliability (#1939) (b76d27d)
1.6.0 (2026-06-22)
Features
1.5.5 (2026-06-22)
Bug Fixes
- improve media loading reliability for iPad PWA — add onError handlers, SW CORS/range caching, and earlier precaching (#1933) (2dafb99)
1.5.4 (2026-06-19)
Bug Fixes
1.5.3 (2026-06-17)
Bug Fixes
1.5.2 (2026-06-17)
Bug Fixes
1.5.1 (2026-06-17)
Bug Fixes
1.5.0 (2026-06-17)
Features
Bug Fixes
1.4.0 (2026-06-17)
Features
1.3.1 (2026-06-17)
Bug Fixes
1.3.0 (2026-06-17)
Features
1.2.2 (2026-06-17)
Bug Fixes
1.2.1 (2026-06-16)
Bug Fixes
1.2.0 (2026-06-16)
Features
- 8-class device taxonomy aligned to WebXR/OpenXR (#1893) (ec4a358)
- device-native integration — smart glasses, smart rings & on-device AI (#1885) (4e2b7fc)
Bug Fixes
- add per-route SPA SEO metadata, fix stale docs, clean up PWA manifests (#1895) (5eebc12)
- add SPA-level /landing redirect and update auth smoke test (#1883) (028de9f), closes #1879
- e2e: replace createAuthedFixtures with per-test signIn() (14af420)
- resolve 7 staging-gate issues (#1886-#1892) (#1894) (7677878)
1.1.0 (2026-06-16)
Features
- audio: auto-start on tour run, enhanced level meter, host mic preview, guest language prefs (#1880) (17efaa4)
Bug Fixes
1.0.0 (2026-06-16)
Features
- access: configure codex-viewer SA as agent GCP channel (#1727) (65c9452)
- add opencode codespace + GitHub Actions integration (#1854) (5e5448b)
- ads: add Google Ads tag infrastructure, remarketing consent, and conversion wiring (#1330) (158ca47)
- ads: full HubSpot → Google Ads/LinkedIn audience sync (bypasses paid plan) (#1638) (3e9f570)
- ads: HubSpot → ad platform audience sync infrastructure (#1634) (d59a92a)
- analytics: add consent_granted event and Firestore consent counter (#1348) (014ec7d)
- analytics: add GA4 event integrity checks and weekly config drift test (#1516) (cb90e57)
- analytics: drop Firebase SDK, use direct gtag with multi-tracker bus (#1409) (9fb137c)
- analytics: full analytics overhaul with consent, delegation, and complete event tracking (#1260) (c3316e5)
- analytics: revenue tracking — purchase value, UTM, subscriptions, host properties, preview env (#1266) (091af69)
- analytics: switch to GTM-5LLPDV64, remove consent gate, fix HTML comment bug (#1526) (a1f8e07)
- analytics: track slide changes in live sessions (#1263) (0b3cb6f)
- analytics: traffic source attribution, scroll depth, gtag template (#1264) (86deaa3)
- audio: three owner toggles for audio streaming, translation, subtitles (#1869) (9df8ea7)
- audio: unified WebRTC audio streaming + AI translation (#1865) (40b7bc9)
- auth: unified auth — Firebase Auth on static HTML pages (#1251) (a1bd029)
- branding: add platform bios, contact info, social links, icon paths to data/branding.json (#1585) (434f54c)
- branding: new logo system — gold eagle mark, Cinzel wordmark, all icon/social assets [preview] (#1588) (b0e58cf)
- branding: rename logo files + vectorize icon.svg (#1606) (375e182)
- branding: unified logo system with icon.svg as single source (#1612) (41251bb)
- branding: update company copy across all channels (#1613) (f3a020d)
- branding: update icon.svg vector paths (#1609) (dbec489)
- brand: rebrand to Golden Eagle — gold accent palette, new logo assets (#1364) (22054d0)
- build: add i18n translation pipeline, static page locales, and auto-discovery (#1783) (06829c3)
- build: add MD-to-HTML content pipeline (Stream A) (#1542) (3eab92d), closes #1535
- build: add preview label trigger for PR deploys, fix shallow fetch (#1366) (d0f1d8c)
- build: add Search Console API CI gate for staging→main promotions (#1565) (5352d2b)
- build: centralize company branding into data/branding.json (#1574) (2928721)
- build: make preview builds opt-in with smart source-change detection (#1329) (172e2e1)
- build: partner logo pipeline (#1770) (cfa599c)
- build: semantic versioning + rollback script (#1296) (12b6ce8)
- build: semantic versioning + rollback script (#1296) (#1300) (dbb7ccc)
- build: switch staging→main to merge commits, delete sync-staging, fix monitoring (#1358) (4bd04c8)
- check: add check:console-errors — headless browser audit (#1717) (aa24784)
- check: add PR size gate and automated review quality checks (#1789) (7d3901c)
- ci: add git credential helper mode to gh-as-agent.mjs (#1748) (245f47f)
- ci: add nightly & weekly E2E suites with promotion gate (#1693) (e5a64b6)
- ci: add promotion gate checks for staging-to-main PRs (#1368) (1ba96b4)
- ci: add stale-branch gate to Cloud Build preview pipeline (#1249) (34a23ab)
- ci: default all agents to macgyver-agent GitHub App (#1749) (5f21afa)
- ci: make Lighthouse SEO assertion blocking on production deploy (#1568) (1371196)
- ci: post staging deployment on PR merge for View button (#1345) (405dbf1)
- ci: replace custom versioning with release-please auto-merge on staging (#1419) (e1b8cd2)
- clean URLs via deploy/ staging directory (Phase 2) (#1650) (34b8069)
- content: add 12 new pages, rewrite About, fix branding issues (#1675) (f7abfa2)
- content: add B2B conversion, feature, and consulting pages (Stream B/D/E) (#1550) (96e25ec)
- content: convert /whats-new from SPA to static content page (#1643) (65d4f84)
- controller: restore update banner that reloads on new deploy without recaching media (#1240) (d048856)
- controller: restore update banner that reloads on new deploy without recaching media (#1240) (c734b71)
- data: add canonical competitor registry with 25 competitors and 30-feature matrix (#1656) (26df101)
- data: add competitor intel sync script for HubSpot, Google Ads, Meta, LinkedIn (#1658) (d3adff1)
- deploy: path-based selective deployment for staging Cloud Build (#1689) (c60c4f8)
- deps: fix all npm audit vulnerabilities and add dependabot auto-merge (#1718) (8751ff2)
- design-system: DTCG tokens, unified auth, shadow architecture, nav + permission fixes (#1604) (75d1a72)
- design: audit and fix design system — tokens, CI gates, mint accent, guide sync (#1672) (0a8f104)
- design: increase whitespace across all pages for better breathing room [preview] (#1576) (914de44)
- design: SYNCHRONY foundation — tokens, fonts, branding (#1662) (212b743)
- e2e: overhaul weekly/nightly E2E workflow with test tags (#1728) (7abb07f)
- editor: add offline availability toggles for host and guests (#1671) (37c5955)
- functions: add DeepSeek-powered PR review webhook (#1363) (4726da2)
- functions: handle issue_comment and review_requested triggers (#1466) (0631226)
- functions: post PR reviews as formal GitHub reviews with verdict (#1371) (1c92258)
- functions: re-review on push after changes requested (#1400) (cb308b9)
- functions: smarter reviewer — domain context, severity triage, prior-review awareness (#1415) (617a4cc)
- home: add client logos to home page (#1556) (21bd525)
- homepage: full redesign — 10 sections, OG tags, partner logos, features, FAQ (#1674) (03054c2)
- hubspot: enrich CRM contacts with UTM attribution, Stripe IDs, and engagement data (#1608) (1366562)
- i18n: add dynamic meta description, locale nav/footer, copyright translations (#1821) (97f9aa6)
- i18n: add locale-aware welcome email with fr/zh translations (#1822) (1eaaeb1)
- i18n: convert all remaining pages and components to useTranslation (#1800) (ed7467b)
- i18n: convert HomePage, AuthPage, and PricingPage to useTranslation (#1799) (dc5a68c)
- linkedin: LinkedIn integration — OAuth, Posts API, Insight Tag, dashboard (#1558) (fac79f2)
- linkedin: switch to new Community Management API app (#1570) (c43a868)
- marketing: translate all 32 static pages to French and Chinese (#1806) (c21c206)
- merge staging into main — SEO fixes, semantic versioning, release-please revert (#1319) (ae5ffe3)
- meta: Meta OAuth, Instagram Graph API, token fallback (#1605) (257a0ae)
- meta: switch official page to facebook.com/getimmersia, add Facebook footer link, contact export script (#1607) (dac3018)
- migrate weekly and nightly E2E from GitHub Actions to GCP Cloud Run (#1863) (d9576d6)
- nav: restructure menu + add Content Production & Offline Mode ([preview]) (#1665) (cf928a2)
- pages: unify static HTML pages with SPA design system (#1248) (14614f4)
- player: conditionally allow pinch-to-zoom in fullscreen for hosts (#1244) (b0c816a)
- player: progressive fullscreen standards — PWA display_override, Media Session API, edge-to-edge media fix (#1230) (47b743b), closes #1229
- player: remove host preview mute button — host audio always enabled (#1403) (40551be)
- player: show fullscreen prompt for guests when display changes (#1412) (8306da4)
- player: standby audit — preferences-driven delays, auto-standby for static slides, simpler guest prompt (#1501) (887a4e2)
- player: tour overlays, profile page, responsive controller, UI polish (f363d32)
- progressive layout — unified nav-height token replaces hardcoded spacing (#1238) (450b4a0)
- progressive layout — unified nav-height token replaces hardcoded spacing (#1238) (12033ae)
- pwa: add smart glasses support — Wake Lock, Snap/XR detection, 1080p landscape (#1811) (6ff6b35)
- pwa: offline stability — session persistence, analytics queue, write queue, mute removal (#1622) (ceedf57)
- react: add /competitors page with sortable/filterable feature matrix (#1660) (6888bcc)
- react: add i18n infrastructure with locale routing and auto-detection (#1780) (24e52ba)
- react: add i18n namespace files and wire translations into key components (#1781) (4ff21eb)
- react: add Meta Ads dashboard with campaign monitoring and pause/resume (#1563) (43ae399)
- react: add Meta Pixel tracking, consent, and static-page snippet (#1561) (4bef43b)
- react: add Meta social management page and Graph API backend (#1562) (8a1f889)
- react: add pricing FAQ, enterprise CTA, blog footer link (#1540) (#1554) (e3422b6)
- react: add QR scanner, session persistence, and PWA rejoin prompt (#1473) (824ba7a)
- react: integrate HubSpot CRM tracking, contact sync, and chat widget (#1560) (71ee892)
- react: redesign home page for B2B lead-gen focus (#1546) (61088d5)
- react: two-mode QR redesign with O2O UX — billboard + companion (#1673) (98ed23f)
- report: add @eloigerard mention to daily report for notifications (#1587) (251e86f)
- report: add BigQuery-sourced SEO report section (#1619) (25378e6)
- rss: add RSS feed for blog posts at /rss.xml (#1677) (2ec635a)
- seo: remove app-only SPA routes from sitemap, add noindex (#1567) (8700050)
- seo: sitemap conversion audit — priorities, GA events, lastmod, case-studies, CTA gaps (#1630) (cbfd925)
- style: brand HubSpot forms, chat widget, Calendly, and client logos (#1575) (7a0353f)
- sw: auto-reload on new deploy + spinner fix + error reporter + footer version (#1253) (729261d)
- Unified Design System — single source of truth for all colors (#1237) (ee303ce)
- Unified Design System — single source of truth for all colors (#1237) (7ad8b3b)
Bug Fixes
- access copy, Pro card styling, remove dead signed-out guards (#1875) (b6c50b6)
- add CORS for preview channels, apply to staging bucket (#1224) (7e6a6c3)
- add locale prefix to external links in nav, footer, breadcrumbs and page-level anchors [preview] (#1862) (663653d)
- add trailing newline to README for consistent formatting (#1443) (f13da44)
- analytics: add page context and session ID to GA4 Measurement Protocol hits [preview] (#1507) (5a7906f)
- analytics: always call consent update — GA4 consent mode v2 requires explicit confirmation (#1487) (30eda37)
- analytics: AnalyticsProvider never initializes after late consent (#1262) (f73a8f7)
- analytics: remove consent banner, default to opt-in, add settings toggle (#1484) (465061c)
- analytics: remove dead code, fix duplicate events, and fix sendBeacon body (3046a69)
- analytics: remove dead ternary from Meta Pixel snippet (#1583) (16b4bc7)
- analytics: send events directly to GA4 — bypass broken gtag.js containers (#1492) (b82e3e6)
- analytics: standard MP params — cached device, 30-min session, page_view-only context (7e5ddb4)
- analytics: swap view_item and view_item_list, add generate_lead to /pricing (#1529) (4166285)
- analytics: use production GA4 property for all environments — staging property container is broken (#1490) (90c4d0f)
- auth: handle email-already-in-use by falling back to signInWithEmailAndPassword (#1701) (be0018a)
- auth: optimistic auth hint eliminates flash of unauthenticated UI (#1690) (11ddbf0)
- auth: set localStorage auth flag for signed-in non-host users (#1246) (bb69f5d)
- auth: use browserSessionPersistence in CI to avoid IndexedDB hang in headless Chromium (#1760) (bf20a30)
- auth: use navigator.webdriver for CI detection + relax visual tolerance + filter GTM offline URL (#1768) (ee64549)
- backend: correct HubSpot v3 forms API payload (#1798) (d9f79e7)
- backend: resolve all TypeScript checkJs errors and add typecheck:backend to CI (#1715) (36a63c2)
- branding: replace outdated logo-nav.svg with vector version, remove unusable PNG icons (#1581) (94b819b)
- branding: source analytics IDs from data/branding.json (#1577) (6b74cb9)
- broaden safety guard to cover all work, not just code (#1826) (120e01d)
- build: add explicit /rss.xml rewrite to firebase.json (#1679) (eecc467)
- build: add missing jsqr dependency — blocks Vite build and Cloud Build deploy (#1486) (4fac85a)
- build: deploy partner logos, hero images, and media directory (#1667) (09a1e79)
- build: emit build-info.json before build step (#1652) (13d1ed1)
- build: escape GTAG comment, show version in static HTML footer, prevent duplicate gtag injection (#1299) (271de95)
- build: fix post-preview-url.mjs — escaped newlines in PEM key (#1304) (0957749)
- build: fix sync-staging workflow and restore production GitHub Deployments (#1344) (c09a152)
- build: fix Tailwind content paths so utility classes are generated (#1666) (09815da)
- build: use node:22 for smoke test — cloud-sdk:slim lacks curl (#1494) (b771775)
- check: handle SHA abbreviation length mismatch in deploy check (#1654) (dc529e0)
- ci: accept <!-- NAV --> placeholder as valid nav-runtime.js state in content integrity check (#1579) (027b1b7)
- ci: add --only hosting:immerstaging to avoid unconfigured production target (6902306)
- ci: add actions/checkout before release-please action (#1302) (66df8ac)
- ci: add checkout step so gh CLI has a git repo (#1428) (403eda0)
- ci: add explicit workflow_dispatch inputs to weekly-e2e (#1722) (ca9d4b4)
- ci: add missing issues:write permission to nightly and weekly E2E workflows (#1735) (ec6c58a)
- ci: add pull_request_target trigger for release-please branches (#1437) (9e65ec1)
- ci: add statuses:read permission to release-please workflow (#1874) (5df8e01)
- ci: add workflow_run and workflow_dispatch triggers to release-please (#1449) (68d1d9c)
- ci: add workflow_run trigger to re-run CI after version bumps (#1378) (a3c1203)
- ci: allow release-please branch names and dispatch CI on release PR (#1421) (888bfd9)
- ci: capture BRANCH_NAME via Cloud Build substitution, then sanitize in bash (999a16e)
- ci: dispatch release-please after mirroring ci-gate status (#1455) (2348873)
- ci: dispatch release-please via gh api in mirror step (#1458) (539512f)
- ci: enforce token rules on all PRs, fix checkout version, fix Google OAuth allowlist (#1401) (446973f)
- ci: escape from Cloud Build substitution parser (cc0564d)
- ci: escape bash variables in cloudbuild.e2e.yaml for Cloud Build substitution (#1396) (92a8be5)
- ci: fix boolean fields in staging deployment Action (#1346) (06d25aa)
- ci: fix E2E workflow test filtering — use filenames + chromium-only project (#1696) (68459a0)
- ci: fix YAML syntax — duplicate key and bad indentation (#1725) (db0447f)
- ci: harden promotion safety net and staging deploy verification (#1713) (241566e)
- ci: harden regression prevention across tests, checks, and security rules (#1686) (26679dd)
- ci: increase nightly E2E timeout and drop dead visual baselines step (#1381) (2aca1c9)
- ci: increase weekly E2E timeouts — staging 30→45 min, production smoke 10→15 min (#1731) (7010b73)
- ci: lookup release PR by branch name instead of step outputs (#1426) (1fcd1fd)
- ci: make production smoke advisory-only — never fail the job (#1736) (eba3119)
- ci: make production smoke non-blocking with continue-on-error (#1721) (c08b2ce)
- ci: mirror ci-gate check run to PR when dispatched via workflow_dispatch (#1432) (9b40b9c)
- ci: pass FIREBASE_TOKEN as bash positional param (#1222) (393a8ee)
- ci: pass FIREBASE_TOKEN via env to functions deploy step (#1220) (c7aa060)
- ci: prevent versioning CI hangs with timeouts and dedup (#1392) (e3070d5)
- ci: reduce friction — single CI run, earlier checks, stale branch visible in PR (#1407) (ddc508d)
- ci: remove --only hosting:immerstaging from channel deploy (7ad2cfc)
- ci: remove invalid --head flag from gh pr view (#1435) (3720ab3)
- ci: remove release-as override after v0.7.0 (#1475) (559fed0)
- ci: replace --ignore with explicit file list in weekly staging-full (#1710) (403b0a6)
- ci: restore statuses:write permission to weekly-e2e (#1723) (72e3ede)
- ci: set release-please target-branch to main (ed3b3fc)
- ci: simplify production smoke — 2 files, no tee, no pipefail (#1726) (76f3e0b)
- ci: skip CI dispatch when release branch doesn't exist (#1462) (b3a38c2)
- ci: split staging deploy — hosting always releases, functions best-effort (#1219) (bfaf245)
- ci: update cloudbuild.preview.yaml comment to match PR trigger config (c491a94)
- ci: use --only immerstaging (no hosting: prefix) for channel deploy (2b332ba)
- ci: use camelCase updatedAt in gh run list JSON queries (#1380) (9cf3bcd)
- ci: use deterministic release-please branch name for gh pr lookups (#1429) (299957d)
- ci: use gh api instead of gh pr list/view in mirror step (#1436) (fc0b279)
- ci: use node:22 image instead of missing gcr.io/immerstaging/firebase (cbce7e6)
- ci: use pr output instead of release_created for dispatch and auto-merge (#1424) (cb2e1be)
- ci: use release-as to skip permanently locked v0.6.0 tag (#1472) (5991ad4)
- ci: use release-please-action v4 instead of v5 (#1423) (7506eba)
- ci: use simpler branch filter pattern for workflow_run (#1453) (9daf9bc)
- components: add flex-wrap to footer inner links container, add responsive-components CI check (#1584) (8103e58)
- components: add missing object-cover reason comment for QrScanner video feed (#1521) (9def67e)
- consolidate sync scripts after repo restructuring (#1651) (7942451)
- content: fix empty CTAs, breadcrumbs, email, and add cross-linking across content pages (#1569) (9c721f3)
- content: update Calendly URL to 30min booking link (#1557) (9f4165a)
- controller: ensure video autoplays when swiping from a picture to a video (#1508) (4bb05d5)
- controller: preserve tourStarted when flushing offline blackout writes (#1626) (24c3797)
- css: align HubSpot form styling with design tokens [preview] (#1757) (9d5a5ca)
- default-hide host-only nav links to prevent flash on static pages (#1242) (e38ce3c)
- default-hide host-only nav links to prevent flash on static pages (#1242) (62c43c8)
- deploy: escape shell variables with $$ for Cloud Build substitution parser (#1694) (66cc797)
- deploy: make rules deploy best-effort + fix git depth for Cloud Build (#1695) (ac3c1de)
- deploy: make storage rules deploy best-effort on staging (SA may lack permissions) (#1687) (12fb428)
- docs: audit fixes — stale GA4 IDs, broken paths, missing URL map entries, auto-checkers (#1724) (8758c54)
- e2e test fixes and useStartSession title default (#1820) (3ad28dc)
- e2e: add networkidle wait and explicit timeouts to nav dropdown test (#1387) (9ec481a)
- e2e: add visual baselines + remove platform suffix + filter third-party console errors (#1762) (7218ff3)
- e2e: correct account page heading selector in visual-auth test (#1376) (b129c96)
- e2e: ffmpeg video fixture + visual test stabilization (#1756) (556ed33)
- e2e: filter cloudfunctions.net CORS noise from nightly error checks (#1737) (753186b)
- e2e: filter ERR_FAILED noise from blocked resource CORS requests (#1746) (b82654d)
- e2e: fix remaining pricing locators + auto-create issues on failure (#1714) (203cee2)
- e2e: repair 13 nightly E2E failures (#1372) (ed500fd)
- e2e: repair nightly E2E failures after rebrand (#1388) (#1391) (60f22fb)
- e2e: repair remaining 9 nightly E2E failures (round 2) (#1374) (8608965)
- e2e: replace stale #pricing selector with direct CTA link locator (#1761) (695bc25)
- e2e: replace waitForURL with heading assertion + use inMemoryPersistence + 60s auth timeout (#1772) (4b84d7a)
- e2e: trim weekly to 5 green specs, remove 12 failing (#1738) (88dd866)
- e2e: update stale assertions and move flaky tests to weekly (#1699) (88b5f3c)
- e2e: update stale locators to match current home page and nav (#1712) (3964524)
- e2e: use generic button[type=submit] selector for auth sign-in to survive email enumeration protection (#1751) (5fa5aff)
- e2e: use regex heading match and wait for auth state on /experiences (#1810) (3ecfa1e)
- e2e: wait for /experiences pathname instead of !/auth (#1816) (15a2742)
- editor: restore drag-and-drop reorder, add reorder coachmark, constrain layout to 760px (#1395) (12ad8f0)
- error-capture: prevent infinite unhandledrejection loop (#1716) (24db6a1)
- error-capture: remove Content-Type header to avoid CORS preflight (#1739) (26aa52d)
- error-capture: use plain text body for sendBeacon to avoid CORS preflight (#1744) (9dff883)
- error-capture: use sendBeacon instead of fetch to avoid CORS errors (#1742) (fb7028e)
- fast-fail E2E sign-in errors, fix CTA link, fix content-staleness order (#1824) (6cf598f)
- footer: unify React and HTML footers — remove text-only Facebook link, add Facebook SVG icon, fix Twitter duplication, match layout (#1777) (0c0fa20)
- functions: fallback body for blank DeepSeek comment replies (#1470) (4a02c57)
- functions: force re-review on comment trigger phrases (#1468) (908139b)
- functions: handle empty review body and bot self-review (#1451) (0f4c274)
- ga4: remove x-goog-user-project header to fix 403 + integrate into weekly E2E workflow (#1765) (db87a6d)
- homepage: enlarge partner logos to fill white card frames (#1676) (dc872ba)
- html: unify nav rendering between React and static HTML (#1709) (5fb6ac5)
- i18n: audit and repair localization — untranslated strings, semantic errors, hardcoded English (#1840) (6d95bb0)
- i18n: close remaining 16 UI gaps and harden pipeline (#1831) (77f6a1e)
- i18n: sync i18n.language from URL locale param in ShellLayout (#1787) (af656f5)
- i18n: translate final fallback strings and plan utility functions (#1819) (1c9e4c3)
- i18n: translate final remaining hardcoded strings (#1814) (ca416b4)
- i18n: translate nav, footer, and ~70 hardcoded strings across 8 phases (#1829) (f980db5)
- i18n: use hard redirect in LocaleDetect for reliable root redirect (#1793) (9d8a1f3)
- layout: add safe-area-inset-bottom to footer for fullscreen corner controls spacing (#1752) (f7c1632)
- legal: replace Touchdown LA with E.N.D. Entertainment Corp., unify contact email, add GDPR/CCPA/IP/governance clauses, enrich footer and about page [preview] (#1684) (289e538)
- letterboxed slides, home CTA, non-host redirect, nav logo, vignette removal (#1873) (a72fb51)
- lighthouse: install missing Chrome deps and add --disable-dev-shm-usage flag (#1377) (fe3e263)
- linkedin: push partner ID to dataLayer, fix dead conversion tracking (#1566) (a4672b2)
- linkedin: remove rw_organization_admin scope, make org lookup non-fatal (#1571) (8b44f01)
- linkedin: set Insight Tag partner ID to 2422412 (#1559) (ed77e68)
- linkedin: switch to app 86dnglah76prk2, document both apps, note DMP scope blocked (#1648) (f5b172b)
- links: audit and repair dead links, missing CTAs, and nav inconsistencies (#1680) (448e0b3)
- live-session: hide fullscreen button in preview iframe on /access (#1247) (7d6f578)
- locale-aware post-signin redirect to prevent auth loop in CI (#1839) (bc408cb)
- main: defer initMetaPixel to after React mount (#1706) (20ae18c)
- main: skip Meta Pixel in headless Chromium (navigator.webdriver) (#1708) (fb0fc4f)
- marketing: revert async CSS — eliminate FOUC on static pages (#1779) (729f108)
- marketing: update HubSpot form IDs with v3-created forms (#1796) (da31bc0)
- marketing: use HubSpot v3 API for forms, centralize form IDs (#1794) (bc89b7e)
- meta-pixel: remove all manual fbevents.js loading and fbq('init') calls (#1730) (9cd042e)
- move security rules and CORS config to backend/ directory (#1653) (a064de6)
- nav: add click handlers to static page dropdowns and filter hostOnly children (#1669) (3cde415)
- nav: escape single quotes in mobile renderGroup onclick — kills entire IIFE (#1688) (e485f82)
- nav: no-flash auth CTAs via display toggle (03db7d6)
- nav: remove overflow-x-auto that clips dropdown panels on static pages (#1691) (9131a6d)
- nav: repair broken static page menus, harden design system compliance (#1685) (6970603)
- nav: replace logo-nav.svg with inline icon + Cinzel wordmark lockup (#1593) (4605d4e)
- nav: restore dropdowns and center logo after rebase (#1668) (8ed6175)
- player: add missing guest mute button in fullscreen, add dedicated guest fullscreen button (89da253)
- player: enable swipe gesture on QR overlay during playback (#1481) (7cd4808)
- player: exit standby on nav so video plays immediately; remove fullscreen transport overlay (#1478) (bd025ab)
- player: move handlePromptTap before early returns to fix React error #310 (#1461) (44d6be9)
- player: prevent blackout toggle when tapping to unblock autoplay after swipe (#1678) (0cad55c)
- player: show spinner only while video loads, let browser play button work on tap (#1682) (219c66f)
- pwa: add / to SW REACT_PAGE_PATHS, harden startup defense (#1277) (ac99196)
- pwa: add Cache-Control: no-cache for build-info.json and unit test (#1747) (786fc3a)
- pwa: add handle_links and launch_handler to manifests + browser-mode detection flag (#1769) (be66c06)
- pwa: bypass CDN cache in update-banner polling and remove unused build-info.json from SW precache (#1740) (d00ee7f)
- pwa: eliminate stuck spinner after deploy with three-layer defense (#1269) (d553cf0)
- pwa: improve offline readiness and fix email enumeration auth (#1803) (9f54e2e)
- pwa: serve React pages from SW precache when offline (#1786) (8170aa8)
- pwa: show update banner on fresh page load when SW update is detected (#1750) (92948de)
- react: fix client logo paths on home page — /logos/ → /public/logos/ (#1572) (f33ee38)
- react: prevent auto-show effect from overriding user QR toggle (#1802) (2049db4)
- react: remove react-helmet-async — incompatible with React 19 (#1698) (be661f2)
- react: remove redundant admin-gating on /competitors page (#1661) (074da62)
- react: replace metadata elements with useDocumentTitle hook (#1703) (95fa5a7)
- react: use hardcoded page ID in SocialPage, skip /me/accounts listing (#1564) (6ea2cfa)
- regenerate plan-limits.js mirror after repo reorg (#1659) (36f4b15)
- register translation_toggle GA4 event and generate pending locale translations (#1866) (1654e4e)
- remove redundant PwaOpenPrompt banner (closes #1512) (#1513) (b708a25)
- remove unrecognized validation key from opencode.jsonc (#1858) (0b009e9)
- report: add missing slash in search console API URL (#1597) (61ab97f)
- report: correct GA4 property ID from 450777644 to 509255479 (#1617) (2960433)
- report: hubspot token lookup, ga4 property discovery, cloud build error detail (#1591) (64c218e)
- report: remove gcpAccessToken guard blocking hubspot fetch (#1600) (26231e6)
- report: time estimate crash, search console 404, github api permissions (#1590) (587a7f0)
- report: use dedicated webmasters-only token for search console api (#1602) (698d074)
- resolve 3 Chrome console error categories (#1720) (e2dd334)
- resolve E2E test failures from #1841 and #1870 (#1876) (22646a3)
- resolve staging bugs — meta pixel _fbq, hubspot forms, sw locale routes (#1855) (55f19f8)
- revert emptyOutDir to false — prevent vite from deleting deploy content (#1864) (7c77392)
- route GA4 events to environment-appropriate measurement IDs (#1524) (84663f4)
- rtdb: add qrAutoShown to security rules whitelist (#1402) (c8bf092)
- security: audit fixes — hide stack trace, remove leaked session code, validate redirects (#1697) (20fda75)
- seo,analytics: full SEO & GA4 audit fixes (#1311) (9ce757a)
- seo: add missing OG/Twitter tags to PricingPage, JSON-LD to whats-new, keywords to blog/legal templates (#1681) (a73b653)
- seo: add robots.txt to deploy artifacts and fix BASE_URL placeholder in blog templates (#1763) (9c6661e)
- seo: social share image, auto-generated sitemap, per-route head management (#1259) (3fad3b1)
- static: remove nested HTML comment from gtag snippet template (#1515) (488f065)
- stop bot comment loop in prReviewWebhook + regenerate stale content (#1868) (4669e59)
- sw: add font destination to shell cache + update offline test filter for new asset paths (#1753) (c138e66)
- sw: add MIME-type validation to prevent caching HTML as JS/CSS (#1553) (08ddda5)
- templates: remove HTML comments inside comments that leak as visible text (#1573) (9a9597a)
- trigger release-please cycle 2 (#1447) (d0ae284)
- ui: add Guides dropdown to SPA AppNav matching static pages (f5d4f51)
- unify i18n navigation system (#1835) (617d1b6)
- update-banner: move banner to ShellLayout for every-page coverage (#1241) (9b89f5d)
- update-banner: move banner to ShellLayout for every-page coverage (#1241) (98c53cb)
- use token param and add id-token write permission for opencode workflows (#1859) (d9ffe4d)
Performance Improvements
- agents: shrink AGENTS.md 75% and skip PR reviews for bot-authored PRs (d7d6904)
- bundle: lazy-load Firestore — remove 312KB from startup bundle (#1261) (c3c9e8f)
- ci: cache npm, cache Playwright browsers, add concurrency, remove redundant GA4 check (#1785) (bd594a6)
- ci: reduce Actions minute usage with three targeted optimizations (#1385) (7f37e44)
- ci: reduce scheduled minutes, simplify rollback, skip build (#1788) (cacdc96)
- ci: skip redundant bot CI checks, remove dead sync-staging workflow (6c841ae)
- lighthouse: non-blocking CSS, deferred fonts, heading hierarchy fixes (#1767) (10f4deb)
- reactivity quick wins — navigate, touch-action, CSS preload, Firebase chunk split, dedup, auth UX (#1254) (4078300)
- react: parallelize Firebase reads, cache thumbnails, memo auth state (#1245) (cace936)
- rebalance CI checks into 3-tier fast/quick/full pipeline (#1817) (48eae62)
- remove dead checks, parallelize main-gate, drop redundant console crawl (#1818) (d007406)
- store media download URLs in manifest to eliminate session-start latency (#1867) (9275ceb)
Reverts
- ci: revert release-please workflow changes (#1302, ed3b3fc) (#1318) (c66461d)
- remove /competitors SPA page (should be local file, not site route) (#1663) (384da47)
- remove unplanned guest fullscreen button below media area (1d25bba)
- undo workflow changes — restore opencode config and remove refactor workflow (#1861) (a8cc234)
0.15.0 (2026-06-04)
Features
0.14.0 (2026-06-04)
Features
0.13.0 (2026-06-04)
Features
0.12.0 (2026-06-04)
Features
0.11.1 (2026-06-03)
Bug Fixes
0.11.0 (2026-06-03)
Features
0.10.3 (2026-06-02)
Bug Fixes
0.10.2 (2026-06-02)
Bug Fixes
0.10.1 (2026-06-02)
Bug Fixes
0.10.0 (2026-06-02)
Features
0.9.5 (2026-06-02)
Bug Fixes
0.9.4 (2026-06-02)
Bug Fixes
- analytics: standard MP params — cached device, 30-min session, page_view-only context (7e5ddb4)
0.9.3 (2026-06-02)
Bug Fixes
- analytics: add page context and session ID to GA4 Measurement Protocol hits [preview] (#1507) (5a7906f)
0.9.2 (2026-06-02)
Bug Fixes
0.9.1 (2026-06-01)
Bug Fixes
- analytics: remove dead code, fix duplicate events, and fix sendBeacon body (3046a69)
0.9.0 (2026-06-01)
Features
- player: standby audit — preferences-driven delays, auto-standby for static slides, simpler guest prompt (#1501) (887a4e2)
0.8.6 (2026-06-01)
Bug Fixes
0.8.5 (2026-06-01)
Bug Fixes
0.8.4 (2026-06-01)
Bug Fixes
- analytics: use production GA4 property for all environments — staging property container is broken (#1490) (90c4d0f)
0.8.3 (2026-06-01)
Bug Fixes
- analytics: always call consent update — GA4 consent mode v2 requires explicit confirmation (#1487) (30eda37)
0.8.2 (2026-06-01)
Bug Fixes
- analytics: remove consent banner, default to opt-in, add settings toggle (#1484) (465061c)
- build: add missing jsqr dependency — blocks Vite build and Cloud Build deploy (#1486) (4fac85a)
0.1.1 (2026-05-25)
- chore(build): replace release-please with custom versioning action
0.1.2 (2026-05-26)
- chore: merge main into staging — sync release configs
0.2.0 (2026-05-26)
- feat(build): make preview builds opt-in with smart source-change detection
0.2.1 (2026-05-26)
- ci: auto-sync staging after staging→main promotion
0.2.2 (2026-05-26)
- chore: sync staging with main
0.3.3 (2026-05-26)
- chore: sync staging with main
0.4.0 (2026-05-26)
- feat(analytics): add consent_granted event and Firestore consent counter
0.5.0 (2026-05-27)
- feat(build): switch staging→main to merge commits, delete sync-staging, fix monitoring
0.6.0 (2026-05-27)
- feat(ads): add Google Ads tag infrastructure, remarketing consent, and conversion wiring
0.7.0 (2026-05-27)
- feat(functions): add DeepSeek-powered PR review webhook
0.8.0 (2026-05-27)
- feat(build): add preview label trigger for PR deploys, fix shallow fetch
0.8.1 (2026-05-27)
- chore(ci): add tiered CI gates — lean for staging, strict for main
0.8.2 (2026-05-27)
- chore(ci): add lightweight bot verification with visible check runs [preview]
0.9.0 (2026-05-27)
- feat(ci): add promotion gate checks for staging-to-main PRs
0.10.0 (2026-05-27)
- feat(functions): post PR reviews as formal GitHub reviews with verdict
0.10.1 (2026-05-27)
- fix(e2e): repair 13 nightly E2E failures
0.10.2 (2026-05-27)
- fix(e2e): repair remaining 9 nightly E2E failures (round 2)
0.10.3 (2026-05-27)
- chore(ci): bump actions to latest versions and trim nightly E2E suite
0.10.4 (2026-05-27)
- fix(lighthouse): install missing Chrome deps and add --disable-dev-shm-usage flag
0.10.5 (2026-05-27)
- fix(e2e): correct account page heading selector in visual-auth test
0.10.6 (2026-05-27)
- fix(ci): add workflow_run trigger to re-run CI after version bumps
0.10.7 (2026-05-27)
- fix(ci): use camelCase updatedAt in gh run list JSON queries
0.10.8 (2026-05-27)
- fix(ci): increase nightly E2E timeout and drop dead visual baselines step
0.10.9 (2026-05-28)
- refactor(ci): consolidate E2E workflows, fix ci-gate, and archive dead code
0.10.10 (2026-05-28)
- perf(ci): reduce Actions minute usage with three targeted optimizations
0.10.11 (2026-05-28)
- fix(e2e): add networkidle wait and explicit timeouts to nav dropdown test
0.11.0 (2026-05-28)
- feat(brand): rebrand to Golden Eagle — gold accent palette, new logo assets
0.12.0 (2026-05-28)
- feat(player): tour overlay screens for pre-show, standby, and ended states
0.12.1 (2026-05-28)
- fix(e2e): repair nightly E2E failures after rebrand (#1388)
0.12.2 (2026-05-28)
- fix(ci): prevent versioning CI hangs with timeouts and dedup
0.12.3 (2026-05-28)
- [preview] fix(controller): unify QR card display — single card for button + standby, 3s default, proportional sizing
0.12.4 (2026-05-28)
- fix(editor): restore drag-and-drop reorder, add reorder coachmark, constrain layout to 760px
0.12.5 (2026-05-28)
- fix(ci): escape bash variables in cloudbuild.e2e.yaml for Cloud Build substitution
0.12.6 (2026-05-28)
- chore(ci): remove nightly E2E promotion gate
0.12.7 (2026-05-28)
- [preview] fix(error-boundary): show error details for debugging
0.12.8 (2026-05-28)
- fix(ci): enforce token rules on all PRs, fix checkout version, fix Google OAuth allowlist
0.13.0 (2026-05-28)
- feat(functions): re-review on push after changes requested
0.13.1 (2026-05-28)
- fix(rtdb): add qrAutoShown to security rules whitelist
0.14.0 (2026-05-28)
- feat(player): remove host preview mute button — host audio always enabled
0.14.1 (2026-05-28)
- [preview] feat(player): guest signup prompt appears only after N-th QR auto-show, configurable in profile
Entries above this line are auto-generated from Conventional Commits. Entries below are historical and were manually compiled.
2026-05-13
- OODA pipeline goes live. The automated agent pipeline is now running on both staging and production. Four agents work together: error detection and classification, automated code fixes, test generation for untested code, and deploy pipeline monitoring. Every PR merged to staging gets automatic test coverage for any changed code that was previously untested.
- Post-deploy smoke checks. Every 15 minutes the pipeline checks that the staging website, production website, and health endpoints are responding. Results are recorded so issues are caught immediately.
- Payment failure monitoring. When a Stripe payment fails, the pipeline now logs it so it can be tracked and acted on automatically.
- Faster deploys with deploy pipeline gating. A new gate agent serializes merges to staging so only one deploy runs at a time, preventing queue buildup and flaky deployments.
- PWA performance tracking. The app now includes Firebase Performance Monitoring so page load speed and responsiveness are measured for every visitor automatically.
2026-05-11
- QR code and copy-link are back in the controller. The session QR code, one-tap copy-link button, and "Test as Guest" shortcut are all restored in the controller bar — guests can join by scanning, tapping a link, or with the quick test button.
- Free tier signup fixed. After activating a Free tier account, you're now taken straight to the Experiences page instead of bouncing back to Account.
- Website navigation is consistent everywhere. The marketing pages (About, Guides, Blog, Terms, Privacy) now show the same top navigation as the rest of the app, so there's no jarring visual jump when moving between them.
- Immersia is now reachable via www.getimmersia.com. Visitors who type
www.in front of the domain are now correctly redirected to the main site, and CORS (cross-origin) access is configured so media and assets load properly from both addresses. - Faster deploys with better caching. The offline app cache and storage CORS rules now refresh automatically on every deploy, so you never get stuck on a stale version of the editor or player.
2026-05-04
- Guest tier. Signing up no longer auto-creates a Free tour. New signups land on a "Start Free Tour" prompt — pick the moment when you're ready to make your first walking tour.
- Faster app updates. Behind the scenes, the offline cache now refreshes itself automatically on every deploy, so you'll never get stuck on a stale version of the editor.
- Cleaner error messages. Status banners across Account, Experiences, and the editor now share the same auto-dismiss + cancel behaviour, so transient "saving…" labels never linger after a redeploy.
2026-04-28
- Session code in the controller. The session code now shows in the controller's session bar so you can read it out loud to guests without flipping screens.
- Clearer end-tour dialog. The "End tour" confirmation dialog has a cleaner cancel/confirm split — no more accidental ends.
- Plan-aware uploads. Uploads in the editor gray out automatically when a tour reaches your plan's media or storage limit, with a clear upgrade prompt instead of a silent failure.
2026-04-27
- New design across the host pages. Account, Experiences, Sessions, and the editor share a frosted-glass top nav and a cleaner card style. The same visual language now runs from the marketing home page through every host-facing screen.