Build with AI

How to build a lead capture CRM for your business with OpenAI Codex (no coding required)

The people who filled in your form are the warmest leads you will ever get, and most of them go cold in an inbox. Build the app that catches them: embeddable forms, automatic routing, and follow-up, described one task at a time from your terminal while Codex writes the migrations, the policies and the screens as diffs you approve.

August 2026 · 43 min read · Updated September 2026

OpenAI Codex

$ Build a lead CRM: an embeddable form anyone can fill in, leads that carry their source and status, and a rule that hands each new one to the next rep in turn.

  • Schema written as migrations
  • Public write path proved
  • Ready for your review
You describe it, Codex builds it
Start here

What a lead capture CRM actually is

It is the front door of your sales process: the forms, pages and chats a stranger arrives through, and the single record each of them turns into so that somebody can follow up.

Without one, that first contact lands in four places at once. The website form emails the office inbox, the chat widget keeps its own history, the list from last month’s conference is still a spreadsheet, and nobody can say which of those people has been called. The leads do not vanish, they go quiet.

Collecting names is the easy half. The job is putting each new one in front of the right person while they still remember filling the form in, and knowing afterwards which of your sources produced business rather than traffic.

Every way in, one record

A form on your site, a page behind an ad, a chat with a visitor, and a spreadsheet you import all end up as the same kind of lead, carrying the same fields.

An owner within minutes

The lead is assigned as it arrives rather than at the next stand-up, so the person who has to make the call already knows it is theirs.

Sources you can compare

Each lead keeps where it came from, so you can tell which form, page or campaign paid for itself and which one only produced clicks.

Why the first minutes decide it

66.7%

of qualified form submissions turned into a booked meeting when the form handed the lead straight on, against an industry average the same report puts at 30%. That is Chili Piper’s 2025 benchmark across nearly four million submissions, measured on its own customers, so read it as what closing the gap is worth rather than as a neutral survey.

Chili Piper, 2025 benchmark of its own customers · checked August 2026

What a lead CRM needs

The parts every lead CRM is built from

Six pieces, and you describe each one rather than write it. Knowing what they are is what stops the first prompt producing a form with nowhere to send its answers.

01

The ways a lead can reach you

A form on your own site, the same form embedded on somebody else’s, a landing page sitting behind an ad, a chat widget in the corner of the screen, and a spreadsheet of the people you already met. Each one writes the same record, which is what makes the rest of the app possible.

02

One lead, with its history under it

Name, email, company, source and status on the record, and every form fill, chat, email and change of owner listed underneath in the order it happened.

03

A rule that decides whose lead it is

Each rep in turn, or split by territory, product or company size. Which rule you pick matters less than having one, because an unassigned lead is a lead nobody calls.

04

Enrichment and a score

An email address on its own is thin material for a phone call. Filling in what the domain tells you, then ranking how warm each lead looks, is what lets a rep start at the top of the list instead of the top of the alphabet.

05

Follow-up that carries on without you

A short sequence of emails with a gap between them, stopping the moment somebody replies, plus the reminders that put the next call in front of the rep who owns it.

06

Reporting by source

Which form, page or campaign produced the leads that turned into business. Without it you are tuning a number that only counts submissions.

Build vs buy

Own the front door or rent it four times

The usual lead stack is four subscriptions, and each one meters something different: responses on the form tool, visitors on the landing-page builder, conversations on the chat widget, and seats on the CRM they all push into. None of those is the size of your team, so the bill follows your marketing. Owning it makes the four one app. Here is the trade-off, side by side.

Build your own

One app that takes the lead in, decides who owns it, and follows it up, on a database you control. With an AI coding tool writing the plumbing, that build is measured in days rather than months.

  • One bill for the database and the host, whatever your marketing does that month
  • A form that writes straight into your own leads table, with no integration in the middle
  • Routing that matches how your team is actually split, rather than the two or three splits a vendor offers
  • Every lead, chat and campaign in one database you can query
  • Add your own AI on the model you choose: enrichment, scoring, a drafted first reply
  • You own the code and the data outright, and can take either elsewhere whenever you like

Buy the stack

HubSpot · Typeform · Tidio · Unbounce

Every piece exists as a product already, polished and live this afternoon. You pay four meters for it and you maintain the joins between them.

  • Live this afternoon: sign up, build a form, paste the snippet
  • Polished editors, ready-made templates, and vendor support included
  • Deliverability, spam filtering and uptime are somebody else’s problem
  • Four meters rather than one bill: responses, visitors, conversations, and seats
  • A lead has to travel between products, so somebody keeps those connections working
  • The parts that make it a system rather than a form, meaning routing, sequences and source reporting, sit on the higher tiers
  • Your leads live on their servers, exported on their terms
HubSpot Marketing HubFree for 2 users, then $7-$20 / seat / mo

The one vendor here that covers the whole stack, and the step up is steep. Starter is $7/seat/mo on annual billing and $20 month-to-month, holding 1,000 marketing contacts. The routing, sequences and campaign reporting most teams arrive for sit on Professional, at $800/mo annual or $890 monthly for three seats, plus $45/mo for each seat after that and a one-time $3,000 onboarding fee.

hubspot.com · checked August 2026

TypeformFrom $28 / mo, metered on responses

Priced by how many people answer rather than by how many of you use it. Basic is $28/mo on annual billing ($39 month-to-month) and stops at 100 responses a month, so a paid plan can run out because your marketing worked. A thousand responses means Plus at $56/mo annual ($79 monthly).

typeform.com · checked August 2026

TidioFree for 50 chats, then from $24.17 / mo

Live chat, metered on conversations a person answers. Free covers 50 a month and Starter is $24.17/mo month-to-month or $290 for the year, for 100. Growth starts at $49.17/mo for 250. Ten seats come with every tier including Free, so what prices this one is your traffic rather than your headcount.

tidio.com · checked August 2026

UnbounceFrom $22 / mo, metered on traffic

Landing pages, priced on how many people see them. Starter is $22/mo annual ($29 monthly) for one seat, one domain and 500 visitors a month, so an ad that starts working moves you to Build at $74/mo annual ($99 monthly) for 20,000. Conversions are unlimited on every plan, which means the ad spend in front of the page sets this bill rather than the leads coming out of it.

unbounce.com · checked August 2026

Rule of thumb: if your lead volume moves around, or the four products above are already talking to each other through a fifth, building your own pays for itself inside a year and never charges you by the response again. If you are one person still finding out whether anybody wants the thing, rent it for now and come back when a meter starts deciding your marketing for you.

No dev needed

Why build with Codex

Most software looks simple from the outside, but almost all of the actual work is invisible: a database, logins, permission checks, forms that validate what people type, and dozens of screens that read and write records. Doing that by hand means knowing the whole stack cold, so weeks pass before the first feature a customer would notice actually works.

Codex closes that gap by working the way a developer would, just faster. The whole workflow becomes a simple loop:

The build loop
1

Describe

Tell Codex what you want, in plain language.

2

Build

It edits the real project files, backend and auth and UI, rather than replying in a chat.

3

Check

Run the app yourself and confirm the change works.

Repeat

Describe the next change.

Loop back to Describe

None of that loop needs a computer-science background, which is why one person can take an idea to a working app over a handful of focused sessions.

Three hard partshandled for you

The data model, authentication, and access rules are the pieces that make software like this genuinely hard to build alone. Describe them and Codex scaffolds all three, leaving mostly screens to build on top.

Any language is the interface

There’s no code to write, and no requirement to describe it in English. Ask for a new field, a renamed step, or an AI summary in whatever language you think in, and Codex implements it.

Local files it edits directly

Codex works on the project on your own disk rather than a copy somewhere else, so what it changes is exactly what you see when you run the app. Point it at the handful of files that matter and it stays fast and focused.

What it costs

Pay a developer, or do it with AI

Pay Once, Own Forever. Avoid recurring per-seat subscription fees and software tier upgrades as your team grows.

Hire a developer

Custom build, from scratch
Developer
~$13k-$53k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
Build time
~265 hrs of their work

~$13k-$53k to build, then ~$25/mo after launch

Seniority moves that range further than scope does. It is our ~265-hour estimate priced against the survey below, where North American freelancers run $40 to $150/hour by experience and agencies add another 20-40% on top, so the realistic floor is about $50/hour and an agency putting a senior on the job lands near $200. All of it is spent before a single lead arrives. After launch there is only the database and the host to pay for.

Build it with Codex

From scratch, with Codex
Codex
~$20/month (Plus) to ~$200/month (Pro)
Backend (Supabase)
Free tier · $25/month (Pro plan)*
Hosting
$0 on a free tier
Your time
~125 hrs

~$20-$200/month while you build, then whichever plan you keep using

Codex itself is free to install. The cost sits in the ChatGPT plan behind it, or in API usage if you sign in with a key instead. Plus, around $20/month, covers a template import or a short build. A from-scratch build that runs for weeks usually needs Pro’s top usage-multiplier tier instead, which lands around $100 to $200 a month. The fee doesn’t shrink when you start from a template the way a per-hour developer bill would: the template changes how many of the hours in the estimator above you actually spend, not which ChatGPT plan you’re paying for.

* Supabase’s free tier is a building tier rather than a running-a-business tier: 500 MB of database, 2 active projects, and a pause after a week without activity. That pause matters more here than on most apps, because the form embedded on your website goes down with the project, and a lead that arrives while nobody was signed in is not queued anywhere. The Pro plan, from $25/mo, keeps it awake.

Both columns end the same way: the code is yours, nothing charges you by the response, and the thousandth lead in a month costs exactly what the first one did. The difference is whose hours go in: a developer’s, invoiced at $13k-$53k, or your own, spent describing the app and checking what comes back.

Prices and rates from supabase.com, developex.com and learn.chatgpt.com, checked August 2026.

Plan first

Decide before you build

Six questions about how leads reach you and what happens next. None of them is technical, and all of them are cheaper to answer now than after a thousand records exist. Write your answers down before the first prompt.

01

Which doors you open

A form on your site, the same form embedded elsewhere, a landing page behind an ad, live chat, an import. Each one is a real piece of work, so decide which you actually need. Most teams start with a form and an import, and add chat once somebody is free to answer it.

02

What a lead has to tell you

Every field you ask for costs you completions, and every field you skip costs a rep a phone call. Settle the shortest list that lets somebody decide whether to follow up, plus the source, so you can compare where your leads come from later.

03

Who gets the lead

Each rep in turn is the simplest rule and works until territories or products differ. Decide the rule now, along with what happens when the chosen rep is away, because an unassigned lead sits in the list looking exactly like a handled one.

04

Consent, and how you prove it

Whether somebody has to confirm by email before you write to them is a legal question in most of Europe and a deliverability question everywhere else. Decide it up front: it changes the form, the record, and what your first email is allowed to be.

05

What happens when nobody replies

How many follow-ups, how far apart, and what stops the sequence. A reply should stop it, and so should a rep marking the lead dead. Agree that before you build it, because a sequence that keeps writing to somebody who already answered is worse than no sequence.

06

What a bad week looks like

Not your average volume, your worst one. A campaign that works, a post that travels, or a bought list arriving at once are what strain imports, indexes and your Supabase tier. Knowing the peak now saves reshaping the schema after it happens.

Approaches

Comparing your build options

The starting point decides how much of this estimate goes on machinery nobody will ever see. Here is one lead CRM three ways: entirely by hand, on a UI kit that ends at the screens, or with Codex working task by task on the real source.

~265 hrsBuilding by hand

Most of the money goes on logic nobody ever sees. A stranger has to be able to write into your database without being able to read a single row back out of it. The same person filling in the same form twice has to arrive as one lead rather than two. The rep who gets it has to be picked by a rule rather than by whoever happens to be looking. All of that is code, and a mistake in it loses a lead you paid to get.

~195 hrsGeneric UI starter kit

A starter kit hands you the screens: a dashboard, a table of leads, a settings page. It knows nothing about where those leads come from. The form that feeds the table, the rule that decides whose lead it is, and the checks that keep one rep out of another rep’s list are still a developer’s job.

~125 hrsAI-powered development with Codex

Rather than writing code, you describe one task at a time and read the diff before you keep it. The access rules arrive as part of the work, so you can open your own form with no session, submit it, and confirm that the visitor who just created a lead cannot read a single one back.

Interactive calculator

Estimate your exact build timeframe

Plenty of teams need less than all of this. If every lead you get arrives through one form, or you would rather answer chats in the tool your website already has, untick those two and the estimate drops with them.

What your lead CRM needs

Your estimate

125 hrs

start to finish

Based on the 8 of 8 features you’ve selected, plus ~31h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.

A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.

Setting up your workspace

Let’s set up the tools you need

Before step 01, four things go on your computer. It takes about 15 minutes in total, and none of it is coding. Three are ordinary installers, and the fourth is a ChatGPT plan with Codex access switched on. After that, you build by describing what you want in plain language.

1

OpenAI Codex

Cost: Free to install · needs a paid plan to build with

Your main AI assistant. The app itself costs nothing and installs with a single command from OpenAI, then runs in your Terminal. What it costs to use is the next card: every request spends the usage allowance on your ChatGPT plan, and the free plan’s allowance is small enough that a build of this size stops early. Codex is also built into an extension for popular code editors and into the ChatGPT desktop app, which can hand a longer task off to Codex cloud to keep running in an isolated environment while you do something else.

Install Codex CLI
2

ChatGPT plan

Cost: ~$20/month (Plus) or from ~$100/month (Pro)

Codex is technically included on the free ChatGPT plan too, but Free’s usage is the tightest of any tier. OpenAI doesn’t publish Free’s own cap, only that every paid tier gets a larger multiple of it, so treat Free as a way to try Codex rather than to build with it. ChatGPT Plus, around $20/month, is the realistic starting point, and a long, from-scratch build tends to need the top ChatGPT Pro tier, priced by usage multiplier at roughly $100 to $200/month. Codex can also run on pay-as-you-go API billing instead of a ChatGPT plan, if you’d rather pay per token than hold a subscription.

Compare ChatGPT plans
3

Node.js engine

Cost: Free

The engine that runs your app on your own computer. You never have to learn how it works: download the version marked LTS (the most stable one), install it, and forget about it.

Download Node.js (LTS)
4

Supabase (database)

Cost: Free to start

Where your project keeps its data. Install it, then sign in once by running supabase login. Words like migrations and row-level security turn up later in the guide, and Codex writes those parts for you.

Install Supabase CLI

Nothing here is worth memorizing. These four just need to exist on your machine. From step 01 on, you say what you want and Codex runs the commands.

Step by step

Build your lead CRM core, one Codex task at a time

You describe a task, Codex writes the files and runs the commands, and you read the diff. The order below is deliberate: conventions first, then what a lead is, then who on your team reaches it, then the door strangers come through, then the form itself.

  1. 01

    Write AGENTS.md before anything is scaffolded

    Codex reads AGENTS.md at the start of every task, so writing it first means your vocabulary is loaded before there is any code to be inconsistent with. The scaffold follows in the same task.

    PromptSet up the project
    Start by writing an AGENTS.md at the project root. The stack is React 18, Vite, TypeScript, Tailwind and the Supabase JS client, and this project is a lead capture CRM, so fix the vocabulary you should hold to (lead, form, submission, activity, rep, source, status) along with any conventions you want followed. You load that file automatically at the start of every later task, so nothing in it needs repeating by hand. Then scaffold the project: a typed Supabase client under src/lib reading VITE_SUPABASE_URL and the publishable key (the sb_publishable_… key that replaced the older anon key) from .env, with .env confirmed present in .gitignore. Start the dev server once to prove it boots before you stop.

    Writing AGENTS.md first is what stops task five inventing a second name for what task two already called a submission.

  2. 02

    Have Codex write the schema, and read the SQL before it runs

    Four tables carry the product. Ask to see the migration before it is applied, because this is the one shape that is expensive to change once real leads exist.

    PromptSet up your records
    Write the Supabase migrations for a lead capture CRM. A lead is a person who might buy: name, email, company, phone, a source (form, chat, import or manual), a status (new, contacted, qualified, converted or rejected), a score, and the rep it is assigned to. A form is what collects them: title, slug, published flag, and its fields as JSON. A submission is one raw set of answers, linked to its form and to the lead it produced. An activity is anything that happened to a lead, with a type and a note. Every table gets a created_at. Print the SQL for me before it runs, and regenerate the TypeScript types once it is applied.

    A submission and a lead are two different things: one is what somebody typed, the other is who you decided they are. Collapsing them is the modelling mistake that costs a rewrite.

  3. 03

    Narrow permissions, then wire up sign-in and roles

    This task touches authentication, which is exactly the kind of change worth scoping Codex down for rather than leaving the wider settings you would use for routine edits.

    PromptAdd logins and the two roles
    This task touches authentication, so narrow your permissions to it rather than keeping whatever you had set for routine edits. Set up Supabase Auth with email and password: sign-up, login, logout, a session that survives a refresh, a useUser hook, and a guard sending signed-out visitors to /login while the public form route stays open to anyone. Then create an app_role enum with 'admin' and 'rep', and a user_roles table linking a user_id to a role. Roles belong in that table and never on the user record itself, because a user can edit their own metadata and would simply grant themselves admin. Add a SECURITY DEFINER function has_role(_user_id uuid, _role app_role) so the next task's policies can call it without recursing.

    Everything in the next task is written against these two roles, so they come before the rules rather than after.

  4. 04

    Read this diff properly: it is the one holding your list

    Of every diff in this build, this is the one to actually read. A stranger with no account has to be able to create a row and must not be able to read one, and those are two separate policies that have to be right at the same time.

    PromptLock the tables to the two roles
    Turn on row-level security for leads, forms, submissions and activities. A rep may select, insert and update only rows where assigned_to = auth.uid(). An admin, checked through has_role, reaches every row. Every insert and update needs its own WITH CHECK clause, so no one can file a row under another rep’s name or move an existing lead onto them. One migration, and show me the SQL before it runs.
    PromptLet a stranger write one row and read nothing
    Now the public path, which is the whole point of this app. Add a policy letting the anonymous role INSERT into submissions and do nothing else: no select, no update, no delete, and no anonymous reach into leads, activities, form content or user data. A server-side function turns the submission into a lead, so the browser never writes to leads directly. Then walk me through proving it with no session at all: submitting the form should succeed, and a request for the leads table should come back empty rather than with an error I could mistake for a network fault.

    Get this backwards and everyone who ever filled in your form is readable by anyone who opens the browser tools on it.

  5. 05

    Point Codex at the form builder, a few files at a time

    The builder, the embedded form, and the rule that assigns what comes through it. Codex only needs the files each piece touches rather than the whole project.

    PromptBuild the form builder and its embed
    Build the form builder on top of what exists. A screen where I add fields (text, email, phone, select, checkbox), mark which are required, and publish. A public route at /embed/forms/:slug rendering only the form, with no navigation and no app chrome, so it looks like part of whatever page it lands on. An Embed tab on each form showing the iframe snippet to paste elsewhere. Submitting writes a submission through the anonymous policy from the last task and shows a thank-you state rather than a blank screen. Keep the data access in typed hooks rather than spread through the components.
    PromptAssign each new lead to a rep
    Add the server-side function that turns a submission into a lead: map the answers onto the lead fields, set the source, check whether that email already exists and attach an activity to the existing lead rather than creating a duplicate, then assign it to the next active rep in turn. Make the assignment mode a setting whose options are round-robin and unassigned, and record every assignment as an activity so the history shows who got what and when.

    Building the rule as a setting rather than as code is what lets you move to territory or product routing later without reopening the capture path.

  6. 06
    Destination

    Walk it end to end, then hand the next piece to a cloud run

    Test it as a stranger first, from a browser with no session. After that, live chat and the campaign sequences are long, well-scoped pieces of work, reasonable ones to hand to a cloud task while you do something else, as long as you read the diff before it merges.

    PromptWalk it end to end and plan what is next
    Run the app and take it end to end yourself: sign in as an admin, publish a form, then open its embed URL in a private window with no session and submit it. Confirm the lead appears with the right source, that a rep was assigned, and that the same email submitted twice becomes one lead with two activities rather than two leads. Sign in as that rep and confirm they see their own leads and nobody else’s. Fix what does not hold up, then list what to build next (live chat, campaign sequences, AI enrichment) in priority order, and tell me which of them are self-contained enough to hand you as a single cloud task.
Authentication & security

No lead list to leak, no secret key to hack

A lead CRM has a database, logins and a public form that strangers write to, so here is how your app stays secure and how to protect sensitive client data using simple rules to control who can see every lead versus who can only work their own.

A door that only opens outward

The public form writes one row and can read nothing at all. That is a rule in the database rather than a check in the page, so a visitor who opens the browser tools and asks for your leads table gets an empty answer rather than your pipeline. It is the single most important rule in this build, and the one to test first.

A public form is a public target

A form anyone can reach is a form robots will find, so budget for the three defences that actually work: a hidden field a person never fills in, a limit on how often one address may submit, and a check before a lead is created twice. None of them is hard to ask for, and all of them are much harder to add once your list is full of junk.

Sign-in you did not have to write

Nobody here handles passwords. Sign-up, sign-in and staying signed in come from a system that has been attacked for years and held, working from the first prompt with email and password. Google sign-in or one-click email links are a small addition whenever you want them.

Two roles before you need three

An admin who sees every lead, form and campaign, and a rep who works the leads assigned to them. That split covers most teams for a long time. Ask for a manager who sees one team, or a read-only account for a client, when the day comes that you need it.

Ownership the database enforces

A rep reaches the leads assigned to them and nothing else. An admin reaches all of them. Those rules live in the database rather than in the screens, so somebody querying the data directly gets back exactly what their own role allows and no more.

Backups start on the paid tier

The free tier keeps no backups at all, so during the build your database is the only copy of the work. Supabase Pro, from $25/mo, holds a daily backup with seven days of history behind it, which is the difference between a bad import costing you an afternoon and it costing you the list. Move to it before the first real lead arrives.

PromptCheck who can see what
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.

Paste this before launch so Codex checks nobody can see data they shouldn’t.

One rule outranks everything above it: the secret key that bypasses your access rules stays on the server. If it ever turns up in the app, in a repository, or pasted into a support ticket, rotate it in the Supabase dashboard before you do anything else.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • An AGENTS.md file at your project root: Codex reads it automatically before every task, so you never have to remind it
  • Setting Codex’s permissions once for the session, instead of approving every small edit by hand
  • Handing a long, well-scoped task to Codex cloud, so it keeps working in an isolated environment while you do something else
  • Reviewing a diff in the IDE extension, next to the code it touched, before you keep it

Slows the build

  • Leaving permissions wide open for a sensitive change instead of narrowing them for that one task
  • Skipping the AGENTS.md file, so Codex starts each new task without your conventions loaded
  • Handing Codex cloud a vague, open-ended task, where you can’t steer it mid-run the way you can in a live terminal session
  • Merging a cloud task’s changes back in without reading the diff first
Version control

Git: what it is, and why you need it

Before you build anything, meet the one tool that makes building safe. You need no coding background for it: Git remembers every version of your project, so you can try things, break things, and get back to a working state in seconds.

What Git actually is

Git is a quiet recorder that runs alongside your project. Each time you save your work it keeps a full snapshot, so the entire history of your project lives on your computer, not just whatever the files look like right now.

Why you need it

Codex asks before it edits files or runs commands, unless you widen its permissions for the session. Once you do, Git is what makes that safe: there’s always a working version to return to, so you can hand it a bigger task without the fear of losing what already works.

A commit is a save point

Each commit is a snapshot with a short note, like “added the home page”. Make one after every working step and you can jump back to any of them later.

GitHub’s beginner guide to Git

Undo anything, safely

If a change breaks something, you roll back to the last good commit instead of unpicking it by hand. It’s the safety net that keeps a Codex session low-risk even once you’ve widened its permissions.

GitHub is also where Codex can start from

Git lives on your computer. GitHub is a free, private cloud copy of the same project. Keep it private, and never commit secret keys or passwords. Once your project is pushed there, Codex cloud can pick up a task straight from a GitHub issue or repo, without you opening a terminal at all.

Create a free GitHub account

You rarely type git commands

There’s little to memorize. Ask Codex to “commit this” or “undo the last change” and it runs the git steps for you, inside whatever permission boundary you’ve set. Prefer clicking to typing? The Codex extension for your editor shows each change next to the code it touched before you keep it, and GitHub Desktop gives you plain buttons for saving and rolling back.

Get Codex
Going live

Where to host your application

Hosting gives your app a home on the internet so anyone can open it via a web link. Choose a service below to make your site live. (Your database, logins, and business records are stored separately in Supabase, covered below).

HostBest forNotesFree tier
VercelOne-click deploysConnect the repository and every push publishes itself, with nothing to configure for a standard Vite project. Read the licence before you rely on the free tier: Hobby covers personal, non-commercial projects, and an app collecting leads for a business fails that test at any size, so plan on Pro, which starts at $20 per user each month.Pro from $20/user/mo (Hobby is non-commercial)
NetlifyDrag-and-drop or GitPoint it at the repository, or bypass Git entirely and drag the built folder onto the page. Do add the redirect rule it prompts you for: without it a link aimed straight at one of your landing pages answers not-found, and that link is what your ad is paying to send people to.Free tier
Cloudflare PagesCheapest at scaleOne setup, then your pages load from whichever Cloudflare location is nearest the visitor. Worth having when the traffic you are paying for arrives from several countries and a slow page is a lead that leaves.Generous free tier
GitHub PagesFree Git-based hostingPublishes straight from your GitHub project once a single routing setting is in place. The catch is what it costs to stay private: serving a site from a private repository sits on a paid GitHub plan, and everything in this build reads your database credentials from a file you are keeping out of a public repo. Free here means published, which is not what you want.Free from a public repo only
Firebase HostingSimple setup, Google stackOne configuration, then a single command whenever you want the latest version live. Worth picking mostly when Google is already where your company’s accounts are, so nobody has to approve another supplier.Free Spark tier
AWS Amplify HostingTeams already on AWSSet up through the AWS console, with one rewrite rule so deep links keep working. Sensible when AWS is already where your invoices come from, and handy if you also send your campaign mail through SES.Free tier (build + hosting)
SurgePublish from the terminalOne command and the built folder is online, with no repository in the loop. Useful for putting a half-finished landing page in front of a colleague for an opinion before anybody points an ad at it.Free - unlimited publishing
DigitalOcean App PlatformDigitalOcean usersPoint it at the project and it handles building and serving, alongside whatever else lives in that account.Free - 3 static sites, 1 GB/mo transfer

Any of them will serve this app, and your AI coding tool can wire up whichever you pick. Two things are worth checking before the price. The licence comes first, because free does not always mean free for business use, and Vercel’s Hobby tier says plainly that it is for personal projects. The second is in the warning below, and it is the one that catches people out.

Your form can work on your site and show an empty box on your customer’s. The embed is a frame pointing back at your deployment, so if your host sends the headers that stop a page being framed, the form loads fine on your own domain and renders as nothing everywhere you actually pasted it. Check it on a real outside page before you send the snippet to anyone, and if it comes back blank, ask your AI coding tool to allow framing for the embed route only rather than for the whole site.

Database & backend

Keep your data in Supabase

The host above serves the app. Everything the app remembers lives here instead: the Postgres database with every lead in it, the accounts your reps sign in with, and the server-side functions that turn a submission into an assigned lead.

ServiceBest forNotesFree tier
SupabaseData, auth, functionsThe database, the sign-in, and the server-side functions behind the AI features. Open a free project, give the app its URL and its publishable key, and the two are joined up.Free tier, then usage-based
If you email the leads yourself

Choosing how your mail actually gets sent

Your app writes the sequence and decides when each step is due. Handing that message to somebody’s inbox is a different job, and it belongs to an outside service. If your reps reply from their own mailbox, you need none of these, and capture and routing work perfectly without one.

ResendGetting started without a cardFree for 3,000/mo, then $20/mo for 50,000

The quickest of the three to wire up, and the free tier is genuinely enough to run a small sequence: 3,000 emails a month, capped at 100 a day, across three of your own domains. The daily cap is the one to watch, because a campaign that goes out to a big list in one batch meets it before the monthly figure does.

resend.com · checked August 2026

PostmarkMail that has to arrive$15/mo for 10,000, then $1.80 per 1,000

