Case study
One screenshot, one prompt, a live business site
How Utah's Events went from a reference page to a deployed, fully custom site — on a backend that was already running.
50
files of custom work
own homepage, components, CSS, brand, content
0
framework files edited
upgrade-check: 166 core files, 0 edited, 0 missing
13
upstream releases merged
each one dropped in cleanly
Utah's Events is an event company — weddings, rooftops, DJs, cinema nights, corporate parties. They needed a site that looked nothing like a template, and a business system underneath it: contacts, events, bookings, payments, messaging.
The interesting part is not that AI wrote the pages. It is what the AI was allowed to change. Because the repository carries its own rules — which files are yours, which belong to the framework, and a checker that enforces the line — the assistant produced a wholly custom front end that still merges upstream releases. Most templates make you choose between “make it mine” and “keep getting updates.” This one does not.
How it went
Start from a reference, not a blank page
We found a site with the feel we wanted, took a screenshot, and saved the page HTML. That is the entire design brief — no mockups, no design system meeting.
Hand the AI three things
The template repository, the reference (screenshot + saved HTML), and a plain-language prompt describing the business. The repo carries the master prompt, so the assistant inherits every rule about tokens, data access, and the upgrade path before it writes a line.
Let it build in the lanes
The AI wrote a custom homepage, custom components, and custom CSS — all in the sanctioned lanes (its own route group, its own components folder, the content and config files). It never edited a framework file, because the master prompt tells it not to.
Deploy to Vercel
Push the repo, import it in Vercel, set the environment variables. The backend was already there — auth, database, contacts, events, payments — so day one was a real business site, not a static brochure.
Keep receiving upstream releases
Thirteen template releases have merged since launch. Every one dropped in cleanly, because the custom work lives where upgrades never go.
The proof, in one command
Every clone ships a checker that answers “am I still upgradeable?” — run in the Utah's Events repo today, after all that custom work:
$ npm run upgrade:check upgrade-check: 166 core files, 0 edited, 0 missing ✓ on the upgrade path — no core files edited. Framework upgrades will drop in cleanly.
Do the same thing
Bring your front end
Generate it with Lovable, v0, Bolt, Claude, or Cursor — or write it yourself. The backend is already running: auth, database, payments through your own Stripe, email and SMS.