10 KiB
Preview Sites — Agent Rule
How to create client preview websites in this repo. Follow this every time you scaffold or expand a proposal.
Canonical feature + pricing catalog: features.md
Human overview: README.md
Goal
Ship a portable static mockup that sells the Django product: public marketing site + client portal (with UTM) + optional monetized add-ons. Prospects click through screens and pick features on a pricing page.
Do not invent new product features or prices. Read features.md and use those names, deps, and dollar amounts.
Hard rules
- Static only — HTML/CSS/JS; relative asset paths; no backend required to view.
- No secrets — no API keys, passwords, real customer PII, or live credentials.
- Concept labeled — fixed “UX Concept Preview” (or proposal) banner on public pages; link to
ux-gallery.html+pricing.html. - Kebab-case folders —
proposals/<client-name>/(e.g.eds-plumbing-and-sewer). - Templates stay generic — no client names/branding in
templates/. - Monetization from catalog — build + monthly fees and dependency rules come from
features.mdonly. - UTM is base — every portal includes UTM; never sell it as a separate add-on.
- Deps — Payments requires Email & SMS; AI social requires Social consolidation (auto-select / block on pricing page).
- Vendor credit in footer — every preview page footer (marketing, portal, gallery, pricing) must include:
Made by [AI ML Operations, LLC](https://aimloperations.com)
HTML form:Link the company name only. Do not omit on new pages.Made by <a href="https://aimloperations.com" rel="noopener noreferrer" target="_blank">AI ML Operations, LLC</a> - SEO on first shot — public marketing pages must pass Lighthouse SEO (target 100). Follow the SEO checklist below; do not ship homepage without meta description and descriptive link text.
Product shape (from features.md)
BASE (always on)
Public: Landing · About · Contact (+ 404 / under construction as needed)
Portal: Login · Dashboard · Leads · Lead detail · UTM analytics
ADD-ONS (build $ + monthly $)
Email & SMS · Direct mail · Blog · Payments (Stripe)
Social consolidation · AI social generator (Ollama)
Pricing amounts, screen file hints, and checklists: open features.md — do not hardcode stale numbers in this rule if they drift; copy from the catalog when writing SCOPE.md / pricing.html.
New client checklist
proposals/<client-name>/
├── mockup/
│ ├── index.html # marketing entry (or public-home.html)
│ ├── ux-gallery.html # REQUIRED — card per screen, grouped by feature
│ ├── pricing.html # REQUIRED — interactive picker + live totals
│ ├── ux-planned.html # stubs for screens not designed yet
│ ├── assets/css/ux-hub.css # gallery/pricing styles (copy from an existing proposal)
│ └── …public & portal pages
└── proposal/
├── NOTES.md # client facts, sources, contact data status
└── SCOPE.md # recommended features + quote math from features.md
Steps
- Create folders above.
- Copy closest
templates/<name>/intomockup/(omit template docs/junk). - Brand the public site (copy, colors, logo, services, contact). Prefer real approved data; mark placeholders clearly.
- Apply SEO on every public marketing page (see SEO checklist) — meta description, unique titles, descriptive links, OG/Twitter, LocalBusiness JSON-LD on the homepage.
- Add ux-gallery.html — monica-style hub: eyebrow per feature (
Public · base,Portal · base,Portal · Email/SMS, …). Ready screens link to real HTML; unfinished →ux-planned.html?p=<key>. - Add pricing.html — base rows locked on; add-ons toggleable; enforce deps; show one-time + monthly totals; disclaimer that usage (Stripe/SMS/postage) is extra.
- Write SCOPE.md — recommend add-ons for this business; compute totals from
features.mdprices. - Write NOTES.md — client identity, sources, sitemap, preview reminder, next passes.
- Banner on marketing pages → gallery + pricing links.
- Add the client row to the Active previews table in
README.md(business, phone, email, preview URL). Use_TBD_for unknown phone/email. - Smoke-test locally as static files; run Lighthouse SEO on the homepage (target 100).
Reuse
Copy gallery/pricing/stub patterns from:
proposals/eds-plumbing-and-sewer/mockup/proposals/paint-to-please/mockup/proposals/select-electrical/mockup/
SEO (public marketing)
Ship Lighthouse SEO 100 on the public homepage on the first pass. Portal / gallery / pricing pages are secondary (still need titles + footer credit).
Required on every public HTML page
| Item | Rule |
|---|---|
<html lang="en"> |
Always set lang. |
Unique <title> |
Include business name + page topic + city/region when known. Do not reuse one generic title on every page. |
| Meta description | 1–2 sentences, ~120–160 chars, business + service + locale. Required on homepage; required on About, Contact, Services, and each service page. |
| Viewport | width=device-width, initial-scale=1. Do not use user-scalable=0 or maximum-scale=1 (hurts a11y; not needed for SEO). |
Image alt |
Meaningful alt on content images; decorative icons may use alt="". |
| Crawlable links | Real href to real pages (or #section). Prefer no empty # CTAs for primary nav/services. |
Homepage extras (do these on index.html)
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://<client>-preview.aimloperations.com/">
<meta property="og:type" content="website">
<meta property="og:title" content="…same as title…">
<meta property="og:description" content="…">
<meta property="og:url" content="https://<client>-preview.aimloperations.com/">
<meta property="og:locale" content="en_US">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="…">
<meta name="twitter:description" content="…">
Add JSON-LD (application/ld+json) for the local business — use the closest schema.org type (PlumbingService, Electrician, HousePainter, LocalBusiness, etc.) with name, url, telephone, email (if known), address, areaServed, and a short description. Match phone/email to what’s shown on the page and to the README Active previews row.
Descriptive link text (Lighthouse link-text)
Never use these as the only visible link text:
- Learn more / Learn More / LEARN MORE
- Click here / Click this
- More / Here / This / Go / Start / Right here
Do name the destination, e.g.:
Water heater services→water-heaters.htmlLighting installation details→lighting-installation.htmlView plumbing services→services.html
Service-card links must point to the correct service page (not one shared wrong URL for every card).
Quick Lighthouse check
npx lighthouse@12 "https://<preview-host>/" --only-categories=seo --chrome-flags="--headless --no-sandbox"
# or local:
python3 -m http.server 8765
npx lighthouse@12 "http://127.0.0.1:8765/proposals/<client>/mockup/" --only-categories=seo --chrome-flags="--headless --no-sandbox"
Fix any SEO audit with score < 1 before calling the mockup done.
Reference implementations
Homepages that already follow this pattern:
proposals/eds-plumbing-and-sewer/mockup/index.htmlproposals/paint-to-please/mockup/index.htmlproposals/select-electrical/mockup/index.html
UX gallery conventions
| Do | Don't |
|---|---|
| One card per screen | Dump all content on one mega-page |
| Group by feature section | Mix portal + public without labels |
| Mark Ready vs Planned | Leave dead links |
Keep marketing index.html working |
Replace marketing home with only the hub without a link back |
Reference pattern: monica_site proposal hub.
Pricing page conventions
- Always show Public site + Client portal + UTM (checked, disabled).
- Checkboxes for each add-on with build and /mo from
features.md. - Selecting Payments → auto-check Email & SMS (+ short helper text).
- Selecting AI social → auto-check Social (+ helper text).
- Unchecking a required parent → uncheck dependent child.
- Sticky summary: one-time total · monthly total · feature count.
- Label as draft estimate, not a formal contract.
Design (public marketing)
When building/tailoring the public site (not the portal chrome):
- Brand-first first viewport; one composition; full-bleed hero when it’s a landing.
- Expressive type — avoid Inter/Roboto/Arial/system as the only voice.
- Atmosphere via image/gradient/pattern — not flat single-color only.
- Prefer no cards in the hero; one job per section.
- Mobile + desktop must both work.
- If extending an existing template look, preserve that template’s visual language.
Portal mocks can be denser/app-like; still match proposal hub styling (ux-hub.css).
Done means
NOTES.md+SCOPE.mdexist and matchfeatures.mdpricingux-gallery.htmlcovers base + every add-on screen (ready or planned)pricing.htmltotals correct; deps work- Public marketing is client-branded and concept-bannered
- SEO: homepage Lighthouse SEO 100; unique titles + meta descriptions on public pages; no vague “Learn more” links; OG/Twitter + JSON-LD on homepage
README.mdActive previews table has business, phone, email, preview URL- Footer credit: Made by AI ML Operations, LLC
- No secrets committed; relative paths; opens without a server framework