Cindy Zhu.
← all free guides
Marketing & ads No-code build

Build a lead machine with Emergent

Hey, it's Cindy ๐ŸŒฑ A lead machine catches every lead, scores how hot they are, and queues the follow-up automatically, so nobody slips through the cracks. Build it once for about $20/mo of tools and own it, instead of renting a $300/mo CRM. Paste the one prompt below into Emergent and it ships a live app, built with Fable 5 under the hood, no code.
the map

The whole thing in 4 steps ๐Ÿ—บ

  1. Copy the build prompt in Step 1 below.
  2. Paste it into Emergent, it builds a live lead app (capture form + scoring + follow-up queue).
  3. Point your bio link or a form at the new capture page and watch leads flow in, scored.
  4. Work your leads from the pipeline board, and wire in a real email/SMS sender when you're ready to auto-send.

Proof it's real: Emergent's own case study, Revo Leads, was built this way and made about $6,000 in three weeks (source). The point isn't "you'll make $6k", it's that a lead tool you own is a real, buildable thing now.


the three parts

What a lead machine is ๐Ÿงฉ

Three jobs, one app:

  • Capture: a public form (its own link) a stranger fills in, landing as a new lead tagged by where they came from.
  • Score: the app rates each lead hot, warm, or cold on simple rules you set (budget, timeline, source), so you work the hot ones first.
  • Follow up: it lays out a day 0 / day 2 / day 5 sequence and queues each message, so nobody goes cold because you forgot to reply.

One honest line up front: the app stores and queues the follow-ups, and a real sending tool delivers them (more in the honest bit below). Everything up to "hit send" is yours to build and own.


copy this

Step 1: copy this into Emergent ๐Ÿ› 

๐Ÿ‘‡ Copy this whole block and paste it into Emergent as your very first message. You do not need to read it, it's the full build manual that makes Emergent build right on the first pass. Swap anything in [brackets] for your own words, or leave it and adjust later.

๐Ÿ›  The full build manual, paste it whole
Build a full-stack web app called "[Lead Machine]" that captures leads, scores how hot they are, and runs an automated follow-up sequence. One logged-in user (me) runs the whole thing. There is also ONE public page: a lead-capture form that strangers fill in with no login. Build this exactly as specified below, in this order, and do not add features I did not ask for.

SECTION 1, WHAT THIS APP IS
A private lead workspace for a solo operator, plus one public lead-capture form. When a stranger submits the form, a Lead is created, scored automatically, and enrolled in a follow-up sequence. I work my leads from a pipeline board and an inbox inside the app. The app does NOT send email or SMS itself in v1 (see Section 7); it stores and queues follow-ups and shows me what is due.

SECTION 2, DATA MODEL
Build these entities with every field, its type, and required/optional. Set up the relationships exactly as noted.

Lead
- Full name (text, required)
- Email (email, required)
- Phone (phone, optional)
- Company (text, optional)
- Message / what they need (long text, optional)
- Source (link to Source, required, defaults to the source of the form they used)
- Stage (dropdown, required: New, Contacted, Qualified, Proposal, Won, Lost; defaults to New)
- Score (number, 0 to 100, set automatically, read-only to me)
- Score band (dropdown, set automatically from Score: Hot 70-100, Warm 40-69, Cold 0-39)
- Budget (dropdown, optional: Under 1k, 1k-5k, 5k-20k, 20k+)
- Timeline (dropdown, optional: ASAP, This month, This quarter, Just researching)
- Created at (datetime, auto)
- Owner note (long text, optional)