Built around delivery rather than volume, and priced accordingly: the free tier is 100 emails a month, which is a test rather than a plan. What you buy is separate handling for the mail people expect and the mail you decided to send, which is what stops one bad campaign taking your password resets down with it.

postmarkapp.com · checked August 2026

Amazon SESVolume, once you know what you are doing$0.10 per 1,000 emails

By a distance the cheapest per message, and the one that expects the most from you. New accounts get $200 of AWS credit for six months, attachments cost $0.12 a gigabyte, and a dedicated sending address is $24.95 a month. Reputation and bounce handling are yours to manage, so this is the right answer second rather than first.

aws.amazon.com · checked August 2026

Do the multiplication before you pick. A four-step sequence sent to a thousand new leads is four thousand messages, which sits inside Resend’s free tier and costs about forty cents on SES, so at that size the price is not what you are choosing between. What you are choosing is who takes the blame when mail stops arriving. Volume changes the answer, and it changes it slowly: at a hundred thousand a month the same four steps cost $10 on SES and about $90 elsewhere.

AI workflows

Add AI capabilities in one simple step

Securely route your AI API keys through a lightweight serverless function. Use simple prompts to automatically turn incoming client inquiries into enriched, scored leads with a one-line brief and a drafted first reply.

Turn an email address into something to call

A work address tells you the company before anybody picks up the phone. Filling in the name, the industry and a rough size from the domain is what turns a bare row into a lead a rep can prepare for.

PromptTurn an email address into something to call
Add one server-side "ai" function that talks to your AI provider, with the key held in server secrets and never anywhere the browser can reach. Then put an "Enrich" action on the lead view that sends the email domain and any fields we already have, asks for the company name, industry and rough size, writes them onto the lead, and marks personal-email domains as not enrichable rather than guessing. This runs on every new lead, so use the cheapest and fastest model tier.

Rank how warm each lead is

Reps work top to bottom. A score out of 100 with one line of reasoning behind it decides what that order is, from the fields on the lead and what the person has already done.

PromptRank how warm each lead is
Add a "Score" action that sends the lead’s fields, its source, and its recent activity to the ai function, asks for a 0-100 score and a one-line reason, stores both on the lead, and colours the badge by band. Sort the leads list by score by default and let a rep override it. Scoring runs on every lead too, so keep it on the same cheap, fast tier as enrichment.

Draft the first reply

The first message back is the one that decides whether there is a conversation. A draft built from what the lead actually filled in beats a blank box, and the rep still edits it before it goes.

PromptDraft the first reply
Add a "Draft reply" button on the lead view that sends what the lead submitted, the page or form it came from, and any chat transcript to the ai function, and returns a short editable first email in the rep’s own tone. Show it in a modal with copy and insert actions, and never send it automatically. This is everyday writing, so use a mid-tier model rather than the cheapest or the strongest.

Each prompt above should pick whichever model tier fits the job: a fast, lower-cost model for high-volume work, and a stronger reasoning model for anything that weighs tradeoffs against each other. Codex’s model names change faster than this page does, so check OpenAI’s current model line-up (linked in the references below) before you build, rather than copying a name you saw once. Keep all of it behind that same ai function, so one key and one rule set covers every feature you add.

Ready-made option

Get a head start with our template

That was the from-scratch path, start to finish. If you would rather not build the capture side before you can use it, our ready-made template begins past the scaffolding, and your time goes into what makes it yours.

Lead CRM

The exact lead CRM this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A lead-capture workspace where you bring leads in from forms, landing pages, live chat, and CSV import, enrich and score each one with AI, run multi-step email campaigns, and route fresh leads straight to your sales reps. An admin side oversees everything while each rep works their own leads, tasks, and chats.

React 18ViteTypeScriptTailwind CSSSupabaseRecharts
Out of the box

The key benefits of starting with a template

The hard, invisible parts are built and working already, so your time goes to the form your visitors see and the rule that decides who calls them.

Building the core from scratch

~125 hrs

Opening the template, already built

~1 hr

Pay Once, Own Forever. Build exactly what your team needs without renting a monthly SaaS subscription, paying per-seat fees, or dealing with platform lock-in.

A working capture flow on day one

Open an app that already takes a submission, creates the lead, and shows it in the list. The form builder, the embed, the chat and the CSV import all work before you change anything.

Admin and rep kept apart

The admin side oversees every lead, form, chat and campaign, while a rep sees only what is assigned to them. The database enforces that split on every request rather than the screens hiding rows.

Campaigns and reporting already wired

Multi-step sequences, their open and reply figures, round-robin assignment, tasks and the source reports are built. Connect a mail provider when you want the sequences to actually go out.

Clean structure your AI can safely customize

The template follows clear, predictable rules, so you can ask your AI coding tool to add a field, a channel or a routing rule without putting your access rules or your source numbers at risk.

Customer story

