SiteForged: 60 landing pages from one template — and every one is unique
How to build 20 landings × 3 languages, plug in fal.ai and get 60 unique packs, 60/60 unique titles and 0.2% similarity. A breakdown of the generator, prompts, design randomization and admin.
Featured
60 pages, 60/60 unique titles, 0.2% similarity, $0.137 for LLM copy.
Contents
The task: 20 landings, 3 languages, zero copy-paste
An online English school needed 20 distinct offers: English from scratch, for IT, for lawyers, IELTS, kids, pronunciation. Each with its own audience, pain, curriculum and pricing. Plus three languages: Russian, English and Ukrainian.
Do it by hand and you get either one template with a swapped headline or a month of copywriting. Translate the Russian into EN/UK and you get the same page with a different vocabulary: search engines see near-duplicates, and readers see the same promises.
The goal was simple and brutal: 60 pages, each with its own copy, its own design and its own reason to exist.

Why translation is not enough
Translation replaces words, not meaning. A Russian landing for IT starts with a standup and a code review. An English one starts with a technical interview and a discussion about architecture. A Ukrainian one starts with the first day in an international team.
Run one text through a translator and all three pages will:
- follow the same structure;
- use the same arguments in the same order;
- repeat the same metaphors;
- have the same rhythm.
That is bad for SEO. It is also boring to read. So EN and UK are generated separately, as if each language had its own copywriter.
How the LLM pack works
The model does not write "the whole page". It fills a strict schema:
- a two-sentence lead;
- 4 benefits with a concrete mechanism, not an adjective;
- 6 curriculum modules and 6 notes;
- 3 plans with metadata and price;
- 3 reviews with a specific situation;
- 5 FAQ questions;
- CTA and a footer line.
The parser checks the counts. If the model underdelivers, the same request is retried with the error text. If it still fails, the page is not built — no page with empty blocks.
pack = llm.ask(prompt) # offer × language
pack = parse_pack(pack) # strict fields
validate_pack(pack) # counts + no empty blocks
site = merge(base_i18n, pack) # per landing
render(theme, site) # 3 languages, 60 pages
Important: the model does not decide how the page looks. It does not touch layout, palette or grid. That is a separate layer.
Design randomization: 20 sites from one template
The generator has pools:
- 6 palettes;
- 3 home layouts;
- 5 menu types;
- 5 card styles;
- 5 button styles;
- 5 font pairs;
- different containers, spacing, radii and H1 sizes.
Combinations are distributed so neighbouring landings do not look like twins. English for IT is a dark editorial page with gold. Design English is a light showcase with teal. Pronunciation is a calm green catalog.

LLM and design do not fight: the copy arrives as structured data, and the renderer decides how to present it. The same pack can be re-laid out in another theme without rewriting it.

Uniqueness in numbers
We measured Jaccard similarity over word 4-grams. Not "looks different" — an actual overlap metric.
| Metric | Value |
|---|---|
| Pages | 60 |
| Unique titles | 60 / 60 |
| Unique descriptions | 60 / 60 |
| Average block similarity | 0.2% |
| Max between two landings | 5.4% |
| Full-text similarity | 0.6% |
| LLM requests | 137 |
| LLM cost | $0.137 |
Near-zero similarity is not because the pages are short. Every page has a lead, 4 benefits, 6 modules, 3 plans, 3 reviews, 5 FAQ and a CTA. The blocks are genuinely different.
We also checked the languages: EN and UK contain no Russian constructions and are not line-by-line translations. Ukrainian is checked separately for Russian letters and calques.
Admin: one button and a checkbox
The admin shows 20 landings, the seed, design parameters and an LLM: ON checkbox. Press it and the generator builds 60 pages, refreshes screenshots and publishes. Turn LLM off and you get the offline mode with base copy.
The cache is simple: key = model + prompt. A repeat run with the same parameters costs nothing. The cap is 300 requests so the demo cannot run away.

Why this matters for a business
- Speed. 60 pages in one run, not a month of approvals.
- Cost. $0.137 for the copy. Cheaper than one hour of a copywriter.
- Scale. Add a new offer and get three languages and a new theme.
- Uniqueness. Not a checkbox, a measured metric.
- Control. Schema, validation, cache and a cap. A pipeline, not magic.
- A legal niche. An online English school is a normal product you can show to clients.
For an agency it is also a template: repaint the generator for dentistry, law, renovation or SaaS. Offers, audiences and vocabulary change; the architecture stays.
Limits and honesty
This is a demo, not a production system:
- no domains, payments or autodeploy;
- the school is fictional; reviews and numbers are demo content;
- the LLM can make mistakes, so copy should be edited;
- low similarity does not guarantee rankings — it is only one factor.
But the base works: 20 offers, 3 languages, 60 pages, 60 screenshots, an admin and a case page. Next: more niches, languages and templates.
Links
- Demo: siteforged.webdev07.tech
- Case: portfolio.webdev07.tech/en/cases/siteforged
- RU example: English for IT
- EN example: Design English
- UK example: Pronunciation
Related
DOC OPS: turning an invoice into a verified table
A case study: OCR, JSON-schema extraction, deterministic validation, human-in-the-loop and a benchmark on 44 synthetic documents.
ReadTraffic Arbitrage in 2026: More Expensive, More Honest, More Engineering
The state of traffic arbitrage in November 2026: rising CPMs, cookie limits, AI creatives, Telegram Ads, first-party data and unit economics. What to do next.
ReadNeed similar automation?
Message me on Telegram — let's discuss the task and the format.