Live session
Label Ready Systems Training
How our sites, forms and automations fit together, and how to build your own.
Lovable
Sites and forms
Webhook
Sends the data
n8n
Automation
Sheets
Logs
Supabase
Database
Discord
Alerts
Gmail
Emails
Common gotchas
• Using the Test URL on a live site, so nothing happens once you close the editor.
• Forgetting to switch the workflow to Active.
• Data is under body on a webhook, not at the top level.
• One node outputs many items, so the next node runs once per item.
• Expired Google credentials. Reconnect them in Credentials.
When someone submits a form on a Lovable site, the site sends a POST request with the form data as JSON to a URL. In n8n, a Webhook node gives you that URL and catches the data.
Make me a basic landing page with a form to collect Artist Name, Email, Phone Number and Goals (as a multi line field for goals) and send that to the webhook "MyWebhookHere.Example" as a POST request in JSON. Make it desktop and mobile optimized
CORS and Allowed Origins
Show a success message
Webhooks Basic Lesson
A form sends data to a Webhook, n8n cleans it up, logs it, and replies to the form.
What this teaches
No workflow added yet. Saved on this device only (online storage not connected).
AI Workflow Basic Lesson
Takes form submissions or sheet rows and has the AI node summarize them, score lead quality, or pull out key themes, then sends the result to Discord.
What this teaches
No workflow added yet. Saved on this device only (online storage not connected).
Google Sheets Trigger Lesson
Runs whenever a new row is added to a Google Sheet, then acts on that row.
What this teaches
No workflow added yet. Saved on this device only (online storage not connected).
Work backwards. Start at the end and walk back to the trigger.
Worked example: "I want a Discord alert when a new artist signs up"
1. End result: a Discord message in #new-artists.
2. Data needed: artist name, email, genre, link.
3. Where it lives: the signup form on our Lovable site.
4. Trigger: a Webhook node that catches the form submission.
Build order: Webhook → Set (clean fields) → Discord.
How node referencing works
Expressions pull data from earlier nodes by name. If you rename a node, or reorder nodes so "the previous node" changes, expressions can break and return empty values.
// Reference data from a node by its NAME
{{ $('Webhook').item.json.body.email }}
// Reference the node right before this one
{{ $json.email }}
// If you rename "Webhook" to "New Artist Form",
// the first expression breaks until you update it:
{{ $('New Artist Form').item.json.body.email }}Workflow names
Node names
Sticky notes
Bad
My workflow 3
Webhook → HTTP Request1 → Google Sheets2 → Discord
No notes. Nobody knows what it does.
Good
LR | Form | New Artist Signup | Prod
Catch Signup Form → Clean Fields → Add Row to Artists Sheet → Alert #new-artists
Sticky: Purpose, Owner: Scott, Edited Nov 2026, Issues: none.
Google Sheets: use when
• Non-technical people need to see or edit data
• Low volume (hundreds or a few thousand rows)
• Quick logs, reports, and lists
Supabase: use when
• Data powers an app or site
• High volume or many writes at once
• You need logins, relations, or security rules
Rate limits
Facebook Ads lead forms to n8n
Build the popup in Lovable. It sends the lead to n8n. n8n emails the lead and alerts the team at the same time.
Add a popup form to my site that opens 5 seconds after the page loads (only once per visitor, remember it in localStorage).
Fields: Name, Email, and "What are you working on?" (optional).
On submit, send a POST request with JSON { name, email, message, source: "popup", submittedAt } to this URL: https://YOUR-N8N-DOMAIN/webhook/popup-lead
Show a loading state on the button. If the response is OK, show "Thanks! Check your inbox." and close after 3 seconds. If it fails, show a friendly error and let them try again.
Match the site's existing colors and fonts. Make it work on mobile.