Landings
Une landing dans Trackily, c'est une page web servie via
/lp/<slug>ou injectée dans le flow d'une campagne via/c/<slug>. Quatre types (url,local,redirect_tracker,ai) couvrent tous les besoins, de la simple redirection au prelander AI-généré avec design DNA.

Concept
Une landing est l'unité atomique de contenu dans Trackily (à comparer à la campagne qui est l'unité atomique de routage). Chaque landing a :
- Un
slugURL (/lp/<slug>). - Un
typequi détermine COMMENT elle est servie (HTML inline, redirect, AI…). - Un
is_active(les landings inactives sont skip par les flows). - Un
protection_config(Lander Protection anti-spy). - Des
meta(pour les landings AI : copy + design_dna + provider config — utilisés parrerender_landing_from_meta). - Optionnellement
price_overrides(pour A/B tester des prix sur les mêmes variants de produit natif).
Une landing peut vivre sans campagne (en mode standalone, accessible via /lp/<slug>) ou être branchée dans le schema.landings[] d'un flow pour recevoir du trafic via /c/<slug>.
Les 4 types
| Type | Stockage | Routing | Quand l'utiliser |
|---|---|---|---|
url |
Juste un champ url external |
302 vers l'URL | Tu héberges déjà la page ailleurs (Cloudflare Pages…) |
local |
html_content TEXT dans la DB |
Renvoyé inline depuis /lp/<slug> |
Tu veux héberger toi sans déployer ailleurs |
redirect_tracker |
redirect_config JSONB |
Page intermédiaire qui capture les params puis 302 | Capturer fbclid / gclid / ttclid avant l'offre |
ai |
html_content (généré) + meta (copy + DNA) |
Renvoyé inline depuis /lp/<slug> |
Générer une page complète via LLM + image provider |
Détails complets : types.
Engine v1 vs v2 (pour les landings AI)
Le moteur AI a deux générations co-existantes :
- v1 (legacy, defaut) : pick parmi 20 templates HTML hardcodés (5 originaux + 15 Phase-1). L'LLM remplit les copy slots via mustache. Prédictible, ~$0.02-0.05 par génération.
- v2 (Phase 2) : le LLM émet ÉGALEMENT un Design DNA (palette OKLCH, typo, layout, ornaments, primitive selection) en plus du copy. Le renderer assemble la page à partir de 35 primitives CRO-testées. Chaque landing est visuellement unique. ~30 % de tokens en plus.
Tu choisis via le param engine: "v1" ou engine: "v2" de generate_ai_landing. Le moteur v2 expose 12 archetypes (archetypes) et 35 primitives (primitives).
Où elles sont servies
Trois routes Express dans server.js :
/lp/:slug(ligne ~18565) — accès direct à la landing. Pas de tracking campagne, juste affichage. Utile pour preview, share interne, QA./r/:slug(ligne ~18604) — route spéciale pourredirect_trackerqui sert d'abord un petit intermédiaire JS qui capture les params (fbclid, click_id, etc.) puis fait le redirect server-side./c/:slug(ligne ~7491) — l'URL de tracking de campagne. Le flow engine choisit une landing, puis sert son HTML inline (ou redirect selon le type). Le clic est inscrit dansclicksAVANT le rendu.
Une landing peut donc être appelée selon 3 chemins :
- Standalone preview via
/lp/<landing-slug>(toujours dispo). - Via redirect tracker via
/r/<landing-slug>(uniquement sitype='redirect_tracker'). - Via campagne via
/c/<campaign-slug>(la landing servie est celle choisie par le flow).
Le tableau de bord landings
L'UI admin (/admin/landings) liste toutes tes landings avec :
- Status
is_active(toggle direct). - Type, slug, # de campagnes liées.
- Bouton "Preview" qui ouvre
/lp/<slug>dans un nouvel onglet. - Bouton "Duplicate" qui clone la landing.
- Lien vers le détail (édition HTML, settings, métadonnées).

Quoi faire ensuite
- Types — deep dive de chaque type, exemples.
- AI Builder — comment générer une landing IA, engine v1 vs v2.
- Archetypes — les 12 archetypes V2 + quand utiliser chacun.
- Primitives — les 35 primitives + smart picker.
- Image providers — les 7 providers d'image + coûts.
- Price testing —
price_overridespour A/B prix.
Cycle de vie d'une landing
1. Create (UI ou MCP) → ligne dans landing_pages, slug réservé
2. (AI only) Generate copy → meta.copy + meta.design_dna écrits
3. (AI only) Render HTML → html_content peuplé
4. Test en standalone → /lp/<slug> dans le navigateur
5. Link to campaign flow → schema.landings[].id du flow
6. Receive traffic → /c/<campaign-slug> route via le flow
7. Stats accumulate → clicks + conversions par landing_id
8. (Opt.) Re-render → rerender_landing_from_meta (zero cost)
9. (Opt.) Variants A/B → generate_landing_variants (1-8 siblings)
10. (Opt.) Pause → is_active=false, flows skip silently
11. (Opt.) Archive / delete → soft-delete via deleted_at
Distinguer une landing AI d'une landing classique
Depuis v38, tout vit dans landing_pages (pas de table séparée ai_landings). Le discriminator est le champ type :
type='ai'+meta.copynon-null → c'est une landing AI, regénérable.type IN ('url', 'local', 'redirect_tracker')→ classique.
L'API get_landing_detail retourne tous les types de la même façon. L'ancien get_ai_landing_detail (déprécié depuis v38) est un thin wrapper qui résout l'ID et appelle le tool unifié.
Voir aussi
- Campaigns — flows — comment une landing entre dans le routing
- Campaigns — A/B testing — workflow avec N landings
- Admin UI — Landings — UI référence