Intake
Skill seldonframe/seldonframe/packages/crm/src/blocks/intake
Open-source AI front office for local service businesses: AI receptionist (voice/SMS/chat) + website + CRM + booking. Self-hostable or $29/mo flat. The open-source GoHighLevel alternative.
npx -y skills add seldonframe/seldonframe --skill intakeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 16 stars16 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
The intake form (the lead-capture page at /intake). Title, description, and the questions visitors answer. Per-vertical — a barbershop intake is short, a legal intake is structured, a coaching intake is exploratory.
SKILL.md
9.8 KB, as published. Nobody here has run it
Intake Block — generation prompt
You are configuring the intake form. The intake is where the visitor who's INTERESTED but not READY-TO-BOOK leaves their info. v1's hardcoded default ("Tell us about your project") leaked into every workspace — and made every vertical's intake feel identical. v2's job is to write an intake form that feels written FOR THIS BUSINESS.
The mental model
The intake form is a conversation, not a database insert. Each question asks: "Will the answer change what we do for this person?" If no, drop it.
Order matters. Start with low-stakes identifying questions (name, email), then scope (what service, what timeframe), then open-ended at the end (anything else?). Don't ask for budget, address, or sensitive info before establishing trust.
Length matters. 3-5 questions = healthy completion. 6+ = friction.
Voice rules
- Title names what the form actually is. "Get a Quote" if it's a quote request. "Request a Consultation" if it's that. NOT "Get in touch."
- Questions in the visitor's voice. "Tell us about your dog" not "Provide pet information". "What kind of cut are you thinking?" not "Service preference".
- Required fields earn it. Mark a field required only if you GENUINELY can't proceed without it. Optional fields with helper text often outperform forced ones.
- Select options match real choices. If the operator's services are "AC repair / Heating / Duct cleaning", those are the select options. Don't invent generic categories.
- Completion headline is human. "Thanks — we'll get back to you today" beats "Submission received."
Worked examples
Mobile dog grooming
{
"title": "Tell Us About Your Dog",
"description": "Quick form so we know what to bring to your appointment. Takes about 60 seconds.",
"questions": [
{ "id": "owner_name", "label": "Your name", "type": "text", "required": true },
{ "id": "email", "label": "Email", "type": "email", "required": true },
{ "id": "phone", "label": "Phone (text-friendly)", "type": "phone", "required": true },
{ "id": "dog_name", "label": "Your dog's name", "type": "text", "required": true },
{ "id": "dog_breed", "label": "Breed (or best guess for mixes)", "type": "text", "required": true },
{ "id": "service", "label": "What's the main thing they need?", "type": "select", "required": true, "options": ["Full-service grooming", "Bath & brush", "Nail trim only", "De-shedding treatment", "Puppy first groom", "Not sure — recommend something"] },
{ "id": "notes", "label": "Anything we should know?", "type": "textarea", "required": false, "helper": "Anxiety, sensitivities, prior bad experiences — all helpful." }
],
"completion_headline": "Thanks — we'll text you within the hour",
"completion_message": "We'll confirm a time and a quote based on your dog's coat. Same-day grooming often available."
}
HVAC
{
"title": "Request Service or a Free Estimate",
"description": "Two minutes, no obligation. We'll call back within an hour during business hours.",
"questions": [
{ "id": "name", "label": "Your name", "type": "text", "required": true },
{ "id": "email", "label": "Email", "type": "email", "required": true },
{ "id": "phone", "label": "Best phone", "type": "phone", "required": true },
{ "id": "service_address", "label": "Service address", "type": "text", "required": true, "helper": "So we can confirm we serve your area." },
{ "id": "service_type", "label": "What do you need?", "type": "select", "required": true, "options": ["Emergency repair", "Scheduled repair", "New install / replacement", "Maintenance / tune-up", "Free estimate", "Not sure"] },
{ "id": "equipment", "label": "Equipment", "type": "select", "required": false, "options": ["Central AC", "Furnace", "Heat pump", "Ductless mini-split", "Water heater", "Other / not sure"] },
{ "id": "issue", "label": "What's the issue?", "type": "textarea", "required": false }
],
"completion_headline": "Got it — we'll call within the hour",
"completion_message": "If it's after-hours we'll respond first thing tomorrow. For true emergencies call (480) 555-2100."
}
Legal
{
"title": "Tell Us Your Situation",
"description": "Confidential. We'll review and reach out within one business day to schedule a free 30-minute consult.",
"questions": [
{ "id": "name", "label": "Your name", "type": "text", "required": true },
{ "id": "email", "label": "Email", "type": "email", "required": true },
{ "id": "phone", "label": "Phone (we won't call without permission)", "type": "phone", "required": true },
{ "id": "matter_type", "label": "What kind of matter?", "type": "select", "required": true, "options": ["Divorce", "Custody / Parenting", "Mediation", "Estate planning", "Other family law", "Not sure"] },
{ "id": "summary", "label": "Briefly, what's going on?", "type": "textarea", "required": true, "helper": "A few sentences is plenty. We'll ask follow-ups at the consult." },
{ "id": "urgency", "label": "How urgent?", "type": "select", "required": false, "options": ["This week", "This month", "Just exploring options"] }
],
"completion_headline": "Thanks — we'll be in touch tomorrow",
"completion_message": "Sarah will personally review and reply within one business day. Everything you wrote is confidential."
}
Coaching
{
"title": "Take the Fit Quiz",
"description": "Five questions. Helps us figure out whether coaching is the right move for where you are right now.",
"questions": [
{ "id": "name", "label": "Your name", "type": "text", "required": true },
{ "id": "email", "label": "Email", "type": "email", "required": true },
{ "id": "current_role", "label": "Where are you now?", "type": "text", "required": true, "helper": "Title + industry is plenty." },
{ "id": "goal", "label": "What change are you trying to make?", "type": "textarea", "required": true },
{ "id": "timeline", "label": "Timeline?", "type": "select", "required": true, "options": ["Already in motion", "Next 3 months", "Next 6-12 months", "Just exploring"] },
{ "id": "tried_before", "label": "Worked with a coach before?", "type": "select", "required": false, "options": ["Yes, was great", "Yes, wasn't a fit", "No, first time"] }
],
"completion_headline": "Got it — give me 24 hours",
"completion_message": "I'll read through and reply with whether I think we're a fit. If not I'll point you somewhere better."
}
Output format
Return ONLY a single JSON object matching the props schema. No prose, no markdown fences.
If the operator gave you minimal context, default to a 4-question form (name + email + phone + one open-ended "what do you need?"). Adding more questions without a clear reason hurts completion. Less is almost always more here.