# 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`](features.md) **Human overview:** [`README.md`](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 1. **Static only** — HTML/CSS/JS; relative asset paths; no backend required to view. 2. **No secrets** — no API keys, passwords, real customer PII, or live credentials. 3. **Concept labeled** — fixed “UX Concept Preview” (or proposal) banner on public pages; link to `ux-gallery.html` + `pricing.html`. 4. **Kebab-case folders** — `proposals//` (e.g. `eds-plumbing-and-sewer`). 5. **Templates stay generic** — no client names/branding in `templates/`. 6. **Monetization from catalog** — build + monthly fees and dependency rules come from `features.md` only. 7. **UTM is base** — every portal includes UTM; never sell it as a separate add-on. 8. **Deps** — Payments requires Email & SMS; AI social requires Social consolidation (auto-select / block on pricing page). 9. **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: ```html Made by AI ML Operations, LLC ``` Link the company name only. Do not omit on new pages. 10. **SEO on first shot** — public marketing pages must pass Lighthouse SEO (target **100**). Follow the [SEO checklist](#seo-public-marketing) below; do not ship homepage without meta description and descriptive link text. --- ## Product shape (from features.md) ```text 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 ```text proposals// ├── 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 1. Create folders above. 2. Copy closest `templates//` into `mockup/` (omit template docs/junk). 3. Brand the **public** site (copy, colors, logo, services, contact). Prefer real approved data; mark placeholders clearly. 4. Apply **SEO** on every public marketing page (see [SEO checklist](#seo-public-marketing)) — meta description, unique titles, descriptive links, OG/Twitter, LocalBusiness JSON-LD on the homepage. 5. 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=`. 6. 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. 7. Write **SCOPE.md** — recommend add-ons for *this* business; compute totals from `features.md` prices. 8. Write **NOTES.md** — client identity, sources, sitemap, preview reminder, next passes. 9. Banner on marketing pages → gallery + pricing links. 10. Add the client row to the **Active previews** table in `README.md` (business, phone, email, preview URL). Use `_TBD_` for unknown phone/email. 11. 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 | |------|------| | `` | Always set `lang`. | | Unique `` | 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`) ```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.html` - `Lighting installation details` → `lighting-installation.html` - `View 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 ```bash 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.html` - `proposals/paint-to-please/mockup/index.html` - `proposals/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](https://git.aimloperations.com/ai_ml_operations/monica_site/src/branch/main/proposal/pages/index.html). --- ## 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.md` exist and match `features.md` pricing - [ ] `ux-gallery.html` covers base + every add-on screen (ready or planned) - [ ] `pricing.html` totals 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.md` Active previews table has business, phone, email, preview URL - [ ] Footer credit: Made by [AI ML Operations, LLC](https://aimloperations.com) - [ ] No secrets committed; relative paths; opens without a server framework