tech-lab worked example · no-code + generative AI in practice

Worked example — automate a small-business inbound-lead pipeline

One end-to-end project that stitches the whole course together: a no-code form captures a lead, a Make-style automation routes it, a generative-AI step drafts a personalised reply, and an Airtable base logs everything — finished with an honest ROI and build-vs-buy analysis.

The scenario. "Verde Jardín" is a two-person urban-gardening studio. Enquiries arrive through a website contact form, Instagram DMs and email. A founder spends the first hour of every morning triaging them and hand-writing the same kind of first reply — a warm acknowledgement, a rough quote band, and a link to book a site visit. Replies are slow and inconsistent, and some leads simply go cold. The brief: respond to every new lead within minutes, in a consistent on-brand voice, without hiring anyone — using only no-code / low-code tools plus generative AI, exactly the toolkit this course teaches.

The shape of the solution. A single no-code form becomes the one front door for leads. Each submission triggers a low-code automation (a Make / Zapier scenario, modelled here as a step graph) that scores and routes the lead, calls a generative-AI step to draft a tailored reply, writes the lead and the draft to a no-code database (Airtable), and notifies the founder for a one-click send. A human still approves every outbound message — the AI drafts, the person decides.

Goal

Sessions exercised

S1 · no-code & AI framing S2–3 · the form's landing page S6 · Zapier / Make automation S7 · RPA & automation ROI S8 · forms S10 · Airtable database S11 · chatbot / intent routing S12 · generative AI (LLM, tokens)

Tools used

Typeform / Tally (form) Make / Zapier (automation) OpenAI / Anthropic LLM API Airtable (database) Gmail / Slack (notify)
Build time
≈ 1 day
Hand-written code
~20 lines
Monthly run cost
€20–35
Leads / month
120
First-response SLA
< 5 min
Human approval
always

2. The problem & the workflow design

Before touching a tool, decompose the manual routine into a trigger → filter → action graph — the exact mental model from the automation session and the automation pipeline demo.

The manual routine, written out. (1) A lead lands somewhere — form, DM, inbox. (2) The founder reads it and guesses how serious it is. (3) They look up a rough price for the kind of job. (4) They write a reply from scratch. (5) They paste a booking link. (6) They make a mental note to follow up. Steps 2–5 are repetitive and rule-shaped — the ideal candidate for automation, with the genuinely human judgement (does this reply sound right? is the quote sane?) preserved as a final approval gate.

The redesigned flow. Collapse the three inboxes into one form, then let the automation do the mechanical middle while a person keeps the final say:

┌──────────────┐ TRIGGER ┌───────────────────────────┐ │ No-code │ new submission │ Automation scenario │ │ FORM │ ────────────────▶ │ (Make / Zapier) │ │ (Typeform) │ webhook JSON │ │ └──────────────┘ │ ┌─────────────────────┐ │ │ │ 1 normalise fields │ │ │ └──────────┬──────────┘ │ │ ┌──────────▼──────────┐ │ │ │ 2 FILTER + score │ │ budget? service? urgency? │ │ route: hot / warm │ │ → rule-based, like an intent │ └──────────┬──────────┘ │ │ ┌──────────▼──────────┐ │ │ │ 3 GENERATIVE-AI │ │ prompt → LLM → draft reply │ │ draft reply (LLM) │ │ (the only written code) │ └──────────┬──────────┘ │ │ ┌──────────▼──────────┐ │ │ │ 4 ACTION: write row │ │ │ └──────────┬──────────┘ │ └─────────────┼─────────────┘ ┌──────────────────────────────┼──────────────────────────────┐ ▼ ▼ ▼ ┌─────────────────┐ ┌────────────────────┐ ┌──────────────────┐ │ Airtable BASE │ │ Slack / email │ │ Human APPROVES │ │ Leads table │ │ "new lead + draft"│ ──────▶ │ edits & sends │ └─────────────────┘ └────────────────────┘ └──────────────────┘
Design principle: automate the mechanical middle (normalise → score → draft → log), but never the irreversible edge. Sending an email to a customer is irreversible, so a human stays on that boundary. The same trigger → filter → action spine powers the automation demo; the routing in step 2 is the keyword-and-rule scoring you can watch in the chatbot intent-routing demo.

The form (the one front door)

A short Typeform / Tally form captures only what's needed to draft a good reply — the "ask only what you need" rule from the forms session. Fields:

3. The no-code / low-code build, step by step

Each step is a few clicks in a visual builder. Only step 4 holds any hand-written code — and even that is a single API call. Everything else is configuration.

Build the form

In Typeform/Tally, add the five fields above. Turn on email-format validation and make service, budget and timeline required select fields — structured input keeps the downstream data clean. Embed the form on the site's contact page (the page you built in the website-creation sessions).

Create the Airtable base

