1import{j as e,L as s}from"./index-tL3yZWrw.js";const i="2026.08.2",r=[{version:"2026.08.2",date:"2026-08-24",title:"Commerce detected from real selling signals, split into transactional and catalogue",notes:["Commerce is now detected from actual selling signals â structured pricing data, payment providers such as Stripe or Paddle, and checkout/pricing routes â instead of only Shopify and WooCommerce fingerprints.","Sites that sell are split into transactional (SaaS, digital plans) and catalogue (storefronts); each is scored against the checks that genuinely apply, so a three-plan SaaS is no longer judged against product-catalogue standards.","Added M4 Machine-readable pricing: does your pricing page publish schema.org Offer / AggregateOffer JSON-LD with price, currency and billing period?","UCP and x402 remain bonus-only for transactional sites and can never cost points."]},{version:"2026.08.1",date:"2026-08-24",title:"Standards-cited rubric with essential/recommended/bonus tiering",notes:["Every graded check now cites the RFC or published specification it measures, and checks without a citation can no longer cost you points.","Checks are split into essential, recommended and bonus tiers â bonus checks (emerging standards) can only add points, never subtract them.","Added the checks adopted from the standards baseline: correct 404 handling, machine-readable API description, heading hierarchy and server-rendered text, HTTPS and canonical host, and content feeds.","Markdown content negotiation and Agent Skills discovery are now graded as separate sub-signals instead of one combined check.","Not-applicable checks (for example commerce checks on a non-commerce site) are excluded from the weighting rather than scored as zero."]},{version:"legacy",date:"2026-06-08",title:"Pre-versioning rubric",notes:["Scans recorded before AIScan started stamping a rubric version. Their scores are not directly comparable with current results."]}],o=[{version:"3.12.1",date:"September 22, 2026",title:"Developer quick starts now show the current interfaces",items:[{tag:"fixed",text:"The developer guide now leads with the current zero-install c
1ommand, `npx aiscan-cli example.com`, and identifies /api/public/v1/scan as the stable REST endpoint."},{tag:"fixed",text:"REST examples in cURL, JavaScript and Python now use the stable v1 endpoint; the original unversioned endpoint is labelled as compatibility-only."},{tag:"improved",text:"MCP setup now leads with the OAuth endpoint at https://aiscan.site/mcp and keeps /api/mcp clearly labelled for legacy API-key clients."}]},{version:"3.12.0",date:"September 8, 2026",title:"Scan and domain reports are visible again",items:[{tag:"fixed",text:"Every report rendered blank below its heading. The report body is wrapped in a Framer Motion element whose initial={{opacity:0}} is server-rendered as an inline opacity:0 style, so the fully laid-out content â 5,800 to 8,700 pixels of it â was painted invisible whenever Motion did not run the entrance animation. Server-rendered content no longer depends on JavaScript to become visible, on the report wrapper, all 245 check rows, the agent-prompt block, the comparison table and the homepage feature cards."},{tag:"improved",text:"Entrance animations were removed from server-rendered blocks rather than made conditional. The homepage hero already carried a note explaining why it has no entry animation; the same reasoning now applies everywhere content arrives in the HTML."}]},{version:"3.11.0",date:"September 8, 2026",title:"Domain pages no longer go blank below the heading",items:[{tag:"fixed",text:"Scan-history timestamps were formatted with toLocaleString() and no pinned locale or time zone, so the server (UTC) and the browser produced different text â â6 Septâ against â7 Septâ for a reader in UTC+4. React treats that as a corrupted tree, raises hydration error #418, and discards the entire server-rendered subtree: the heading survived and the whole report below it went blank. Timestamps are now pinned to UTC and labelled UTC, on /site/ and /scan/ alike."},{tag:"fixed",text:"Relative timestamps (â4m agoâ) were server-rendered into HTML that is cached for minutes, so the server wrote â4m agoâ and a browser hydrating that cached document later computed â9m agoâ â the same hydration failure, on /scans, the homepage feed and /r/. They now render a fixed date on the server and switch to relative time after mount, which also means a crawler reading a cached page sees a real date instead of a stale â4m agoâ."},{tag:"fixed",text:"Homepage stat counters formatted their numbers the same unpinned way, which could break hydration for anyone whose browser groups digits differently from the server."},{tag:"improved",text:"The homepage feed is now sorted purely by scan time, newest first, one row per site. It previously interleaved a spread of high, middle and low scores after the first five rows, which put two-day-old scans directly under four-minute-old ones and never matched /scans."},{tag:"improved",text:"Removed the short scan-ID badge from each row of the public scans directory. It stays inside a siteâs expanded history, where it distinguishes one scan from another."}]},{version:"3.10.1",date:"September 7, 2026",title:"Homepage âImproved with AIScanâ no longer loads forever",items:[{tag:"fixed",text:"The Improved with AIScan section on the homepage sat on âLoading verified improvementsâ¦â indefinitely. It was the last block on the page still fetching only from the browser, and its server function returns 500 over HTTP while working correctly in-process â the /improved page, which server-renders the same data, was never affected. The homepage loader now prefetches it, so the rows are in the served HTML."},{tag:"fixed",text:"That section now says when it failed instead of showing a loading message that never ends."}]},{version:"3.10.0",date:"September 7, 2026",title:"Domain pages load instantly and stop de-indexing themselves",items:[{tag:"fixed",text:'Every /site/<domain> page briefly replaced its own report with a "no public scan yet" empty state â wrong title, wrong canonical, and a noindex tag â on every single page view. The route treated "loader still running" as "there is no scan"; only a resolved miss does that now. The same conflation is fixed on /scan/$id and /blog/$slug.'},{tag:"fixed",text:"The /site/<domain> query refetched on arrival for every visitor because its 60s staleTime was shorter than the TTL of the cached HTML it hydrates from. Both now read the same constant, so hydration resolves from the data already in the page."},{tag:"improved",text:"stale-while-revalidate is now actually implemented. Cached pages were hard-expired at their TTL despite the header promising a stale window, so /site/ pages measured a cache MISS on 12 of 12 sampled domains and every click paid a full render. A stale page is now served immediately and re-rendered behind the response."},{tag:"improved",text:"Per-domain pages cache for 15 minutes instead of 5."},{tag:"fixed",text:"Concurrent requests for the same uncached page now share a single render instead of each starting their own, and a request that arrives while a render is already running gets a slightly stale c
1opy rather than queueing behind it â age-limited, so a slow render cannot quietly serve a page past its stale window."},{tag:"fixed",text:"Bounded how long a stale page can be served. This runtime cancels a render dispatched behind a response, so a stale page was never actually refreshed in the background â mutable pages now re-render on the first request past a 60s grace window instead, and the stampede guard expires on its own rather than wedging when a cancelled task never finishes."},{tag:"improved",text:"Building a domain page no longer loads the full report JSON for up to 50 historical scans when only the newest one is rendered."}]},{version:"3.9.4",date:"September 6, 2026",title:"Homepage community stats survive without JavaScript",items:[{tag:"fixed",text:"Homepage Total scans / Avg score / Not AI-ready and the first curated rows are server-rendered via the home loader + curatedFeedQuery, so Safari (and any client where the feed fetch never runs) no longer shows permanent grey placeholders."},{tag:"improved",text:'If the feed is slow or errors, StatCell shows "Live stats unavailable" after a few seconds instead of an endless shimmer. Live polling every 30s still updates after hydration.'},{tag:"improved",text:"Home loader caps the feed prefetch at ~1.5s so a slow DB round-trip cannot dominate homepage TTFB on a cache miss."}]},{version:"3.9.3",date:"September 2, 2026",title:"Telegram links that actually open Telegram",items:[{tag:"fixed",text:"Telegram links now navigate in the same tab on phones, so iOS and Android hand off straight to the Telegram app instead of a dead-end browser tab. Desktop still opens a new tab."},{tag:"new",text:"Opening the Telegram link from a report page pre-fills that site: the bot scans it as soon as you tap Start."}]},{version:"3.9.2",date:"September 2, 2026",title:"Leaner scan reports",items:[{tag:"improved",text:'The "fix automatically with AIScan" instructions and the generic "verify" line now appear once per report, near the roll-up, instead of being repeated inside every failing check.'},{tag:"improved",text:"The hoisted block is derived from your scan: it names the open checks and the copyable commands carry your own URL. A 100/100 report doesn't show it at all."},{tag:"improved",text:"Per-check fix guides now contain only steps specific to that check. Check-specific verification commands (like the 404 probe) are kept."},{tag:"fixed",text:"Agent surfaces are unchanged â the REST API, MCP `get_fixes` and the CLI `--fix` prompt still return complete, self-contained instructions per check."}]},{version:"3.9.1",date:"September 1, 2026",title:"CLI telemetry and Telegram discovery",items:[{tag:"fixed",text:"The AIScan CLI now sends an identifying User-Agent (`aiscan-cli/<version>`) so telemetry can distinguish CLI scans from raw API calls."},{tag:"improved",text:"A Telegram bot banner now appears at the end of every scan report, making it easy to re-run or share a scan from a phone."}]},{version:"3.9.0",date:"August 28, 2026",title:"Use-case directory: 40 business stories, redesigned hub",items:[{tag:"new",text:"22 new business stories â garages, builders, cleaners, salons, vets, therapists, fashion and electronics retailers, makers, car dealers, estate agents, brokers, recruiters, travel operators, takeaways, photographers, event planners, venues, course creators, schools, charities and web studios."},{tag:"new",text:"Three new industry categories: Health & wellness, Creative & events, and Learning & community â nine in total, each with its own filter and description."},{tag:"improved",text:"The use-case hub has a new hero with live counts, numbered entry points, and the search and industry filter moved into a sticky right-hand rail."},{tag:"improved",text:"Playbook and story pages now open with a proper header card, and every story shows the checks that decide it up front."}]},{version:"3.8.2",date:"August 28, 2026",title:"Free llms.txt Generator, surfaced properly",items:[{tag:"improved",text:"The free llms.txt Generator is now named clearly in the Resources menu, listed in the server-rendered footer, and announced in /llms.txt â so people and agents can actually find it."},{tag:"improved",text:"Failing the llms.txt check now links straight to the generator. On WordPress, ThinkRank generating the file automatically stays the first recommendation, with the generator as the no-plugin fallback."},{tag:"fixed",text:"Investigated why pages still say âno-cacheâ in production: our caching policy is correct and applied, but the hosting layer rewrites the header after our code runs. Documented so nobody re-implements it."}]},{version:"3.7.1",date:"August 26, 2026",title:"Checkout hardening and admin access fix",items:[{tag:"fixed",text:"Admin role checks failed for some sessions because the role-check function ran without elevated privileges. It is now a security-definer function with a fixed search path and explicit grants, so admin pages and role-gated endpoints work reliably â and stay closed to everyone else."},{tag:"fixed",text:"The Founder LTD 100-seat cap is now enforced before payment: checkout is refused once the seats are gone or if you already hold a licence, and in the rare race where a payment still lands without a seat it is refunded automatically."},{tag:"improved",text:"Returning customers reuse their existing billing profile at checkout instead of creating a duplicate one, so the billing portal always finds the right subscription."},{tag:"improved",text:"Checkout errors are now shown on the pricing page instead of failing silently."}]},{version:"3.7.0",date:"August 26, 2026",title:"Scan telemetry â measuring the non-web surfaces",items:[{tag:"new",text:"Every scan now records which surface it came from â web, CLI, REST API, MCP, Telegram or the Chrome extension â plus coarse geography, so scans arriving outside the website are finally measurable."},{tag:"new",text:"A new admin dashboard at /admin/scan-telemetry charts scans by surface over time, by country and region, the browser/OS/device split for browser scans, cache hit and error rates, plan mix and the platform mix of scanned sites."},{tag:"improved",text:"Privacy by design: the telemetry table stores n
1o IP addresses, no raw User-Agent strings, no city, no scanned URL and no account, email, session or API-key data. User-Agents are parsed to a coarse browser/OS/device bucket and the original is discarded, so nothing recorded is joinable back to an individual â and no privacy-policy change is required."},{tag:"improved",text:"Telemetry writes are fire-and-forget and admin-only behind row-level security: a failed insert can never slow or break a scan, and the data is never exposed in a report, a public API response, the MCP tools or CLI output."}]},{version:"3.6.0",date:"August 26, 2026",title:"Stable per-domain report URLs",items:[{tag:"new",text:"Every scanned domain now has one canonical, shareable page at /site/example.com showing its latest public scan and full public history. No UUID to paste, and an agent can construct the URL without a lookup."},{tag:"improved",text:"The sitemap now lists one URL per domain instead of one per scan, collapsing 991 near-duplicate report URLs down to the number of distinct domains. Individual /scan/<id> links keep working exactly as before, but are now noindex and canonicalised to their domain page."},{tag:"improved",text:"www., uppercase and IDN variants of a domain redirect to a single canonical form, so one site can never occupy two URLs."},{tag:"improved",text:"Links across the site are prefetched on hover, so navigating between pages is instant â while every page is still fully server-rendered on first load."},{tag:"fixed",text:"Private scans remain private: the domain page only ever reads public scans, and a domain whose only scans are private shows an explicit empty state."}]},{version:"3.5.0",date:"August 26, 2026",title:"Shared render cache and crawler recovery",items:[{tag:"improved",text:"Public rendered pages now use a database-backed shared cache behind the in-memory LRU, so a warm render can be reused across server instances. Response diagnostics distinguish HIT-MEMORY, HIT-SHARED and MISS."},{tag:"fixed",text:"Blog writes, public scan writes and showcase preference changes now invali
1date the affected shared pages automatically."},{tag:"fixed",text:"Malformed agent URLs ending in repeated markdown punctuation now recover across app routes, API routes and the homepage, while genuinely unknown URLs remain real 404s."},{tag:"improved",text:"The public scans table is server-rendered, and the free llms.txt Generator is now discoverable from the header, footer, llms.txt and generic C2 fix guidance."}]},{version:"3.4.0",date:"August 26, 2026",title:"Edge-cached pages",items:[{tag:"improved",text:"Public pages are now served from an in-process render cache instead of re-running data loaders and re-rendering the page on every single request. Warm servers replay stored HTML, cutting repeat page loads to a fraction of a cold render."},{tag:"improved",text:"Cache policy by content type: stored report snapshots (/r/⦠and /scan/â¦) for a day, reference pages (docs, guides, pricing, changelog, about) for an hour, and frequently changing public pages (home, /blog, /scans, /improved) for two minutes."},{tag:"improved",text:"Blog staleness is bounded at two minutes: publishing or editing a post rolls out without a manual purge."},{tag:"fixed",text:"Signed-in surfaces â /profile, /admin, /auth and every API route â are explicitly excluded from caching, and responses carrying credentials or cookies are never stored."}]},{version:"3.3.0",date:"August 26, 2026",title:"Every WordPress SEO plugin gets its own fix guide",items:[{tag:"new",text:"Yoast SEO, All in One SEO and SEOPress now get real per-check fix steps â robots.txt, XML sitemaps, titles/meta, schema and AI bot rules â using each plugin's actual admin menu path. Previously only Rank Math had a dedicated path and everyone else was sent to ThinkRank."},{tag:"improved",text:"Rank Math guidance gained C3 (titles, meta, schema) and B1 (Content Signals) steps."},{tag:"improved",text:"Where a plugin genuinely can't do something â llms.txt, /index.md, .well-known files â the guide says so plainly and gives the manual or WPCode route instead of glossing over it."},{tag:"improved",text:"The ThinkRank section is now appended after the detected plugin's steps, framed as running alongside it, never as a replacement. It is hidden entirely on sites already running ThinkRank, and on checks ThinkRank doesn't fix it is reduced to a single honest line instead of a pitch."}]},{version:"3.2.0",date:"August 26, 2026",title:"One consolidated WordPress fix path",items:[{tag:"new",text:'WordPress reports now show a single "Fix with ThinkRank" roll-up card above the checks. It names the exact failing checks ThinkRank covers (by ID and title, derived from your scan) and states plainly how many remaining issues need a different fix, with links down to them.'},{tag:"new",text:"The card and the fix guides both disclose that ThinkRank is a free WordPress plugin from the team behind AIScan. Every check stays fixable by hand â the manual robots.txt, PHP and WPCode steps are unchanged."},{tag:"improved",text:`The ThinkRank intro no longer repeats inside every failing check's guide; per-check "In ThinkRank â" steps and code snippets are untouched.`},{tag:"new",text:"New ThinkRank fix steps for B1 (Content Signals), M4 (machine-readable pricing on WooCommerce) and a note on Rank Math sites that ThinkRank can generate and keep /llms.txt current alongside Rank Math."}]},{version:"3.1.0",date:"August 24, 2026",title:'Rubric versioning and honest "we changed the rules" alerts',items:[{tag:"new",text:"Every scan now records the exact scoring rubric version that produced it, so a score from June and a score from today are never silently compared as if the rules were the same. Scans from before this change are marked `legacy`."},{tag:"new",text:"Published rubric release notes (see below): each rubric version lists in plain English what was added, removed or reweighted."},{tag:"new",text:"New rubric-change email. When AIScan updates how it grades, monitored sites get a notice that says plainly the site did not regress and the delta came from our rubric â instead of a regression alert."},{tag:"improved",text:"Monitoring now classifies score moves: same rubric behaves exactly as before (alerts, digests, grade celebrations); a different rubric with a score move sends the rubric notice only;
1 a different rubric with no score move sends nothing."}]},{version:"3.0.0",date:"August 24, 2026",title:"Plans, metering and AIScan Pro",items:[{tag:"new",text:"Four-tier plan ladder: Guest (3 lifetime public scans), Free (20 scans/month, 1 watched site, weekly monitoring), Pro ($12/mo or $99/yr â 250 scans, 10 watched sites, daily checks, alerts, exports, 2,000 MCP/API calls) and a Founder lifetime deal ($129 once, hard-capped at the first 100 licences)."},{tag:"new",text:"New /pricing page with monthly/annual toggle, live Founder seat counter, honest competitor price benchmarks and explicit lifetime-deal scope."},{tag:"new",text:"Plan & usage card on /profile showing scans, watched sites and MCP/API calls used this month against your allowance, with contextual upgrade prompts."},{tag:"new",text:"Server-side metering: monthly usage counters, a founder_licenses table with a 100-seat cap enforced in the database, and quota checks on the web scan endpoint, the public API and watched-site limits."},{tag:"improved",text:"Watched-site limits and daily monitoring are now enforced per plan instead of per admin flag, and /docs/plans documents every allowance."}]},{version:"2.9.1",date:"August 24, 2026",title:"Docs coverage for the new checks and plan limits",items:[{tag:"new",text:"New docs page /docs/plans documenting exactly what anonymous, free registered and Pro accounts get: scan limits, report visibility, Pro-only per-page scans, monitoring, rate limits and the RFC 9457 problem responses a gated call returns."},{tag:"new",text:"Checks reference now documents E1 (correct 404 handling), E2 (machine-readable API description), E3 (heading hierarchy & server-rendered text), E4 (HTTPS & canonical host) and E5 (content feed) â what we probe, how points are split, and when a check is marked not applicable."},{tag:"improved",text:"Step-by-step fix guides added for E1âE5, so every one of the checks adopted from the Is Agentic benchmark now ships remediation instead of a one-line summary."}]},{version:"2.9.0",date:"August 24, 2026",title:"AIScan CLI â npx aiscan-cli",items:[{tag:"new",text:"Zero-dependency CLI: run `npx aiscan-cli example.com` to get the full report in your terminal â score, dimension bars, every failing check with the evidence we observed and the fix."}
1,{tag:"new",text:"CI gates: --min-score and --fail-on essential|any set the exit code, so a build can fail when agent readiness regresses. --md writes a Markdown summary straight into a PR comment or GitHub step summary."},{tag:"new",text:"--fix prints a copy-paste prompt for Claude Code or Cursor containing every failing check, the observed evidence, the required outcome and the re-verify command."},{tag:"new",text:"Per-page scans from the CLI with --page for Pro accounts; the public API now accepts scope=page and returns a clear 403 instead of silently downgrading to a site scan."},{tag:"new",text:"No-npm fallback: curl -fsSL https://aiscan.site/cli.mjs | node - example.com."},{tag:"new",text:"New CLI docs at /docs/cli and a root CLAUDE.md describing every feature and surface for AI coding agents working on the project."}]},{version:"2.8.0",date:"July 6, 2026",title:"Evidence-backed scoring & the comparison sheet",items:[{tag:"new",text:"Every check now cites the published standard it is measured against (RFC 9309, RFC 9457, RFC 9727, sitemaps.org, schema.org, MCP and more), linked directly from the expanded result and exposed as check.specs in the API."},{tag:"new",text:"New check E4 â HTTPS & canonical host: verifies TLS, the httpâhttps upgrade, www/apex canonicalisation and HSTS, so agents never index two copies of a site."},{tag:"new",text:"New check E5 â content feed: detects a declared RSS, Atom or JSON Feed, and marks itself not-applicable with a reason on sites that publish no periodical content."},{tag:"new",text:"Homepage 'How AIScan compares' sheet benchmarking us against Vercel's Is Agentic, with every row limited to publicly shipped features and linked to our methodology."},{tag:"improved",text:"Not-applicable checks now explain in plain language why they were excluded instead of silently disappearing from the score."},{tag:"improved",text:"Scoring docs expanded with the essential/recommended/bonus tier definitions, how evidence and citations work, and an explicit limitations section."}]},{version:"2.7.0",date:"July 5, 2026",title:"Developer surface hardening & tiered scoring",items:[{tag:"new",text:"Stable versioned API: GET/POST /api/public/v1/scan and GET /api/public/v1/report/{id}. The v1 contract is additive-only â fields are never removed or renamed."},{tag:"new",text:'OpenAPI 3.1 description published at /openapi.json, advertised from every v
11 response via a Link: rel="service-desc" header and from the RFC 9727 API catalog.'},{tag:"new",text:"All v1 errors are now RFC 9457 application/problem+json documents with stable type URIs (invalid-url, missing-parameter, not-found, rate-limited, method-not-allowed, scan-failed)."},{tag:"new",text:"New /developers guide documenting endpoints, authentication, rate limits, error format, and a written versioning + 180-day deprecation policy."},{tag:"new",text:"New /about page: who builds AIScan, how the rubric is versioned, and what an HTTP-only scanner deliberately does not measure."},{tag:"new",text:"Three new checks â E1 correct 404 handling (catches soft 404s), E2 machine-readable API description, E3 heading hierarchy & server-rendered text."},{tag:"new",text:"Every check is now tiered essential / recommended / bonus, shown as a badge in the report and exposed as check.tier in the API."},{tag:"new",text:"Reports include a 'How this score is calculated' panel breaking down essential vs recommended points, bonus signals earned, and which checks were not counted."},{tag:"new",text:"Published /server.json (MCP registry manifest) and /.well-known/ai-catalog.json; expanded /.well-known/api-catalog with service-desc, service-doc, service-meta and status-page links."},{tag:"improved",text:"404 pages now return a recovery body linking the homepage, docs, developer guide, blog, sitemap.xml, llms.txt and openapi.json."},{tag:"improved",text:"Homepage JSON-LD upgraded to a @graph with WebSite, Organization and SoftwareApplication entities."},{tag:"improved",text:"llms.txt now opens with explicit 'When to use AIScan' guidance and lists every developer surface."}]},{version:"2.6.0",date:"July 5, 2026",title:"Scan designation, cleaner header",items:[{tag:"new",text:"Every scan row across the community feed, /scans, /profile, and scan history now carries a short scan ID chip (#abc12345) so you can reference a specific scan unambiguously."},{tag:"fixed",text:"Header logo no longer exposes a ?reset=1 query string in the URL â clicking the logo on the homepage silently resets the form via a client-side event."},{tag:"fixed",text:"Removed duplicate extension CTA on the homepage â the header 'Get extension' pill is now hidden on / where the larger install banner already appears."}]},{version:"2.5.0",date:"July 5, 2026",title:"Private-by-default visibility",items:[{tag:"new",text:"Authenticated scans are now private by default across every channel â web, Chrome extension, REST API, MCP, Telegram bot, and scheduled scans."},{tag:"new",text:"New 'Default scan visibility' toggle on /profile â one setting all channels read."},{tag:"new",text:"REST API and MCP now accept an isPublic override per call (query string on GET, JSON body on POST)."},{tag:"improved",text:"Anonymous scans remain public (required for shareable /scan/[id] URLs); a scans_public_or_owned DB constraint enforces this at the row level."},{tag:"improved",text:"Rescans from /scan/[id] respect the owner's default visibility instead of forcing public."},{tag:"improved",text:"REST API docs updated to document the new default and override parameters."}]},{version:"2.4.0",date:"July 5, 2026",title:"Sign-up CTA everywhere",items:[{tag:"new",text:"Every scan surface now shows a 'Create a free account' prompt after a scan completes â homepage, /scan/[id], Chrome extension popup, MCP tool responses, and Telegram bot messages."},{tag:"new",text:"Telegram free daily limit raised to 5 scans/day for anonymous chats; linked accounts get 100/day."},{tag:"improved",text:"Signed-in / linked users don't see the CTA â the prompt is scoped to unauthenticated sessions only."}]},{version:"2.3.0",date:"July 4, 2026",title:"Telegram bot",items:[{tag:"new",text:"@AISiteScanBot on Telegram â scan any URL from a Telegram chat and get a full breakdown with top fixes."},{tag:"new",text:"Link your Telegram chat to your AIScan account (from /scan/[id] or /profile) so bot scans save to your history."},{tag:"new",text:"BotFather description artwork (640x360) matching the AI/scan branding."},{tag:"new",text:"'Chat with the Telegram bot' card on every scan report page and a pill CTA on the homepage."}]},{version:"2.2.1",date:"June 28, 2026",title:"Blog, monitoring, emails",items:[{tag:"new",text:"Full blog at /blog with server-rendered markdown, cover images, OG cards, and RSS-friendly per-post .md endpoints."},{tag:"new",text:"Admin blog editor at /admin/blog â draft, publish, upload cover images, and edit rich content."},{tag:"new",text:"Monitored sites â track any domain from a scan page or /profile and get a scheduled re-scan (daily or weekly) with grade-change alerts."},{tag:"new",text:"Cron endpoint /api/public/hooks/run-scheduled-scans to run monitored-site scans in the background."},{tag:"new",text:"Transactional email pipeline: welcome, magic-link, signup, contact confirmation, grade-improvement, score-alert, reengagement, daily/weekly digest, and unsubscribe flow."},{tag:"new",text:"Contact form at /contact with confirmation + notification emails."},{tag:"new",text:"Signup notifications so admins get a ping whenever a new account is created."}]},{version:"2.2.0",date:"June 25, 2026",title:"Polish & Performance",items:[{tag:"fixed",text:"Admin panel access restored â EXECUTE grant on has_role and SELECT grant on user_roles."},{tag:"new",text:"Scan cache transparency â cached results now show a badge with timestamp and a one-click Re-scan for fresh data button."},{tag:"new",text:"Force a fresh scan with ?fresh=1 to bypass the 5-minute result cache."},{tag:"fixed",text:"Homepage community feed properly deduplicates domains â each site appears only once."},{tag:"new",text:"missiondeck.ai hit 100/100 via xCloud nginx Link header configuration."},{tag:"improved",text:"Chrome Web Store listing description rewritten to remove keyword spam and resubmitted."},{tag:"fixed",text:"Logo navigation restored to client-side SPA routing â instant home, no more full page reload."}]},{version:"2.1.0",date:"June 24, 2026",title:"llms.txt Generator & SEO",items:[{tag:"new",text:"/llms-txt-generator â free tool to build a standards-compl
1iant llms.txt file with live preview, copy, and download."},{tag:"new",text:"Google Search Console verification meta tag for aiscan.site."},{tag:"improved",text:"Sitemap now includes every /docs page, /extension, /changelog, and the new /llms-txt-generator route."},{tag:"improved",text:"/llms.txt and /llms-full.txt updated to advertise docs, the Chrome extension, and the llms.txt generator."},{tag:"fixed",text:"Scan report header â site favicon and domain are now the hero; duplicate dimension breakdown removed; gauge arc fully closes at 100/100."},{tag:"fixed",text:"Hardened SECURITY DEFINER database helpers and upgraded @tanstack/react-start to patch undici advisories."}]},{version:"2.0.0",date:"June 24, 2026",title:"Chrome Extension",items:[{tag:"new",text:"AIScan Chrome Extension published on the Chrome Web Store â scan any site without leaving your browser."},{tag:"new",text:"Extension popup with score, grade, 5-dimension breakdown, top fixes, and View full report link."},{tag:"new",text:"API key authentication in the extension â connect your account for scan history."},{tag:"new",text:"Smart install banner on the homepage for Chrome users (auto-hides when extension is installed)."},{tag:"new",text:"/extension page with Chrome Web Store link, feature highlights, and popup screenshot."}]},{version:"1.1.10",date:"June 24, 2026",title:"Documentation",items:[{tag:"new",text:"Full /docs section â 20 pages covering Getting Started, Scoring, all 5 check dimensions, 5 platform guides (WordPress, Shopify, Lovable, Replit, Next.js), REST API, MCP, Agent Skills, API Keys, and Chrome Extension."},{tag:"new",text:"Docs link in the site header and footer."},{tag:"improved",text:"Footer redesigned as a clean 4-column layout (Product, Legal, For Agents, copyright bar)."}]},{version:"1.1.9",date:"June 24, 2026",title:"Performance & UX",items:[{tag:"new",text:"React Query caching â admin, profile, and shared report pages load instantly on revisit."},{tag:"new",text:"Community feed live-updates after each scan and auto-refreshes every 60 seconds."},{tag:"new",text:"Re-test button on every scan card â pre-fills the form and auto-scans."},{tag:"new",text:"Scan limit modal â anonymous users who exhaust free scans see a sign-up prompt."},{tag:"new",text:"3 stat counters above the community feed (sites scanned, avg score, not AI-ready %)."},{tag:"fixed",text:"Logo link forces full page reload for a clean homepage state."},{tag:"fixed",text:"INFO checks excluded from score calculation (informational only, don't affect grade)."},{tag:"fixed",text:"Mobile overflow on homepage, scan result pages, and shared report pages."},{tag:"improved",text:"Lovable platform detection via JS bundle scanning â works on custom domains."}]},{version:"1.1.8",date:"June 23, 2026",title:"Global layout & detection accuracy",items:[{tag:"new",text:"Global site header and footer now appear on every page (scan results, profile, admin, how-it-works, changelog, auth, 404)."},{tag:"fixed",text:"Replit detection now uses attribute-scoped scanning (src/href values) to avoid false positives on body text, while correctly identifying custom-domain Replit sites."},{tag:"fixed",text:"Lovable detection for custom domains â detects via data-lovable-id, lovable-tagger scripts, lovableproject.com references, and meta generator tag."},{tag:"fixed",text:"aiscan.site no longer misidentified as Replit."}]},{version:"1.1.7",date:"June 23, 2026",title:"User accounts & privacy",items:[{tag:"new",text:"User profile page at /profile with full scan history (public + private)."},{tag:"new",text:"Editable display name on profile page."},{tag:"new",text:"Public/private scan toggle on the scan form â private scans only visible to their owner."},{tag:"improved",text:"Logged-out users attempting private scans see a sign-in prompt instead of being silently blocked."},{tag:"new",text:"Header avatar dropdown for logged-in users with Profile, Admin (if applicable), API Keys, and Sign out."}]},{version:"1.1.6",date:"June 23, 2026",title:"API keys & agent authentication",items:[{tag:"new",text:"API key system â generate named keys (ask_â¦) from your profile page."},{tag:"new",text:"MCP and REST API now accept Authorization: Bearer ask_⦠for authenticated scans attributed to your account."},{tag:"improved",text:"All fix guides now lead with AIScan's own tools (Claude skill, MCP, REST API) as the primary fix path before manual steps."},{tag:"new",text:"Platform-specific fix guidance for Lovable and Replit projects."}]},{version:"1.1.5",date:"June 23, 2026",title:"Community scans & public result pages",items:[{tag:"new",text:"Community scan feed on the homepage showing the latest 10 public scans with favicons, scores, and grade badges."},{tag:"new",text:"Browse all public scans at /scans."},{tag:"new",text:"SEO-friendly public scan result pages at /scan/[id] with full OG metadata and canonical URLs."},{tag:"new",text:"Dynamic sitemap includes all public scan result pages."},{tag:"new",text:"Scan results now saved to the database on completion (previously only computed client-side)."}]},{version:"1.1.4",date:"June 23, 2026",title:"Admin panel",items:[{tag:"new",text:"Role-based access system with admin/user roles."},{tag:"new",text:"Admin dashboard at /admin â total scans, registered users, score distribution, top domains, recent scans table, and full user list with role badges."},{tag:"fixed",text:"Admin redirect no longer fires before role is resolved from the database."},{tag:"new",text:"Admin link appears in the header dropdown only for admin accounts."}]},{version:"1.1.3",date:"June 23, 2026",title:"Agent surface polish",items:[{tag:"new",text:"Public REST API now serves a designed HTML docs page at /api/public/scan when opened in a browser, with a try-it form and example curl commands."},{tag:"new",text:"Full favicon + PWA manifest set (16, 32, 180, 192, 512, .ico) so the icon shows in browsers, mobile home screens, and link previews."},{tag:"new",text:"Changelog page (this one) â link in the footer."}]},{version:"1.1.2",date:"June 23, 2026",title:"Smarter detection & cleaner sharing",items:[{tag:"improved",text:"Framework detection now identifies Astro, Next.js, Nuxt, SvelteKit, Remix, Gatsby, Angular, Vue and React â meta-frameworks take priority over generic library matches."},{tag:"new",text:"Server-side report storage with short share URLs â aiscan.site/r/abc12345 instead of a giant base64 hash. Each report has its own OG metadata."},{tag:"fixed",text:"Replaced the brittle hash-based share link with a proper Create-share-link â copy flow."}]},{version:"1.1.1",date:"June 13, 2026",title:"Built for AI agents",items:[{tag:"new",text:"Programmatic scan API at /api/public/scan (GET + POST) with 5 req/min rate limiting per IP."},{tag:"new",text:"MCP server at /api/mcp exposing scan_website, get_fixes, and get_grade tools."},{tag:"new",text:"Agent Skill (aiscan-skill.json) and Claude Code skill (CLAUDE.md) available as one-click downloads."},{tag:"new",text:"Agent integration panel on the homepage with direct copy buttons for the MCP URL and CLAUDE.md."},{tag:"new",text:"Discovery files: llms.txt, /.well-known/api-catalog, /.well-known/mcp/server-card.json, and robots.txt entries that explicitly allow AI crawlers."}]},{version:"1.1.0",date:"June 10, 2026",title:"Better reports, faster fixes",items:[{tag:"new",text:"Quick wins panel surfaces the highest-impact failing checks first."},{tag:"improved",text:"Collapsible check sections grouped by dimension (Discoverability, Content, Bot access, Capabilities, Commerce)."},{tag:"new",text:"Per-check Fix-with-AI prompts that open directly in ChatGPT or Claude with the right context pre-loaded."},{tag:"new",text:"Embeddable score badge at /api/public/badge.svg."},{tag:"improved",text:"Refreshed submit form and site header."}]},{version:"1.0.0",date:"June 9, 2026",title:"Initial release",items:[{tag:"new",text:"AI-readiness scanner covering 25+ checks across discoverability, content, bot access, capabilities, and commerce."},{tag:"new",text:"5-level scoring system (Invisible â Agent-Native) with letter grades AâF."},{tag:"new",text:"Platform detection for WordPress, Shopify, Lovable, Replit, Bolt, Next.js, and more â each with platform-specific remediation."},{tag:"new",text:"Plain-English fix guides with ordered steps and copy-pasteable code."},{tag:"new",text:"Streaming scan progress UI with live per-check updates."},{tag:"new",text:"Shareable HTML reports with print-friendly styles."}]}],d={new:"bg-primary/10 text-primary border-primary/20",improved:"bg-accent/15 text-foreground border-accent/30",fixed:"bg-muted text-muted-foreground border-border"};function l(){return e.jsx("div",{className:"bg-background",children:e.jsxs("main",{className:"mx-auto max-w-3xl px-4 pb-24 pt-10",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-muted-foreground",children:"Changelog"}),e.jsx("h1",{className:"mt-2 font-display text-4xl tracking-tight sm:text-5xl",children:"What's new in AIScan"}),e.jsxs("p",{className:"mt-3 max-w-xl text-muted-foreground",children:["A running log of releases, features, and improvements. Built in public. New here? Start with the"," ",e.jsx(s,{to:"/docs",className:"underline underline-offset-4 hover:text-foreground",children:"docs"}),"; rubric and score changes are explained in ",e.jsx(s,{to:"/docs/scoring",className:"underline underline-offset-4 hover:text-foreground",children:"Scoring & Levels"}),"."]})]}),e.jsx("ol",{className:"relative space-y-12 border-l border-border pl-6 sm:pl-8",children:o.map(t=>e.jsxs("li",{className:"relative",children:[e.jsx("span",{"aria-hidden":"true",className:"absolute -left-[33px] mt-2 grid h-3.5 w-3.5 place-items-center rounded-full border border-border bg-background sm:-left-[37px]",children:e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary"})}),e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsxs("h2",{className:"font-display text-2xl tracking-tight",children:["v",t.version]}),e.jsx("span",{className:"font-mono text-xs uppercase tracking-widest text-muted-foreground",children:t.date})]}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:t.title}),e.jsx("ul",{className:"mt-5 space-y-3",children:t.items.map((a,n)=>e.jsxs("li",{className:"flex items-start gap-3",children:[e.jsx("span",{className:`mt-0.5 shrink-0 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider ${d[a.tag]}`,children:a.tag}),e.jsx("span",{className:"text-sm leading-relaxed text-foreground",children:a.text})]},n))})]},t.version))}),e.jsxs("section",{id:"rubric",className:"mt-20 scroll-mt-24",children:[e.jsx("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-muted-foreground",children:"Scoring rubric"}),e.jsx("h2",{className:"mt-2 font-display text-3xl tracking-tight",children:"Rubric versions"}),e.jsxs("p",{className:"mt-3 max-w-xl text-sm text-muted-foreground",children:["The rubric is the check catalogue, tiering and weights that turn what we observe into a score. Scores are only directly comparable within one rubric version. Current version:"," ",e.jsx("code",{className:"font-mono text-foreground",children:i}),"."]}),e.jsx("div",{className:"mt-8 space-y-8",children:r.map(t=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsxs("h3",{className:"font-mono text-sm font-semibold text-primary",children:["rubric ",t.version]}),e.jsx("span",{className:"font-mono text-xs uppercase tracking-widest text-muted-foreground",children:t.date}),t.version===i&&e.jsx("span",{className:"rounded-full border border-primary/20 bg-primary/10 px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider text-primary",children:"current"})]}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:t.title}),e.jsx("ul",{className:"mt-4 space-y-2",children:t.notes.map((a,n)=>e.jsxs("li",{className:"text-sm leading-relaxed text-foreground",children:["· ",a]},n))})]},t.version))})]}),e.jsxs("div",{className:"mt-16 rounded-xl border border-border bg-card p-6 text-sm text-muted-foreground",children:["Have feedback or a feature request?"," ",e.jsx("a",{href:"https://masifrahman.com",target:"_blank",rel:"noreferrer",className:"font-medium text-foreground underline underline-offset-2",children:"Reach out"}),"."]})]})})}export{l as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.