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.