Changelog
0.3.23 — 2026-04-27
Added
- Per-route SEO —
src/lib/seo/marketing-meta.ts,src/lib/seo/marketing-routes.ts, and routelayout.tsxfiles for majoruse clientmarketing pages (canonical, Open Graph, Twitter, robots index/follow). services/[slug]/layout.tsxandguides/[id]/layout.tsx— dynamic titles/descriptions for category and guide pages.- Playwright —
tests/e2e/public-interactions-and-seo.spec.ts(meta + navbar mobile/desktop checks).
Changed
src/app/sitemap.ts— base URL defaults tofixt.live; added/,/home,/landing,/compare,/changelog,/guides,/coming-soon,/preview-access, and related marketing URLs for discovery.src/app/layout.tsx— Open GraphurlusesNEXT_PUBLIC_APP_URL(was hardcodedfixt.com).src/app/blog/[slug]/page.tsx—generateMetadataincludes canonical URL androbots: { index, follow }.data/public-marketing-paths.json— added/,/landing,/guides,/agent,/fixers/leaderboardfor E2E coverage.- Privacy / Terms / Business — metadata now includes canonical + social fields via
marketingMetadata.
0.3.22 — 2026-04-27
Fixed
scripts/prod-live-qa.mjs— removed insecure default preview password;PREVIEW_PASSWORDis required (match Vercel) beforenpm run qa:prod-livecan unlock Coming Soon on production.
Changed
- Docs —
docs/GO_LIVE_TRACKER.mdnow includes a finish-line runbook (ordered steps) and explains “no new product code” vs dashboard work;docs/FLOW_TREE.mdanddocs/GO_LIVE_STATUS.mdcorrected for preview password / preview-access wording.
0.3.21 — 2026-04-27
Changed
- CI: merged auto Vercel Production deploy on push to
main(.github/workflows/trigger-vercel-production.yml). data/public-marketing-paths.json— removedallow404Provisionalnow that/preview-accessreturns 200 on production; Playwright / k6 /qa:prod-betarequire 200 for that route again.- Docs:
docs/GO_LIVE_TRACKER.md(go-live checklist),docs/GO_LIVE_STATUS.md(preview-access note),docs/CLOUD_CI.md(workflow table).
0.3.20 — 2026-04-27
Changed
/preview-accessis included incrawlExtra,loadTestExtra, andhttpSmokeGetExtraindata/public-marketing-paths.json.allow404Provisional— for listed paths, Playwright, k6, andqa:prod-betatreat 200 or 404 as pass (5xx still fails) so checks stay green if Production has not deployed the route yet. Remove/preview-accessfrom that array after Production serves the page.
0.3.19 — 2026-04-27
Changed
data/public-marketing-paths.json— added/privacy,/termstomarketing(E2E link checks, k6, andqa:prod-betaGET smoke). Crawl/k6 seeds stay/coming-soononly so production smoke does not fail on/preview-accessuntil that route is deployed everywhere.docs/GO_LIVE_ACTION_PLAN.md—PREVIEW_PASSWORDdocumented as required (no default); matches middleware fail-closed behavior.
0.3.18 — 2026-04-26
Added
data/public-marketing-paths.json— single source of truth for public marketing URLs. Used by Playwright E2E (public-marketing-pages.ts), k6 (scripts/k6/smoke-public.jsviaPUBLIC_MARKETING_PATHS_FILEfromrun-k6.mjs), andqa:prod-beta/prod-extended-smoke.mjs(marketing +httpSmokeGetExtrafor coming-soon, login, signup).
0.3.17 — 2026-04-26
Added
tests/e2e/public-marketing-pages.ts— single list of public marketing paths shared bypublic-nav.specandpublic-clicks.spec(includes/galleryin nav load + crawl).
Security
- PostCSS 8.5.10 — direct dev dependency and
overridesso the tree matches the patched version (clears the moderatepostcssnpm audit advisory that nested undernext).
0.3.16 — 2026-04-25
Added
/preview-accesspage — unlock Coming Soon via the samePOST /api/preview-accessflow as/coming-soon(fixes “404 on /preview-access” when users bookmark that path).
0.3.15 — 2026-04-25
Added
go-live-fullroot check — exits with a clear error if not run from the project root (avoidsnpmin wrong folder / System32).scripts/run-go-live.cmdandscripts/run-go-live.ps1— double-click or run fromscripts\tocdto repo root and runnpm run go:live:full.scripts/rebuild-install-go-live.mjs+npm run rebuild:install-go-live— regeneratesinstall-go-live.cjswhengo-live-full.mjschanges.
0.3.14 — 2026-04-25
Added
scripts/install-go-live.cjs+npm run install:go-live— writesgo-live-full.mjsfrom embedded base64 (noraw.githubusercontent.com; works when the repo is private andirmreturns 404). Run aftergit pullor copy this file from the repo in the browser.scripts/windows-sync-go-live.ps1— optional: downloads from public raw GitHub (fails for private repos).
0.3.13 — 2026-04-25
Added
npm run go:live:full— one script:npm ci→db:ping→db:apply-remote→db:verify→vercel:deploy:production(ifVERCEL_TOKEN) →qa:prod-smoke(+ local Playwright when installed). Wrappers:scripts/go-live-full.sh,scripts/go-live-full.ps1. Seedocs/GO_LIVE_ACTION_PLAN.md.db:verify— also checksauth_telemetry,stripe_event_log,client_telemetryafter migration 013.
0.3.12 — 2026-04-24
Added
- Admin observability — migration
013_admin_telemetry.sqladdsauth_telemetry,stripe_event_log, andclient_telemetry(RLS on, no policies; service role only).POST /api/telemetry/authandPOST /api/telemetry/clientrecord client-safe events. Stripe webhook upserts intostripe_event_log. OAuth callback records exchange success/failure. - GET /api/admin/observability/summary — admin-only aggregates (24h counts + recent rows) for auth, Stripe, client beacons, and
agent_operations. - Admin dashboard — "Live observability" panel wiring the summary API.
- Optional custom admin URL — set
NEXT_PUBLIC_ADMIN_PATHto a path segment (e.g.fxt-ops-abc12);next.configrewrites/<segment>/*→/admin/*, sidebar and login useadminHref(),/adminredirects to the custom path when set.robots.txtdisallows both when custom.
0.3.11 — 2026-04-24
Fixed
- Remote DB migrations — if
public.usersalready exists (schema from an earlierdb push/ manual setup) but001_initial_schema.sqlwas never recorded infixt_migrations, the script now backfills that row and skips re-applying 001, avoidingrelation "users" already existsin CI.
0.3.10 — 2026-04-24
Added
npm run db:ping— testsDATABASE_URL(connect +select 1) without printing the password; shows host so you can confirm pooler vs direct.
0.3.9 — 2026-04-24
Changed
- Apply remote DB migrations (GitHub Actions) — when
CI=true, fail immediately ifDATABASE_URLuses Supabase Direct hostdb.*.supabase.co, with instructions to use Connect → Session pooler instead (IPv4). Workflow comment updated.
0.3.7 — 2026-04-24
Fixed
- Remote DB migrations in CI —
scripts/apply-pending-supabase-migrations.mjsresolves the Postgres hostname to IPv4 whenCI=true(orFORCE_DB_IPV4=true) and setsssl.servernameto the original host so TLS still validates. This fixes GitHub Actions failures:connect ENETUNREACHwhen the client was using an AAAA (IPv6) target.
0.3.6 — 2026-04-23
Added
- GitHub Dependabot —
.github/dependabot.ymlfor weekly npm and GitHub Actions update PRs. - GitHub Action: Apply remote DB migrations — manual
workflow_dispatchwithconfirm: APPLY; uses repository secretDATABASE_URLand runsnpm run db:apply-remote(idempotent migrations). docs/GO_LIVE_ACTION_PLAN.md— ordered go-live checklist (secrets, DB, Vercel, smoke, Coming Soon, security).
Changed
- Next.js — patch bump
14.2.21→14.2.35and matchingeslint-config-next(addresses several published advisories in the 14.2 line; runnpm auditafter merges).
0.3.5 — 2026-04-23
Changed
- Vercel Cron —
vercel.jsonschedule is0 8 * * *(once per day at 08:00 UTC). Vercel Hobby only allows one cron invocation per day; the previous hourly schedule (0 * * * *) requires Pro for multiple runs. For more frequent ticks, upgrade Vercel or trigger/api/cron/agents/tickfrom another scheduler (e.g. admin “orchestrator tick”).
0.3.4 — 2026-04-22
Fixed
- Coming Soon + APIs — when
COMING_SOON_MODEis on, all/api/*routes bypass the marketing lock redirect. This fixes RSC “Failed to fetch” and JSON parse errors (HTML from/coming-soon), and lets Vercel Cron reach/api/cron/agents/tickwith 401/503 instead of 307 → /coming-soon. Auth/roles remain enforced in each route handler.
0.3.3 — 2026-04-22
Added
- Vercel Cron — hourly
GET /api/cron/agents/tick(configureCRON_SECRET; Vercel sendsAuthorization: Bearer …). Middleware allowlists/api/cron/*during Coming Soon. - Approval notifications — optional
AGENT_NOTIFY_EMAIL+RESEND_API_KEY/RESEND_FROM_EMAILsend an ops email when a task is approved (failures logged toagent_operations). - Safe auto-apply — Paperclip digest proposal includes
auto_apply_safe: true; on approve, a draft row is inserted intoemail_broadcastswithstatus: draft_savedandrecipient_count: 0(no recipients, no send).
Changed
- PWA install prompt — listens for
fixt-show-pwa-install; shows a desktop install hint whenbeforeinstallpromptnever fires; session dismiss so repeat visits are not spammed; higher z-index. - Footer — “Get the app” buttons (Windows / iOS / Android) under the logo trigger the install prompt.
0.3.2 — 2026-04-22
Added
- Admin → Agents (
/admin/agents) — oversee logical agent workers, task queue, audit log; run orchestrator tick; assign manual tasks; approve/reject/dismiss tasks (same semantics as workbench). - APIs under
/api/admin/agents/*— workers roster + status (activate / suspend / terminate), tasks CRUD-style queue, operations feed, orchestrator tick (admin session). - Migration
012_agent_workers_and_operations.sql—agent_workers,agent_operations,agent_tasks.assigned_worker_id; seeds default Hermes / Paperclip / Core workers. - Orchestrator enqueue — proposals auto-assign an active worker by persona when workers exist; experience bumps on approved tasks (and small penalty on reject).
Important (product + legal)
- Zero-human autonomous business (unsupervised money movement, deploys, legal hiring/firing of people, self-modifying production without oversight) is not supported and would be unsafe. This release is a supervised “digital workforce” UI: humans remain accountable; workers are logical agents, not employees.
0.3.1 — 2026-04-21
Added
/changelog— public page that renders rootCHANGELOG.mdplus current semver frompackage.json.- Footer build stamp —
v{version}+ link to Changelog on the marketing footer. /icon-512— 512×512 high-contrast favicon / PWA icon;metadata.iconsandmanifestreference it for clearer tab / home-screen marks.npm run qa:prod-beta— extended HTTP smoke (scripts/prod-extended-smoke.mjs): more marketing routes +GET /changelog+HEAD /icon+HEAD /icon-512.NEXT_PUBLIC_SUPPORT_PHONE(optional) — E.164 public line for Footer + Contact; falls back to existing number when unset.- Admin dashboard — version strip + links to Changelog and operator workbench; notes on human-in-the-loop agents vs autonomous self-heal.
/admin/settings— redirects to/admin/dashboardso the sidebar item does not 404 until a real settings page exists.
Changed
- Favicon (
/icon,/apple-icon) — bolder monogram on dark gold ring for better visibility at small sizes.
0.3.0 — 2026-04-19
Added
- 5,200+ DIY placeholder rows — migration
010_diy_bulk_seed.sql(taggedfixt-bulk-seed-v1+ CC BY-SA reference links for editorial replacement). Apply withnpm run db:apply-remote/supabase db push. - Wikibooks import helper —
scripts/import-wikibooks-diy.mjs+npm run diy:wikibooks-sample(MediaWiki API, attribution fields). Seedocs/DIY_CONTENT_PIPELINE.md. - Supervised Fixt Orchestrator —
src/lib/agents/fixt-orchestrator.ts,agent_taskstable (011_agent_tasks.sql), workbench APIs:GET /api/workbench/agent-tasks,PATCH /api/workbench/agent-tasks/:id,POST /api/workbench/agents/tick. UI on/workbench/fxt-a9m2k7to approve/reject. No autonomous hire/fire, payroll, schema, or deploy paths;FIXT_AGENT_AUTONOMY=destructiveis rejected. - Android native project —
npx cap add androidcommitted undermobile/android/(removedandroid/frommobile/.gitignore). Store copy drafts instore/. - Store listing drafts —
store/android-play-listing.md,store/ios-app-store-listing.md.
Changed
- Coming Soon API allowlist prefixes
/api/workbench/*.
0.2.1 — 2026-04-19
Added
- Capacitor shell in
mobile/(iOS/Android WebView loading the live Next app viaserver.url). Seedocs/MOBILE_CAPACITOR.md. Root scripts:mobile:install,mobile:sync,mobile:ios,mobile:android.
Fixed
GET /api/public/profiles/:idfor homeowners: whenSUPABASE_SERVICE_ROLE_KEYis set on the server, job aggregates use the service client so counts are not under-counted by anonymous RLS. Response includesstats_scope(full|rls_limited).
0.2.0 — 2026-04-19
Added
- Social deep links:
NEXT_PUBLIC_WHATSAPP_URLandNEXT_PUBLIC_TELEGRAM_URLwired in Footer, Contact, and Agent page. - Fixt DIY Library:
/guidesand/guides/*require sign-in;/api/guidesendpoints require auth. Footer link “Fixt DIY Library”. - Obscured operator workbench at
/workbench/fxt-a9m2k7(not/admin) with env-based username/password and signed cookie (FIXT_WORKBENCH_USER,FIXT_WORKBENCH_PASSWORD,FIXT_WORKBENCH_SECRET). Stub “Hermes / Paperclip” agent panel viaGET /api/workbench/agents. - APIs:
GET /api/fixers/rankings(city, category, composite score + Fixt experience tier),GET /api/public/profiles/:id(fixer or homeowner analytics),POST /api/jobs/:id/verify-completion(AI before/after advisory before escrow release). - Fixt API CLI:
scripts/fixt-api.mjsfor scripted HTTP calls withX-Fixt-Clientheader. - HTTP branding: all
/api/*responses getX-Fixt-API: 1andX-Fixt-Product: Fixtfrom middleware. - Nav + favicon: Logo supports inline
/iconmark; rootmetadata.iconspoints at/iconand/apple-icon; desktop nav uses equal-width CSS grid columns. - Homeowner job flow: Chat links to
/homeowner/messages?job=…with auto-select; “Run AI before/after check” calls verify-completion.
Changed
- Removed duplicate CTAs under “How Fixt Works” (Post job / Apply / Compare) — those actions remain in the hero and platform sections.
- Removed
/guidesfromsitemap.xmloutput (auth-gated content).
Not shipped (by design)
- Bulk synthetic DIY content, scraped third-party repair data, fake homeowner emails, or gallery images copied from other sites.
- Fully autonomous agents that modify production code, hire or fire staff, or move money without human controls.
Mobile
- PWA: existing
manifest.webmanifest+ install flow. - Native shell (v0.2.1+): Capacitor project under
mobile/for App Store / Play wrappers.