Generate, A/B-test, deploy, and audit static landing pages — as Claude Code skills.
$ npx -y skills add monthu56/landforge --agent claude-code
FAQ
landforge is a Claude Code plugin with 9 hand-picked skills for marketing work, indexed on Flowy. Install it with the command on its page. It includes init-landing-system, landing-ads, landing-experiment. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Repo: monthu56/landforge
Generate, A/B-test, deploy, and audit static landing pages — as Claude Code skills.
📖 English · Русский
Landforge is a small system of Claude Code skills that take a landing page from a brief to a deployed, measurable page — with SEO, analytics, A/B testing, and a change-audit trail built in. Landings stay static HTML (content in the markup, zero JS on the critical path), so they're fast and fully indexable. No bundler, no backend, no heavy tooling.
<div id="root">.| Skill | What it does |
|---|---|
/new-landing | a landing from a brief — contract + skeleton + check_landing.py validator |
/landing-experiment | an A/B test on one URL (inline split), variant tracking, experiment card |
/landing-journal | audit journal of every change (experiments/journal.jsonl + git) |
/landing-ads | ad materials (UTM, copy, keywords, editor exports) — artifacts, no spend |
/init-landing-system | deploy this whole system into another existing project |
The generator's input is a brief — a single format plus an interviewer prompt you can paste
into any LLM (see .claude/skills/new-landing/reference/).
Beyond Claude Code, the deterministic toolbox (validators, audit journal, UTM) is exposed as an MCP server, so Cursor, Claude Desktop or your own agent can call it too. Tools wrap the same scripts — one source of logic — and the contract, brief schema and skeleton are served as resources. Generative workflows (brief interview, landing generation, A/B checklist) are exposed as prompts; the generation itself stays with the host's model.
pip install -e mcp # then point your MCP client at the `landforge-mcp` stdio server
See mcp/README.md and ADR-0002. The static-HTML
invariant is untouched — the server is an optional dev tool, never part of a landing's runtime.
A. Use the system in this repo
# in Claude Code:
/new-landing # generate a landing from a brief
B. Install the system into your own existing project
bash .claude/skills/init-landing-system/scripts/sync_templates.sh
bash .claude/skills/init-landing-system/scripts/install_user.sh
# then, in your project (Claude Code):
/init-landing-system # asks for brand/domains/slug, deploys the system (merge-aware)
brief ──▶ /new-landing ──▶ static HTML (SEO + analytics + A/B scaffold)
│ │ self-check: check_landing.py
▼ ▼
git branch ─────▶ preview URL ─────▶ review ─────▶ prod
every step → audit journal
mcp/, needs Python ≥ 3.10) instead of / alongside Claude Code.nginx containers (prod/staging),
deployed via GitHub Actions over SSH. CI and nginx configs are included as templates..github/workflows/deploy.yml routes by branch:
| Branch | Target | Index |
|---|---|---|
main | production | indexable |
dev | staging | noindex |
| any other | preview at …/{branch} | noindex |
Infra values (domains, containers, dirs) are {{placeholders}} resolved by init-landing-system
or by hand (.claude/skills/init-landing-system/reference/placeholders.md). Only production is
indexed — staging and previews are closed with X-Robots-Tag: noindex at the nginx layer.
.claude/skills/ the skills (new-landing, landing-experiment, landing-journal, landing-ads, init-landing-system)
mcp/ optional MCP server — exposes the toolbox to any MCP host (ADR-0002)
.github/workflows/ CI: deploy.yml (branch-routed), cleanup-preview.yml
deploy/ nginx.{prod,staging}.conf (IaC templates)
docs/adr/ architecture decision records
experiments/ A/B experiments + audit journal
CLAUDE.md notes for Claude Code
PRs welcome — see CONTRIBUTING.md and the Code of Conduct. The one rule that must never break: a landing stays static HTML with content in the markup and zero JS on the critical path (see ADR-0001).
MIT © Александр Перебоев
.claude/
skills/
init-landing-system/
reference/
placeholders.md
system/
deploy/
nginx.prod.conf
nginx.staging.conf
docs-adr/
template.md
experiments/
README.md
github-workflows/
cleanup-preview.yml
deploy.yml
gitignore
skills/
landing-ads/
reference/
ad-formats.md
utm-scheme.md
scripts/
build_utm.py
check_ads.py
SKILL.md
landing-experiment/
reference/
ab-implementation.md
experiment-design.md
scripts/
check_experiment.py
SKILL.md
landing-journal/
scripts/
log_event.py
show_history.py
SKILL.md
new-landing/
reference/
brief-prompt.md
brief-schema.md
landing-contract.md
landing-skeleton.html
scripts/
check_landing.py
SKILL.md
templates/
adr-README.md
CLAUDE.md.tmpl
README.md.tmpl
scripts/
init_project.py
install_user.sh
sync_templates.sh
SKILL.md
landing-ads/
reference/
ad-formats.md
utm-scheme.md
scripts/
build_utm.py
check_ads.py
SKILL.md
landing-experiment/
reference/
ab-implementation.md
experiment-design.md
scripts/
check_experiment.py
SKILL.md
landing-journal/
scripts/
log_event.py
show_history.py
SKILL.md
new-landing/
reference/
brief-prompt.md
brief-schema.md
landing-contract.md
landing-skeleton.html
scripts/
check_landing.py
SKILL.md
.github/
ISSUE_TEMPLATE/
bug_report.md
config.yml
feature_request.md
PULL_REQUEST_TEMPLATE.md
workflows/
cleanup-preview.yml
deploy.yml
.gitignore
CLAUDE.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
deploy/
nginx.prod.conf
nginx.staging.conf
docs/
adr/
0001-static-html-invariant.md
0002-mcp-server.md
README.md
template.md
experiments/
README.md
LICENSE
mcp/
examples/
mcp.json
landforge_mcp/
__init__.py
__main__.py
server.py
pyproject.toml
README.md
README.md
README.ru.md© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic