Build / Proof of Work

The networking tool I wanted
didn't exist,
so I built it.

Contacts log themselves from a voice note. Follow-ups schedule automatically. And when it's time to reach out, your inbox already has a draft written in your voice.

Live Python Anthropic API Airtable pyairtable click April 2026

The part of networking that breaks isn't the meeting. It's the 72 hours after: you meant to follow up and didn't, you forgot the colleague they mentioned, a warm contact went cold because nothing reminded you until it felt awkward to reach out.

But there's a second, quieter problem. Even when you do keep up with people, your network is stored in scattered notes, faded memory, and LinkedIn connections you couldn't describe without looking them up. You know your network exists. You just can't use it. When an opportunity comes up, you scroll and guess. When you need an intro, you try to remember if you know anyone. It shouldn't work this way.

You talk. It structures.

After a coffee chat or event, you dump 60 seconds of voice notes, the way you'd tell a friend about someone you just met. The system parses it into a full structured contact record and schedules your follow-up. No forms. No fields to fill.

Quick note: Priya, David, and their employers are all made up. If you're a real Priya or David in CRE reading this, hi, you're not in this, I promise. I wanted something that felt true to life, not a transcript of a real conversation.

Input / voice dump

"Met Priya Nair at the ULI Toronto Young Leaders event Thursday evening. She is an analyst at Halford Group doing industrial market research, working on a report about AI adoption in commercial real estate. We talked for about 20 minutes. She asked if she could send me some questions for her research. She mentioned a colleague named David Park on the residential side at Whitmore. Should follow up with Priya next week, maybe once the context template article is live."

Output / terminal
Parsing contact dump...
-- Priya Nair --
Company: Halford Group
Role: Analyst, Industrial Research
How met: Event (ULI Toronto)
Tags: CRE AI/Tech Potential Collab
Follow-up in 5 days via LinkedIn
Also mentioned:
+ David Park -- Whitmore
+ Contact created: Priya Nair
+ Interaction logged
+ Skeleton created: David Park
Follow-up: April 16, 2026
P
Priya Nair
Halford Group · Industrial Research Analyst
Tags
CRE AI/Tech Potential Collab
Notes
Mid-research on AI adoption in CRE at Halford Group. Asked to send follow-up research questions. Expressed genuine interest in Claude workflow content.
Follow-up
She asked to reach out first. Reciprocate early. Share the context template article as a hook into the CRE + AI angle. April 165 days
D
David Park
Whitmore & Reyes · Residential CRE
Auto-created
Referred by Priya Nair (Halford Group). Residential CRE at Whitmore. Activate after warming Priya. The referral chain is there. Use it with intention.
The part that matters

When Priya mentioned David, I never wrote his name down. I would have forgotten him entirely. The system created his skeleton record automatically at the moment of capture, with the referral context pre-filled. That thread is now alive whether or not I remember to act on it.

That's what makes this feel different from a spreadsheet. The referral chain is preserved at the moment of telling, not at the moment of remembering.

Ask your network a question.

The tracker isn't just a reminder system. It's a context layer Claude can actually reason over. When you've got a specific goal, like an internship search, a career move, or a project that needs collaborators, you just ask a plain question in the terminal (your normal words, not code). It pulls your contact history and surfaces specific, actionable answers.

tracker / query mode
$ python -m tracker.tracker query "Internship applications in 6 months -- who should I start warming now, and what should I say?"
Network query / April 2026
1. Priya Nair /Halford Group, Industrial Research / New, follow-up due April 16
She asked to reach out to you. You haven't responded yet. This is your highest-leverage open thread. She's mid-research on AI in CRE, which is exactly your positioning. Send the article. Start the thread. The ask writes itself.
2. Sarah Chen /Ashgrove Partners, VP Data Analytics / Warming, last contact 18 days ago
Knows your work, actively evaluating AI tools for comp analysis. A genuine check-in, something that serves her rather than asks for something, would land well right now. She could be a reference or an intro source within Ashgrove Partners. Do not wait until you need something.
3. David Park /Whitmore & Reyes, Residential / New, skeleton (not yet met)
You haven't met him. The referral from Priya exists but hasn't been activated. Sequence matters here: warm Priya first, then ask for the introduction. Cold-reaching a referred contact before the referrer knows you well undermines both relationships.
Referral path to Whitmore & Reyes
You Priya Nair (Halford Group) David Park (Whitmore)

Follow-up logic that actually makes sense.

No AI magic. Flat rule: next follow-up date is last contact plus interval. The interval scales with how warm the relationship is. Checking in with someone you met once should not feel the same as checking in with a strong contact you've been building for a year.

