A customer webapp isn't an internal dashboard. Everything is exposed.
The client was launching a B2B SaaS product. The same codebase had to serve three distinct audiences at the same level of polish: prospects who discover via Google, customers who sign up and pay online, authenticated users who consume the product daily. Each layer has its own constraints: SEO and performance for public pages, conversion for the funnel, compliant billing for checkout, product velocity for the authenticated app.
User-journey mapping and technical baseline before the first wireframe.
Mapping of the acquisition-to-activation journey, identification of likely friction points based on market analogues, technical baseline (expected performance, SEO requirements on target queries, payment-compliance constraints). Scoping report delivered before development: information architecture, checkout scenarios, instrumentation plan, performance requirements per page type.
SEO-ready marketing pages, Stripe billing, authenticated app, one codebase.
Next.js 15 and TypeScript on App Router, server-side rendering on public pages with sitemap, OpenGraph metadata and structured data. Stripe integration (Checkout and Customer Portal) for subscriptions and billing, signed webhooks for reconciliation. Authentication, session management and route-level authorisation. Tailwind design system aligned with the product identity. End-to-end tests on paid funnels and authentication. Handover documentation transferred to the internal team.
