Starter Kit

Bring your own database. Own your LinkedIn data completely.

Why a starter kit?

Crispy is stateless by design. We never store your LinkedIn data — no prospect lists, no message history, no campaign state. API call in, result out, nothing retained.

But you still need somewhere to track your outreach, manage campaigns, and measure results. This starter kit gives you a Supabase schema and markdown templates that you deploy to your own infrastructure. You own the data, you own the workflows, and if Crispy disappeared tomorrow, everything would still be yours.

Your DB

Deploy the schema to your own Supabase project

Your files

Markdown templates live in your repo

Your data

Nothing on our servers. Ever.

How it works

  1. Create a free Supabase project at supabase.com
  2. Run the SQL schema below in your Supabase SQL Editor to create your CRM tables
  3. Copy the markdown templates into your project repo or notes app
  4. Tell your AI agent your Supabase connection details (URL + anon key) so it can read/write your data
  5. Use Crispy prompts for LinkedIn actions, then ask the agent to log results to your Supabase

Supabase Schema

Run this in your Supabase project's SQL Editor. Creates 4 tables: prospects, outreach_log, campaigns, and content_log.

schema.sql — run in your Supabase SQL Editor
-- Crispy Starter Kit — deploy to YOUR Supabase project
-- This gives you a personal LinkedIn CRM that you own completely.
-- Crispy never sees this data. It stays in your database.

