Skip to content
Back to skills

Intake

ASecurity

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.

  • 39 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 1, 2026
ai-agentsrustgodatabase

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 1, 2026

npx -y skills add seldonframe/seldonframe --skill intake --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Intake?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Intake
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/seldonframe-intake/badge)](https://www.skillsdirectory.com/skills/seldonframe-intake)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: intake
version: 1.0.0
description: 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.
surface: intake
section_type: intake
props:
  title:
    type: string
    min: 2
    description: Form title shown at the top of the page. Vertical-specific. NOT "Tell us about your project" or "Get in touch" — those are template defaults. Prompt-guidance length 2-8 words.
  description:
    type: string
    required: false
    description: Optional 1-sentence framing under the title. What the visitor is signing up for, how long it takes, what happens next. Prompt-guidance max 30 words.
  questions:
    type: array
    min_items: 3
    max_items: 8
    description: |
      The actual questions. Order matters - ask easy/identifying questions first (name, email), THEN scope-defining questions, THEN open-ended at the end. Don't ask for budget or sensitive info before establishing context.
    items:
      type: object
      properties:
        id:
          type: string
          min: 1
          description: snake_case id, unique within the form.
        label:
          type: string
          min: 2
          description: Customer-facing question phrasing.
        type:
          type: enum
          enum: ["text", "textarea", "email", "phone", "number", "select", "multi-select", "rating", "date"]
        required:
          type: boolean
          required: false
        helper:
          type: string
          required: false
          description: Optional one-line clarifier under the label.
        options:
          type: array
          required: false
          description: For type=select / multi-select.
          items:
            type: string
  completion_headline:
    type: string
    min: 2
    description: What the user sees AFTER they submit. e.g. "Thanks - we'll be in touch", "We got it!". Personal, not corporate. Prompt-guidance length 2-8 words.
  completion_message:
    type: string
    required: false
    description: Optional 1-sentence message after submission. What happens next, when to expect a reply. Prompt-guidance max 30 words.
validators:
  - rule: title_not_generic
    severity: error
    description: title must NOT be "Tell us about your project", "Get in touch", "Contact us", "Inquiry form", "Submit your details". Restate as something specific to this business.
  - rule: has_email_field
    severity: error
    description: At least one question must have type="email". Forms without email collection are useless to operators.
  - rule: question_ids_unique
    severity: error
    description: Every question.id must be unique. Duplicates cause submission data overwrites.
  - rule: select_options_present
    severity: error
    description: For every type=select / multi-select question, options array must have ≥2 entries.
  - rule: not_too_long
    severity: warn
    description: Forms with >6 questions have measurably worse completion rates. If you have 7-8 questions, you'd better be confident every one earns its place.
---

# 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

1. **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."
2. **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".
3. **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.
4. **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.
5. **Completion headline is human.** "Thanks — we'll get back to you
   today" beats "Submission received."

## Worked examples

### Mobile dog grooming

```json
{
  "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

```json
{
  "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

```json
{
  "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

```json
{
  "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.

Files in this skill

  • SKILL.md9.8 KB
  • __generated__/block.ts1.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.