DOC.04LIAP
πΊοΈ Development Roadmap
β Home
β Completed
Phase 1 β Foundation
- Playwright persistent Chrome context (reuses real session)
- LinkedIn company search + profile scraping
- AI scoring (keyword + Ollama/Gemini)
- Connection request automation with personalized note
- Daily/weekly cap enforcement
- FastAPI backend with WebSocket log streaming
- Real-time dashboard UI
Phase 2 β First Message
- Msg Prospect tab with messages-per-run slider
- Connection card scraping via JS DOM evaluation
-
[data-view-name="message-button"]selector (confirmed from Web Inspector) - Direct compose URL navigation (more reliable than clicking button)
- Ollama message generation (warm, non-salesy prompt)
- Deduplication against
messages.csv - 5-second send countdown with abort
- LinkedIn Premium AI prompt dismissal
Phase 3 β Follow-Up Sequence
-
followups.csvschema + CRUD (upsert_followup,seed_followups_from_messages) - Follow Up tab with days slider + cap slider
- Reply detection via message bubble CSS classes
- Profile page Message
<button>click (not<a>tag) - Compose overlay opens on profile page (no page jump)
- AI follow-up generation referencing original message
- Status tracking:
pendingβfollowed_up/replied - AI quote stripping (
.strip('"').strip("'"))
Phase 4 β Hardening
- Git history cleanup (PII purged via
filter-branch) -
.gitignorepattern-based (*.csv,*.log,*.jsonl) -
messages.csvrecovery from git stash - README updated (no Sales Navigator references)
-
messenger_debug.logfile-based verbose logging
π² Planned β Near Term
Smart Follow-Up Timing
- Respect
wait_daysper-person (already built, just set slider > 0) - Skip weekends when calculating wait (B2B best practice)
- Configurable follow-up window (e.g. only send MonβThu 9amβ5pm)
Reply Handling
- When
replieddetected: log reply timestamp tofollowups.csv - UI: show "Replied β" rows in green in the Follow-Up table
- Optional: notify user (desktop notification or email) when someone replies
Message Quality
- A/B testing: rotate between 2 message templates, track which gets more replies
- Message preview before send (show in UI, require click to confirm)
- Per-company custom message context (e.g. "mention their recent Series B")
- Tone selector: Professional / Casual / Direct
π² Planned β Medium Term
Analytics
- Reply rate tracking (replied / followed_up)
- Connection acceptance rate
- Best-performing message templates
- Time-of-day send analysis
- Simple dashboard charts (Chart.js)
Campaign Management
- Named campaigns (group companies + message templates together)
- Campaign start/stop/archive
- Per-campaign stats (sent, replied, converted)
Multi-Step Sequences
- Step 2 follow-up (after follow-up also gets no reply)
- Sequence designer: define N steps with N-day gaps
- Hard stop: never contact someone more than 3 times total
π² Planned β Longer Term
Profile Intelligence
- Pull profile headline, recent posts, mutual connections before messaging
- Feed profile context into AI prompt for hyper-personalization
- Detect job changes: "Congratulations on the new role at..."
Safety & Rate Limiting
- Randomized send times (not all at :00 or :30)
- Auto-pause if LinkedIn shows any warning banners
- Monthly cap tracking (LinkedIn restricts ~100 connection requests/week)
- Exponential backoff on repeated CAPTCHA
Export & Integrations
- Export
followups.csvto Notion database - Export to Google Sheets (via gspread)
- Webhook on reply detected (Zapier / Make compatible)
- Slack notification on reply
π‘ Ideas Backlog
| Idea | Notes |
|---|---|
| LinkedIn Sales Navigator support | Removed from scope (no SN access) |
| Profile photo scraping | Privacy risk β not planned |
| Auto-accept connection requests | Passive mode β could add |
| Message thread summarization | Read thread β AI summary in UI |
| "Warm" detection | If they liked/commented your post, use warmer opener |
| Connection quality score | Based on title/company/mutual connections |