Why this split works: Emergent's architect agent parses your first prompt into data models, screens, and flows. A spec that arrives already organized that way builds dramatically better on the first pass, and that is exactly what the Claude prompt below produces.
Open a new Claude chat and paste the prompt below. Claude asks you 3-5 discovery questions first (your pipeline stages, booking rules, form fields, the numbers you actually check), then writes the spec. Answer from how you work today, not how you wish you worked, then copy the spec it returns.
You are my spec engineer. I run a solo business on GoHighLevel and I am replacing its core with a custom app built in Emergent, an AI app builder that turns a written spec into a working full-stack web app. The core I need rebuilt: a contact CRM, a deal pipeline board, a public booking page, a public lead capture form, and a simple dashboard. Your job is to produce ONE build-ready spec I can paste into Emergent as my very first prompt, with zero edits.
STEP 1, DISCOVERY. Before writing anything, ask me 3 to 5 discovery questions in a single message, then stop and wait for my answers. Only ask questions whose answers change the spec. Pick from angles like: what I sell and what a typical deal looks like (value, length), my exact pipeline stages today in order, my booking rules (call length, availability days and hours, how far out people can book, my timezone), exactly what my lead form must capture, and the 3 numbers I check to know the business is healthy. Do not ask about tech stack, hosting, or design taste. Do not write any spec yet.
STEP 2, THE SPEC. After I answer, write the spec using exactly this structure, because the builder's architect agent parses data models, screens, and flows directly:
- Write it in second person to the builder ("Build a web app that...") so it pastes clean.
- Keep it 600 to 1,000 words. Specific enough to build, short enough that nothing gets ignored.
- Section 1, What this app is: 2-3 sentences. One logged-in user (me), plus two public pages (booking page, lead form). No other accounts.
- Section 2, Data model: every entity with every field, its type (text, email, phone, number, currency, date, datetime, dropdown with the exact options, multi-select, long text, boolean), required or optional, and the relationships between entities. Cover at minimum: Contact, Deal, Pipeline Stage, Booking, Form Submission, Note/Activity. Use my answers; do not invent fields I will not use.
- Section 3, Screens: a numbered list. For each: screen name, who sees it (me logged in, or public), what is on it, and its one primary action. Expect roughly: dashboard, contact list, contact detail, pipeline board (kanban, drag and drop), bookings list, public booking page, public lead form, form submissions inbox.
- Section 4, User flows, written step by step: (1) I add a contact and log a note on them. (2) I create a deal, attach it to a contact, and drag it across stages to Won. (3) A stranger opens the public booking page, picks an open slot, enters their details, sees a confirmation screen, and the slot becomes unavailable to everyone else; a Contact is auto-created if the email is new. (4) A stranger submits the lead form and appears in my app as a new Contact plus a new Deal in the first pipeline stage. (5) I open the dashboard and see: new leads this week, count and total value of open deals per stage, and upcoming bookings.
- Section 5, Business rules and edge cases: no double bookings ever (two visitors can never take the same slot), duplicate email handling (warn and link to the existing contact, never silently duplicate), what happens to deals and bookings when a contact is deleted, timezone handling for the booking page, and validation on the public forms.
- Section 6, Explicitly OUT OF SCOPE (put this heading in caps): the app must NOT send email or SMS of any kind, no notifications, no calendar sync, no payments, no automations or workflows, no funnels or website builder, no multi-user accounts, no white label. Bookings and form fills save to the database and show inside the app; I check the app instead of getting messages. State that the builder must not add any of these even as "nice to haves".
- Section 7, Acceptance tests: 6 to 8 checkable statements that prove v1 works, phrased as "I can..." (for example "I can book a slot from an incognito window and it disappears for other visitors").
- End the spec with: "Seed the app with a small set of realistic demo data so every screen renders with content on first load."
HARD RULES for the spec: no vague words (some, various, robust, user-friendly), replace them with specifics. Every field gets a type. If my answers leave a gap, make the smallest sensible decision and tag it "ASSUMPTION:" inline so I can override it. Do not add features I did not ask for. After the spec, list all assumptions in one short block so I can correct them before I paste.
What to expect: paste the spec, and a working preview usually appears in about 5 minutes, with a full first build of something this size done in 15-30. When you deploy, you get a live URL with SSL, and you can connect your own domain later for free with one DNS record.
Try it here: Emergent
First builds come out roughly 80% right, and that is normal, not failure. Plan on 3-5 rounds. The order matters: structure first (stages, fields), then behavior (booking), then paint (style), then data, because a style pass before structural changes gets clobbered. Everything in [brackets] is a placeholder with a worked example, so swap in your own values.
1. Fix your pipeline stages
Change my pipeline stages to exactly these, in this order: [New lead, Contacted, Call booked, Proposal sent, Won, Lost]. Add, rename, or remove stages so this is the complete list. Map existing deals: [old stage โ new stage]. Won and Lost are terminal: hide them from the default board view and add a toggle to show them. Keep drag and drop working between all stages. Do not change anything else about deals, contacts, bookings, or the dashboard. Done when the board shows exactly these columns in this order and every existing deal sits in a valid stage.
2. Add the fields you actually track
Add these fields to the Contact record: [Instagram handle] (text, optional), [Lead source] (dropdown: Instagram, Referral, Booking page, Lead form, Other), [Tags] (multi-select, I can create new tags inline). Show all three on the contact detail page, add them to the add/edit contact form, and let me toggle [Lead source] and [Tags] as columns in the contact list. Contacts created by the booking page get Lead source = Booking page automatically; contacts from the form get Lead form. Existing contacts keep working with these fields empty. Do not touch the Deal or Booking models. Done when I can save a contact with all three filled and filter the contact list by Lead source.
3. Tune the booking flow
Adjust the public booking flow only. Appointments are [30] minutes with a [15]-minute buffer after each. Bookable [Monday to Friday, 10am to 4pm] in [Australia/Melbourne] time, from [24 hours] out to [21 days] ahead. Flow: visitor picks a date, sees only genuinely open slots, picks one, enters name (required), email (required), and one question, "[what do you want help with?]" (required, long text), then sees a confirmation screen with the date and time in their local timezone. A booked slot must disappear for all other visitors immediately, and two people can never confirm the same slot even if they load the page at the same time. Do not add email confirmations or reminders. Done when booking a slot in one browser makes it instantly unavailable in an incognito window.
4. Style pass (the example colors are mine, swap in yours)
Style-only pass. Do not change any logic, data, flows, or page structure. Apply this look everywhere: background [#FAF7F2 cream], primary buttons and active states [#D97757 orange], dark warm gray text, one font family throughout [Poppins], rounded corners, generous spacing. The two public pages (booking and lead form) should feel friendly and minimal with the form centered; internal pages stay clean and information-dense. Keep every existing element in its current position; change only colors, typography, and spacing. Done when every screen uses this palette and all acceptance tests still pass.
5. Seed realistic test data
Replace the demo data with a realistic test set: 12 contacts with varied names, emails, phones, and lead sources; 8 deals spread so every pipeline stage has at least one, values between [$500 and $5,000]; 3 upcoming bookings and 2 past ones; 4 form submissions, 2 of them from emails that already exist as contacts (so I can see duplicate handling). Add a "Reset demo data" button on a settings page that wipes and re-seeds, and a separate "Delete ALL data" button with a confirm step for when I go live. Done when the dashboard shows non-zero numbers everywhere and the board has a deal in every column.
6. Bug fix template (reuse for anything broken)
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].
Run all nine before you switch anything off.
Build the CRM, pipeline, booking, and forms you use every day. Keep renting the email and text sending, because deliverability (whether your emails land in inboxes or in spam) is not a coding problem. Three reasons:
All of that is rented history and paperwork, not software. Claude and Emergent can build you excellent software; nobody can build you a sender reputation.
What to rent, with real prices:
The order of operations, so no lead ever falls through:
If your app needs an importer for step 4, ask for one:
Add a CSV import on the contacts page: upload a file, map columns to my contact fields, preview the first 5 rows, skip duplicates by email, and report how many were created and skipped. Do the same for deals, using a pipeline stage column.
Renting: GoHighLevel Unlimited is $297 x 12 = $3,564 a year, and usage charges for SMS, calls, and AI typically add $20-150/mo on top, so realistically $3,800-5,300 a year. Even Starter at $97/mo lands around $1,400-2,000 a year once usage is counted.
Owning:
| Monthly | GoHighLevel Unlimited | Your owned stack |
|---|---|---|
| Platform | $297 | ~$20 (Emergent Standard, keeps one app live) |
| Email sending | bundled, usage billed separately | $0-39 (Kit, MailerLite, or Brevo) |
| SMS sending | usage billed separately | ~$5 (Twilio, a few hundred texts) |
| Rough total | $320-450 | $25-65 |
Bottom line: against Unlimited, the owned stack saves roughly $3,000-4,500 a year, every year. Against Starter it still saves about $600-1,700 a year. The honest counterweight: GoHighLevel bundles maintenance and uptime, and owning the app makes you the maintainer. In practice that is a small tinkering tax paid in iteration prompts, but it is not zero.
Where does my client data actually live? In your app's own database on Emergent's hosting, under your account. Before you enter real client data, confirm the login from the spec is in place, and keep the CSV export from the checklist so you always have an exit.
What does "own it" mean if it is hosted? You control the app, the data, and the code, which syncs to your GitHub in a standard stack (React, FastAPI, MongoDB). If you ever leave, the code and your CSV exports come with you. It does not mean free: about $20/mo keeps it live.
What if the first build comes out wrong? Normal. Expect roughly 80% right, then 3-5 iteration prompts. If it keeps drifting, fork or start a fresh build with a tighter spec instead of patching forever.
Will clients get a confirmation email when they book? Not until you connect a sender. The booking page shows an on-screen confirmation, and you can ask Emergent to wire in SendGrid or Gmail when you are ready.
Can I put it on my own domain? Yes, and it is free: one DNS A record, and SSL is automatic within minutes.
Do I need a paid Claude plan? The free plan can run the scoping chat. Pro (about $20 USD/mo) buys longer conversations and more usage if Claude is already part of your daily workflow.
How many Emergent credits will this take? Ballpark 60-150 credits for a build like this. Small tweaks cost 1-2, a new feature 5-10, and one deployed app holds 50/mo. Burn varies with how much fixing you do, so specific prompts and free rollbacks are your best economy.
When do I actually stop paying GoHighLevel? After the Step 4 checklist passes, your data is imported, and one real lead source has run through the new app for a week with zero lost leads. And check you are not locked into annual billing first.
Claude scopes it, Emergent builds it, and you own it instead of renting. Owning is not $0: the app runs on a credit plan (free to try, about $20/mo to keep live) and the sending stays rented. But that is a fraction of $297, not zero, and this time the asset is yours.