Skip to main content

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.

Framewise social card: the Framewise logo with the line "Describe your business. AI designs the whole site."

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

Next step

Have a similar problem to solve?

A free 30-minute discovery call, then a written scope and a fixed-price quote — before you commit to anything.