Source
- Name (text, required, e.g. Instagram bio, Landing page, Referral, Cold form)
- UTM key (text, optional, a short slug used in the form URL like ?src=ig-bio)
- Default score weight (number, optional, added to a lead's score, e.g. Referral = +15)

Activity
- Lead (link to Lead, required)
- Type (dropdown, required: Note, Call, Email logged, SMS logged, Stage change, Score change)
- Body (long text, optional)
- Created at (datetime, auto)

FollowUpStep (the template for the sequence, edited by me)
- Step number (number, required, 1..n in order)
- Channel (dropdown, required: Email, SMS)
- Delay days (number, required, days after enrollment, e.g. 0, 2, 5, 9)
- Subject (text, optional, for email steps)
- Body (long text, required, supports {{first_name}} and {{company}} merge tags)
- Active (boolean, defaults true)

FollowUp (one queued message per lead per step, created when a lead enrolls)
- Lead (link to Lead, required)
- Step (link to FollowUpStep, required)
- Channel (dropdown: Email, SMS, copied from the step)
- Due at (datetime, required, = lead created at + step delay days)
- Status (dropdown, required: Queued, Sent, Skipped, Failed; defaults Queued)
- Rendered body (long text, the Body with merge tags filled in from the lead)
- Sent at (datetime, optional)

SECTION 3, LEAD SCORING RULE
When a Lead is created or edited, recompute Score from 0 to 100 using these rules, then set Score band from the Score. Show the rules on a Settings page so I can edit the point values later, but ship with these defaults:
- Budget: Under 1k = +5, 1k-5k = +15, 5k-20k = +25, 20k+ = +35
- Timeline: ASAP = +30, This month = +20, This quarter = +10, Just researching = +0
- Has phone number = +10
- Message is not empty = +10
- Source default score weight is added (from the Source record)
- Cap the total at 100. Recompute automatically whenever budget, timeline, phone, message, or source changes, and log a "Score change" Activity with the old and new score.

SECTION 4, FOLLOW-UP SEQUENCE
When a Lead is created (from the public form or by me), automatically enroll it: create one FollowUp row for every Active FollowUpStep, with Due at = lead created at + that step's delay days, and Rendered body = the step Body with {{first_name}} and {{company}} filled in. Ship with this default sequence (I can edit it on the Settings page):
- Step 1, Email, delay 0 days: subject "Thanks for reaching out", body a warm intro that references {{first_name}} and asks one qualifying question.
- Step 2, Email, delay 2 days: a short nudge with a link placeholder and one clear next step.
- Step 3, SMS, delay 5 days: a one-line check-in.
- Step 4, Email, delay 9 days: a final "should I close your file?" breakup message.
If a lead reaches stage Won or Lost, mark all their still-Queued FollowUps as Skipped and stop the sequence. IMPORTANT: in v1 the app does NOT actually send. It marks FollowUps as Due and lets me mark them Sent by hand (a "Mark sent" and "Skip" button per row). Leave a clearly labelled placeholder function, sendMessage(followUp), that I will later connect to a real email/SMS provider. Do not fake sending.

SECTION 5, SCREENS
1. Dashboard (me): leads this week, count by score band (Hot/Warm/Cold), count by stage, and follow-ups due today. Primary action: open the "due today" list.
2. Pipeline board (me): a kanban board, columns = the Stage options, cards = leads showing name, score band as a coloured pill, and source. Drag a card between columns to change its stage (log a "Stage change" Activity). Primary action: drag to move stage.
3. Lead inbox / list (me): a filterable table of all leads (filter by score band, stage, source; sort by score or created at). Primary action: open a lead.
4. Lead detail (me): all fields, the score with a breakdown of how it was calculated, the Activity timeline, and this lead's FollowUp queue with Mark sent / Skip buttons. Primary action: log an Activity or advance the stage.
5. Follow-ups due (me): every FollowUp with Status Queued and Due at <= now, across all leads, oldest first, with Mark sent / Skip per row and the rendered body visible. Primary action: mark sent.
6. Sequence settings (me): edit FollowUpSteps (add, reorder, edit delay/channel/subject/body, toggle Active) and edit the scoring point values from Section 3. Primary action: save.
7. Public lead form (anyone, no login): the capture form. Fields: full name (required), email (required), phone (optional), company (optional), what they need (long text), budget (dropdown), timeline (dropdown). Reads a ?src= parameter from the URL and maps it to a Source. On submit: create the Lead, score it, enroll the sequence, then show a friendly confirmation screen. Primary action: submit.

SECTION 6, BUSINESS RULES AND EDGE CASES
- Duplicate email: if a submitted email already exists as a Lead, do NOT create a twin. Update the existing lead's message and re-run scoring, log an Activity "Re-submitted via [source]", and do not double-enroll (only create FollowUps for steps they are not already enrolled in).
- Deleting a lead deletes its Activities and FollowUps too (cascade), with a confirm step.
- The public form must validate email format and required fields, and must never expose any private screen or data.
- Merge tags with no value fall back gracefully ({{first_name}} with no name shows "there", {{company}} shows nothing, no literal "{{...}}" ever renders to a lead).
- Score is always clamped to 0-100.

SECTION 7, EXPLICITLY OUT OF SCOPE (keep this heading in caps)
The app must NOT actually send email or SMS in v1, must NOT integrate any email or SMS provider yet, no payment collection, no multi-user accounts, no calendar or booking, no analytics beyond the dashboard counts described, no AI copywriting. Do not add any of these even as "nice to haves". The only sending-related thing you build is the placeholder sendMessage(followUp) function and the manual Mark sent / Skip buttons.

SECTION 8, ACCEPTANCE TESTS (each phrased "I can...")
- I can submit the public form from an incognito window and see a new scored lead appear in my inbox within seconds.
- I can submit the same email twice and get ONE lead, not two, with a re-submitted Activity logged.
- I can see a lead's score explained line by line (which rule added which points).
- I can drag a lead from New to Won on the board and its queued follow-ups become Skipped.
- I can open "Follow-ups due" and see exactly the messages that are due now, with the merge tags filled in.
- I can edit the sequence on the settings page (change a delay, add a step) and a newly created lead uses the new sequence.
- I can filter the inbox to only Hot leads.
- I can add a source with a +15 weight and see a lead from that source score 15 points higher.

End by seeding the app with realistic demo data so every screen renders on first load: 12 leads spread across all stages and all three score bands, 3 sources with different weights, the 4-step default sequence, and several follow-ups already due today so the dashboard and the due list are not empty.

the build

Step 2: build, preview, deploy ๐Ÿ”Ž

A working preview appears in a few minutes, a full first build in about 15 to 30 (mostly waiting), and deploying gives you a live URL with SSL. Five habits that save credits and pain:

  • Paste the whole prompt as your first message, do not summarise it. The detail is what makes it build right.
  • Answer any clarifying questions in one message. Click through the preview before you deploy (a deployed app holds 50 credits/mo).
  • Connect GitHub from day one, that's your safety net and your proof of ownership.
  • One change per follow-up message, and be surgical: "colour the score pill by band (Hot orange, Warm amber, Cold grey)" beats "the board looks off".
  • Roll back instead of arguing. If a bug survives two fixes, revert to the last good checkpoint. Rollbacks are free, fix-loops are not.
Before you point real leads at it, do a security pass. This app holds people's names, emails, and phone numbers, and roughly half of AI-generated code ships with a security flaw. Paste this into your build: "Review this app for security: confirm the public form can only create a lead and can never read or expose existing leads or any private screen, that every dashboard requires login, and that any API keys live in environment variables, not the code. List anything risky and fix it." Two minutes, and it keeps your leads' data safe.

what to watch

The one honest bit: it queues, a real sender delivers ๐Ÿ“ฎ

Your app can build a perfect sequence, render every message, and know when each is due. It should not be the thing that actually sends the emails and texts, on purpose. Deliverability is reputation, not code: a brand-new app sending cold from fresh infrastructure is one of the fastest ways to land in spam, and SMS is stricter (US carriers require A2P 10DLC registration). So the split is simple: your app queues each follow-up with the exact copy and due time, and a real sender delivers it. Until you wire one in, your "Follow-ups due" screen is a tidy daily to-do list you send by hand, which is genuinely fine for your first weeks.

When you're ready, rent a sender and connect it to the sendMessage(followUp) placeholder (the exact wiring prompt is in "going deeper" below):

  • Email: Kit (pricing), free to 10,000 subscribers, the creator-friendly pick. MailerLite (pricing) from ~$10/mo, the budget pick. Brevo (pricing) charges per email sent, good for a big list you email rarely.
  • SMS: Twilio (pricing), ~$1.15/mo for a number and about a cent a text, plus the one-time A2P 10DLC registration.

go further

Going deeper (optional) ๐Ÿ“Ž

Everything below is for when you want to tune, test, and price it properly. Skip it on your first build.

Tune it, one change at a time ๐Ÿ”

First builds come out roughly 80% right. Order matters: structure first (scoring), then behaviour (the sequence), then paint (style). A style pass before structural changes just gets clobbered.

Sharpen the scoring so hot means hot:

๐ŸŽฏ Make hot actually mean hot
Adjust the lead scoring only. Change the point values to: Budget 20k+ = +40 (I only want big-budget leads to hit Hot), Timeline ASAP = +35, and add a new rule: if Source is [Referral], add +20. Recompute all existing leads' scores and bands with the new rules and log a Score change Activity for each. Show me the updated rules on the settings page. Do not touch the sequence, screens, or public form. Done when a 20k+/ASAP/referral lead lands in the Hot band and a "just researching" no-budget lead lands Cold.

Shape the follow-up sequence to your voice:

โœ๏ธ Rewrite the messages in your voice
Edit the default follow-up sequence only. Make it 5 steps: Step 1 Email day 0, Step 2 Email day 2, Step 3 SMS day 4, Step 4 Email day 7, Step 5 Email day 12 (the breakup). Rewrite each body in a warm, casual, first-person voice (I am a solo [marketing consultant]), each under 60 words, each using {{first_name}}, each with exactly one clear next step. Keep the merge-tag fallbacks working. New leads should use this sequence; do not retroactively change leads already enrolled. Do not change scoring or screens. Done when a new test lead shows 5 queued follow-ups with my new copy and the right due dates.

Add the source tracking you actually use:

๐Ÿ”— Know where every lead came from
On the Sources settings, let me create sources with a UTM key so my form URL can carry ?src=. Add these sources: [Instagram bio (src=ig-bio, weight +10), Landing page (src=lp, weight +5), Referral (src=ref, weight +20), Cold outreach (src=cold, weight +0)]. When the public form loads with ?src=ig-bio it must set the lead's Source to Instagram bio automatically; an unknown or missing src falls back to a "Direct" source. Show source as a filterable column in the inbox. Do not change scoring math beyond applying the source weight. Done when a form opened at [my-app-url]/?src=ref creates a lead tagged Referral with +20 applied.

Bug fix template (reuse for anything broken):

๐Ÿ› Keep the fix scoped to the bug
Bug report. On the [screen] page I did [exact action]. Expected: [X]. Got: [Y]. Fix only this bug, do not refactor or change any other feature while you are in there. Tell me the cause in one sentence, then confirm the fix. Done when [the expected behavior happens].

Wire in a real sender ๐Ÿ“ค

When you're ready to actually send, ask Emergent to connect the placeholder:

๐Ÿ“ค Switch sending on, one click at a time
Connect the sendMessage(followUp) placeholder to a real sender. For Email follow-ups, send through [Kit / Brevo] using my API key (I will paste it into the deployment settings, do not hardcode it). For SMS follow-ups, send through Twilio using my account SID, auth token, and from-number from the settings. When I click "Mark sent", actually send the rendered body, then set Status = Sent and Sent at = now; if the provider returns an error, set Status = Failed and show me the error. Add a settings screen to store these keys. Do not send automatically on a schedule yet; keep it one click per message so I stay in control. Done when clicking Mark sent on a test lead actually delivers the email/text to my own address.

Test it like a real lead ๐Ÿšฆ

  • Capture: submit the public form from an incognito window on your phone, the lead appears in seconds, scored, with the right source.
  • Duplicate guard: submit the same email twice, you get ONE lead with a re-submitted note, never a twin.
  • Score sanity: a big-budget ASAP lead lands Hot, a "just researching" no-budget lead lands Cold. Read each breakdown.
  • Board: drag a lead to Won, its queued follow-ups flip to Skipped.
  • Escape hatch: export your leads to CSV from inside the app. If you can't get your data out, you're not ready to rely on it. Non-negotiable.

What it really costs ๐Ÿ’ฐ

A rented CRM plus marketing suite (HubSpot Starter, GoHighLevel, similar) runs $97 to $300+/mo once sending is counted. Owning the machine and renting only delivery:

Monthly What it covers Cost
Emergent Standard Keeps one app live (100 credits, deploy holds 50) ~$20
Email sender Kit (free to start), MailerLite, or Brevo $0-39
SMS sender (optional) Twilio, a few hundred texts ~$5
Rough total $20-65

The first build itself costs credits (ballpark 60 to 150 for a machine this size), so your first month runs higher, budget one top-up. The trade-off of owning: a rented CRM includes maintenance, and here you are the maintainer, a small tinkering tax paid in the odd iteration prompt.

Quick answers ๐Ÿ’ฌ

Do I have to use Claude? No, the prompt pastes straight into Emergent as-is. Claude only helps if you want to tailor it to your exact business first.
Where does my lead data live? In your app's own database on Emergent's hosting, under your account, code synced to your GitHub. Keep the CSV export as your exit.
Can it send automatically instead of me clicking? Yes, as an add-on: once a real sender is connected, ask Emergent to add a scheduled job that sends what's due each morning. Start manual though, so you can read the first few sequences before they go out on autopilot.
Can I put it on my own domain? Yes, free: one DNS record, SSL automatic within minutes. Great for the public capture form.

the takeaway

The move ๐Ÿ’ก

A lead machine is just capture, score, follow up, and the honest bit is you own the first three and rent the last one. Paste the manual into Emergent, build the thing that catches and scores your leads and queues the follow-up, and wire in a real sender when you're ready. It costs a fraction of a rented CRM, and this time the asset is yours.


Links ๐Ÿ”—

  1. Try Emergent: app.emergent.sh
  2. Emergent's Revo Leads case study ("$6,000 in 3 weeks"): emergent.sh/case-studies/engineer-build-lead-generation-product
  3. Kit: kit.com/pricing ยท MailerLite: mailerlite.com/pricing ยท Brevo: brevo.com/pricing ยท Twilio: twilio.com/en-us/sms/pricing/us
Follow @cindiezhu for more Claude workflows that actually make you money and save you time ๐ŸŒฑ
Want more like this? Follow @cindiezhu for daily AI you can actually use.