Operations

Static hosting is the billing guardrail.

The public site is designed so a Vercel deployment serves static files from out/. That keeps the site away from function invocations, middleware execution, image optimization, and analytics products that can create usage-based charges.

Removed from the website

  • Serverless and edge API routes
  • Next redirects, rewrites, headers, and proxy middleware
  • Hosted auth providers in the website runtime
  • Stripe checkout from the public website
  • Vercel Web Analytics and Speed Insights scripts
  • Plausible or other third-party analytics beacons
  • Next Image Optimization through the default loader

Keep checking

  • next.config.js keeps output: "export" enabled.
  • apps/web/vercel.json keeps the framework preset null and points Vercel at out/.
  • Public pages do not import Clerk, Convex, Stripe, or Vercel analytics.
  • No src/proxy.ts, app/api, or request-dependent route handlers exist in apps/web.
  • Production checks run before pushing: lint, typecheck, build, and security regressions.

Tradeoff

Static export means no public web login, no web dashboard, no payment flow, and no request-time personalization. That is intentional for this site. Product surfaces that need state should live outside the public marketing site with their own explicit cost model.