Case study · SaaS / AI website builder
FramewiseAI website builder: describe a business, get a finished site
An AI website builder. A person describes their business, the model plans the sitemap, page structure, copy, and colours in a single call, and they refine the result in a Figma-like editor before publishing to Vercel or exporting the Next.js source to GitHub.

The challenge
Small businesses need a professional website without hiring a developer, but most builders hand them a template marketplace and leave the structure, copy, and design decisions to them.
The solution
One structured-output OpenAI call returns a blueprint — sitemap, sections, copy, palette, and CTA strategy — never raw HTML. Everything after that is deterministic: rendering, editing, swapping layouts, SEO, publishing, and export cost zero further model calls.
What we built
- Idea-to-site generation with a full fallback page on every failure path
- Canvas editor: drag to reorder, inline text and image editing, undo/redo, layers, multi-select, per-breakpoint styling, and version history
- A library of over 300 responsive section variants, themed in light and dark
- One-click publishing to Vercel as standalone HTML with no JavaScript bundle
- GitHub export of a real Next.js project, one component per section
- Central business profile, lead capture on published forms, site health checklist, and an admin panel for prompts, models, and rate limits
Architecture
- Frontend
- Next.js 16, React 19, TypeScript, Tailwind CSS v4, dnd-kit
- AI
- OpenAI structured outputs, validated with Zod
- Data
- Supabase (Postgres, Auth) with row-level security
- Integrations
- Vercel deployments API, GitHub Git Data API, Stripe, Unsplash / Pexels
- Quality
- Vitest unit and contract tests, nine Playwright smoke suites including accessibility (axe-core)
Engineering challenges
- A single AI call per site, enforced by tests that count model calls and check which modules can import the OpenAI client
- Sites render in the browser and are posted to the server, because the App Router forbids server-side react-dom rendering
- Project ownership decided by row-level security, never by an id from the caller; only the signed Stripe webhook can grant a paid entitlement
- Every palette checked against WCAG AA contrast in both light and dark schemes by automated tests


