Learn with O.J.internal

Squeeze Design Doc

Squeeze

DM-to-Lead Intelligence Pipeline

Squeeze the value out of every conversation.


The Problem

Every DM conversation with a potential client, referral partner, or recruiter is a business opportunity sitting in a locked inbox. The current workflow has four failure modes that compound on each other:

Capture failure: Conversations stay in LinkedIn and never make it into any tracking system. This is worst during high-volume weeks when the number of DMs spikes and there is no spare bandwidth to document them.

Classification failure: When conversations do get captured, there is no structured way to determine whether a person is a coaching client, a B2B decision-maker, or a recruiter partnership prospect. Each type requires different follow-up strategies.

Response failure: Drafting thoughtful, on-brand responses to multiple DM threads takes significant time and mental energy, especially when switching between prospect types that need different tones and strategies.

Follow-up failure: Without a pipeline view, promising conversations go cold. There is no system to surface what needs attention today, what has been idle too long, or what the next action should be.

Core insight: The capture moment is the only moment that matters. If the tool can make capture immediately rewarding by returning a draft response you can use right now, every other failure mode gets solved downstream.


The Solution

Squeeze is a CLI tool that turns DM capture into a two-way interaction. Paste a conversation, get back three things instantly: a lead classification, a suggested response in your voice, and a structured lead card written to your repo. The capture step stops being homework and starts being the moment you get help.

Core Flow

StepActionWhat Happens
1. CapturesqueezeOpens editor. Paste the DM conversation. Save and close.
2. Process(automatic)AI parses the conversation, classifies the lead, identifies signals from the Client Scout profile schema, determines prospect type and service tier fit.
3. Respond(automatic)Generates 1-2 draft responses in your voice, strategically aligned to the lead classification. Displayed in terminal for immediate copy-paste back into LinkedIn.
4. Store(automatic)Writes a structured markdown lead card to learnwithoj-internal/leads/ with frontmatter metadata. Commits to git.
5. Tracksqueeze statusPipeline view: open leads, follow-ups due today, conversations gone cold. Rendered from markdown files.

Voice Profile System

Squeeze generates responses that sound like you, not like a chatbot. This requires a voice profile built from your actual messaging patterns, separate from your post-writing voice.

DM Voice vs Post Voice

DimensionPost VoiceDM Voice
FormalityProfessional but accessibleCasual, direct, conversational
LengthStructured, multi-paragraphShort bursts, 1-3 sentences
PersonalityAuthoritative, experiencedIrreverent, warm, real
StrategyEstablish thought leadershipBuild relationship, move to call
RulesNo em dashes, parallel short sentences joined with "and"Same style rules apply. Contractions encouraged. Questions welcome.

Voice Profile Construction

The voice profile is a JSON document built from your actual DM history. It captures patterns across several dimensions:

  • Greeting patterns: How you open conversations with different prospect types.
  • Pivot patterns: How you move from casual conversation to business value without being salesy.
  • CTA patterns: How you suggest next steps ("Let's Talk First" call, Focused Hour, etc.) and at what stage.
  • Closing patterns: How you end messages to keep the door open.
  • Vocabulary: Words and phrases you naturally use vs. avoid. Industry-specific language you deploy.
  • Tone calibration: How your tone shifts based on whether you are talking to a peer engineer, a C-level, or a recruiter.

Bootstrap: Export your LinkedIn messages via data download. Run the initial corpus through a voice extraction prompt. Review and refine the profile manually. This is a one-time setup with periodic updates as your style evolves.


Lead Card Schema

Every captured conversation produces a markdown file with YAML frontmatter. The schema maps directly to the Client Scout profile schema fields so the two systems can share data.

Frontmatter Fields

FieldTypeDescription
namestringContact name as it appears on LinkedIn
linkedin_urlstringProfile URL
prospect_typeenumcoaching_client, b2b_decision_maker, recruiter_partner, referral_source, unclear
service_tier_fitenumfocused_hour, career_accelerator, fresh_squeeze, b2b_contract, not_applicable
stageenumnew, qualifying, warm, proposal, closed_won, closed_lost, dormant
signalslistKey signals detected: title frustration, promotion block, job search, team scaling, etc.
next_actionstringRecommended next step with rationale
follow_up_datedateWhen to re-engage if no response
captured_atdatetimeWhen the conversation was captured
last_contactdateDate of most recent message in thread
confidencefloatAI confidence score (0-1) for the classification
tagslistFree-form tags for custom filtering

