Board 1 — The Journey

Step by Step — What Happens to Every Lead

A "lead" is a person we're trying to reach — a short-term rental owner. Every lead follows these exact steps. Nothing skips ahead.

1
🏠

A new person is found

We spot a short-term rental owner (Airbnb or VRBO host) we'd like to work with. Skylar adds them to the CRM as a lead — our word for a person we're actively trying to reach.

👤 Skylar does this
2
🗄️

Attio remembers them

Attio is our memory — a database that stores everything about each person: their name, their phone number, every message we've ever sent, their replies, and whether they've ever asked us to stop. This is the source of truth.

⚡ Automatic
3
🤖

Skylar enrolls the lead and writes the message

Nothing happens automatically. Skylar runs a command called /enroll — this is how a lead actually enters a campaign. It creates the planned messages and sets the schedule. Skylar writes what each message says, picks the timing, and chooses who gets it. Claude (the AI) can suggest wording or fill in personalization, but Skylar is always the author and the one who kicks it off.

👤 Skylar runs /enroll ·🤖 Claude assists if asked
4

Skylar says yes — or no

Every message needs a real human to approve it before it can go anywhere. Nothing sends on its own. If Skylar says no, the message disappears. If Skylar says yes, it gets scheduled. Creation = approval. No exceptions.

👤 Skylar must approve every send
5
📱

The text goes out automatically

The Worker — a tiny robot program that runs in the cloud every 60 seconds — sees the approved message and sends it at the right time. It uses SignalHouse (our phone service) to actually deliver the text. Like a very reliable postal worker who never sleeps.

⚡ Worker + SignalHouse handle delivery
6a
💬

They write back — everything freezes

When the lead replies, the Worker catches the incoming message and logs it in Attio immediately. All future texts to that person are put on hold until Skylar reads the reply and decides what to do next. A reply could mean anything — the machine doesn't guess, a human decides.

⚡ Worker logs it ·👤 Skylar decides next move
6b
🛑

They say "STOP" — done forever

If the lead says stop, unsubscribe, opt out, or anything like it — they are removed from every channel instantly and permanently. No one can override this. Not Claude, not Skylar. It's built into the code.

🛑 Blocked forever on all channels
Board 2 — The Parts

Every Part — What It Does

Six main parts. Each one has exactly one job. They talk to each other but can't do each other's jobs.

👤 The Boss Skylar — the human decision-maker Makes every important call. Approves every send. Decides who to reach. The whole machine is waiting for a yes or no from here. Without Skylar, nothing moves.
🤖 The Helper Claude — the AI assistant Reads all the data, drafts messages, runs daily checks, and tells Skylar what needs attention. It's like a very fast intern that does all the legwork — but it never sends anything without being told to.
🗄️ The Memory Attio — the CRM database Stores every lead: name, phone, every message sent, every reply, and consent status (did they opt out?). This is the single source of truth. If Attio says something, believe it.
⚙️ The Rail Cloudflare Worker — the automation engine Runs every 60 seconds, around the clock. Sends approved texts on time. Catches incoming replies. Checks every safety rule before any message goes out. It's the machine that never sleeps or forgets.
📡 The Phone Line SignalHouse — texts + calls provider The actual phone service that carries texts and calls out into the world. Think of it like a phone company for business software. The Rail talks to it; it does the actual delivering.
💻 The Desk Terminal CRM — the rep's screen The screen where reps type commands to see their leads, start a campaign, or work their book. Simple text-based — type a sentence, get an answer. It holds no secret keys; all the keys live backstage in the Office.
🧪 Practice Mode Fake leads · zero risk · no sign-in needed New reps can use the full system with fake data — no badge (sign-in) required. Nothing touches a real person. Great for learning the commands before going live.
🔑 The Key Box Doppler — secret manager Holds all the passwords and API keys (secret codes for talking to outside services). Nobody types them by hand. The machine fetches them automatically.
🎥 The Video Studio Cap.so — video tool Records and edits short personal video messages we can send to leads. Live and working today on this machine — nothing goes to the cloud.
🔔 The Alert Bell Discord — notification hub Gets a ping when something important happens: a reply comes in, the system breaks, or a daily health check fires. Everyone on the team can see it.
📋 The To-Do Board GitHub Issues — task tracker + code home Where bugs and new features are tracked as open issues. Also the home of every line of code that makes the machine run.
Board 3 — The Rulebook