One table, Leads, with typed fields: Name, Email, Service (single-select), Budget, Timeline, Message, Score (number), Tier (hot/warm/cold), DraftReply (long text), Status (new → approved → sent), CreatedAt. This is the single source of truth.

Wire the trigger

In Make, start a scenario with the "Watch new form responses" trigger. The form posts a JSON payload — name, email, service, budget, timeline, message — into the scenario. No code; you map fields by dragging.

Filter & score the lead

Add a small rule module: a clear budget + short timeline ⇒ hot; some budget ⇒ warm; otherwise cold. This is the same keyword/rule scoring as the chatbot intent router — deterministic, auditable, and cheap. Hot leads can later get a faster SLA or a different template.

Call the generative-AI step

Add an HTTP / "Make a request" module (or a tiny serverless function) that sends a carefully designed prompt to an LLM API and gets back a draft reply. This is the only written code in the whole project — detailed in section 4 below.

Write the row & notify

An Airtable "Create record" module writes the lead, the score, the tier and the DraftReply with Status = new. A Slack / Gmail module pings the founder with the lead summary and the draft. They open Airtable, tweak a word if needed, flip Status → approved, and a second tiny scenario sends the email.

Build-vs-buy, noted early: every step here is configuration in a tool someone else maintains — you are buying the form, the automation runtime, the database and the model, and only building the ~20 lines of glue in step 5. That ratio is the whole point of low-code. The full build-vs-buy reflection is in section 5.

4. The generative-AI step — prompt design + the API call

This is where the course's generative-AI content becomes a working component. Good output needs a good prompt — "minimum-effort prompts give low-quality results", straight from the syllabus's GenAI policy.

Prompt design

The prompt is engineered, not improvised. It does four things: (a) sets a role and voice so replies are on-brand; (b) injects the lead's structured data so the reply is specific; (c) gives hard rules (quote bands, length, always include the booking link, never invent facts); and (d) pins the output format so the automation can use it directly. A system message carries the durable rules; a user message carries the per-lead data.

[SYSTEM] You are the assistant for "Verde Jardín", a friendly two-person urban-gardening studio. Write the FIRST reply to a new enquiry. Voice: warm, concise, professional, plain language. Rules: - 90–130 words, no jargon, sign off as "The Verde Jardín team". - Acknowledge their specific request; do NOT invent details they didn't give. - Give a price BAND only, from this table; never a single fixed price: balcony garden €300–700 · roof terrace €1,500–4,000 maintenance €60–120/mo · other "depends, happy to scope it" - Always end with the booking link: https://verde.example/book - If essential info is missing, ask ONE clarifying question instead of guessing. Return STRICT JSON: {"subject": "...", "body": "...", "needs_human_note": "..."} [USER] name: {{name}} service: {{service}} budget: {{budget}} timeline: {{timeline}} message: """{{message}}"""
Why these choices: the price band table and the "don't invent details" rule directly fight hallucination; strict JSON output lets the Make scenario parse the reply with no extra code; the single-clarifying-question fallback mirrors a chatbot's graceful fallback. Temperature is kept low (≈0.4) so replies stay consistent — the same temperature idea you can tune in the attention demo.

The API call (the only real code)

Inside the automation's HTTP step (or a 1-file serverless function), this is the entire generative-AI integration — a single fetch to a chat-completions endpoint. Tokens in, tokens out: the LLM reads the prompt as the tokens from the tokenizer demo and predicts the reply via attention.

// draftReply.js — called by the Make/Zapier HTTP step (or a serverless fn).
// Input: the lead object from the form. Output: a parsed draft reply.
export async function draftReply(lead) {
  const system = `You are the assistant for "Verde Jardín"... (full system prompt above)`;
  const user = `name: ${lead.name}
service: ${lead.service}   budget: ${lead.budget}   timeline: ${lead.timeline}
message: """${lead.message}"""`;

  const res = await fetch("https://api.openai.com/v1/chat/completions", {
    method:  "POST",
    headers: {
      "Content-Type":  "application/json",
      // key lives in an env var / Make connection — NEVER in client code
      "Authorization": `Bearer ${process.env.LLM_API_KEY}`
    },
    body: JSON.stringify({
      model:           "gpt-4o-mini",   // cheap, fast, good enough for drafts
      temperature:     0.4,            // low = consistent, on-brand
      max_tokens:      320,
      response_format: { type: "json_object" }, // force parseable JSON
      messages: [
        { role: "system", content: system },
        { role: "user",   content: user }
      ]
    })
  });

  if (!res.ok) throw new Error(`LLM error ${res.status}`); // fail loud → human handles it
  const data = await res.json();
  const draft = JSON.parse(data.choices[0].message.content);

  // draft = { subject, body, needs_human_note } → goes into Airtable as a DRAFT.
  // Status stays "new"; nothing is sent until a human approves it.
  return draft;
}

