- 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
13 lines
587 B
TypeScript
13 lines
587 B
TypeScript
import { fetchPublicTemplates } from '@/lib/templates-server';
|
|
import { TemplatesBrowser } from './templates-browser';
|
|
|
|
// Server component: fetch the default (all/trending) template list at render
|
|
// time so the marketplace grid is present in the initial HTML for crawlers.
|
|
// All interactivity (search, filters, scope) lives in TemplatesBrowser.
|
|
export const revalidate = 300;
|
|
|
|
export default async function TemplatesPage() {
|
|
const { templates, categories } = await fetchPublicTemplates();
|
|
return <TemplatesBrowser initialTemplates={templates} initialCategories={categories} />;
|
|
}
|