What Happened
Built the traceo.cat landing page as a separate Next.js app (web/apps/landing/) in a single session — 13 sections, 43 files, full test suite. The page is entirely static: zero env vars, zero backend dependencies, zero auth. Deploys to Vercel with just a root directory setting and a domain.
The existing client app at app.traceo.cat was also unblocked — a BetterAuth origin misconfiguration was causing blank pages for authenticated users. Single-line fix to trustedOrigins.
Business Impact
Landing page exists. Before this session, traceo.cat had no marketing presence. Now there’s a conversion-ready page with pricing, waitlist capture, social proof, and a founder story — all pointing to app.traceo.cat. Zero-config deployment. The decision to build a separate static app means the landing page can be deployed, updated, and A/B tested independently of the authenticated product. No database migrations, no auth provider coordination, no environment variables. This removes the single biggest friction point for marketing iteration. Founding member funnel. The pricing section includes a $299 lifetime deal limited to 100 founding members. This creates urgency without requiring any backend logic — the scarcity is real and enforced at the business level.Operational Takeaways
- Separate marketing sites from product apps. Mixing public marketing pages with auth-gated apps creates deployment coupling. The landing page ships independently, fails independently, and iterates independently. The only shared asset is the logo.
- Static prerender is the default. Every section of the landing page is prerendered at build time. No server components needed, no API routes, no edge functions. This means CDN-served globally with zero cold starts.
-
Test the auth boundary. The blank-page bug was invisible because the layout silently returned
nullwhen auth failed. Auth boundaries should always have visible error states, not silent failures. ThetrustedOriginsfix is correct, but the layout guard should eventually show a meaningful error. - Design systems should decouple early. The client app’s RGB-based multi-palette system and the landing page’s HSL-based single-palette system are intentionally separate. Coupling them would mean marketing design changes require product app testing.
Action Items
- Deploy landing page to Vercel on traceo.cat
- Wire waitlist form to an email service (Resend, Loops, or similar)
- Create OG image (
/public/og-image.jpg, 1200x630) for social sharing - Add visible error state to
(app)/layout.tsxwhen auth fails (replacereturn null) - Set up Vercel Analytics on the landing page for conversion tracking