Every Rule the System Runs On

15 rules across 3 groups. These aren't suggestions — they're written into the code. Three groups: rules that protect the lead, rules that keep humans in charge, and rules that keep data clean.

🛡️ Group 1 — Protect the lead (machine enforces these automatically)

🛑 STOP means stop. Forever. Every channel.

Text, call, or verbal — any opt-out blocks that person on every channel instantly and permanently. Even "stop" said out loud on a call is caught from the call transcript. No override. No undo.

⏸️ Any reply freezes everything for that lead.

The moment a lead writes back, all future messages are frozen instantly. The machine doesn't guess what it means. It waits. A human reads it and makes the call.

🚫 System starts at "no" before every send.

Before every text, the Worker runs a full checklist: opted out? Business hours? Reply pending? Daily cap hit? All must pass. One fail = no send. Always.

🕘 Texts only go out during business hours.

Weekdays, 9 am–5 pm in the lead's local time zone. A message due at 7 pm waits until 9 am next morning. Checked every single send.

📊 Daily send cap — a hard circuit breaker.

Hard limit on texts per day. Once hit, the machine stops sending entirely — no override. Prevents a bug from blasting hundreds of people accidentally.

🔁 The same message can never send twice.

Every message has a unique ID. The Worker checks before sending — if it's already gone, it skips. A bug or retry can never double-text a lead.

✋ Group 2 — Keep humans in charge (machine helps, humans decide)

🚀 Enrollment = approval. Then it runs itself.

When Skylar runs /enroll (the command that adds a lead to a campaign), that act is the approval for the whole sequence. The Worker then runs each step automatically — no per-message clicking needed.

📋 /start-sales runs every morning.

Skylar runs this command daily. It surfaces every frozen lead, every unread reply, every waiting decision. If she skips it, frozen leads stay frozen safely — nothing moves without her.

🤖 Claude drafts. Humans approve what matters.

Claude writes messages and suggests next steps. Humans review anything consequential — a new campaign, a hot reply, an unusual situation. The AI does the legwork; the human makes the call.

🐛 If something breaks — stop and file a ticket.

If a rep hits a bug, they stop. Don't work around it. File a bug report in GitHub Issues (the to-do tracker) and wait for admin to fix it right.

🧪 Real owners are never test recipients.

One designated safe test number exists. All test sends go there only. A real lead's number is never used to test anything. Full stop.

🔐 The Desk never holds secret keys.

The screen reps use (the Desk) holds no passwords or API keys. All keys live backstage in the Office. The Desk is fully untrusted — by design.

🗂️ Group 3 — Keep data clean (where things live and who sees what)

🗄️ Living lead data stays in Attio.

Any info about a real lead lives in Attio (the CRM database). Don't copy it into a doc, a chat, or a spreadsheet. It will go stale. Trust the CRM.

📁 Decisions that must last go in the repo.

Rules, plans, specs — anything that needs to survive past a chat window goes in the GitHub repo (the code home). Not in a Slack message or someone's head.

👤 One rep, one book. No peeking.

Every rep sees only their own leads. The system blocks access to anyone else's book. "That's not your lead" — and it means it.

Board 4 — Capability Map

Everything This Machine Can Do

The engine is simple: a Worker that runs every 60 seconds + Attio memory + Claude brain + any provider we plug in. That unlocks a lot. Here's the full picture — what's live, what's coming, and what's possible the moment we wire it up.

