"Up Next" unified action list
One prioritized feed blending four item types — your action items, contacts overdue for a reach-out, AI/rule suggestions, and recently added people — each with a colored badge, filter chips with counts, and pagination.
A field guide to the product
A personal networking CRM built on one insight — a conversation, not a contact, is the atomic unit of a relationship. Everything below grows from that.
This guide catalogs the complete surface area across five specimens: the web app, the intelligence & automation engine that powers it, the Chrome extension, the AI-operator MCP server, and the platform & data layer underneath.
Surface I — The Web App the CRM you live in
Fourteen pages built around logging conversations, working an outreach queue, and never dropping a follow-up. Material Design 3, deeply wired into Gmail and Google Calendar.
New accounts are offered a curated recruiting database — real PMs, recruiters, and BYU alumni at companies that hire new grads — instead of a blank CRM.
Prospects and companies stream in on a live progress bar while you connect Gmail and Calendar in a side tab that lands on a confirmation page.
Companies are ranked by how many alumni you'd know there, with alumni and product-role sub-counts, so the first target is the warmest one.
A pre-written, editable intro email — with an automatic alumni-to-alumni variant — sends with follow-ups already scheduled that cancel themselves on a reply.
"Your first networking email is on its way," plus a recap of what's next: the extension, personalized suggestions, one-click availability. Every step is skippable and resumable across sessions.
One prioritized feed blending four item types — your action items, contacts overdue for a reach-out, AI/rule suggestions, and recently added people — each with a colored badge, filter chips with counts, and pagination.
Per row: Done, Snooze (1 day to next follow-up), Profile, Log interaction, Email/Intro, Save or Dismiss a suggestion, and a quick-note popover — with animated hover labels.
The new-user empty state: add the target database, pick a company, connect Gmail/Calendar, install the extension, log your first conversation.
A time-grid of today's Google Calendar events with a live "now" line, event popovers (Meet link, attendees with RSVP flags, resolved contact context), and drag-to-create.
"New PMs at your target companies" — one line per company ("3 new PMs just joined Qualtrics"), hidden when the weekly search found nobody.
Meetings, relationships-on-track %, and contacts-added counters with 7-day trend and a day-streak flame.
A GitHub-style calendar of daily activity — conversations, actions taken, contacts added — with hover detail and a Less→More legend.
Healthy / Due soon / Overdue / Never contacted / No cadence, with interactive segment tooltips, beside a "Needs attention" photo grid of neglected contacts.
Contacts live in three tiers — My network, Prospects, Archive — as independent toggle chips with counts, so 70 scraped profiles never bury the five you plan to contact.
Search across name, email, company, title, school, industry, and tags, with a live dropdown that separates people-matches from by-tag matches.
Multiple work experiences, education with degree autocomplete, several emails and phones (with a preferred flag), tags, LinkedIn URL, and custom follow-up cadence.
Two-column layout: photo upload, inline-editable email and cadence, LinkedIn re-link prompts, freshness stamp, and quick actions to log or compose.
A merged reverse-chronological feed of meetings, interactions, inbound/outbound emails, and completed actions for that person.
Pending items split into your commitments vs. "Waiting on {them}" with days-waiting, inline editing, priority dots, and undo on complete/delete.
Threaded Gmail history per contact — read sanitized bodies, reply, schedule a follow-up sequence, and see queued sends with cancel.
Upload, download, and delete files attached to a contact.
Email and follow-up cadence edit directly on the card — hover to reveal, click to edit, blur to save. No edit mode for the two most common actions.
A one-click button on the list and profile promotes a prospect into the active network; the first real touch graduates anyone automatically.
Color reflects days-since-contact ÷ your cadence, not a raw date — a 30-day cadence at 10 days reads green; a 7-day cadence at 10 days reads red.
A landing page for a LinkedIn profile captured by the extension: full experience/education, suggested tags, and Save-to-Contacts with duplicate detection.
Toggle between tracked employers and every company in your network history, sorted by priority, next-app date, traction, or name.
Stackable status chips (Researching → Closed), traction, tier, and contacts filters — all shareable/bookmarkable via the URL with a live result count.
Chase a company before you know anyone there: add name, LinkedIn URL, and office in seconds, deduped against every company already in your network.
A location scope selector makes each office ("Google San Diego") its own targetable pipeline with its own status and notes.
Current and former employees grouped into your network vs. prospects, with persona badges (Alum·Product, Recruiter), BYU-alum flags, outreach stage, and email status.
Researching → Active outreach → Applied → Interviewing → Closed, each stage an expandable editor with a collapsed summary and autosave.
Track multiple applications per company with role, location, date, and resume + cover-letter PDF uploads.
Log interview rounds (date, interviewer, questions); "prepare for next cycle" starts a fresh application cycle that keeps each season separate.
A timestamped notes log for application windows, referral programs, and team info — everything you learn on a call lands somewhere you'll find it again.
Weekly-discovered PMs at this company, each with add-as-prospect (auto-enriched) or dismiss.
Prev/next (with ←/→ keys) through target companies ordered by application deadline then priority, showing "Company X of N".
Logo, priority, program, next-app window, latest intel note, and links to the full company page and bench.
Current and (collapsible) former employees with persona, alum, and stage badges, an adjacency score, and a "why they were kept" review note.
The full picture of a contact — roles here and elsewhere, education, email provenance — with Write email, Open profile, and Mark contacted for off-platform outreach.
Companies with only bench or no contactable people are skipped, with a count and a link so nothing hides silently.
The unified conversation modal logs a past meeting (notes, transcript, AI action items) or schedules a future one (private reminders, Calendar invite, Meet link) — eight types, multi-contact, reachable from anywhere.
Meetings and interactions in one newest-first feed, searchable across titles, notes, private notes, attendee names, and summaries.
Attendee chips with RSVP status, an "On calendar" badge, private reminders, notes, a transcript viewer, and file attachments.
Paste VTT/SRT/plain text (auto-detected) or upload audio (MP3/WAV/M4A) for speaker-diarized transcription.
Maps anonymous "Speaker 0" labels to your known contacts using names, roles, and content, with confidence scores and one-click confirmation.
Pulls concrete commitments, splitting your tasks from what the other person owes you, each with an evidence quote and resolved due date.
Overdue, Due this week, Due later, and No due date, each card showing priority dot, contact, linked meeting, and due status.
An AI/rule suggestion banner with "I already did this", "Save for later", and "Not interested".
The AI captures what the other person committed to; after 7 days the app nudges a gentle follow-up so you never forget to cash in on an offer.
Full description, dates, and the linked meeting with its notes and transcript in context.
Completing or deleting is instant, with an undo countdown and an offered "Log conversation" follow-up.
A collapsible completed section with restore, edit, and delete.
A week grid with hour lines, all-day row, current-time line, private-as-"Busy" events, and recurrence/video markers — plus a date-stamped list view.
Drag on the grid to open a pre-filled meeting form that writes to Google Calendar with a Meet toggle and invite selection.
Filter events by All / With contacts / No contacts, with silent background auto-sync.
Inbox, Sent, Scheduled, Follow-ups, Drafts, Trash, and Hidden tabs scoped to your networking, with a live unread badge in the nav.
Reply, move to a Gmail label, hide (keep in Gmail, hide from app), or trash/restore — with follow-up-count and linked-calendar badges.
Filter by contact, direction, recency, thread type, and follow-up presence.
Build or edit a multi-step sequence — per-step delay, send time, subject, rich body, AI-generate — that auto-cancels when the recipient replies.
To/Cc/Bcc, rich-text body, contact autocomplete, provenance warnings, schedule-send, and auto-saved drafts — used from every surface.
Pick a built-in preset (Introduction, Follow-up, Thank you), a custom template, or your own prompt, optionally feeding prior meeting notes for personalization.
For first-touch emails: a "how you met / your goal" form → AI intro → editable draft → an AI follow-up plan that auto-schedules reply-aware follow-ups.
Insert real open calendar slots (standard/priority/custom profiles) straight into the email body.
Home, Activity, Contacts, Companies, Actions, plus an unread-aware Inbox icon, Calendar, admin shield, and a back-trail that knows where to return you.
An app-wide prompt to connect Gmail and Calendar, with an expandable "why does Google show a warning?" explainer, dismissible per session.
Surface II — Intelligence & Automation the engine under the app
Beneath the UI: AI drafting and extraction, reply-aware send automation, budget-capped LinkedIn enrichment, career-change detection, and a weekly discovery engine — every one guarded by rate limits, spend caps, and graceful failure.
Subject + HTML body for a first outreach, tone-adjusted for cold vs. warm and grounded in how you met, your goal, and past interactions.
Exactly three reply-in-thread follow-ups, progressively shorter and spaced ~7/14/21 days: check-in → add-value → gentle final bump.
Free-form "write me an email about X" pulling in contact context and selected meeting notes, with an auto-generated subject line.
Blends rule-based generators (graduation proximity, cadence miss, relationship decay, waiting-on reminders) with an LLM pass that mines history for a specific, timely reason to reach out.
An agentic chain: extract a contact's interests → search the web (Serper) → loop an LLM evaluator ("would a real person forward this?") → write a warm reconnection email referencing the find.
A 32KB context budget keeps quality high; the prompt blocks generic phrases like "I stumbled upon" so emails sound like you wrote them.
Every 15 minutes: sends due follow-up steps, checks each thread for a reply and cancels the whole sequence if found, sends at most one step per tick, and respects the daily cap.
Every 15 minutes: sends due scheduled emails across all users, isolating per-user failures and reporting throughput/delay telemetry.
A 100/day Gmail send limit protects deliverability; the guard is re-checked on every send path, app and MCP alike.
Gmail delivery failures (NDRs) are parsed to flag bounced addresses, cancel their pending sequences, and refuse them everywhere — draft, send, schedule, sequence.
When a prospect or archived contact replies, they graduate into the active network and their follow-up clock resets.
A resumable, time-budgeted pass pulls 90 days of Gmail history per contact and thread-matches inbound replies to fire the reply-received signal.
Re-scrape one contact's LinkedIn profile or find their email via Apify — idempotent, debounced, and monthly-cap-gated, completing async via webhook.
Each day, per user, the ~80 stalest contacts are batch-scraped within spend caps so profile data stays current on its own.
A hard monthly USD cap, a softer cadence cap, and per-account enrichment/diff/discovery switches keep paid scraping bounded and controllable.
Compares before/after snapshots into tiered events: promotion, company change, boomerang, open-to-work and hiring flips, location change, new certification — with false-positive guards.
Detects whole-year anniversaries this month and surfaces a "congratulate them" touchpoint, throttled and bench-excluded.
Surfaceable events flow into "Up Next" (Tier 1 outranks Tier 2); dismissals are permanent via stable dedupe keys.
For opted-in users, searches the stalest high-priority target companies for PMs who joined in the last 90 days — the warmest cold outreach there is.
New profiles are deduped against existing contacts, tombstones, and known candidates before surfacing; people you already know never appear.
One click adds a candidate as an auto-enriched prospect at the right company; one click dismisses them forever.
One typed vocabulary shared by web, server, MCP, and extension, keyed to a north-star metric: replies received.
Every AI draft records whether it was sent as-is, edited (and how much), or discarded; sends, replies, and meetings mirror into CareerVine's own database so data outlives any vendor.
Fires once per user at contacts-5 and companies-emailed-5, with internal-user activity filtered out of product metrics.
Cross-cutting guardrails. Every route is wrapped with auth, schema validation, per-route hourly rate limits, and awaited analytics. AI features route through a "bring-your-own-key or shared-key" runner with a 24-hour trial and graceful degradation — when a key is out of quota, rejected, or missing, the feature says exactly what's wrong with a one-click path to fix it, never a spinner that never resolves.
Surface III — Chrome Extension LinkedIn → CRM in one click
A Manifest V3 extension that scrapes a LinkedIn profile, has AI structure it into clean fields, lets you review and edit in a side panel, and saves it as a CareerVine contact — all inside a closed Shadow DOM that can't fight the host page.
A CareerVine vine icon appears only on LinkedIn profile pages; one click toggles the side panel open.
The full React panel app renders in a closed Shadow DOM with all: initial isolation, so LinkedIn's CSS can't leak in and the extension can't break LinkedIn.
Waits for lazy-loaded sections, then aggressively strips pronouns, follower counts, activity, and UI junk down to Header, About, Experience, Education — so the AI parse is accurate and cheap.
Grabs a real 400×400 photo with a three-tier fallback (rewrite from 100×100, graceful null for ghost avatars) so the saved contact is recognizable.
Cleaned text returns as structured fields — name, location, industry, dated experience, education, status, suggested tags, and generated notes.
Every profile is checked by LinkedIn URL before scraping; a match shows the existing contact and offers "Refresh from LinkedIn" instead of a blind re-import.
Every field is editable — status toggle, follow-up cadence, add/remove experience and education rows with month/year pickers — and edits persist in the per-profile cache.
One click creates or updates the contact with photo; the header switches to a deep link into the web app.
An opt-in toggle that scrapes and parses each profile automatically as you browse, for power users batching profiles.
Parsed profiles, photos, and edits cache per LinkedIn slug so revisits load instantly with no redundant AI cost or cross-tab collisions.
Detects LinkedIn's client-side route changes and re-checks the DB, cache, and auto-analyze state as you click around without full reloads.
Staged progress ("Reading profile…", "Enriching…") with a 30-second scrape cooldown that protects LinkedIn and the backend.
A home base with sign-in, an Import tab (live "is this a profile?" indicator + quick-start), and a Recent tab listing your last imports with relative timestamps.
Auth tokens live only in the background service worker, auto-refresh with a single-flight guard, and never touch the content script or page — XSS-resistant.
Specific, friendly panels for no/invalid/quota-exhausted AI key and hourly import limits, mirroring the web app's copy with a one-click fix path.
Surface IV — MCP Server 27 tools · an AI operator for your network
An OAuth-protected Model Context Protocol server lets an AI assistant research contacts, write and send grounded Gmail, work the outreach queue, and manage meetings — under the exact same guardrails as the app. The same tools run locally over stdio for development. By design it exposes data and actions only; Claude is the generator, so there are no AI-generation tools.
Search the network by name, email, company, title, school, industry, or tag; filter by tier, returns compact rows with stage and last-touch.
Everything known about one person in one document — the grounding Claude reads before writing an email, including email provenance and history.
Create a contact with emails, phones, company, title, school, and location, find-or-creating entities to avoid duplicates.
Append a timestamped note straight from conversation.
Apply one or more tags, creating any that are missing.
Manually move a contact between active, prospect, and bench tiers.
The default path — a real Gmail draft (markdown→HTML, thread-aware) for human review; refuses bounced addresses.
Sends immediately, but requires confirm: true, enforces the daily cap and bounce refusal, and logs an interaction.
Queue an email for a future ISO timestamp, delivered by the app's cron.
Attach timed follow-ups to a sent thread that auto-cancel the moment the contact replies.
List pending scheduled emails and active sequences with next send times.
Cancel a pending scheduled email or an entire follow-up sequence.
Full-text search over cached Gmail, optionally scoped to one contact.
Live-fetch full message bodies for a thread for reply context.
The company-by-company queue, ordered by deadline then priority, with a "why" reason per entry.
Companies in the network with people counts, target status, priority, and traction.
The full company picture — roster, offices, target status, and the recruiting-intel log.
Append a timestamped recruiting note, auto-promoting the company to a target.
Manually set a contact's outreach stage for off-platform activity like a LinkedIn DM.
Record a touchpoint that graduates prospects and resets the follow-up clock.
Create a to-do or a "waiting-on" item linked to one or more contacts.
Open items filtered by due window, direction, or contact, with age for waiting-on items.
Complete, snooze, reschedule, or edit an item.
The "who should I reach out to today" list, most-overdue first.
The "how am I doing?" dashboard — streak, on-track ratio, most-neglected contacts, per-tier counts, 30-day activity.
Upcoming events from the synced calendar with attendees matched to contacts and Meet/Zoom links.
Create a Google Calendar event with an invite and optional Meet link; linking it graduates a prospect.
Two shells, one implementation. The hosted server at /api/mcp is an OAuth 2.0 protected resource verifying Supabase-issued JWTs, scoped per request and rate-limited to 100 calls/hour/user. The local careervine-mcp/ package runs the identical 27 tools over stdio for development. A dedicated OAuth consent screen shows the requesting client and exact scopes before any access is granted — and there are no delete tools anywhere.
Surface V — Platform & Data accounts, keys, bundles, admin
Authentication, a bring-your-own-key cost model, living data subscriptions, an admin control plane, and the content pipeline that seeds new users with a real network instead of an empty page.
Import admin-published bundles — say, every IB analyst at the NYC boutiques plus the banks and their offices — straight into contacts as ready-to-work prospects.
When a bundle is re-published with new people or corrected emails, subscribers receive the changes automatically within minutes.
The merge only ever fills in blanks — nothing you've edited, tagged, or annotated is overwritten.
Keep everything, or remove only the contacts you never touched; anyone you've emailed or edited always stays.
A chunked, cursor-driven copy with a live progress bar, backed by a QStash worker and daily cron sweep in case the tab closes mid-import.
Add an OpenAI key for text features and/or a Deepgram key for transcription so usage bills to you — each encrypted at rest, never returned to the browser, and live-validated before saving.
New accounts get shared-key AI "on us" for a day, then are guided to add their own key or request continued access.
Email/password sign-up, sign-in, forgot-password, resend-confirmation with cooldown, and a confirm link that signs you in immediately even on a fresh device.
Standard and Priority working-hour presets per weekday with buffers, plus a "count as busy" calendar selection and timezone detection.
Create, edit, and delete custom "Write with AI" prompt templates that appear alongside built-in presets.
Copy the hosted MCP URL with per-client setup steps for Claude, Claude Code CLI, ChatGPT, Codex, and Cursor.
A read-only view of month-to-date Apify spend vs. cap, run health, last refresh time, and discovery spend.
A full policy page documenting data handling, Google Limited-Use disclosure, RLS security, and the extension's on-LinkedIn-only scope.
Search users; set role, status (suspend/reactivate freezes queued work), and password; manage a user's contacts and inject bundles.
Inline reversible switches for shared-AI fallback, Apify enrichment, change detection, discovery feed, and per-bundle visibility.
Flip enrichment, change detection, and discovery for every account at once, with an audit log.
A token-authenticated publish flow (begin → chunk → finalize → resolve) that fans changes out to subscribers, with a zero-change no-op.
A staged Apify + agent-reviewed data pipeline that produces a curated dataset of BYU-family alumni and per-office bankers across 30 banks and 228 offices to seed a bundle — spend hard-capped per run.
Bundle publishing mirrors LinkedIn photo URLs to Cloudflare R2 so avatars stay durable after LinkedIn's temporary URLs expire.