Example Lead Card

---
name: Jordan Rivera
linkedin_url: linkedin.com/in/jordanrivera
prospect_type: coaching_client
service_tier_fit: career_accelerator
stage: qualifying
signals: [title_gap, promotion_block, sr_eng_aspirant]
next_action: Suggest Let's Talk First call
follow_up_date: 2026-03-27
captured_at: 2026-03-20T14:30:00
last_contact: 2026-03-20
confidence: 0.85
tags: [kubernetes, fintech]
---

## Conversation
[raw transcript]

## Analysis
[AI-generated notes on signals, gaps, and strategy]

Response Generation Engine

The response engine is the feature that makes Squeeze worth using. It generates draft replies that are strategically informed by the lead classification and voiced in your actual DM style.

Response Strategy Matrix

Prospect TypeStrategyCTA Direction
Coaching clientValidate their experience, name the gap, offer a path forward.Move toward Let's Talk First. If urgency is high, suggest Focused Hour directly.
B2B decision-makerLead with business impact. Reference relevant case study or war story.Offer to scope the engagement. Position as low-risk first step.
Recruiter partnerFrame the value of technical evaluation expertise.Propose a pilot: evaluate 2-3 candidates, show accuracy delta.
Referral sourceExpress genuine appreciation. Ask about their network context.Make the referral easy: provide a link or intro message they can forward.
UnclearAsk a clarifying question that doubles as qualification.No CTA yet. Gather information.

Response Options

Squeeze generates two response drafts per conversation:

  • Option A (Advance): Moves the conversation forward toward a business outcome. More direct, includes a CTA.
  • Option B (Nurture): Keeps the relationship warm without pushing. Asks a question, shares something useful, or validates their situation.

Both options are displayed in the terminal. You pick one, adjust if needed, and paste into LinkedIn. The tool logs which option you chose to refine future suggestions.


Architecture Options

Squeeze can be built as a standalone tool or as a module within the Client Scout system. Both options are specced below with tradeoffs.

Option A: Standalone Tool

Structure:

  • Repository: squeeze/ (separate repo, own package.json)
  • Runtime: Node.js CLI application
  • AI backend: Anthropic API (Claude) for conversation parsing and response generation
  • Storage: Markdown files in learnwithoj-internal/leads/
  • Config: ~/.squeezerc for voice profile path, repo location, API keys

Commands:

CommandDescription
squeezeOpen editor, paste conversation, process, display response options, save lead card
squeeze statusPipeline view of all leads: new, qualifying, warm, proposal, closed
squeeze followupShow leads needing follow-up today with suggested messages
squeeze update <n>Add new conversation to existing lead, update stage and next action
squeeze importBatch process LinkedIn data export (messages.csv)
squeeze voiceRebuild or update voice profile from message corpus
squeeze coldList leads that have gone dormant with re-engagement suggestions

Pros: Ships faster, no dependency on Client Scout, can start using immediately.

Cons: Lead data lives only in markdown, potential migration problem later, voice engine not reusable without duplication.

Option B: Client Scout Module

Structure:

  • Repository: client-scout/ with modules: scout-core, squeeze, (future modules)
  • Shared layer: Profile schema, voice engine, prospect classifier, and lead storage shared across modules
  • Storage: SQLite database for structured queries with markdown export for git/Obsidian compatibility

Module Boundaries:

LayerOwnsUsed By
scout-coreProfile schema, prospect classifier, lead storage, voice engineAll modules
squeezeDM capture CLI, response generation, follow-up trackingEnd user via terminal
scout (future)Candidate sourcing, match scoring, outreach queueEnd user via web UI
intake (future)Pre-session intake form, career readiness assessmentClients via web form

Pros: Structured from day one, shared voice engine, SQLite query power, still git compatible.

Cons: More upfront work, Client Scout decisions not resolved, risk of over-engineering.

Recommendation

Build standalone first, with a clean extraction path. Start with Option A to validate the capture workflow and voice profile quickly. Structure the code so the AI layer (classifier, voice engine, response generator) lives in its own module from day one. When Client Scout reaches Phase 2, extract that module into scout-core and make Squeeze a consumer of it. This gives you speed now and a clean integration path later without throwaway work.