● LIVE today ● CANARY — tested, not full production ● PLANNED — building soon ○ POSSIBLE — plug it in and it works
📤 Reach Out — ways to contact a lead
📱 Text Message LIVE

Write it, schedule it, send it. Personalized per lead. Delivered by SignalHouse.

🎥 Personal Video LIVE

Record a short video on this machine with Cap, send it via text link. Feels personal — because it is.

📞 Phone Call LIVE

System dials via SignalHouse. Call logged in Attio automatically.

⚠️ Autodialer (fully automated dialing without a rep clicking) still needs full end-to-end testing.

📧 Cold Email CANARY

Smartlead (our email tool) is live. Sequences are being finalized. The only thing left is completing the inbox warmup period — after that, ready to go live.

⚠️ What's left: Complete email inbox warmup. Then go live.

🎙️ Ringless Voicemail POSSIBLE

Drop a pre-recorded audio message straight into their voicemail — no ringing, no awkward silence.

✉️ Physical Mailer POSSIBLE

Trigger a printed postcard to a lead's address using a service like Lob. Stands out in a noisy inbox world.

🔁 Smart Follow-Up — the machine keeps working while you sleep
⏸️ Auto-Freeze on Reply LIVE

A reply instantly freezes all future texts to that lead. Waits for Skylar to read and decide. Never assumes what a reply means.

📅 Campaign Sequence LIVE

A multi-step plan: text day 1, video day 4, follow-up day 10. Enrolled once — the Worker runs it automatically until a reply or the last step.

📆 Date-Based Trigger LIVE

Fire a message on a specific date — seasonal check-in, "heading into peak season," or an anniversary of when they first reached out. The Worker checks every 60 seconds and sends any message whose date has arrived.

🧊 Re-Engagement POSSIBLE

Leads that went cold 60+ days ago automatically get a fresh outreach — different message, different angle. Wake up the dead list.

🔀 A/B Message Testing PARTIAL

Send version A to half a group, version B to the other half. The testing part is built. Automatic winner rollout (machine picks best and switches to it) is not yet implemented. Live end-to-end test still needed before this is production-ready.

⚠️ What's left: Build auto-winner rollout. Run a live end-to-end test across a real campaign.

📬 Auto-Book a Call POSSIBLE

Connect Calendly (scheduling tool) so when a lead says "yes" to a call, they get a booking link instantly — no manual back-and-forth.

Tasks for Humans — things the machine queues up for Skylar or a rep to do
📞 Task: Call This Lead LIVE

Machine creates a to-do: "call Sarah today." Rep clicks, system dials. Call logged automatically in Attio.

💬 Task: Text This Lead LIVE

Same as the call task — but queues a text instead. "This lead hasn't heard from us in 14 days. Text them today."

🎥 Task: Record a Video LIVE

Queue a reminder: "Record a personal Cap video for this lead today." Opens Cap pre-loaded with context on who you're recording for.

⏰ Reminder: Follow Up LIVE

"Check in with Mike in 30 days." Machine pings you on day 30. You decide what to do — text, call, or skip.

🎁 Task: Send a Gift POSSIBLE

Machine queues: "Send this lead a gift card or Amazon item." Connect a gifting service and it ships automatically on approval.

🤝 Task: Connect on LinkedIn POSSIBLE

Machine finds the lead's LinkedIn and queues a connection request task for the rep. Multi-channel without doing it manually.

🧠 Intelligence — the machine learning and getting smarter
🛑 Auto Opt-Out Detection LIVE

Claude reads every reply and auto-detects "stop," "remove me," "wrong number," or call refusals. Acts immediately — no human needed.

💬 Reply Classifier POSSIBLE

AI reads a reply and suggests what it means: "Interested," "Not now," "Wrong number," "Hot lead." Skylar sees the suggestion before deciding.

⭐ Lead Scorer POSSIBLE

AI gives each lead a score based on their profile: listing count, market, engagement history. Focus energy on the hottest prospects first.

