# Build and host a small business website with AI coding tools instead of Webflow, Squarespace or Wix

> For a simple 3–8 page marketing site: write a site brief, have Claude Code or Cursor (or a chat assistant, for non-coders) build plain HTML/CSS, and host it on Cloudflare's free plan with Workers static assets. Includes the agent prompt, deployment commands, a form option, redirect handling and an honest list of what you give up.

- Outcome: I want a fast, professional website for my business without paying a monthly website-builder subscription.
- Replaces: Webflow (full), Squarespace (full), Wix (full)
- Uses: Claude — Claude Code (included in Claude's paid plans) builds and edits the site files from the brief; Claude chat works for non-coders who copy files by hand.; Cursor (optional) — Alternative AI code editor if you already pay for it.; ChatGPT (optional) — Alternative chat assistant for generating pages and copy.; Cloudflare Workers & Pages — Free hosting for the static files (Workers static assets), custom domain, HTTPS and redirects.; Google Workspace (optional) — Google Forms + Sheets for the simplest contact-form option.
- Extra monthly cost: $0 — Cloudflare's Free plan serves static asset requests free and without a request limit; Worker code (only needed for a custom form handler) gets 100,000 requests a day on Free. Assumes you already pay for an AI coding tool. Your domain renewal is unchanged — but if your domain was bundled with the website builder, you will need to pay for it at a registrar after moving.
- Difficulty: moderate; skill: technical; setup: 1–2 days for a 5-page site including content migration, review and DNS changes
- Evidence: editorial; illustrative example: true; last reviewed 2026-10-13
- Canonical: https://onelesstool.com/workflows/business-website-with-ai-coding

## Good fit for
- Service businesses, consultants, clinics and trades with a brochure-style site that changes a few times a month
- Founders comfortable running a few terminal commands, or with a technical friend for the first deploy
- Sites where speed, low cost and full ownership of the files matter more than a visual editor

## Not a fit for
- Teams where non-technical marketers publish pages or blog posts weekly and expect a visual editor
- Ecommerce stores, booking systems, member areas or anything with payments and logins
- Sites with large blogs or CMS collections that non-developers update
- Owners who need phone or chat support from their website provider

## Before
Pay a monthly or annual website-builder plan. Edit pages in the visual editor, use its built-in contact form, and rely on its hosting, SSL, templates and support.

## After
The site is a folder of HTML/CSS files you own. An AI coding tool builds and edits it from a written brief; `npx wrangler deploy` publishes it to Cloudflare's free plan on your own domain. Forms go to a Google Form or a small Worker. Edits are made by asking the AI and redeploying.

## Steps

### 1. Inventory the current site before touching anything

List every page, its URL, page title and meta description, every form and where its submissions go, and every integration (booking widget, newsletter signup, chat, analytics, store).

Copy all text into a Google Doc and download all images you own the rights to. Check your builder's own export options; exports are often partial, so a manual copy is the safe baseline.

Note who controls the **domain** (registrar login) and the **DNS**. If the domain was bought through the website builder, plan to transfer it or point it elsewhere before cancelling.

### 2. Write the site brief

Fill in the **site brief template** (artifact below) and save it as `SITE_BRIEF.md` in a new, empty project folder. Include the old URL for each page so redirects can be created.

The brief is what keeps the AI from inventing content. Anything you leave blank becomes a placeholder you'll fill later.

### 3. Have the AI build the site

**Coders / comfortable with a terminal:** open the folder in Claude Code (included in Claude's paid plans) or Cursor and paste the **Agent build prompt**. Review the home page in the browser before letting it build the rest. Run it locally with `npx wrangler dev` or by opening the HTML files.

**Non-coders:** use Claude or ChatGPT chat with the **Single-page generator prompt**, one page at a time. Save each answer as a file with the exact name the AI gives (e.g. `index.html`, `styles.css`) in a `public` folder. Ask for a fixed list of files up front so nothing is missed.

Keep the site **plain HTML + CSS** unless you have a reason not to; it's easiest for any AI or developer to edit later.

### 4. Review it like a visitor

Use the **QA prompt** to have the AI check for broken links, missing alt text and titles. Then check yourself:
- On your phone: menu works, text readable, buttons tappable, no sideways scrolling.
- Every claim, price and testimonial is real and approved.
- Contact details match your Google Business Profile and other listings exactly.

### 5. Deploy to Cloudflare's free plan

Cloudflare's docs now say to start new projects on **Workers** (Pages still works). For a static site:

1. Create a free Cloudflare account.
2. In the project folder, make sure `wrangler.jsonc` contains your project name, a `compatibility_date` and `"assets": { "directory": "./public" }`.
3. Run `npx wrangler deploy`. The first run asks you to log in. You get a `*.workers.dev` URL to test.
4. **Custom domain:** a Workers Custom Domain needs the domain added to Cloudflare as an active zone (free plan is fine), which usually means switching your domain's nameservers to Cloudflare. Recreate any email DNS records (MX, SPF, DKIM) **before** switching, or your email will break.
5. Add the domain under the Worker's **Settings > Domains & Routes**.

Free plan limits that matter (checked today): requests for static assets are free and unlimited; up to 20,000 files per version and 25 MiB per file; Worker code (only if you add a form handler) has 100,000 requests a day.

### 6. Handle forms and redirects

**Forms, simplest option:** create a Google Form (responses go to a Sheet, with email notifications) and link to it or embed it on the contact page. Looks less integrated but needs no code.

**Forms, integrated option:** ask the AI to add a small Worker route that receives the form POST, checks a Cloudflare Turnstile token to block spam, and forwards the message to you (for example to a Google Sheet via Apps Script, or by email). This uses Worker requests, which count toward the 100,000/day free limit.

**Redirects:** a `_redirects` file in `public/` maps old builder URLs to new ones (e.g. `/about-us /about 301`). Cloudflare allows up to 2,000 static and 100 dynamic redirects. This protects your search rankings.

### 7. Run both sites in parallel, then cancel

Keep the old builder subscription until the new site has been live on your domain for at least a week and the verification checklist passes. Submit the new `sitemap.xml` in Google Search Console and watch for crawl errors.

Save the project folder somewhere backed up (a private Git repo is ideal). That folder *is* your website now.

## Prompts

### Agent build prompt (Claude Code / Cursor)
Have an AI coding agent build the whole site from the brief, with checkpoints.

```text
You are building a static marketing website for {{business_name}}. Read SITE_BRIEF.md in this folder first; it is the source of truth.

Requirements
- Pages: {{page_list}}. One HTML file per page in ./public (e.g. public/index.html, public/services/index.html) so URLs have no .html extension.
- Plain HTML + one shared CSS file (public/styles.css). No framework and no build step unless I ask. Minimal JavaScript (mobile menu only).
- Shared header/nav and footer must be identical on every page. Footer: {{footer_contents}}.
- Design: colours {{brand_colors}}, fonts {{fonts}}, tone {{design_tone}}. Mobile-first, readable at 375px wide, no horizontal scroll.
- Accessibility: semantic headings (one h1 per page), alt text on every image, visible focus states, colour contrast at least WCAG AA.
- SEO: unique <title> and meta description per page (use the ones in the brief), Open Graph tags, a sitemap.xml and robots.txt in public/, canonical URLs on {{domain}}.
- Contact form: {{form_approach}}.
- Redirects: create public/_redirects with 301s from each old URL in the brief to its new path.
- Images: put them in public/images, sized for the web (max ~1600px wide, compressed), with width/height attributes.
- Hosting: Cloudflare Workers static assets. Create wrangler.jsonc with name "{{worker_name}}", today's compatibility_date and "assets": {"directory": "./public"}. No Worker script unless the form approach needs one.

Process
1. Propose the file structure and a one-paragraph design direction. Wait for my OK.
2. Build the home page first. Stop so I can review it in the browser.
3. Build the remaining pages, then run a self-check: broken internal links, missing alt text, missing titles, pages wider than the viewport at 375px. Report what you found and fixed.
Do not invent testimonials, client names, prices, awards or statistics. Use clearly marked placeholders where content is missing.
```

### Single-page generator prompt (chat, for non-coders)
Generate one page at a time in a chat assistant and save it as a file.

```text
I'm building a simple static website for {{business_name}} with these pages: {{page_list}}. All pages share one stylesheet called styles.css.
Here is my site brief:
{{site_brief}}
Now write the complete file for the "{{page_name}}" page, saved as {{file_path}}. Use plain HTML, link to /styles.css, include the shared header and footer exactly as in previous pages: {{shared_header_footer_or_none}}.
Use only content from the brief; mark anything missing as [PLACEHOLDER: ...]. Give me the whole file in one code block and nothing else.
```

### QA prompt
Have the AI audit the finished site before launch.

```text
Review every file in ./public for launch readiness on {{domain}}. Check and fix: broken internal links; images without alt text or width/height; pages missing a unique title or meta description; more than one h1; layout overflow at 375px; contrast below WCAG AA for {{brand_colors}}; any invented testimonials, numbers or client names; _redirects entries for these old URLs: {{old_urls}}.
Report a table of issues found, what you changed, and anything that needs my decision.
```

### Content edit prompt (after launch)
Make routine changes safely and redeploy.

```text
Change request for the {{business_name}} site: {{change_description}}.
Only edit the files needed. Keep header/footer identical across pages. Show me a summary of the diff, then run `npx wrangler deploy` once I confirm.
```

## Templates and scripts

### Site brief template (template)

```markdown
# Site brief – {{business_name}}
_Fill this in before you prompt the AI. The more specific, the less rework._

## 1. Basics
- Business name: {{business_name}}
- One-sentence description: {{one_liner}}
- Primary audience: {{audience}}
- Main action we want visitors to take: {{primary_cta}} (e.g. book a call, request a quote, call us)
- Domain: {{domain}} — registrar: ______ — DNS currently managed by: ______
- Current site URL (to migrate from): {{current_site_url}}

## 2. Pages (3–8)
| Page | URL path | Purpose | Key content | Old URL to redirect from |
|---|---|---|---|---|
| Home | / | Explain what we do, prove it, CTA | Hero, 3 services, testimonials, CTA | / |
| Services | /services | Detail each service | 3 sections + FAQ | /what-we-do |
| About | /about | Trust | Story, team photos, credentials | /about-us |
| Contact | /contact | Convert | Form, phone, address, map link, hours | /contact |
| (optional) Work / Case studies | /work | Proof | 3 short case studies | |
| Privacy | /privacy | Legal | Your privacy policy text | |

## 3. Brand
- Colours (hex): primary ____ accent ____ text ____ background ____
- Fonts: ____ (or "system fonts")
- Logo files: SVG/PNG paths
- Sites we like the look of (and why): ____
- Tone of voice: ____

## 4. Content inventory
- Copy: where it lives now (export from old site, Google Doc link)
- Images: folder link; all images we have rights to use? yes/no
- Testimonials (with permission): ____
- Legal: privacy policy, cookie notice needed? (depends on analytics/forms used and your location)

## 5. Forms and integrations
- Contact form fields: name, email, phone (optional), message, how did you hear
- Where submissions go: Google Form + Sheet / email via a small Worker / other
- Booking link (e.g. existing scheduler): ____
- Analytics: none / privacy-friendly analytics / Google Analytics
- Anything else from the old builder we rely on: blog, store, member area, newsletter signup, chat widget

## 6. SEO essentials
- Page titles and meta descriptions: keep the current ones? (copy them from the old site)
- Business address and phone shown consistently on every page footer
- Old URLs that get traffic (from your analytics) → redirect targets

## 7. Who maintains it
- Who will edit text after launch: ____
- How often: ____
- Their comfort level: edits in a code editor / asks the AI / needs a visual editor
```

### Minimal wrangler.jsonc for a static site (config)

```jsonc
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "{{worker_name}}",
  // Set to the date you create the project
  "compatibility_date": "{{compatibility_date}}",
  "assets": {
    "directory": "./public"
  }
}
```

## Limitations
- No visual drag-and-drop editor: changes go through an AI tool or code, which suits founders more than marketing teams.
- No built-in CMS or blog management for non-technical editors.
- No built-in forms, ecommerce, bookings, memberships or email marketing; each needs a separate tool or custom code.
- No vendor support desk; when something breaks you rely on the AI tool, docs, or a developer.
- Domain and DNS changes are on you; mistakes can take a site or email offline for hours.
- Builder templates, apps and some content may not export cleanly; expect manual copying.

## Risks
- **migration_complexity** (medium): Moving DNS can break email if MX/SPF/DKIM records aren't recreated first. Check every record before switching nameservers.
- **functionality_loss** (medium): Builder-native features (forms, store, scheduling, newsletter popups) disappear on cancel; each must be inventoried and replaced.
- **security** (low): Static HTML has a small attack surface, but a custom form handler must validate input and use spam protection such as Turnstile.
- **reliability** (low): AI-generated code can contain subtle layout or accessibility bugs; the QA step and a mobile check are essential.
- **vendor_lock_in** (low): Plain HTML files are portable to any host, which reduces lock-in compared with a builder.

## Verification checklist (run before cancelling)
- [ ] Every page from your inventory exists on the new site and old URLs return a 301 to the right new page (test each in a private window).
- [ ] The `*.workers.dev` preview works on a phone at 375px wide with no horizontal scrolling and a working menu.
- [ ] A test contact-form submission arrives where you expect (Sheet, inbox) within minutes, and a blank or spammy submission is rejected.
- [ ] Email still sends and receives on your domain after DNS changes (send a test both ways).
- [ ] Page titles and meta descriptions match or improve on the old site's; sitemap.xml loads and is submitted in Search Console.
- [ ] You (or whoever maintains the site) made a text change and redeployed it unaided in under 15 minutes.
- [ ] The project folder is backed up outside your laptop.
- [ ] The old builder stays active until the new site has run on your domain for at least a week without issues.

## Savings methodology
Savings = your website-builder plan (monthly, or annual price ÷ 12) − incremental cost ($0 hosting on Cloudflare's Free plan; $0 for the AI tool if you already pay for it). If the builder bundled your domain, subtract the domain's annual registrar price ÷ 12. If you'd need to buy an AI coding subscription only for this, subtract that too. Setup time (1–2 days) and later editing time are not monetised.

Example (illustrative): A 5-page consultancy site on a website-builder plan billed annually, owner already pays for Claude Pro and has the domain at a separate registrar. $25/mo → $0/mo. Assumptions: Illustrative: $25/month is a round placeholder for a mid-tier builder plan. Webflow, Squarespace and Wix pricing pages showed non-US currencies or JavaScript-rendered prices to our fetcher on 2026-10-13, so no builder price was verified. Cloudflare Free plan limits (static asset requests free and unlimited; 20,000 files/version; 25 MiB per file) were verified on developers.cloudflare.com on 2026-10-13. Claude Pro is already paid for other work; Claude's pricing page lists Claude Code as included in all paid plans. The domain renewal is unchanged and not counted.

## Sources
- Cloudflare Workers static assets: billing and limitations: https://developers.cloudflare.com/workers/static-assets/billing-and-limitations/ (accessed 2026-10-13)
- Cloudflare Workers limits: https://developers.cloudflare.com/workers/platform/limits/ (accessed 2026-10-13)
- Cloudflare Pages limits: https://developers.cloudflare.com/pages/platform/limits/ (accessed 2026-10-13)
- Cloudflare Pages docs: https://developers.cloudflare.com/pages/ (accessed 2026-10-13)
- Cloudflare Workers static assets: https://developers.cloudflare.com/workers/static-assets/ (accessed 2026-10-13)
- Cloudflare Workers static assets: get started: https://developers.cloudflare.com/workers/static-assets/get-started/ (accessed 2026-10-13)
- Cloudflare Workers static assets: redirects: https://developers.cloudflare.com/workers/static-assets/redirects/ (accessed 2026-10-13)
- Cloudflare Workers Custom Domains: https://developers.cloudflare.com/workers/configuration/routing/custom-domains/ (accessed 2026-10-13)
- Claude pricing: https://claude.com/pricing (accessed 2026-10-13)
- Squarespace pricing: https://www.squarespace.com/pricing (accessed 2026-10-13)
- Wix plans: https://www.wix.com/plans (accessed 2026-10-13)