From founders who build on our templates

Every client asks for the same thing: a form on their site that actually reaches a human. We used to wire up three services for that and then maintain the connections between them. Now we start from this, restyle it, point it at the client’s own database, and hand it over inside a week.
Matt GrahamMatt GrahamFounder & CEO, RapidDev
Got questions?

Common questions

No. You say what you are collecting in ordinary language, and the tables, the sign-in and the rules over both get written for you on top of Supabase. One job stays yours: opening the free Supabase project everything points at. That is deliberate, because it is what puts the leads in an account with your name on it rather than ours.

Yes, and that is the usual case. The form is published at its own address on your app and pasted onto any other site as a short snippet, so it works on a WordPress page, a Squarespace site, or a page somebody else maintains. Read the going-live warning further up before you send that snippet out, because how you host the app decides whether the form renders on somebody else’s page.

Three things, all of which you ask for rather than build: a hidden field a real person never touches, a limit on how often one address can submit, and a check that stops the same person becoming two leads. Add them while the form is still new, because cleaning a list afterwards is far more work than filtering one now.

It writes and schedules them, and an outside service delivers them. The app decides what each step says and when it is due, then hands the message to a provider like Resend, Postmark or Amazon SES. The section on sending mail above compares the three. If your reps reply from their own mailbox instead, you can skip that entirely.

Yes. Describe the roles you want, usually an admin and a rep to start with, and the accounts, the access rules and the lead assignment get built around them, so everybody signs in and sees only what they should.

Two bills to start, both yours and both beginning at nothing: Supabase for the backend and a host for the site. A form on a live page needs Supabase Pro, from $25/mo, because free projects sleep after a week of inactivity and take the form down with them. Add a mail provider if the sequences go out. Prices checked August 2026, and the references at the foot of this page say where each one came from.

Only the accounts you create, and each of them only as far as its role reaches: a rep to the leads assigned to them, an admin to all of them. A visitor filling in the form can write their own details and read nothing at all. The database is a Supabase project in your own account, which makes you the sole controller of that data under GDPR and makes a deletion request something you can actually action.

Yes. Import existing leads via simple CSV upload with automatic handling of messy spreadsheets: ask for an importer that matches your columns to the lead fields by name, whatever their casing or spacing, and lets you correct the rest before anything is written. Decide what happens when an imported address is already a lead before you run it, because that is the choice that keeps the list clean.

Nothing underneath is proprietary, so there is nothing to be locked into. The database is ordinary PostgreSQL, and one dump from the Supabase CLI hands you every lead, chat and campaign in a shape any Postgres host will accept.

No, though you will type the occasional command: installing Codex, starting the app, applying a database change. The setup section above lists what you need, with a link for each, and once it’s on your machine Codex runs most of those commands for you.

A regular ChatGPT chat can sketch ideas and write snippets, but it isn’t working on your actual project. Codex reads and edits the real files on your computer. The app you get out of it is one you can run and publish, not a preview.

On a ChatGPT plan, Codex’s usage resets on a rolling window rather than billing per token, so a heavy day of building can bump into a limit. You either wait for it to reset, move up a plan, or switch to pay-as-you-go API billing for the rest of the session. Nothing you’ve already built is lost either way, so the work only pauses.

References

Sources checked August 2026
  1. 012025 benchmark report on demo form conversion rates, Chili Piper. chilipiper.com (published 2025)
  2. 02Marketing Hub pricing, HubSpot. hubspot.com
  3. 03Pricing, Typeform. typeform.com
  4. 04Pricing, Tidio. tidio.com
  5. 05Pricing, Unbounce. unbounce.com
  6. 06Pricing (Pro plan, free-tier limits), Supabase. supabase.com
  7. 07Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  8. 08Importing data (CSV size limit), Supabase docs. supabase.com
  9. 09Row Level Security, Supabase docs. supabase.com
  10. 10Pricing, Resend. resend.com (August 2026)
  11. 11Pricing, Postmark. postmarkapp.com (August 2026)
  12. 12Amazon SES pricing, AWS. aws.amazon.com (August 2026)
  13. 13Pricing (plans, usage limits), ChatGPT docs. learn.chatgpt.com
  14. 14Codex CLI, ChatGPT docs. learn.chatgpt.com
  15. 15API pricing (models), OpenAI for developers. developers.openai.com
  16. 16IDE extension, ChatGPT docs. learn.chatgpt.com
  17. 17ChatGPT desktop app, ChatGPT docs. learn.chatgpt.com
  18. 18Codex cloud, ChatGPT docs. learn.chatgpt.com
  19. 19AGENTS.md, ChatGPT docs. learn.chatgpt.com

This guide is general information. Third-party prices, plan limits, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Testimonials are from named customers. The integration figures are illustrative. Codex, ChatGPT, and the OpenAI API are products of OpenAI. Verify current capabilities and pricing before relying on them.