Skip to Content
Activity Typeslanding_page — Landing Page Copy

landing_page — Landing Page Copy

FieldValue
Type keylanding_page
LabelLanding Page Copy
Agent queueagent__landing-page-writer
Plan tierPro only (professional plan)
Credits/unit3
Monthly range0–2

What it produces

Full conversion-focused landing page copy rendered as a self-contained HTML file. Output stored in a LandingPage DB record with seven parsed sections (hero, problem, solution, features, socialProof, faq, cta) plus metaTitle and metaDescription.

Typical structure:

  • Hero section: H1 headline + subheadline + CTA button
  • Problem section: Pain points as cards
  • Solution section: How the product solves it
  • Features/Benefits: 3–6 benefit-led cards
  • Social proof: Testimonial placeholders + trust signals
  • FAQ: 3–5 objection-busting questions with answers
  • CTA section: Final conversion push

HTML is rendered on demand by renderLandingPageHtml() in packages/common/src/landing-page-html.ts — inline CSS, no CDN, no JS.


Pipeline sequence

Activity queued landing-page-writer worker LandingPage created (status: dm_review) Activity.status = awaiting_approval DM reviewer approves in DM portal LandingPage.status = client_review Client approves in Dashboard LandingPage.status = client_approved Deliverable.status = approved

Rejection at either gate re-enqueues the worker with wakeReason: "rejection" and increments LandingPage.version.


Status machine

Activity status

StatusMeaning
pendingScheduled, waiting
queuedSubmitted to BullMQ
in_progressWorker running
awaiting_approvalCopy written; waiting for DM review
failedWorker error

LandingPage status

StatusMeaning
dm_reviewAwaiting DM reviewer approval
client_reviewDM approved; awaiting client approval
client_approvedFully approved; Deliverable set to approved
dm_rejectedDM rejected; worker re-enqueued
client_rejectedClient rejected; worker re-enqueued

HITL gates

GateReviewerPortalAction on approveAction on reject
DM reviewDM reviewer/landing-pages/[id]status → client_reviewRe-enqueues worker with feedback; version++
Client approvalClientDashboard /landing-pages/[id]status → client_approved; Deliverable approvedRe-enqueues worker with feedback; version++

Dependencies

None. The landing page writer reads tenant context from ClientContext and the AgentConfig system prompt. No upstream activity dependencies.


DB records created

RecordCreated byNotes
Activityactivity-plannerOne per landing page; deliverableType = "landing_page"
LandingPagelanding-page-writer workerHolds content (raw markdown), sections (JSON), slug, metaTitle, metaDescription, version, status
Deliverablelanding-page-writer workerLinked to LandingPage via landingPageId; moves generating → in_review → approved

Plan restriction

Landing pages are available on the Professional plan only. The deliverable planner checks PLAN_TIER before including this type:

DB plan nameTierLanding pages?
starter0 (free)No
growth0 (free)No
professional1 (pro)Yes

Key rules

  • 3 credits per landing page is the highest per-unit cost of any activity type, reflecting the depth of copy produced.
  • No publishing integration — the HTML file is downloaded by the agency/client and deployed to their CMS or website builder.
  • Monthly volume (0–2) is determined by the deliverable planner based on campaign goals and the tenant’s subscription tier.
  • The HTML renderer normalises legacy agent output — pages generated before the April 2026 prompt fix (which emitted H1: / Subheadline: labels as text) are backfilled via normalizeLabels() in landing-page-html.ts and render correctly without regeneration.

© 2026 Leadmetrics — Internal use only