📊 Market Report POSSIBLE

Auto-generate a "what's happening in your market" snapshot for a lead's city. Send it as a value-add before asking for a call.

💰 Revenue Estimate POSSIBLE

Calculate what Leveled could earn this specific owner based on their listings and market. Personalized proof point baked into the first message.

🏆 Best Message Picker POSSIBLE

After running A/B tests across campaigns, Claude learns which messages work best for which markets and lead types — and uses that automatically.

🔍 Opportunity Finder PLANNED

Claude reads through past conversations and flags leads you should have followed up on but didn't. "This person seemed interested 3 weeks ago and nothing happened." Surfaces hidden revenue sitting in the existing book.

⚠️ What's left: Build the conversation analysis logic. Define what "missed opportunity" looks like in code.

🎓 Sales Coach PLANNED

Claude listens to call recordings and reads outreach history, then gives specific coaching: "You always lose momentum on the 3rd follow-up — here's why and what to say instead." Gets smarter the more calls and messages it analyzes.

⚠️ What's left: Wire call recordings into the analysis pipeline. Build the coaching output format.

📈 Reporting — always know what's working
☀️ Daily Digest (/start-sales) CANARY

Skylar runs /start-sales each morning — a pre-built checklist showing every frozen lead, every reply to read, every message waiting for a decision. One screen, 60 seconds.

⚠️ What's left: Formalize the daily review flow fully. Live testing to confirm it shows everything Skylar needs.

📉 Campaign Funnel Report PLANNED

For any campaign: how many enrolled → sent → replied → booked. See exactly where leads drop off.

⚠️ What's left: Build the report renderer. The JSON data contract is already spec'd — needs the display layer built.

🗺️ Pipeline View PLANNED

See every lead and where they are: Initial Contact → Engaged → No Response → Lost. Across all campaigns at once.

⚠️ What's left: Build the pipeline report renderer. Same as campaign funnel — data contract is spec'd, display layer needed.

📊 Number Tracker PLANNED

Tracks the key numbers across the whole acquisition process — reply rate, book rate, cost per booked call, best-performing market, best-performing message type. Then surfaces the single highest-value move: "If you fix X, you get the most new clients for the least effort."

⚠️ What's left: Define which metrics matter most. Build the calculation layer. Build the "highest-value move" recommendation output.

Board 5 — Campaign Best Practices

How to Start a Campaign the Right Way

A "campaign" is a named outreach plan — a group of leads, a series of messages, a goal. Here's how to set one up so it actually works.

Before you launch — the checklist

🎯
Name your audience Who exactly are you reaching? Be specific. "STR owners in Newport Beach with 2+ listings" beats "short-term rental owners." The tighter the group, the better the message can fit them.
✍️
Write the message steps How many messages will you send? In what order? Day 1 text, Day 3 follow-up, Day 7 video? Write each one out before you launch. Use the personalization tags below to make each message feel one-on-one.
📅
Set the timing between steps How many days between each message? Don't go too fast — back-to-back texts feel spammy. 2–5 days between steps is a good starting point. The Worker respects business hours automatically.
🧪
Test on the safe number first Before it goes to real leads, send every step to the designated test phone number. Read each message out loud. Does it sound like a real person? Does the name fill in correctly? Fix it before it goes live.

Personalization — make every message feel one-on-one

Use merge tags — little placeholders that get swapped out for each lead's real info when the message sends. Write one message, send a thousand personal ones.

Name tags

{{first_name}} → "Hey Sarah, ..."
{{full_name}} → "Hi Sarah Johnson"

Market & location tags

{{market}} → "owners in Newport Beach"
{{city}} → "your place in Scottsdale"

Property tags

{{listing_count}} → "you manage 3 listings"
{{platform}} → "your Airbnb" or "your VRBO"

Conditional block — show different text per group

Example: "I work with owners in {{market}} who have {{listing_count}}+ properties" — the number and city change per lead automatically, making it feel researched and personal.

