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
- Create a free Supabase project at supabase.com
- Run the SQL schema below in your Supabase SQL Editor to create your CRM tables
- Copy the markdown templates into your project repo or notes app
- Tell your AI agent your Supabase connection details (URL + anon key) so it can read/write your data
- 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.
-- 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: {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-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
## 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 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
Crispy is the API. Your Supabase is the memory. Your templates are the logic.
You own everything.