- login: OAuth/email on top, phone collapsed behind 'Sign in with phone
instead' (prod providers: google on, email off, sms on — a developer
should never see a phone field as the front door)
- dashboard: plan card wired to GET /v1/billing/status; calls card shows
'—' + pointer to per-server metrics (no user-facing usage endpoint
exists; previous card showed invented '0 of 100,000 / Hobby')
- templates: server-rendered grid (revalidate 300) via fetchPublicTemplates,
client browser hydrates with initial data; inviting empty state with
labeled starter ideas instead of 'No templates yet'
- servers/new: removed upgrade nag from first analyze wait
- scripts/seed-templates.mjs: idempotent dry-run-by-default seeder driving
the real preview->create->live->publish flow for 6 first-party templates
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SXUwmPVRTD8AKQtio6gCN5
feat(web): SEO — server-rendered template pages + /guides articles
- templates/[slug] converted from client to server component: per-template
generateMetadata (title/description/canonical/OG) + SoftwareApplication
JSON-LD; code-audit toggle split into a client island; missing/non-public
templates now return a real 404.
- sitemap.ts pulls public template slugs live from the API (best-effort) +
the new /guides routes.
- new /guides section: 3 server-rendered SEO articles (host MCP with OAuth,
hosted-platforms comparison, MintMCP alternative) with TechArticle JSON-LD;
Guides link added to the marketing nav.
- lib/seo.ts: articleJsonLd + templateJsonLd builders.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@