Everything we’ve shipped, newest first. You’re currently on FANDEMiQ v0.9.4.
v0.9.4
Green across the board
Our automated checks had been failing for months, mostly because the tests still expected the template copy the site launched with: free trials, a team of six people who never existed, and nav links we removed long ago. Every test now checks the site as it actually is. Where it can, a test reads its expected text from the same place the page does, so a copy change won't break it again. Nothing visible changed on the site.
Unit tests rewritten for the Platform, About, Features and Header components, and the section smoke tests; two duplicate legacy test files removed
End-to-end tests rewritten: every live page, header nav, retired-URL redirects, versioned legal pages, the footer version and status links, and real 404s
Type check, lint, 343 unit tests and 41 end-to-end tests all pass
End-to-end run allows the CI server five minutes to build and start, instead of two
v0.9.3
Is it up? Now you can check
The footer now links to status.fandemiq.net, our public status page, so anyone can see whether the Manager, the Camera App and the APIs are working without having to email us. We also cleared out the old page files that stopped being reachable when they were redirected last week. Nobody could see them, but they were still sitting in the code.
Footer: "System status" link to status.fandemiq.net, opening in a new tab
Deleted the dead legacy routes (platform sub-pages, industries, partner sub-pages, template pricing) and their tests; the redirects stay
v0.9.2
One rulebook, not two
The website Terms had their own short list of things you mustn't do with FANDEMiQ, and it had quietly drifted from the Acceptable Use Policy published yesterday. The Terms now point to the policy, make it part of the Terms, and keep a plain-English summary. Where the two differ, the policy wins, so there's one rulebook to keep up to date.
Terms "Acceptable use" section now incorporates the Acceptable Use Policy at /legal/acceptable-use
Short summary kept, with the policy taking precedence if they differ
v0.9.1
A 404 that admits it
Two tidy-ups after the legal pages went live. Any address that doesn't exist now gets a proper 404, with the normal header and footer, instead of a bare grey page. That includes a legal version that was never published, such as /legal/dpa/v2, which previously said 200 OK while showing 'not found'. And the script that turns counsel's approved documents into site pages now lives in the repo, so the next version of the DPA, SLA or Acceptable Use Policy is published the same careful way as the first.
Unknown URLs return a real 404 with the site header, footer and version number, and are marked noindex
Unpublished legal versions (for example /legal/dpa/v2) return 404 instead of a soft 404 with status 200
New npm run legal:publish script: strips counsel drafting notes, stops on anything it can’t safely remove, never overwrites a published version
The approved v1 substitutions are recorded in the repo, and the script rebuilds each v1 exactly from counsel’s files
CLAUDE.md documents how to publish a new legal version
v0.9.0
The small print, now with version numbers
Our Microsoft Marketplace contract points at three documents by URL, so they now exist: a Data Processing Agreement, a Service Level Agreement and an Acceptable Use Policy, word for word as counsel approved them. Each version gets a permanent address that never changes, because a customer is bound by the version in force when they signed. When one is updated, the new version goes up beside the old one rather than on top of it.
New pages: /legal/dpa, /legal/sla and /legal/acceptable-use, each at version 1.0, effective 28 September 2026
Every version has a permanent address (/legal/dpa/v1 and so on) and the current page lists previous versions
A test pins each published version, so editing one fails the build; changes have to go in as a new version
Website Terms: availability now points to the SLA instead of promising 99.9%, and Marketplace customers are told the Microsoft Standard Contract governs them
Terms now come from the approved text in code only, so the CMS cannot override them
Sub-processor register: Sentry (error reporting, EU/Germany) added, with a dated change-log entry
The three new documents are linked from the data protection brief and the footer
v0.8.0
Every page stopped pretending to be the homepage
A search and AI visibility audit found that every page on the site told Google it was a copy of the homepage, so only the homepage was ever indexed. It also found twelve pages that crashed on every visit, among them the partner application form, and a pricing page full of template prices we never charged. The canonicals are fixed, the partner form works again, the dead pages redirect somewhere real, and assistants now get a plain-language llms.txt plus proper structured data describing who we are.
Removed the site-wide canonical that pointed every page at the homepage
Partner application form (/partners/register) renders again: it had crashed since June
Hero and CTA banner sections render nothing instead of crashing when CMS content is missing
Legacy platform, industry and partner sub-pages now redirect to /platform, /features and /partners
Template /pricing page redirects to /packages; /careers redirects to /company/careers
www.fandemiq.net redirects to fandemiq.net instead of serving a duplicate site
Contact page banner no longer promises a free trial or links to a missing demo page
Added /llms.txt, richer Organization schema and FAQPage schema on the contact page
Sitemap drops the dead URLs and adds /features and /packages
The old on-site blog redirects to /news, where the real Substack articles live, and leaves the footer
v0.7.1
The phone number that never rang
The contact page listed a London phone number from the range Ofcom keeps for TV and film scripts, so it never connected to anyone, and the page told people with urgent questions to call it. It's gone. Email is now the way to reach us, including for anything urgent.
Removed the phone card and its tel: link from the contact page
The "How quickly will I hear back?" answer now says to email hello@fandemiq.net with URGENT in the subject line, instead of calling
Test added so the contact page can never offer a phone number again by accident
v0.7.0
The data protection brief catches up with the platform
The brief now describes the platform as it is after this week's privacy release, and it has moved from /legal/gdpr to /legal/data-protection (the old address redirects). Four of the six gaps it used to confess have been closed and are described as they now work; a new section explains how the consent screen changes with where a fan is standing; and it now says plainly where FANDEMiQ is a controller in its own right.
Renamed /legal/gdpr to /legal/data-protection with a permanent redirect; navigation, breadcrumb and sitemap updated
Two new public pages the brief refers to: /legal/sub-processors (the register, with transfer mechanism per provider and a dated change log) and /legal/retention-schedule (published in advance, as the Illinois biometric statute requires)
New section: the consent screen changes with where the fan is (age floors by jurisdiction, EU AI notice, Illinois release, Texas/Washington consent, location opt-in, strictest-set fallback)
Closed gaps removed from the roadmap: IP-address location guessing, automated retention, evidence for anonymous consent, the mood-inference switch
Faces and AI: mood inference described as on by default and switched off by policy for EU/EEA, staff/student audiences, unknown locations; face analysis off for China, Russia, Vietnam
Consent: exact wording now stored, not just fingerprinted; anonymous participation evidenced against the content
Sub-processors: IP geolocation service removed (resolved in-platform), Azure Video Indexer added, Resend metadata location and Google Maps heatmap use stated; 30-day change notice
Roles: FANDEMiQ declared controller for security, product improvement and anonymised cross-client benchmarking
Formal details: lawful bases per purpose, 24-hour breach notice commitment, complaints acknowledged within 30 days
v0.6.2
Everything now called the same thing
Finishing what 0.6.1 started. The Vercel project has been renamed to match the repository, so the site is called fandemiq-website everywhere instead of answering to two names depending on which dashboard you were looking at. No change to the site itself.
Renamed the Vercel project from fandemiq-redesign to fandemiq-website
Added fandemiq-website.vercel.app; the old fandemiq-redesign.vercel.app still resolves so nothing bookmarked breaks
Updated the project name in README, CLAUDE.md and .env.example
v0.6.1
Housekeeping
No visible changes. The repository was renamed to fandemiq-website — the old name was doing a good job of pointing everyone at the wrong codebase — and a dead environment-validation helper that listed a variable the site no longer uses has been removed, now that .env.example documents the real list.
Removed the unused lib/env.ts helper and its stale JWT_SECRET reference
Repository renamed from fandemiq-redesign to fandemiq-website
v0.6.0
A data protection brief worth reading
The GDPR page was boilerplate — the kind every site has and nobody reads. It has been replaced with a proper data protection brief written for the person filling in a vendor assessment: what we collect from fans, how consent is actually recorded, exactly what our face analysis does and does not do, which sub-processors see what and where, and — the unusual bit — a straight list of the things we cannot do yet.
Replaced /legal/gdpr with the "How we handle fan data" brief
Added a sticky contents index and a sub-processor table showing provider, data, region and whether it is core or optional
Status tags throughout mark what is in place, what is your configuration decision, and what is still a gap
Kept the statutory details — company registration, lawful bases, transfer mechanisms and the ICO complaint route — in a formal section at the end
Retired the old GDPR statement constant
Added .env.example and a real README so a fresh clone can be set up without guesswork
v0.5.1
Privacy-friendly analytics
Added Plausible analytics so we can see traffic and which pages land — cookieless, no personal data, and it only runs on the public site, not the admin.
Added the Plausible tracking script to all public pages
Excluded the Payload admin from analytics
v0.5.0
Subscribe on the news page
You can now subscribe to the FANDEMiQ Substack newsletter directly from the News page — no detour to Substack required. Enter your email, hit Subscribe Now, and Substack sends a confirmation. The form is a proper server-side proxy so your email never passes through the browser.
Added Substack subscribe form at the bottom of the News page
Server Action proxies the subscription to Substack's API — no client-side API keys exposed
Success and error states with inline feedback
Email validated before hitting Substack
v0.4.9
News feed stops double-buffering
New Substack posts were taking up to 20 minutes to appear on the News page because two independent 10-minute caches were stacked on top of each other. Now there's a single cache layer, so the worst-case wait is a predictable 10 minutes.
Removed redundant fetch-level cache from Substack RSS fetcher — unstable_cache already covers it
New posts now appear within 10 minutes of publishing instead of up to 20
v0.4.8
Deterministic database migrations
Behind the scenes, the site no longer lets the database “auto-sync” its shape on the fly in production — the very thing that quietly lost the contact form’s storage table. Schema changes are now explicit, reviewable migration files that apply on every deploy, so a missing table can’t slip through silently again.
Disabled Payload push (auto schema sync) in production; dev still uses it
Added a committed baseline migration plus a migrate-on-deploy build step
Added db:migrate / db:migrate:status / db:migrate:create scripts and docs
v0.4.7
Enquiries logged again + a tidy-up
While fixing the contact form we found its admin storage table had never been created in production, so enquiries were only ever emailed, never saved. That’s now restored — every submission is logged in the admin again. Also swept out some stale logo files and stopped stray downloads cluttering the repo.
Restored the contact-submissions table so enquiries are saved in the admin, not just emailed
Removed unused legacy logo and favicon assets
Stopped local staging files and marketing exports from showing up as repo changes
v0.4.6
Contact form fixed
The contact form had quietly stopped emailing us — the Resend API key behind it had expired, so every enquiry failed to send (though it was still saved in the admin). Swapped in a fresh key and tidied up a wrong-domain email address while we were in there.
Replaced the expired Resend API key so contact-form emails send again
Fixed the public contact email from .com to .net (it pointed at a domain we don’t use)
Corrected the privacy-policy contact address to privacy@fandemiq.net
Hardened env fallbacks so a blank key can’t silently break the form in future
v0.4.5
Sharper Newsroom heading
Retitled the news page hero to “News & Insights” with a short, punchy subtitle in place of the long descriptor line.
News hero heading changed to “News & Insights”
Subtitle shortened to “The latest from FANDEMiQ”
v0.4.4
Cleaner news cards
Removed the source badge from the news cards — it was repetitive when everything came from the same place. The “Read on …” link on the featured story still tells you where each post lives.
Removed the source badge (e.g. the orange “Substack” pill) from news cards
v0.4.3
Now you can see what you’re looking at
Added a visible version number in the site footer so you can tell at a glance whether you’re looking at the freshly deployed site or a cached old one. Click the version to see the full changelog.
Footer now shows the app name and current version (e.g. FANDEMiQ v0.4.3)
Version number links to this changelog page
New /changelog page listing every release, newest first
v0.4.2
Heroes that behave themselves
The blog and news page headers were doing their own thing — a fixed-height banner with floating shapes that overlapped the navigation. They now use the same tidy hero as the rest of the site.
Blog and news heroes adopt the standard site-wide hero pattern
Removed the floating decorative shapes and fixed 240px height
Consistent spacing below the header on every screen size
v0.4.1
No more headline pile-ups
On phones and tablets the big page headlines were sliding up under the fixed header. Fixed the spacing so titles always sit comfortably below the navigation.
Fixed hero/header overlap on mobile and tablet
Made hero headlines responsive (smaller on phones, full size on desktop)
v0.4.0
Introducing the Newsroom
A brand-new News page that pulls posts straight from our Substack and lets the team feature articles from LinkedIn, the press and anywhere else worth sharing — all in one magazine-style feed.
New /news page combining Substack posts and curated external articles
Substack posts pulled in automatically from the RSS feed
Admins can add curated posts via the new “News Items” collection
Source badges, source filtering and a featured story
News added to the main navigation, footer and sitemap