-- ============================================================
-- Prospects — people you're tracking
-- ============================================================
CREATE TABLE prospects (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  linkedin_url text NOT NULL UNIQUE,
  name text,
  headline text,
  company text,
  location text,
  status text DEFAULT 'new'
    CHECK (status IN ('new','invited','connected','messaged','replied','converted','archived')),
  source text,          -- how you found them: search, post comment, referral
  campaign_id uuid,     -- optional link to a campaign
  notes text,
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

-- ============================================================
-- Outreach log — every action you take, tracked locally
-- ============================================================
CREATE TABLE outreach_log (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  prospect_id uuid REFERENCES prospects(id) ON DELETE CASCADE,
  action text NOT NULL
    CHECK (action IN ('invitation_sent','message_sent','follow_up_sent',
                      'comment_left','post_reacted','inmail_sent')),
  content text,         -- the actual message/comment you sent
  linkedin_chat_id text,-- for linking back to conversations
  created_at timestamptz DEFAULT now()
);

-- ============================================================
-- Campaigns — group your outreach efforts
-- ============================================================
CREATE TABLE campaigns (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  name text NOT NULL,
  criteria text,         -- search criteria used
  message_template text, -- connection message template
  follow_up_template text,
  status text DEFAULT 'active'
    CHECK (status IN ('active','paused','completed')),
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

ALTER TABLE prospects
  ADD CONSTRAINT fk_campaign
  FOREIGN KEY (campaign_id) REFERENCES campaigns(id) ON DELETE SET NULL;

-- ============================================================
-- Content log — track your LinkedIn posts locally
-- ============================================================
CREATE TABLE content_log (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  linkedin_post_id text,
  content text,
  format text,           -- list, story, hot_take, carousel
  topic text,
  published_at timestamptz,
  impressions int DEFAULT 0,
  reactions int DEFAULT 0,
  comments int DEFAULT 0,
  reposts int DEFAULT 0,
  created_at timestamptz DEFAULT now()
);

-- ============================================================
-- Indexes for common queries
-- ============================================================
CREATE INDEX idx_prospects_status ON prospects(status);
CREATE INDEX idx_prospects_campaign ON prospects(campaign_id);
CREATE INDEX idx_outreach_prospect ON outreach_log(prospect_id);
CREATE INDEX idx_outreach_created ON outreach_log(created_at DESC);
CREATE INDEX idx_content_published ON content_log(published_at DESC);

Campaign Templates

Copy these markdown files into your project. Customize the placeholders. Your AI agent can read these files to understand your campaign context and track state across sessions.

outbound-campaign.md

Template for running an outbound prospecting campaign with tracking.

outbound-campaign.md
# Outbound Campaign: {CAMPAIGN_NAME}

## Target criteria
{DESCRIBE_YOUR_ICP}
Example: "VP of Sales at Series B+ SaaS companies, 50-500 employees, US-based"

## Campaign status
- **Created:** {DATE}
- **Status:** Active
- **Prospects found:** 0
- **Invitations sent:** 0
- **Connected:** 0
- **Replied:** 0

## Connection message template
Hi {name}, I noticed you're leading sales at {company}. I'm working on
{your_angle} and thought it'd be great to connect. No pitch — just
genuinely interested in what you're building.

## Follow-up message (3 days after connecting)
Thanks for connecting, {name}! I saw {something_specific_about_them}.
{ask_a_relevant_question_or_share_value}.

## Daily workflow
Run this with your AI agent:

1. "Use the follow_up_sequence prompt to check my daily outreach"
2. "Search for {criteria} and present the top 5 matches"
3. Review and approve prospects
4. AI sends personalized invitations

## Tracking
After each session, ask your AI agent to:
- INSERT new prospects into your Supabase `prospects` table
- INSERT actions into your `outreach_log` table
- UPDATE prospect status when they connect or reply

## Notes
{ADD_YOUR_NOTES_HERE}

daily-follow-ups.md

Daily follow-up system — run every morning in 5-10 minutes.

daily-follow-ups.md
# Daily Follow-Up System

Run this every morning with your AI agent. Takes 5-10 minutes.

## Step 1: Run the follow-up sequence
Tell your AI agent:
> "Run the follow_up_sequence prompt with a 3-day follow-up window"

This will:
- Check for new connections (people who accepted your invite)
- Show pending outbound invitations
- Show incoming connection requests
- Find stale conversations to follow up on

## Step 2: Review and approve
The agent will present drafts for:
- Welcome messages to new connections
- Accept/decline recommendations for incoming invitations
- Follow-up messages for stale conversations

Review each one. Edit if needed. Approve what looks good.

## Step 3: Log to your database
After approvals, tell your AI agent:
> "Log all actions we just took to my Supabase outreach_log table
> and update prospect statuses accordingly"

## Step 4: Quick engagement round
Tell your AI agent:
> "Run the content_engagement prompt for my feed"

Comment on 3-5 relevant posts. This keeps you visible and builds
relationships with prospects and peers.

## Weekly review (Fridays)
> "Run the weekly_report prompt for my profile"
> "Also query my Supabase to summarize this week's outreach:
>  how many invitations sent, connections made, replies received"

content-calendar.md

Weekly content planning and publishing workflow.

content-calendar.md
# Content Calendar

## This week's posts
| Day | Topic | Format | Status |
|-----|-------|--------|--------|
| Mon | {topic} | List/Framework | Draft |
| Wed | {topic} | Story/Experience | Draft |
| Fri | {topic} | Hot take | Draft |

## Drafting workflow
For each post, tell your AI agent:
> "Run the post_drafter prompt for '{topic}' with a {tone} tone"

The agent will:
1. Research what's performing on that topic
2. Draft 3 variations (list, story, hot take)
3. Ask you to pick one
4. Publish when you approve

## After publishing
Tell your AI agent:
> "Log this post to my Supabase content_log table with the LinkedIn
> post ID, content, format, and topic"

## Weekly review
On Friday, tell your AI agent:
> "Run the weekly_report prompt and compare results with my
> content_log in Supabase to track what formats perform best"

## Content themes
1. {THEME_1} — e.g., "AI in sales"
2. {THEME_2} — e.g., "Lessons from scaling a team"
3. {THEME_3} — e.g., "Hot takes on our industry"

## Notes
{ADD_YOUR_NOTES_HERE}

competitor-tracker.md

Monthly competitor intelligence template.

competitor-tracker.md
# Competitor Tracking: {COMPETITOR_NAME}

## Setup
Tell your AI agent:
> "Run the competitor_intel prompt for '{competitor_name}'"

## Last researched: {DATE}

## Company overview
- Industry:
- Size:
- LinkedIn followers:

## Content strategy
- Posting frequency:
- Top topics:
- Best format:
- Avg engagement:

## Audience signals
People engaging with their content (potential prospects for you):
| Name | Title | Company |
|------|-------|---------|
| | | |

## Key employees to watch
| Name | Role | Active on LinkedIn? |
|------|------|---------------------|
| | | |

## Opportunities
- Content gaps they're not covering:
- Audiences they're missing:
- Angles you could exploit:

## Tracking
Re-run competitor_intel monthly and update this file.
Log interesting audience signals to your Supabase prospects table.

Example: Using it with Claude

Here's what a typical session looks like once you have the starter kit set up:

You:

Run my daily follow-up sequence. After that, log any actions we take to my Supabase at [your-project].supabase.co using my outreach_log table. Update prospect statuses too.

Claude (using Crispy + your Supabase):

I'll run the follow-up sequence now. [Uses Crispy tools to check connections, invitations, conversations.] Found 3 new connections and 2 stale conversations. Here are the drafts... [After your approval, sends messages via Crispy, then INSERTs records into your Supabase outreach_log and updates prospect statuses.]

The architecture

Your AI Agent (Claude / Cursor / n8n)
|
Crispy MCPstateless pipe
Your Supabaseyour data
|
Your Markdown Templatesyour workflows, your repo

Crispy is the API. Your Supabase is the memory. Your templates are the logic.
You own everything.