~20 lines. The API key is read from an environment variable / the platform's stored connection — never hard-coded and never exposed to the browser. The call returns strict JSON so the no-code steps downstream need zero parsing logic.

5. Results & impact analysis — a worked ROI

The automation session's core skill: judge whether automating actually pays. Numbers below are a worked baseline for Verde Jardín — change the assumptions and the model still holds. Tune the same levers live in the RPA ROI demo.

Assumptions

Monthly time & cost

Line Before (manual) After (assisted) Saving
Minutes per lead8.01.56.5
Leads per month120120
Hours per month16.03.013.0
Labour cost @ €30/h€480€90€390
Tool run cost€0€30−€30
Net monthly saving€360

Payback & first-year return

One-off build cost is ≈ €240 (8 h × €30). At €360 net saving per month:

payback $= \dfrac{\text{build cost}}{\text{net monthly saving}} = \dfrac{240}{360} \approx 0.67 \text{ months} \approx 20 \text{ days}$

first-year net $= (360 \times 12) - 240 = 4{,}320 - 240 = €4{,}080$

13 h
founder hours freed / month
~20 days
payback period
€4,080
net first-year saving
< 5 min
first-response time (was 6–18 h)

The non-financial return matters more. The time saving is real, but the bigger win is the revenue protected: leads that used to go cold while waiting overnight now get a complete, on-brand reply within minutes. Even a small lift in lead-to-booking conversion (say 120 leads × a few extra bookings at hundreds of euros each) dwarfs the €360 of labour saved — and that is the argument to make to a real business.

Build vs. buy

Why build (assemble) this: off-the-shelf "AI reply" SaaS for SMBs runs €50–200 / month, often locks you into their CRM, and rarely matches a niche brand voice. This assembly is ≈ €30/month, owns its own data in Airtable, and the prompt is fully under the studio's control. The only real "build" is ~20 lines of glue.

When to buy instead: once volume passes a few hundred leads/day, or the team needs audit logs, role permissions, deliverability handling and SLAs, a maintained product is worth it — the glue code and a hobby-tier automation become a liability. Build to validate; buy to scale.

6. Risks & limitations

The syllabus is explicit: assume GenAI output is wrong unless you can check it, and acknowledge its use. A responsible build designs for failure, not just for the happy path.

Hallucination & wrong facts

  • The risk: the model invents a price, a service the studio doesn't offer, or a false promise.
  • Mitigation: the prompt supplies the only allowed price bands and forbids inventing details; the human approval gate means nothing reaches a customer unread; low temperature reduces drift.

Data privacy

  • The risk: a lead's name, email and message are sent to a third-party model provider.
  • Mitigation: send only the minimum fields needed; use a provider/tier with a no-training-on-data guarantee; disclose AI use and data handling in the form's privacy note (GDPR lawful basis + consent); never log the API key.

Other failure modes

  • Tone / brand drift: replies sound generic. Mitigation: tight voice rules + periodic review of a sample of drafts.
  • API outage / cost spike: the LLM call fails or a loop runs up tokens. Mitigation: fail loud (the code throws) so the lead falls back to manual; a monthly spend cap on the key.
  • Over-automation: auto-sending would turn one bad draft into a bad customer experience at scale. Mitigation: keep the human gate — the irreversible step is never automated.
  • Prompt injection: a lead's message tries to override instructions. Mitigation: treat the message as untrusted data, keep rules in the system role, and a human still reads every reply.
Acknowledgement (per the GenAI policy): this workflow uses a generative LLM to draft customer replies; a human reviews and approves every message before it is sent. Prompts and model are documented above. Drafts are treated as suggestions, not facts.

7. Mapping to course learning outcomes

How this single project evidences each course-level objective from the syllabus.

Course objectiveHow this project demonstrates it
Familiarity with the disruptive technologies Uses no-code forms & databases, low-code automation, and a generative LLM together — and is explicit about where each one's limits lie (the risks section).
Key technological trends Embodies the "citizen developer" trend: a non-engineer ships a working AI pipeline in a day with ~20 lines of code, the course's central thesis.
Reflect on how the tech affects people Weighs founder time freed against customer experience, privacy of leads' data, and the choice to keep a human in the loop rather than fully automate a human interaction.
Present a use case & apply critical thinking A concrete societal/SMB use case with a worked ROI, an honest build-vs-buy call, and a frank treatment of hallucination, privacy and over-automation.

Skills exercised: using no-code form & database builders, building a trigger→action automation, judging automation ROI, foundational generative-AI and prompt engineering, and integrating a model via an API — the full skills list from the objectives.

8. Extensions

Natural next steps once the core pipeline is trusted — each maps to another course session.

9. References

Grounded in the course bibliography and syllabus, plus the provider docs for the API used.

Explore the mechanics behind this project: automation pipeline · RPA ROI · chatbot intent routing · tokenizer · attention · no-code database · no-code builder · or read the full course outline.