Skip to content
Back to skills

Kelly Lead Funnel

ASecurity

Busabase-backed App-in-Skill control panel / kanban board for a BD or sourcing team triaging merchant and business financing leads for a lender or investment fund. Use when the user invokes $kelly-lead-funnel or /kelly-lead-funnel, wants to review the deal sourcing pipeline, funnel, lead board, or asks to move a lead's stage, reject a lead, add a note, score a lead, or see funnel conversion rates. Deterministic rule-based lead scoring only — never an LLM call — and never sends outreach, signs...

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 2, 2026
ai-agentsrustgonodedebuggingapibackendsecuritydocumentation

Works with

  • cli
  • api

Security analysis

A100/100

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

Scanned September 2, 2026

npx -y skills add mr-kelly/skills --skill kelly-lead-funnel --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Kelly Lead Funnel?

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

Security grade badge for Kelly Lead Funnel
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mr-kelly-kelly-lead-funnel/badge)](https://www.skillsdirectory.com/skills/mr-kelly-kelly-lead-funnel)

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: kelly-lead-funnel
description: Busabase-backed App-in-Skill control panel / kanban board for a BD or sourcing team triaging merchant and business financing leads for a lender or investment fund. Use when the user invokes $kelly-lead-funnel or /kelly-lead-funnel, wants to review the deal sourcing pipeline, funnel, lead board, or asks to move a lead's stage, reject a lead, add a note, score a lead, or see funnel conversion rates. Deterministic rule-based lead scoring only — never an LLM call — and never sends outreach, signs term sheets, or moves money.
metadata:
  category: rbf
  tags:
    - risk:local-write
    - surface:busabase
  busabase:
    template: true
    folderSlug: kelly-lead-funnel
    resources:
      - leads
      - settings
    risk: local-write

---

# Deal Sourcing Funnel

## Overview

Kelly Lead Funnel is a Busabase Cloud App-in-Skill. Its canonical product
surface is the AirApp in Busabase, not a separate local-data product. The
same Hono source supports an explicitly requested local preview with OAuth
connection bootstrap. It gives a BD/sourcing team a kanban board plus a
per-lead detail panel to triage merchant/business financing leads (merchant
cash advance, revenue-based financing, or similar) for any lender or
investment fund: move a lead's stage, reject with a reason, and leave notes —
all direct, immediate writes to Busabase.

This is a control-panel/kanban App-in-Skill, not a review-then-approve queue:
there is no AI-authored draft to approve and no separate execute/decisions
step. The score and suggested next action are computed by a documented
rule-based function (`content/kelly-lead-funnel-app/app/js/lead-funnel-model.js`, ported from the
retired `lib/scoring.ts`); the human sourcing-team operator makes every
stage/reject/note decision directly in the kanban UI, the same way
`kelly-crm`'s kanban stage moves work.

Default behavior is AirApp-first. Unless the user explicitly asks only for
explanation, give the user the clickable AirApp URL. Start localhost only
when local preview/debugging is explicitly requested; it uses the same
Busabase resources and never offers another data provider. Use chat-only mode
only when the user says "纯聊天", "chat only", "不要打开 UI", or similar.

## Mandatory Dependencies

1. Read and follow `$kelly-app-skill-creator` for product behavior, visual
   quality, responsive layout, and the complete canonical `content/kelly-lead-funnel-app/` artifact.
2. Read and follow `$busabase` for connection, target Space, node discovery,
   ChangeRequests, review, and merge behavior.
3. Read and follow `$busabase-app-creator` for resource modeling, AirApp
   runtime limits, security, validation, and deployment.

If a dependency is unavailable, preserve this skill's artifact and product
contracts, stop before the unavailable Busabase operation, and report the
exact missing dependency. Do not invent a second data backend.

## App UI Screenshots

<table>
  <tr>
    <td width="50%"><img src="assets/screenshots/overview.webp" alt="Deal Sourcing Funnel overview"></td>
    <td width="50%"><img src="assets/screenshots/kanban.webp" alt="Deal Sourcing Funnel kanban board"></td>
  </tr>
  <tr>
    <td><strong>Overview</strong><br>Funnel summary header with per-stage counts, conversion rates, and rejection rate.</td>
    <td><strong>Kanban board</strong><br>Leads across New → Data-Verified → Scored → Term-Sheet-Ready → Rejected, with a score chip per card.</td>
  </tr>
  <tr>
    <td colspan="2"><img src="assets/screenshots/lead-detail.webp" alt="Deal Sourcing Funnel lead detail"></td>
  </tr>
  <tr>
    <td colspan="2"><strong>Lead detail</strong><br>Score breakdown by factor, suggested next action, notes, stage-move actions, and reject-with-reason.</td>
  </tr>
</table>

## Boundary

- Deterministic, rule-based lead-quality score only
  (`content/kelly-lead-funnel-app/app/js/lead-funnel-model.js`). NEVER call an LLM to score, rank, or
  auto-reject a lead.
- The AirApp reads and writes its own Busabase Bases only; it never sends
  outreach, emails, signs term sheets, disburses funds, or touches any
  external system. There is no trusted execute/handoff script — the direct
  kanban writes (stage move, reject, note) are the full extent of what
  happens.
- Generic, brand-neutral tool: never hardcode or reference a specific real
  company, lender, or fund name in code, templates, or docs.
- Treat lead financial data as sensitive. Never commit real lead data, a
  local credential file, or Busabase secrets.

## Busabase Resources

Two Bases under one application Folder (`kelly-lead-funnel`), declared in
`content/kelly-lead-funnel-app/app/js/config.js` and the generated template sidecars under `content/`:

- `leads`: one row per merchant/business lead — brand name, category, city,
  store count, est. monthly revenue, lead source, data verifiability, funnel
  `stage`, `rejection-reason`, `notes` (JSON array), and `stage-history`
  (JSON array). `score`/`score_breakdown`/`suggested_action` are never
  stored — they are pure/derived from these fields plus the fund's
  `scoring_criteria` and recomputed on every read, so a criteria change is
  reflected immediately with no staleness to manage. Stage moves,
  rejections, and notes are written directly onto the lead's own record by
  the human sourcing-team operator in the kanban board.
- `settings`: sanitized fund profile and scoring-criteria config (no
  secrets), one row keyed by `kind`.

Resources provision lazily through an idempotent Busabase ChangeRequest the
first time the app runs in a Space; see `references/lead-schema.md` for exact
field shapes.

## Scoring

`content/kelly-lead-funnel-app/app/js/lead-funnel-model.js` (`scoreLead`) computes a deterministic
0-100 score from four weighted, explainable factors — chain-size fit (30),
revenue-scale fit (30), category risk (25), and data verifiability (15) —
against the fund's `scoring_criteria` (ideal store-count band, ideal
monthly-revenue band, category risk tiers). `suggestNextAction` maps the
score and stage to a deterministic next step. Every point on the 0-100 scale
is explained by a `score_breakdown` row (factor, weight, contribution,
rationale) so the UI can show a transparent breakdown, never a bare number.

