Skip to content
AINovember 13, 20265 min read

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.

ShareTelegram
Back to blog
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.

RU: English for IT

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.

EN: Design English

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.

UK: Pronunciation

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.

Admin: LLM ON

Why this matters for a business

  1. Speed. 60 pages in one run, not a month of approvals.
  2. Cost. $0.137 for the copy. Cheaper than one hour of a copywriter.
  3. Scale. Add a new offer and get three languages and a new theme.
  4. Uniqueness. Not a checkbox, a measured metric.
  5. Control. Schema, validation, cache and a cap. A pipeline, not magic.
  6. 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.

Валера · webdev07

Senior Systems Engineer. I build systems that work.

@webdevs07

Need similar automation?

Message me on Telegram — let's discuss the task and the format.

Discuss a project