Week 14 (2026-03-27 → )

2026-04-02

feat: CAPTCHA (Cloudflare Turnstile) for anonymous deploys

  • Anonymous deploy endpoint (POST /api/agent/deploy) now verifies a Turnstile token when TURNSTILE_SECRET_KEY is set
  • Frontend renders an invisible Turnstile widget in the Agentize button section; button is disabled until token is issued
  • Env-var guarded: both keys optional — CAPTCHA is skipped entirely in dev when vars are unset
  • New env vars: NEXT_PUBLIC_TURNSTILE_SITE_KEY (public), TURNSTILE_SECRET_KEY (server-only)

feat: /about page

  • Static About page at /about covering what w2agent builds, the problem it solves, capabilities (audit/deploy/discover/integrate), open standards (MCP, A2A), and contact info

feat: /privacy page

  • Static Privacy Policy page at /privacy covering data collection, sub-processors (Clerk, Vercel, Neon, Sentry, Spider.cloud), retention, cookies, and user rights

feat: /contact page

fix: custom 404 page

  • app/[locale]/not-found.tsx: renders within locale layout (SiteHeader + SiteFooter), shows "Page not found" with "Go home" link
  • app/[locale]/[...rest]/page.tsx: catch-all route that calls notFound() so all unmatched locale paths use the branded 404

feat: /terms page

  • Static Terms of Service page at /terms covering acceptance, acceptable use, API usage limits, data ownership, service availability, limitation of liability, and changes to terms

perf: audit scoring uses spider.cloud JS-rendered HTML (no double-crawl)

  • Audit scoring now uses JS-rendered HTML already fetched during deploy when CRAWL_BACKEND=spider-cloud — no second crawl
  • Pre-fetched pages (rawPages: FetchedPage[]) and site metadata passed from deploy after() → runSiteAudit() → runAudit(), eliminating redundant HTTP requests
  • Graceful fallback: when prefetched is absent (submit, register, re-audit callers), runAudit() falls through to normal crawlSite() path unchanged

feat: per-page hreflang tags

  • Middleware now forwards x-pathname request header on every response
  • Root layout generateMetadata reads x-pathname to compute page-specific canonical and hreflang URLs
  • All pages now emit <link rel="alternate" hreflang="en|zh|x-default"> pointing to the correct path (not hardcoded homepage)
  • Added canonical tag; x-default points to English locale

2026-04-02

  • Breadcrumb navigation + BreadcrumbList schema: Added visible breadcrumbs to all 30 inner pages. Pages with 3+ hierarchy levels (18 pages: learn articles, platform guides, directory/categories, sites/[slug], audit/[id], leaderboard/[domain]) also include BreadcrumbList JSON-LD for Google rich snippets.

feat: YAML adapter agents — 10 adapters, sync script, route fallbacks

  • Added resolveAgent(slug) helper in lib/agent-adapter.ts: DB → YAML → null cascade used by all agent route handlers
  • GET /api/agent/[slug]/agent-card and GET /api/agent/[slug]/server-json now resolve adapter agents directly from YAML (no DB row required)
  • Fixed Vercel function bundling: outputFileTracingIncludes in next.config.ts ensures data/adapters/*.yaml files are included in function output
  • New scripts/sync-adapters.ts: scans data/adapters/*.yaml, validates, upserts into DB. --dry-run flag validates without DB writes. Package scripts: sync:adapters, sync:adapters:prod, sync:adapters:dry
  • Removed hardcoded adapter entries from data/seed/third-party.ts; sync script replaces them
  • Added 8 new adapter YAMLs (21 new tools total): pokeapi (3), restcountries (3), openlibrary (3), coingecko (3), openmeteo (2), github-api (3), dictionaryapi (1), openbrewerydb (3)
  • Added data/adapters/README.md — contributor guide with YAML schema, field reference, and submission instructions

fix: Verified production directory shows agents (no code change needed)

  • Diagnosed "0 verified agents" report from SEO audit: production /directory renders 207 agent links and /api/v0/servers returns 1,171 total agents
  • Root cause of original report: ISR cache (revalidate = 300) had cached a stale empty result during a transient DB outage — subsequent revalidation resolved it automatically
  • No code change required; docs/TODO.md item marked done

SEO: internal link anchor text + cross-linking

  • Updated nav/footer/homepage anchor text to keyword-rich phrases (AI Readiness Audit, AI Agent Directory, AI Adoption Trends, AI Readiness Leaderboard, etc.)
  • Added Related Articles sections to all 8 learn article pages for topic clustering
Changelog — Week 14 (2026-03-27 → ) | w2agent