## Direct Kanban Actions

All human actions write straight onto the lead's own Busabase record through
`busabase-sdk`, exactly like `kelly-crm`'s kanban stage moves — there is no
approval queue and no separate decisions bucket:

- **Move stage**: advance a lead through New → Data-Verified → Scored →
  Term-Sheet-Ready. Appends a `stage-history` entry.
- **Reject**: move a lead to `rejected`. Always requires a `reason`, which is
  stored on the lead and also recorded in `stage-history`.
- **Add note**: append a timestamped note to the lead.

From a standalone local preview the write merges immediately (trusted
operator); from the deployed AirApp it creates a pending ChangeRequest for
the trusted process to merge, per the AirApp boundary in
`$busabase-app-creator`.

## Demo Mode

- `?demo=1` or `?demo=board` opens a deterministic, fully offline mock
  pipeline (21 leads across all 5 stages, ported verbatim from the retired
  `lib/mock-leads.ts`) for documentation and screenshots.
- `?demo=lead` opens the first lead's detail pane; `?demo=settings` opens
  Help & Settings.
- `lang=en` or `lang=zh` forces UI chrome language for screenshots.
- Demo mode never reads or writes Busabase and never claims a real
  connection; demo actions (move/reject/note) are read-only and raise an
  error if attempted.

UI language: English and Chinese chrome with `Auto` default.

## Local App

Default behavior is AirApp-first — give the user the clickable AirApp URL.
Start `pnpm --dir content/kelly-lead-funnel-app dev` only when local preview/debugging is explicitly
requested.

## Views

- `#/board`: funnel summary header + kanban across all 5 stages.
- `#/board/<stage>`: single-stage filtered list (used by the human-attention
  shortcuts for New / Scored / Rejected).
- `#/leads/<id>`: score breakdown, suggested next action, notes, stage-move
  buttons, reject-with-reason.
- `#/settings`: sanitized fund profile and scoring-criteria summary.

## Completion Criteria

Finish only when:

- the skill contains the complete canonical `content/kelly-lead-funnel-app/` project and
  `pnpm --dir content/kelly-lead-funnel-app dev` remains supported;
- all persistent config, state, and domain data use `busabase-sdk` and the
  declared resource map — no local JSON, browser storage, or provider
  choice;
- Vault values and API credentials never reach browser-visible surfaces;
- local setup offers Cloud/custom URL OAuth plus the explicit Demo path,
  while a deployed AirApp uses its ambient session;
- Board, lead detail, and Help & Settings render on desktop and phone widths;
- `pnpm --dir content/kelly-lead-funnel-app run check` and `node --test` pass.

## Stop Conditions

Stop before consequential Busabase mutation when the target Space is
ambiguous, the current user lacks permission, or a same-slug resource is not
application-owned. Never send outreach, sign a term sheet, or move money from
the AirApp.

Files in this skill

  • README.md3.2 KB
  • SKILL.md9 KB
  • agents/openai.yaml236 B
  • assets/screenshots/kanban-zh-CN.webp131 B
  • assets/screenshots/kanban.webp131 B
  • assets/screenshots/lead-detail-zh-CN.webp131 B
  • assets/screenshots/lead-detail.webp131 B
  • assets/screenshots/overview-zh-CN.webp131 B
  • assets/screenshots/overview.webp131 B
  • assets/screenshots/thumbs/kanban-zh-CN.webp130 B
  • assets/screenshots/thumbs/kanban.webp130 B
  • assets/screenshots/thumbs/lead-detail-zh-CN.webp130 B
  • assets/screenshots/thumbs/lead-detail.webp130 B
  • assets/screenshots/thumbs/overview-zh-CN.webp130 B
  • assets/screenshots/thumbs/overview.webp130 B
  • busabase.json1020 B
  • content/_folder.json348 B
  • content/kelly-lead-funnel-app/.busabaseignore194 B
  • content/kelly-lead-funnel-app/_node.json368 B
  • content/kelly-lead-funnel-app/app/accent-theme.css8 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.