Web
splick-web is Next.js 15 App Router, static export (output: "export"), Tailwind 4, deployed to Cloudflare Pages. Project name in wrangler.toml is splick-website. Build output directory is out.
Public routes
Marketing and legal live under app/(public): home, privacy, terms, child safety, support, contact, pricing, trial, changelog, blog, invite, delete-account, style guide, and public profile u/. Vietnamese mirrors live under app/(public)/vi.
Legal HTML source is content/legal/html plus content/legal/legal.css. The iOS app vendors the same HTML. A legal change updates both and is checked with splick-web/docs/VERIFY.md before a store submission (HTTPS URLs, support email, account deletion path, content parity).
Admin
app/admin/(console) is the operator console: users, health, security, database, emails, messaging, outbox, reconciliation, releases, trials, templates, usage, reports, audit logs, login. It calls the admin API on auth and feed. It is not a second source of truth. A button that mutates production must hit the existing admin endpoint, not a direct database connection from the browser.
Pages Function
functions/post/[[path]].ts serves public post Open Graph HTML for shares. It calls api.splick.app and links to the stores. It is not part of the static export. Do not put internal API keys in that function; the post preview endpoint is public.
Email
Cloudflare Email Routing sends support@splick.app to a verified mailbox (splick-web/docs/EMAIL_ROUTING.md). That is support mail, not the transactional mail path. Transactional mail is communication-service.
Deploy: Website on Cloudflare.