For one person with an agent, the core is small: pages served from a static host, a form that stores or forwards leads, and a split that sends visitors to version A or B and counts conversions. The weekend goes into the experiment part you would trust ad money to: visitors who always see the same version, bot filtering, a significance test that doesn't invite peeking, and text filled from ad URL parameters. What stays behind is the editor your marketers use without you, popups and sticky bars, a thousand integrations and the AI traffic routing.
Before you buildUnbounce has no free plan, only a 14-day trial, so there is nothing cheaper to try first. If your pages get under 500 visitors a month, Starter at $29 may already be enough.
Build me a personal landing-page server with A/B testing to replace Unbounce. Requirements: - Node.js 22 + TypeScript: Fastify serving static HTML from ./pages/<page>/<variant>.html. `npm start` runs http://localhost:4860, with /admin behind one password from .env. I edit the pages as plain HTML with an agent; there is no visual editor. - Variants: each page folder holds a.html, b.html and more; a manifest.json sets the split percentages, the conversion goal (a form submit or a click on [data-goal]) and an optional end date. - Assignment: the first visit picks a variant by weight and keeps it in a first-party cookie for 90 days, so a visitor always sees the same version. Skip bots (`isbot`) in all counts. - Storage: better-sqlite3 in ./data/pages.db: visitors (hashed cookie id, variant, utm fields, first_seen), conversions, and leads (form fields as JSON, source URL). - Forms: any <form data-lead> posts to /lead; validate with zod, include a honeypot field and a per-IP rate limit (`@fastify/rate-limit`), store the lead, then send it by email through nodemailer SMTP from .env and, if set, as JSON to WEBHOOK_URL. - Dynamic text: elements marked data-utm="utm_term" are filled from the query string at render time, with a default when the parameter is missing, HTML-escaped. - Results in /admin: per page and variant, visitors, conversions, rate, and a two-proportion z-test at 95%. Show "not enough data" until each variant has 100 visitors and 7 days have passed, so nobody calls a winner early. - Leads page: search, CSV export and delete. Single user. No accounts, no telemetry; cookies are first-party only. - Out of scope: a visual editor, popups and sticky bars, bandit algorithms and AI routing, payments. - README: serving it behind Caddy on a VPS with a real domain, a sample cookie-notice sentence, why low traffic needs long tests, and a warning that a stats number is not a promise.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Unbounce.
Add popups and sticky bars to the landing-page server in this folder. Requirements: - An overlays/ folder with one JSON file per overlay (type popup or bar, HTML, trigger, pages it applies to) served by a /overlay.js script that pages include with one tag. - Triggers: after N seconds, after scrolling X percent, or when the pointer leaves the top of the window on desktop. A cookie caps each overlay at once per visitor per 7 days. - Overlay forms post to /lead like page forms and count as conversions for the page. - Closing with Escape, a visible close button, and no overlay on the first 3 seconds. - Update the README.
Add multi-step forms to the landing-page server in this folder. Requirements: - A <form data-steps> splits into steps by <fieldset>, with next and back buttons and a progress bar, in vanilla JS with no build step. - After each step, POST the answers so far to /lead/partial with a random lead id kept in sessionStorage; store them as a partial lead and mark it complete on the last step. - A leads filter for complete and partial, with the last step reached for partials. - Escape every stored value when it is displayed, and delete partials older than 30 days. - Update the README with a note about collecting data before consent.
Make lead delivery reliable in the landing-page server in this folder. Requirements: - Write every lead to an outbox table before replying to the visitor, then deliver to WEBHOOK_URL in the background. - Retry failures with exponential backoff up to 8 times; sign each request with an HMAC-SHA256 header over the raw body using WEBHOOK_SECRET. - An admin page listing pending, delivered and failed deliveries, with a retry button. - Email me a summary when a delivery fails for good. - Update the README with a sample receiver.
Add a weekly results email to the landing-page server in this folder. Requirements: - Every Monday at 08:00 in the time zone from .env, email one summary: per running page, the visitors, conversions and rate of each variant and the days left before the minimum test length is reached. - Declare a winner only when the existing 95% test passes and both minimums are met; otherwise write "keep running". - Show new leads count for the week and the top three sources by utm_source. - Add a --send-now flag for testing. Update the README.
Marketers pay to publish and test a page the same afternoon without asking a developer, and to know it will stay up when an ad budget sends a crowd. The editor, the hosting, the integrations and the experiment reports arrive as one tool, with hosting included in every plan.
Estimate · Runs on a $5 VPS or a free tier of a Node host; SMTP at lead volumes fits free tiers. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $29 | $22 | 5 landing pages, up to 500 visitors a month, 1 user, 1 root domain, drag-and-drop builder, lead forms, free hosting. |
| Build | $99 | $74 | Unlimited pages, up to 20k visitors, 1 user, 1 root domain, popups and sticky bars, multi-step forms, custom code, scripts and pixels, AI copywriting, 1000+ integrations. |
| Experiment | $149 | $112 | Unlimited A/B tests and variants, up to 30k visitors, 3 users, 2 root domains, manual traffic split, confidence intervals, dynamic text replacement, conversion reporting. |
| Optimize | $249 | $187 | Up to 50k visitors, 5 users, 3 root domains, AI traffic optimization, scheduling, advanced triggers, industry benchmarking, audience insights. |
| Concierge and Agency | custom | — | Concierge: from 100,000 visitors, 15 users, 5 domains, implementation help and a customer success manager. Agency: from 50,000 visitors, 5 users, 10 domains, listing in the partner directory. |
No free plan: a 14-day trial with no card, limited to one user, no custom domains and some traffic limits.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: A drag-and-drop editor teammates can use without touching code, Popups, sticky bars and triggers such as exit intent or scheduling.
About $29 a month on the Starter plan, $348 a year (checked 2026-10-19).
A drag-and-drop editor teammates can use without touching code; Popups, sticky bars and triggers such as exit intent or scheduling; 1000+ integrations; you get a webhook and email instead; AI traffic optimization, benchmarks and audience insights; Hosting built for ad bursts, and a support team to call. If any of those matter to you, keep paying.
Yes: Webstudio (open source), Mautic (open source), GrowthBook (open source).