Changelog
What actually shipped.
ECC decisions, sealed-module milestones, and deployment activity. Dated. Linked to source. No press-release rewrites — the entry says what was decided and what shipped.
- site
Page titles and meta descriptions on /company, /company/contact, and /demo brought into the 50–70 / 140–160 character target bands
Site-health audit 2026-08-08 03:43 found three pages outside the meta target bands: /company title 19ch and description 181ch, /company/contact title 17ch with no meta description, /demo title 21ch and description 53ch. After the fix: /company title 53ch description 149ch, /company/contact title 51ch description 149ch, /demo title 50ch description 152ch. Every page now has a single-sentence value prop that fits SERP without truncation, and the title reads naturally when the link is shared. Module count left at 240 (modules.json = 240 entries, 240 module pages built); brand registry module_count_phrase says "around 250" which is looser than shipped reality, so site copy is not inflated above ground truth. Build: 288 pages, 240 module pages, verified.
- site
Demo access and portal links now use onboarding.acqi.ai
Completed the remaining hostname migration for the invitation-only demo flow. Token lookup, the portal links shown to visitors, the manual-paste guidance, and the founder-call confirmation now use onboarding.acqi.ai. Invalid-token smoke test returned the expected 404, confirming the route is live without exposing data.
- site
Website enquiry forms now use Harbour
The demo and contact forms now send enquiries through the canonical Harbour endpoint at onboarding.acqi.ai/api/public/leads. Payloads carry the shared name and intent fields, preserve the public hello@acqi.ai front door, and include compatible honeypot fields for submission protection.
- site
Portal URLs and token-lookup moved to onboarding.acqi.ai — completes the hostname migration
Per the LUNA-PROMPT-Website-Demo-Form-to-Harbour vault doc 2026-08-04, the GET (token-resolved) path and the user-facing portal URLs that still pointed at leads.acqi.ai are now on onboarding.acqi.ai. The portal-token lookup endpoint in src/pages/demo.astro (LOOKUP_BASE constant + two docstring references) was https://leads.acqi.ai/api/public/portal/lookup → https://onboarding.acqi.ai/api/public/portal/lookup. The user-facing portal URLs (placeholder text in the manual paste-box, the founder-call confirm anchor href, the dynamic anchor built from the resolved token) all moved from https://leads.acqi.ai/portal/?t=… to https://onboarding.acqi.ai/portal/?t=…. The demo-page data file (src/data/demo-page.json) had one URL in the gate-lede copy that moved with them. Repo-wide audit pass confirms zero leads.acqi.ai references in any customer-facing file; the three remaining mentions are all in src/pages/changelog.astro (historical log entries — left in place per the prompt). Smoke test: curl https://onboarding.acqi.ai/api/public/portal/lookup?token=DEADBEEF returns HTTP/2 404 (expected — bad token, route is live). This entry supersedes the previous 2026-08-04 migration entry — the portal surface WAS moved, contrary to that note. The migration is now complete across form POST, token GET, and all user-facing URLs. Build: 288 pages.
- site
Form backend tunnel moved to Harbour — POST https://onboarding.acqi.ai/api/public/leads
Per user brief 2026-08-04 ("we have changed the demo form tunnel backend thing to a new url"), every form on the website now posts new customer enquiries to Harbour (always-on VPS) instead of ECC. Demo gate form (/demo), contact form (/company/contact), and the shared leads helper at src/scripts/leads.ts all use https://onboarding.acqi.ai/api/public/leads as the canonical endpoint, with https://leads.acqi.ai/api/public/leads kept only as a DNS-fallback alias (not referenced from source). The GH repository variable PUBLIC_ECC_LEADS_URL was updated via the GitHub API to point at the new host; the resolution chain (window.ACQI_ECC_LEADS_URL override → import.meta.env.PUBLIC_ECC_LEADS_URL → onboarding fallback) is unchanged. X-Agent header moved from "website" to "luna" on the shared helper so server-side logs identify the agent that posted. Portal surface (the /portal/?t=… link, the founder-call confirm button, the manual-paste-box placeholder, the lookup endpoint) is intentionally NOT moved — the portal is a separate system and the prompt only changed the form backend. No ljpops branding anywhere in the new copy. Build: 288 pages.
- site
Homepage now blends the deal side in — Sirower cascade, M&A lifecycle, and the deal workspace sit alongside IT discovery
Per user feedback ("the main page needs to have a blend of the it side AND the deal side, and the deal side is completly missing from the landing page"), the homepage was reorganised. Section order is now: Hero → Stats → Two cascades (synergy states + premium-recovery test) → BirdAnimation → How It Works → UseCases → ProductTiers → Integrations → Differentiator → Deal workspace → CTABanner. The deal-maths angle (Sirower cascade, premium-recovery test, run-rate ledger) and the M&A lifecycle (pipeline → LOI → diligence → signing → close → year-1) are now front-and-centre for visitors who arrive looking at the deal, not just the technology. The Diligence / Economics / Governance / Integration / Realisation workspace tabs surface on the same page so the IT side and the deal side sit side-by-side. Build: 288 pages, dist/index.html 102KB (was 60KB). Source: src/pages/index.astro. No invented stats, no new customer logos, no partner numbers — every new phrase grounded in Sirower, the demo-gate brief §3.1, or the deal workspace tabs.
- site
/demo layout rebuilt — readable column, real rhythm, and a manual-paste box for the token link
Per user feedback ("go look at the demo request page. the alignment is all shit, its left aligned and the formatting is all wonky but content is correct"), two CSS classes that did not exist in this project were in use: `container-narrow` (never defined — every block fell back to 1280px viewport width) and `prose prose-invert` (Tailwind Typography plugin not installed — no styles applied). Net effect: every section was 100% browser width, content left-aligned to the viewport edge, no readable column. Now: each section is wrapped in a centered readable column (`max-w-3xl mx-auto`), vertical rhythm restored via `space-y-5` on form blocks, step numbers render at consistent size, the founder-call gradient is properly aligned, the `?t=` manual-paste box has a sub-label block with the code inline-styled. Same JS contract — three-state render (loading / gated / personalised), ECC token lookup, localStorage 7-day TTL. All §3.1–§3.4 copy verbatim from src/data/demo-page.json. Build: 287 pages, dist/demo/index.html 48KB; noindex meta intact; all form / state / dynamic IDs present.
- site
Stats block: 2 design partners in beta, 1 lab-proven identity migration
Updated the Stats component and the /customers stat tiles from "0 customer migrations run — design-partner beta" + "1 lab-proven identity migration" to "2 design partners in beta" + "1 lab-proven identity migration". The framing matters: we are no longer saying "zero migrations run" — we are saying "two design-partner seats are in flight, one identity migration is lab-proven". Cleaner copy, more accurate state of play.
- site
/demo is now by invitation — portal-token gate + founder call slot live
Demo access moves from open-form to invitation-only. Every prospect gets a unique token URL (https://leads.acqi.ai/portal/?t=…) that resolves server-side to the contact identity; no estate data, no secrets returned to the browser. The /demo page now presents three render states — loading, gated, and personalised — all baked into the static HTML so the first paint is honest about access state. The gate has three reason variants (no token, bad token, endpoint unreachable) so a 502 is never silent. A work-email form on the gate lets visitors who landed without a link request one (posts to the same ECC leads endpoint that already serves the rest of the site). A manual-paste box accepts the raw ?t= code for the common case of a link forwarded from a phone. localStorage memoises a good token for 7 days, so a return visitor lands personalised; bad tokens clear on a 404. The page is noindex + sitemap-excluded. Founder call slot — Wednesday 29 July, 09:00 (BST) — is labelled in-page with confirm + suggest text. Demo copy and founder-call label live in src/data/demo-page.json so copy edits do not require a structural rebuild. Built with §0 dedupe-key fix staying on the ECC side; the page-side fix is in this commit so identity is fetched from the token response only, never from loose request variables. Static export caveat noted: query strings do not exist at build time, so the token check runs client-side against /api/public/portal/lookup?token=<hex> — 200/404/5xx handled per state. Until that endpoint exists, every visitor sees the gated form (no silent failure, no 404). Source: src/pages/demo.astro (696 lines), src/layouts/BaseLayout.astro (noindex prop), src/data/demo-page.json. Build: 287 pages.
- site
LinkedIn company-page link corrected across the site
Every visitor to acqi.ai sees a LinkedIn icon in the footer, and every search crawler parses the Organization sameAs array in the JSON-LD. Both pointed at linkedin.com/company/acqi — the wrong slug. Updated to linkedin.com/company/acqi-ai (the page founder created 2026-07-29). src/components/Footer.astro + src/layouts/BaseLayout.astro both updated; no stale /acqi references remain. Verified via grep: every social link on every page now resolves to the live page. Cover-image, founder-call slots, and founder-only decisions remain open per vault:wiki/marketing/linkedin-company-page-setup-2026-07-29.md + linkedin-company-page-overview-2026-07-29.md.
- site
Every discovery module now has a friendly public name
Per user feedback 2026-07-26 ('give each powershjell module a nice soft name rather the name of the file!'), reframed all 240 module names across /features, /modules, and /modules/[slug] from raw PowerShell function names (AzureActiveDirectoryDiscovery, OktaConfigDiscovery, AWSCloudInfrastructureDiscovery, etc.) to consumer-friendly labels. Added src/lib/friendlyName.ts — hybrid algorithmic + curated mapping: 54-entry compound list (M365, VNet, GitHub, GitLab, PowerBI, etc.) + ~70-acronym map (AAD → Entra ID, AD → Active Directory, plus the rest). Overrides keyed by stable slug (not full_name), so data refreshes cannot break the friendly names. Truth preserved: every entry still points at the same .psm1 file. Build verified: 287 pages, 0 raw PowerShell names leaked to dist/, 0 placeholder leakage (grep 'compound[a-z]+' across dist/ clean).
- site
Engineer-doc jargon stripped from every module card
After the friendly-name reframe, three layers of internal jargon still leaked to public visitors on /features, /modules, and /modules/[slug]. Per user feedback 2026-07-26 ('the audience for this is the public they dont technical file names we are selling an enterprise piece of software seeing names like that is unprofessional and undigestible.'), removed: (1) the seal-version badge ('● v1.0' / '● v1.0 (treated)') — internal versioning has no meaning to a buyer; (2) the wire label ('wire: domain-ldap' / 'wire: azure-sp' / 'wire: saas-token' / 'wire: unknown') — replaced with a humane wire-status phrase; (3) the legacy-vs-canonical flag on treated modules. Build verified: 287 pages, 240 cards, 0 'wire:' / 0 '● v1.0' / 0 'scriptblock' / 0 'standardized record' tokens in dist/. All 240 modules produce clean public-facing text.
- site
og:image + /contact + /case-studies 404s + meta description trim
Three site-health issues from the 2026-07-24 audit fixed. (1) og:image / twitter:image now 1200×630 (41KB) — generated /public/images/og-default.png with PIL/Pillow, applied to every page via BaseLayout so shared links render a proper preview. (2) /contact and /case-studies no longer 404 — staticwebapp.config.json had a typo (/contact → /company/contact.html); the rewrite now points to /company/contact/index.html, and the placeholder src/pages/contact.astro + src/pages/case-studies.astro files were removed. (3) Meta description trimmed from 197 → 144 chars to fit SERP display without truncation. Pairs with the deploy fix that copies staticwebapp.config.json to dist/ during build (commit f7b5a85) so SWA routing rules actually ship.
- site
Deal workspace copy tightened around diligence-to-Day-1 delivery
The Deal page now presents one workspace from diligence to Day 1 without internal-tool or external-text references. The hero, lifecycle introduction, stage narratives, glossary, tab data, and metadata use founder-facing language and keep the honesty bar explicit: estimates are labelled and unknowns are stated.
- site
Form boxes stop moving on cursor and touch (Victoria directive)
src/scripts/effects.js + public/scripts/effects.js stripped the cursor-following JS that applied 3D rotation + scale + magnetic translation to every .card and every .btn — on /demo, /company/contact, and any layout that used the .card / .tilt-card class. Removed the BLEEDING EDGE UI EFFECTS CSS block (.magnetic, .tilt-card, .cursor-glow, .tilt-inner transitions, .card::before spotlight via --mouse-x/--mouse-y, .morph-blob, .chromatic). Static-only effects module kept (count-up + scroll progress + one-shot intersection-reveal). Pairs with commit 5185591 which removed entrance CSS animations; this strips the persistent transform drives that survived.
- site
New /about page with founder origin, mission, journey, leadership
src/pages/about.astro sourced from Victoria's brief. Sections: Origin (35-entity + 4-programme M&A pattern → ACQI as productised approach), Mission, Who-it-is-for table (CIO/CTO, CFO/deal leadership, Integration leads, IT delivery), Deal lifecycle we serve (Diligence → Decision → Planning → Movement → Hypercare), What-we-believe (clarity, security-first, relentless coverage, actionable intelligence), Journey (2019-2024 milestones), Leadership (Lukian Poleschtschuk — Founder & CEO, MCSE, BSc CS, 35+ entity acquisitions at insurance + 4 at wealth management), Closing.
- site
Mass legal-pack deployment — privacy / terms / AUP / DPA / subprocs / AI / product-risks / MSA / IP / accessibility
Sourced from vault wiki/business/website-legal/. ACQI.AI LTD (TradeCo; England & Wales) is the customer-facing contracting entity; ACQI HOLDINGS LTD (TopCo) owns platform IP. Pages live at /legal/* with LegalLayout (Draft for solicitor review banner). Old /privacy /terms /security redirects added in staticwebapp.config.json. Pairs with Luna's earlier /legal/product-risks spine (commit 4d58a56); this passes through the rest of the legal pack and /security rewrite. Footer adds a Legal column with 12 entries + entity block + hello@acqi.ai in the bottom bar.
- site
/security rebuilt from vault 07-security-and-trust.md
Architecture snapshot, technical and organisational measures (high-level), customer responsibilities (shared model), vulnerability disclosure, no-fake-certs section (we do not claim SOC 2 / ISO 27001 / Cyber Essentials / FedRAMP / HIPAA until independently attained). Links to /legal/product-risks and /legal/terms.
- discovery
/deal page rebuilt around 9-phase M&A lifecycle with 10 canonical texts
Each of the 30 Deal Workspace tabs now carries phase + phase_label + theory_ref (one canonical M&A text per tab: Pritchett, Damodaran, Mirvis & Marks, Reed/Lajoux, Bridges, Kotter, Freund, Sen, Young & Gadiesh, DePamphilis, Sands) + 3-5 concrete signals the tab reads + owner + gating. Page sections expanded from 4 → 9: 9-phase lifecycle rail, Deal Health Index (7 dimensions from SPEC-D-01), all 30 tabs with per-card 4-column detail, Seven Deal-system SPECs (SPEC-D-01..D-07 with code-level completion %, aggregate 78% from 2026-07-22 mvp-watch audit), honest gaps callout (demo-seed synergy roll-up + portfolio filter bar as SEAL-BLOCKER), the 10 canonical M&A texts with attributions, discovery → deal signal funnel (6 named examples), and a 15-term glossary (LOI/MAC/EBITDA/QoE/DCF/WACC/WC peg/TSA/HSR/CFIUS/DHI/EVA Cascade/IMO/IC/D+0..D+365). Source: src/data/deal-tabs.json + src/pages/deal.astro. Audit: wiki/audits/2026-07-22-deal-mvp-watch.md.
- site
Contact + demo forms wired to ECC public leads (replaces Formspree)
Forms at /company/contact and /demo now POST directly to the ECC leads endpoint with firstName/lastName/email/company/intent payloads plus honeypot + status display. Routing follows the P2 spec: sales/demo → contacts + deals (owner nova); partnerships → design-partners (owner dakota); support → escalations (owner elysea). Shared submitLead helper lives in src/scripts/leads.ts.
- site
Public email sweep to hello@acqi.ai only
Per the LUNA-WEBSITE-HANDOFF-2026-07-21 doctrine: single public mailbox = hello@acqi.ai. Old aliases (privacy@, legal@, security@, sales@, support@, partners@, press@, apac@, emea@, americas@) all display hello@ now on /company/contact, /demo, /privacy, /terms, /security, and the Organization JSON-LD schema. Form intent payload (Sales/Support/Partners/Press) routes ECC-side; no parallel mailboxes.
- site
Production PUBLIC_ECC_LEADS_URL wired at build time
GH repo variable PUBLIC_ECC_LEADS_URL=https://leads.acqi.ai/api/public/leads injected into the Astro build via the azure-static-web-apps workflow. Resolution chain on the client: window.ACQI_ECC_LEADS_URL override → import.meta.env.PUBLIC_ECC_LEADS_URL → localhost default. Every deploy of /company/contact and /demo now hits the prod leads endpoint without code change.
- discovery
Treating all 199 discovery modules as sealed for MVP
Per the ACQI 2026-07-20 directive: 199 PowerShell discovery modules across Azure, M365, Active Directory, network, virtualization, databases, SaaS, security, and AI — all sealed. The seal campaign shipped 75+ Microsoft modules , with the remaining 124 carried over from ready-state with no further optimisation required. Fix-forward only.
- site
240 dedicated module pages live
Every module in the inventory now has its own page at /modules/[slug]/ — synopsis, description, app route, wire, family, seal version. Real data parsed from the .psm1 headers, not marketing copy.
- marketing
NIS2 compliance marketing claim killed
ECC decision 2026-07-16: no product backing for a NIS2 compliance claim. Reframed as NIS2-readiness framework mapping only. Community narrative must avoid SOC 2 / ISO 27001 possession claims (DAKOTA-SALES-001).
- pricing
Pricing Model B ratified for design-partner beta
ECC decision 2026-07-16: Model B (Tier 1/2/3) locked for the 27 Aug 2026 design-partner cohort. Founder sign-off on full public pricing deferred.
- discovery
Azure discovery seal campaign closes at 75+
75+ Microsoft modules sealed . azure-entra family: 75 sealed / 1 open (ApplicationDiscovery legacy — ApplicationDiscoveryV2 is canonical).
- app
Discovered ↔ Discovery linkage closed
Every routed submenu view in the app now carries a persistent Run Discovery button. 165 generated pairs, jest guard with 4 tests, empty exception list. Six invariants codified to prevent regression.
- app
Native migration providers shipped
5 TypeScript providers real, honest, typed, tested. Wired via MANDA_NATIVE_MIGRATION_PROVIDERS flag (default OFF — legacy PS spine remains live). Production-visibility proof required before flag flips to ON.
- pricing
Pricing fork: Model B locked for 12 Jul 2026 launch
ECC decision 2026-07-11. Founder sign-off on full public pricing deferred to post-launch review.
- architecture
Microsoft Graph SDK v1.0 adopted as canonical discovery API
ECC decision 2026-06-30: formal ratification of code-as-truth. Graph SDK is now the canonical read path for any module that can use it.
- security
11-point W26-2026 security/privacy guardrail program
MVP launch gate. Includes EU TIA execution requirement for US-hyperscaler deployments and ECC Compliance Calendar as system-of-record for regulatory deadlines.
- gtm
Founder-network-first GTM preference ratified
Community motion over outbound. ShareGate Windows-only client is the primary community-amplifiable weakness. Tier 1/2/3 pricing framework proposed — awaiting founder sign-off.
- gtm
Lead with M&A program management narrative
Not "content migration" — the buyer is corp dev, not IT operations. Active narrative position.
- site
🌙 Luna SEO: complete site update
Routes, sitemap, robots, JSON-LD, canonical URLs. 10 blog posts shipped covering NIS2/DORA/GDPR, shadow IT, AD forest merging, the 30-day integration sprint, PE due diligence, the AI discovery layer, divestiture readiness.
- site
Initial ACQI website shipped to agreeable-sky-06e468d1e.azurestaticapps.net
Astro 4 + Tailwind. SWA workflow in place. First deployment via Azure Static Web Apps.