Install
openclaw skills install stomme-landing-page-builderBuild premium static landing pages with the Stomme/PolyTrader design system. Glass morphism, CSS custom properties, separated copy, responsive, Cloudflare Pages-ready. Use when building a website, landing page, marketing site, or product page. Produces static HTML/CSS/JS with no framework dependencies.
openclaw skills install stomme-landing-page-builderBuild premium static landing pages using the proven design system from polytrader.ai.
read references/design-system.md for the full CSS pattern libraryjs/copy.js data file, reference from HTML via data-copy attributes or JS injection. This enables i18n later._headers (security headers), _redirects, robots.txt, sitemap.xml, .gitignorereferences/pre-push-check-template.sh and references/validate-live-template.js for the specific site (selectors, locales, CSS vars). Place in scripts/. Set up .githooks/pre-push. Wire into CI workflow.bash scripts/pre-push-check.sh. Verify theme toggle (3 full cycles), lang switcher (all locales), contrast on all interactive elements..githooks/)The reference file has the full implementation. Key principles:
prefers-color-scheme, user toggle in nav, localStorage persistence, inline <head> script prevents flash.glass cards with backdrop-filter, subtle borders, inset shadows — adapts to both themes:root, light overrides in [data-theme="light"]localStorage key for persistence, OS change listenerEvery page must include:
<head> script (blocking, before CSS loads) — reads localStorage key, falls back to prefers-color-scheme, sets data-theme="light" on <html> if light:root — dark theme variables (default)[data-theme="light"] — light theme variable overrides--body-bg-gradient variable — ambient background through a custom property so it switches with theme--theme-icon-sun / --theme-icon-moon variablesinitTheme() function: toggle click handler, localStorage.setItem, OS change listener (respects manual override)color, background, border-color, box-shadow for themed elements--btn-primary-text — button text color variable (dark on dark theme where bg is gold, white on light theme)site-root/
├── index.html
├── pricing.html
├── privacy.html
├── terms.html
├── 404.html
├── css/
│ └── style.css # Full design system + page styles (dark + light themes)
├── js/
│ ├── copy.js # ALL text content as exportable object
│ └── main.js # Nav toggle, smooth scroll, theme toggle, minor interactions
├── img/
│ ├── favicon.svg
│ └── og-placeholder.png
├── _headers # Cloudflare security headers
├── _redirects # Cloudflare redirects
├── robots.txt
├── sitemap.xml
├── .gitignore
└── BUILD-NOTES.md
Every build must include a scripts/ directory with two validation scripts. These are not optional — they are part of the deliverable, like _headers or sitemap.xml.
scripts/pre-push-check.sh — Static pre-push gateRuns before every git push (via .githooks/pre-push). Checks:
<script src> and <link href> tags have cache-bust version params (?v=HASH)applyTheme() is called on DOM load (not just on toggle click).nav-links a)removeAttribute('data-theme') in any HTML file (must always set theme explicitly)scripts/validate-live.js — Post-deploy browser validationRuns in CI after every Cloudflare Pages deploy, using Playwright. Tests at both desktop (1440px) and mobile (375px) viewports:
localStorage synclocalStorage value<script> and <link> tags have version paramshref="#", empty, or undefined)mkdir -p .githooks
echo '#!/bin/bash' > .githooks/pre-push
echo 'bash "$(git rev-parse --show-toplevel)/scripts/pre-push-check.sh"' >> .githooks/pre-push
chmod +x .githooks/pre-push
git config core.hooksPath .githooks
The GitHub Actions workflow must have a validate job that runs after the deploy job:
validate:
needs: deploy
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '22' }
- name: Install Playwright
run: npx playwright install chromium --with-deps
- name: Wait for deploy propagation
run: sleep 30
- name: Run post-deploy validation
run: node scripts/validate-live.js https://$DOMAIN
Why this exists: We shipped a grey-on-red CTA button and a broken theme toggle to production because we relied on visual review alone. Computed style checks catch what eyes miss. Mobile Safari caching broke deploys because we tested desktop only. These scripts encode every lesson into automated gates.