Example — what a personalized first text looks like

Message template (what Skylar writes)

Hey {{first_name}} — saw you're managing a place in {{market}}. I help STR owners there maximize their revenue without more work. Worth a quick 15-min call?

What the lead actually receives

Hey Sarah — saw you're managing a place in Newport Beach. I help STR owners there maximize their revenue without more work. Worth a quick 15-min call?

Real example — what a full campaign looks like

Campaign name: Newport Beach Cold Outreach — Target: STR owners in Newport Beach with 3+ listings and no prior contact.

⚡ Drip pace — how many NEW leads start each day

Drip means starting new leads gradually instead of kicking off all 1,000 at once. Example: load 1,000 Newport Beach leads, then start 25 new leads each day — all 1,000 would be in motion after 40 days. Follow-up texts for already-started leads keep running alongside the new ones, so 25 new leads/day is not the same as only 25 texts sent that day. Here's why pacing matters:

📥 Manageable replies

25 new leads/day = a trickle of replies to handle. 1,000 at once = an unworkable flood the same week.

📡 Carrier health

Phone carriers (AT&T, Verizon, etc.) flag numbers that send hundreds of texts at once as spam. A steady drip keeps you off their radar.

🎯 Better quality

Each reply gets real attention instead of getting lost in a pile. Fewer leads in flight = better conversations.

🎚️
How it will work — set a daily rate, load your list, walk away

Load 1,000 leads. Set a daily start rate — say 25. The system automatically kicks off 25 new leads each day and runs their sequences on its own. Follow-ups for earlier leads run alongside. You manage the reply volume, not the sending schedule.

LIVE
SETUP Before Day 1
Skylar runs /enroll — this is the approval

Skylar types /enroll in the terminal to add the Newport Beach leads to this campaign. Enrollment = approval. Once enrolled, the system runs automatically — no per-message OK needed.

👤 HUMAN
DAY 0 Immediate
📱 Text 1 — First touch (auto-sends)

"Hey {{first_name}} — saw you're managing a place in {{market}}. I help STR owners there maximize revenue without more work. Worth a quick 15-min call?"

Worker fires within 60 seconds of enrollment. Consent gate checked. Logged in Attio. Stage → Initial Contact.

🤖 AUTO
DAY 2 48 hrs later
📞 Manual task — Rep calls the lead

Terminal queues a call task: "Call {{first_name}} — followed up by text Day 0, no reply yet." Rep sees it in their calling session list, dials when ready, logs the result.

This step does NOT fire automatically. It appears as a task in the terminal. Rep decides when to work through it.

👤 MANUAL
DAY 5 5 days in
📱 Text 2 — Follow-up (auto-sends)

"Hey {{first_name}}, just circling back — I work with a handful of STR owners in {{city}} and have been able to bump their revenue 15–20%. Would love to show you what that looks like for your place."

Only sends if no reply has come in. A reply at any point freezes all future auto-sends for that lead.

🤖 AUTO
DAY 10 10 days in
🎥 Manual task — Record a Cap video

Terminal queues a video task: "Record a short personal video for {{first_name}} — reference their {{listing_count}} listings." Rep records in Cap (a video tool), pastes the link into a text, sends manually.

High-touch step. Personal video converts better than another text. Rep controls timing.

👤 MANUAL
DAY 14 2 weeks in
📱 Text 3 — Final touch (auto-sends)

"Hey {{first_name}} — last note from me. If the timing's ever right to chat about your {{market}} properties, I'm here. No pressure at all."

Campaign ends after this. No reply → stage moves to No Response. A reply at any point → stage moves to Engaged, auto-sends freeze, Skylar reviews.

🤖 AUTO
REPLY Any time
💬 Lead replies — everything pauses

The moment a lead replies, all remaining auto-sends for that lead freeze instantly. Stage → Engaged. Skylar reviews the reply in /start-sales (the daily morning command) and decides the next move — book a call, send a custom reply, or mark them lost.