LinkedIn API Integration

Squeeze is designed around what the LinkedIn official API permits. It does not scrape, crawl, or automate any activity that violates the Terms of Service.

What the Official API Supports

CapabilityAPI ProductStatus
Post creation (text, image, video, carousel, poll)Community Management APIAvailable with approval
Post schedulingCommunity Management APIAvailable with approval
Read/write comments and reactionsCommunity Management APIAvailable with approval
Post analyticsCommunity Management APIAvailable with approval
Follower statisticsCommunity Management APIAvailable with approval
Share on behalf of userw_member_social (open)Self-service
Read own postsr_member_socialClosed, not accepting requests
Messaging / DM accessCompliance API (enterprise only)Not available
Profile browsing / searchSales Navigator API (SNAP)Partner approval required
Connection managementNot available via APINot available

Squeeze Data Capture Strategy

Since DM access is not available through the official API, Squeeze uses two compliant capture methods:

  • Manual paste (primary): You copy-paste the conversation from LinkedIn into your terminal. This is the fastest path for real-time use when you want an immediate response suggestion.
  • Data export (batch): LinkedIn allows you to download your data including messages via Settings > Get a copy of your data. Squeeze can batch-process this export to backfill historical conversations or catch ones you missed.

Both methods involve you accessing your own data through legitimate means. No scraping, no browser automation, no ToS risk.

Future API Integration

If Learn with O.J. is approved for the Community Management API, Squeeze gains additional capabilities: automatic post scheduling tied to the five named content days, post analytics pulled into the pipeline view to correlate content performance with lead activity, and comment tracking to identify when target accounts engage with your posts.

The Community Management API requires a registered business entity, a use case review, and a screencast demo. Learn with O.J. qualifies. The application process can run in parallel with Squeeze development.


Implementation Phases

Phase 0: Voice Profile Bootstrap Export LinkedIn messages. Run the corpus through a voice extraction prompt to build the initial DM voice profile. Review and refine manually. Estimated time: one session.

Phase 1: Capture and Classify Build the squeeze command. Paste conversation, get back a lead classification and structured lead card written to learnwithoj-internal/leads/. No response generation yet. Validate that the classification is accurate across your three prospect types.

Phase 2: Response Engine Add the response generation layer. Voice profile integration, the two-option response format (Advance and Nurture), and copy-paste output. This is the feature that makes the tool sticky. Log which response option you choose for future refinement.

Phase 3: Pipeline View Build squeeze status and squeeze followup. Render pipeline stages from markdown frontmatter. Surface leads needing attention today. Add squeeze cold for dormant re-engagement.

Phase 4: Batch Import Build squeeze import to process LinkedIn data exports. Useful for backfilling historical conversations and catching missed DMs. Deduplicate against existing lead cards.

Phase 5: Client Scout Integration Extract the classifier, voice engine, and lead schema into a shared module. Restructure Squeeze as a consumer of scout-core. This phase triggers when Client Scout reaches Phase 2 (Scout MVP) and the two systems need to share data.


Open Questions

  • What AI model and prompting strategy works best for the voice profile? Should the voice profile be a static document or a dynamic few-shot prompt built from recent messages?
  • How should Squeeze handle multi-thread conversations with the same person? One lead card that grows over time, or separate cards per conversation?
  • Should the response engine include a "decline gracefully" option for conversations where the person is not a fit? What does that look like in your voice?
  • What is the right follow-up cadence by prospect type? Coaching clients may need a nudge in 3 days while a B2B decision-maker might need 2 weeks.
  • Should lead cards be committed to git automatically on capture or batched at end of day?
  • How do we handle the voice profile evolving over time? Periodic re-extraction from recent messages, or manual updates when you notice drift?
  • Is there value in a "squeeze practice" mode where you can paste old conversations and compare Squeeze's suggested response to what you actually sent? This would be a way to calibrate the voice profile.
  • For the Community Management API application: should Learn with O.J. apply now to start the approval process, or wait until the post scheduling feature is designed?
  • What is the privacy policy for lead data? How long should conversation transcripts be retained? Should there be an auto-purge for leads marked closed_lost?
  • Should Squeeze integrate with the Tailoring Blueprint architecture or remain independent of the resume tooling?

Squeeze | Learn with O.J. | learnwithoj.com