Services
Skill seldonframe/seldonframe/packages/crm/src/blocks/services
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 servicesAssembled 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
Services / offerings grid with one card per service, each with a distinct icon and a short customer-language description.
SKILL.md
8.1 KB, as published. Nobody here has run it
Services Block — generation prompt
You are generating the services-grid section of a small-business landing page. This is where visitors decide whether you do the thing they need. Generic descriptions ("Professional X services") fail this test silently — they technically describe the work but don't help the visitor self-qualify.
The mental model
Each card answers three questions in one glance:
- What is it? (the title — match the operator's phrasing)
- What outcome do I get? (the description — lead with the benefit)
- Is this serious? (the icon — distinct, recognizable, on-vertical)
If a card fails any one, the visitor stalls. Three cards failing → bounce.
Voice rules
- Customer language, not industry jargon. "Fades, scissor cuts, beard sculpting" beats "Professional men's grooming services". "Same-day AC repair" beats "HVAC service solutions".
- Lead with outcome. The first 5-10 words of each description should tell me what I get, not what you do.
- Match the operator's input services exactly. If they said "AC repair" don't say "Air Conditioning Repair Services". Use their words.
- Distinct icons, every time. Repeating an icon is the visible symptom of homogenized output. Each card picks a different icon from the full lucide library.
- Headline is vertical-specific. "How We Cut" for a barbershop. "What We Fix" for a trade. "Practice Areas" for legal. NOT "Our Services".
Lucide icons
Use any valid lucide icon name from https://lucide.dev/icons — the renderer
supports the full library via lucide-react. Names are case-insensitive and
accept snake_case, kebab-case, or PascalCase (e.g. shield_check,
shield-check, and ShieldCheck all resolve to the same icon).
Common concept aliases also work: storm, repair, inspection,
emergency, warranty, licensed, insured, drain, leak, cooling,
heating, etc.
If you pick a name that doesn't exist in lucide, the renderer falls back to a Sparkles icon — so prefer real lucide names you're confident exist.
Worked examples
Barbershop, 4 services
{
"headline": "How We Cut",
"layout": "grid-4",
"items": [
{ "icon": "scissors", "title": "Men's Haircuts", "description": "Fades, scissor cuts, classic gentleman's cuts — out the door in 30 minutes.", "price_from": "$45" },
{ "icon": "comb", "title": "Beard Trims", "description": "Sculpt, line up, hot-towel finish. Bring a reference photo or trust the chair.", "price_from": "$25" },
{ "icon": "user_plus", "title": "Kids Cuts", "description": "Patient with first-time clippers and Sunday-morning meltdowns alike. Ages 4 and up.", "price_from": "$35" },
{ "icon": "sparkles", "title": "Cut + Beard Combo", "description": "The full hour: haircut, beard, hot towel, and a quiet 10 minutes you didn't know you needed.", "price_from": "$65" }
]
}
HVAC, 3 services + emergency
{
"headline": "What We Fix",
"subhead": "Same-day repair across the Phoenix Valley. Licensed, bonded, insured.",
"layout": "grid-3",
"items": [
{ "icon": "snowflake", "title": "AC Repair", "description": "90-minute response on weekday emergencies. Diagnostic is free with any repair, $89 standalone.", "category": "Repair" },
{ "icon": "thermometer", "title": "Heating Installation", "description": "Right-sized systems with manufacturer rebates included. Two-year labor warranty on every install.", "category": "Install" },
{ "icon": "wind", "title": "Duct Cleaning", "description": "Whole-home cleaning + sanitization. Bundle with annual maintenance for $50 off.", "category": "Maintenance" }
]
}
Legal, 4 practice areas
{
"headline": "Practice Areas",
"layout": "grid-4",
"items": [
{ "icon": "scale", "title": "Divorce", "description": "Negotiated settlements when possible, prepared litigation when not. Fixed-fee retainers available.", "category": "Family" },
{ "icon": "users", "title": "Custody & Parenting", "description": "Child-focused arrangements that hold up over years, not just the first hearing.", "category": "Family" },
{ "icon": "handshake", "title": "Mediation", "description": "Two-party mediation in our Vancouver office. Most matters resolve in 1-3 sessions.", "category": "Resolution" },
{ "icon": "file_text", "title": "Estate Planning", "description": "Wills, powers of attorney, and trusts. Two-week turnaround on standard packages.", "category": "Planning" }
]
}
Output format
Return ONLY a single JSON object matching the props schema. No prose, no
markdown fences. The persistence endpoint runs JSON.parse directly.
If the operator gave you fewer than 3 services, ask them for more before generating — a 1-card or 2-card grid looks broken. If they gave you more than 8, pick the 8 most distinct (combining duplicates like "AC repair" and "Air conditioning service" into one card).