🤖 AUTO FREEZE
🤖 AUTO Worker sends this automatically. No one has to do anything.
👤 MANUAL Rep sees this as a task and does it when ready.
Board 6 — Staying Organized

How to Stay Organized in This System

Everything has one home. Put it in the right place and the whole machine stays clean.

Where things live

🗄️ Lead info → Attio

Every lead's name, phone, history, replies, and opt-out status. If it's about a real person, it lives here. Attio is always the source of truth.

📋 Bugs & tasks → GitHub Issues

If something is broken or needs to be built, it becomes a GitHub Issue (a to-do ticket). Not in a chat message. Not in someone's memory. In the tracker.

🔔 Alerts → Discord

When the system fires an alert — a reply came in, something failed, or the daily health check runs — it goes to Discord. That's where the team stays in the loop.

The daily rhythm (what Skylar does each morning)

1️⃣
Run /start-sales — the morning command /start-sales is a pre-built checklist Skylar runs every morning. It pulls up every frozen lead, every reply to read, and every message waiting for a decision — all in one place. This is the command that runs the day. If she doesn't run it, frozen leads stay frozen safely — nothing moves without her.
2️⃣
Read and clear held replies Any lead who replied has their texts frozen automatically (see Board 1, Step 6a). /start-sales surfaces all of them. Skylar reads each reply and decides: keep going, stop, or hand off to someone else.
3️⃣
Approve any waiting messages Messages drafted and queued are waiting for a go. Skylar reviews, edits if needed, and approves. The Worker then picks them up and sends on schedule.
4️⃣
Run /enroll for new leads If there are new people to reach, Skylar runs /enroll — the command that adds a lead to a campaign and creates all their planned messages. The machine then runs the sequence automatically until the next reply or decision point.

Golden rules for staying clean

Living lead data lives in Attio. Don't copy it into a doc, a chat, or a spreadsheet. It will go stale. Trust the CRM.
Decisions that must last go in the repo. Anything that needs to survive a chat window — rules, plans, specs — belongs in the code repo, not a Slack message.
⚠️ If something looks broken, stop and file a ticket. Don't try to patch it on the fly. Open a GitHub Issue (a bug report). The admin fixes it properly.
⚠️ One rep, one book. You only see your own leads. If a lead isn't yours, the system blocks you. Don't work around it — hand it off properly through the Desk.
Board 7 — The Words We Use

Our Vocabulary — Every Word, Plain and Simple

These are the exact words we use in this system. Use them the same way every time so nothing gets lost in translation.

The 4 Stages a Lead Can Be In

📬 Initial Contact

We've reached out. First text or email sent. No reply yet.

Next: system keeps sending follow-ups on the campaign schedule.

💬 Engaged

They replied. A real human responded to us. This is the goal of outreach.

Automatic sends pause. Skylar reviews the reply and decides next move.

🔇 No Response

We've tried. They haven't replied. Campaign ran its course with no reply.

Can be re-enrolled in a future campaign if timing changes.

🚫 Lost

They opted out or said stop. This is permanent — they are never contacted again on any channel.

System blocks all future sends automatically. No exceptions.

People

👤 Person

Any human contact stored in the CRM. The raw record. Not yet being worked for a sale.

Don't say: contact, record, prospect

🎯 Lead

A Person we're actively trying to close. Someone being worked right now for a sale.

Don't say: prospect, deal

📚 Book

The full list of Leads a rep is allowed to work. Your assigned territory.

Don't say: assigned records, territory list

🙋 Owner

The rep who is responsible for a specific Lead. One lead, one owner at a time.

Don't say: assignee

👔 Manager

A user who can see the whole team's Book and move Leads from one rep to another.

Don't say: admin (when talking to reps)

🔖 Visitor

Someone with access to the code but no Badge (sign-in). Can only use Practice mode — no real data.

Don't say: unauthorized user

Work

📋 Activity