Relationship Default interval Logic
New 5 – 14 days depending on how you met Event / Conference = 5d  ·  Coffee Chat = 7d  ·  Intro = 10d  ·  Cold outreach = 14d
Warming 21 days You've had at least one good exchange. Stay present without overdoing it.
Strong 45 days Real relationship. Doesn't need constant maintenance, but does need some.
Dormant alert Flagged at 60 days Warming or Strong contacts with no interaction in 60 days surface in the weekly digest. You decide whether to re-engage.

Relationship strength is always your call, not the system's. It tracks recency and logs interactions. It won't label a contact "Strong" because you emailed them twice. That's yours to decide.

What's actually in here.

tracker/
tracker.py    -- CLI: add, event, digest, status, done, snooze, query, setup
parser.py    -- Claude parsing logic, ContactRecord dataclass
airtable_sync.py -- all Airtable reads and writes
followup.py    -- interval logic, digest generation
config.py    -- field names, table names, interval defaults
prompts/
tracker_parse.md  -- the Claude parsing prompt

Each of these is a command you type into your terminal (or the terminal panel inside Claude Code) and press Enter. The code in the left column is what you type. The description on the right is what happens.

add "..." Talk about someone you just met. It parses the details, creates the Airtable record, and schedules your follow-up.
query "..." Ask a plain question about your network and get a specific, reasoned answer back.
digest Print today's follow-up queue: who's due, why, and dormant contacts that need attention.
event "Name" Create an event, then log every person you met there in one session. All linked automatically.
done "Name" --notes "..." Mark a follow-up complete. Add a note about what you sent. The next follow-up schedules itself.
send-reminders Find everyone due today, draft a message for each person using Claude, and send the whole thing to your inbox.
voice-setup Walk through nine questions about how you actually write. Claude turns your answers into a voice profile. Every future draft uses it.
setup --create Build the full Airtable base and all its tables automatically. Nothing to set up by hand.

From zero to first contact in one sitting.

New to Claude Code or using a terminal for the first time?

There's a plain-English setup guide that walks through every single step: what to install, what to paste, what each command does, and what to do if something breaks.

You don't need to know Python. The guide handles it. Open the setup guide.

1
Get the code from GitHub and open the folder in Claude Code (the button at the bottom of this page links to the repo). Airtable connects through a Personal Access Token, a password your Airtable account generates for you, pasted into a plain text file called secrets.env. No extra plugins to install. The companion guide below walks you through getting that token in about five minutes.
2
Open the file config/secrets.env in any text editor (eek, I know — but it's genuinely just a plain text file, like a notepad. You're pasting two values in and saving). One is your Anthropic API key from console.anthropic.com, the other is your Airtable token from step one. The companion guide shows you exactly where to find both.
3
Open the terminal in Claude Code (it's the panel at the bottom of the screen — if you can't see it, press Ctrl+` to open it), paste this in, and press Enter: python -m tracker.tracker setup --create. That's the whole step. It builds your full Airtable base automatically. You don't configure anything by hand.
4
Log your first contact. Back in that same terminal, paste this and replace the text in quotes with a description of someone you recently met: python -m tracker.tracker add "Met [name] at [event]...". You'll see the parsed record appear right there.
Companion guide
Connect Airtable to Claude in 5 minutes

On the day you're due to reach out,
your inbox already has a draft.

The tracker knows when each follow-up is due. Set it to run every morning, or just trigger it manually when you want it, and it finds everyone due that day, drafts a suggested message for each person using Claude, and sends everything to your inbox in one email. No switching between apps, no blanking on what to say. Each draft is specific to that person and what you actually talked about.

The drafts get better when the tracker knows how you actually write. Run voice-setup in your terminal and it'll walk you through nine questions: how you open a message, what phrases make you wince, how formal you actually are. Claude turns your answers into a voice profile. Save it once. Every future draft sounds like you, not like a generic follow-up.

Companion guide
Build your voice guidelines: the nine questions

What it looked like when I actually ran it.

This build sat finished for months before I ran the setup myself, start to finish, the way a stranger landing on this page would. A few things broke along the way (the setup guide covers what, and the fixes). It still worked. Here's what that run actually looked like.

The repo / public on GitHub
The relationship tracker repository page on GitHub
Terminal / first contact created
Claude Code terminal showing a contact successfully created
Airtable / the record lands
Airtable Contacts table showing the first real contact record
Terminal / everything else it can do
Claude Code terminal showing the full list of tracker commands
Get the build

Take the whole thing.
It's yours to run.

The full module, the parsing prompt, the Airtable schema, and the setup command. Clone it, adapt it, make it yours.

View on GitHub