Any recorded interaction with a Lead — a text sent, a call made, a note logged. The history.

Don't say: touch (to reps), event

➡️ Next Step

The next approved action queued up for a Lead. "Text them on Thursday." One lead has one next step at a time.

Don't say: planned touch, task payload

🔄 Handoff

Moving a Lead from one rep to another. Logged in the Paper Trail so nothing is lost.

Don't say: share, transfer

💬 Thread

The full conversation tied to one Lead and their current Owner. One thread per lead.

Don't say: chat context, last conversation

📣 Campaign

One named outreach effort — a target group, a message shape, and a channel (text, email, etc.).

Don't say: blast, batch, run

🎭 Play

A reusable message shape — like "first contact" or "follow up after 14 days." A template you run again and again.

Don't say: module, workflow template

🎯 Audience

The defined group of People a Campaign is targeting. "All STR owners in Phoenix with 3+ listings."

Don't say: segment (to reps)

Access & System

🖥️ Desk

The terminal — the command-line tool where a rep runs the CRM. Type commands here to do anything in the system.

Don't say: CLI, client app

🏢 Office

The back-end API — the trusted server that holds keys, enforces rules, and talks to SignalHouse and Attio.

Don't say: backend, Cloudflare Worker (to reps)

🪪 Badge

Your 7-day CRM sign-in. Proves who you are. The Office checks it on every command to confirm your access.

Don't say: token, credential, API key

🧪 Practice

Fake data and safe commands. Use this to train or test. Nothing in Practice can reach a real person.

Don't say: staging, fixtures

🚂 Rail

The automation that safely moves messages. The Cloudflare Worker that runs every 60 seconds and sends due texts.

Don't say: plumbing (for a specific send path)

📜 Paper Trail

The internal log of every change and every denied action. If something happened in the system, it's here.

Don't say: audit log (to reps)

Board 8 — Calling Sessions

How a Calling Session Works

A calling session is a focused block of time where a rep works through a list of leads by phone. One rep. No auto-dialing. The rep is in control of every call.

1
🖥️

Terminal surfaces who to call

The terminal — the command-line tool the rep uses — shows a list of leads. Each lead has their name, phone number, and current pipeline stage (like "Initial Contact" or "No Response"). The system suggests who to call first. The rep decides who they actually want to call.

👤 Rep decides
2
📋

Rep copies the number into the dialer

The rep copies the lead's phone number and pastes it into the browser dialer page. The page immediately shows that lead's details — name, stage, history — right next to the dial button. Any number can be dialed unless it matches a do-not-contact record — those are blocked automatically before the call connects.

🤖 DNC check automatic
3
📞

Rep clicks Call — conversation happens

One click dials via SignalHouse (our phone provider). The rep talks to the lead. That's it — no scripts required, no recordings yet. Just a real conversation.

👤 One rep only
4
📝

Rep logs the result right after the call

After hanging up, the rep saves three things: a call result (answered, no answer, left voicemail, etc.), an optional note (what was said), and the new stage for that lead (pre-filled by the system, editable by the rep).

Matched lead — result saves straight to Attio (the CRM database) and the stage updates automatically.
Unknown number — becomes a review task in Attio so the rep can match it to the right person after the session.
🤖 Attio updated automatically
5
🔁

Close the loop — schedule next steps

After each call or at the end of the full session, the rep goes through everyone they spoke to and sets next steps. This is where the call turns into action — a follow-up text, another call in 3 days, a meeting booked, or marking them lost.

Option A — Close the loop after each call: Log result, set next step, move to next lead.
Option B — Close the loop after the full session: Power through all calls first, then go back and schedule next steps for everyone at once.

👤 Rep decides timing

Hard rules for every calling session

👤

One rep only. No shared dialing. Each session belongs to one person.

🚫

No auto-dialing. The rep clicks every call. Nothing dials on its own.

🛑

No auto follow-up sends. After the call, the rep sets next steps — nothing sends without approval.