🎯 Project Pulse

Automated Sales Follow-Up System for EOS Light
PROPOSAL β€” March 27, 2026

System Overview

A dedicated AI agent that runs every morning and systematically follows up on every open quote in Zoho CRM.

Core Idea: Every open Potential in Zoho gets tracked through a follow-up lifecycle. The agent sends the right email at the right time, logs everything, respects rep preferences, and reports to Kevin daily. No quote falls through the cracks.

What Changes in Zoho

ChangeTypeRiskReversible?
4 new custom fields on PotentialsFields🟒 Zero β€” additive onlyYes, can delete anytime
2 new email templatesTemplates🟒 Zero β€” additive onlyYes, can delete anytime
Auto-sent emails from kevin@eoslight.comEmails🟑 Medium β€” touches customersCan pause cron anytime
Auto-created Notes on PotentialsNotes🟒 Low β€” audit trailCan bulk delete if needed
Auto-created Tasks (for snooze reminders)Tasks🟒 Low β€” helpfulYes

What Doesn't Change

Daily Workflow

This runs every weekday at 9:30 AM ET on the dedicated Mac Mini.

⏰ CRON TRIGGER
9:30 AM ET, Mon-Fri
↓
πŸ“Š QUERY ZOHO
All open Potentials
(exclude Lost, SO Created, Dead)
↓
πŸ” FOR EACH POTENTIAL
Check follow-up stage + timing
↓
Snoozed?
Check snooze date
β†’
Still snoozed
Skip β€” check tomorrow
↓ Not snoozed / snooze expired
πŸ“… WHICH FOLLOW-UP IS DUE?
Based on quote date + last follow-up + stage
↓
Day 3
"Quick Check-In"
Day 14
"Project Update"
Day 30
"Following Up"
Day 60+
"Haven't Heard Back"
Day 90+
Monthly touch
↓
πŸ“§ SEND EMAIL
Via Zoho CRM API
From kevin@eoslight.com
Using matched template
↓
✏️ UPDATE ZOHO RECORD
Follow_Up_Stage β†’ next stage
Last_Auto_Follow_Up β†’ now
Follow_Up_Count + 1
β†’
πŸ“ ADD NOTE
"Auto follow-up [Day X]
sent to [Contact Name]"
↓
πŸ“± DAILY SUMMARY
iMessage to Kevin
Emails sent, issues, alerts
Safety: The system runs in dry-run mode first. Kevin reviews the first batch before any emails go out. A kill switch (simple file flag) stops all sends immediately.

Zoho CRM Fields

4 new fields on the Potentials module. All additive β€” nothing existing is touched.

Existing (no changes) New (to be created)
EXISTING β€” NO CHANGES
Stage
Picklist
The deal's sales stage. The follow-up system reads this to determine eligibility β€” it never writes to it.
QualificationSpecificationNeeds Quote Quote CompleteSO CreatedLost
EXISTING β€” NO CHANGES
Last_Activity_Time
DateTime (auto)
Auto-updated by Zoho when any activity happens. The system uses this as a reference point but never modifies it directly.
EXISTING β€” NO CHANGES
Manual_FU_Done
Date
Kevin's current manual follow-up tracking. Stays as-is for backward compatibility. The new system uses its own fields.
EXISTING β€” NO CHANGES
Next_F_U_Date
Formula (Date)
Auto-calculated from Manual_FU_Done. Continues working exactly as before β€” independent of the new system.
NEW FIELD
Follow_Up_Stage
Picklist
The brain of the system. Tracks where each deal is in the automated follow-up lifecycle. The cron reads this to decide what to do next.
Not StartedDay 3 SentDay 14 Sent Day 30 SentDay 60 SentDay 90 Sent MonthlySnoozedRespondedDo Not Follow Up
NEW FIELD
FU_Snooze_Until
Date
When a rep says "don't follow up for X months," this date is set. The cron skips the deal until this date passes, then resumes the follow-up cycle.
NEW FIELD
Last_Auto_Follow_Up
DateTime
Timestamp of the last automated email sent. Used to calculate spacing between follow-ups. Separate from Last_Activity_Time so manual actions don't reset the clock.
NEW FIELD
Auto_FU_Count
Number
Running count of automated follow-ups sent. Useful for reporting ("this deal has had 7 follow-ups with no response") and for deciding when to stop.

How the Fields Work Together

Example: Deal "Marriott Lobby Feature Wall"

March 1: Quote sent β†’ Follow_Up_Stage = "Not Started"
March 4: Cron runs β†’ 3 days since quote β†’ sends Day 3 email
  β†’ Follow_Up_Stage = "Day 3 Sent" | Last_Auto_Follow_Up = Mar 4 | Auto_FU_Count = 1
  β†’ Note added: "Auto follow-up Day 3 sent to John Smith (Marriott)"

March 18: Cron runs β†’ 14 days since Day 3 β†’ sends Day 14 email
  β†’ Follow_Up_Stage = "Day 14 Sent" | Last_Auto_Follow_Up = Mar 18 | Auto_FU_Count = 2

March 20: Rep replies "hold off until June, they're in design phase"
  β†’ Follow_Up_Stage = "Snoozed" | FU_Snooze_Until = June 1, 2026
  β†’ Zoho Task created: "Resume follow-up: Marriott Lobby" due June 1
  β†’ Note: "Rep requested snooze until June 1 β€” in design phase"

March 21 – May 31: Cron skips this deal every day (snoozed)

June 2: Snooze expired β†’ Cron resumes β†’ sends Day 30 email
  β†’ Follow_Up_Stage = "Day 30 Sent" | Auto_FU_Count = 3
Important: The 4 new fields are completely independent from your existing fields. If you ever want to turn off the system, just delete the fields β€” zero impact on anything else in Zoho.

Follow-Up Cadence

Each open quote moves through this timeline automatically.

Day 0
Quote Sent
Quote is completed and sent to the customer/rep. Follow_Up_Stage = "Not Started". Clock starts.
Day 3
Quick Check-In
Light touch. "Did you receive everything? Any questions?" Non-pushy, service-oriented.
Subject: Quick check-in β€” {Deal Name}
"Hi {First Name}, just making sure you have everything you need on the {Deal Name} project..."
Day 14
Project Update Request
Genuine interest in the project. Asking for feedback, timeline updates. Shows you care about the project, not just the sale.
Subject: Checking in β€” {Deal Name}
"Any updates on the {Deal Name} project? Happy to adjust the quote if specs have changed..."
Day 30
Following Up
Direct follow-up. Uses existing KK template "2A - Following up on Project." Acknowledges they're busy.
Uses existing template:
2A - KK - Following up on Project or Hot Project_For Follow Up
Day 60
Haven't Heard Back
Slightly more direct. Uses existing template. "Is this project still active?"
Uses existing template:
2B - KK - Addl Follow up_Havent Heard Back
Day 90
Final Check Before Archive
"Last check-in before we move this to our archive. If things have changed, we're here."
Uses existing template:
2C - KK - Following up on Project
Day 120+
Monthly Touch
Monthly check-in. Keeps the door open without being annoying. Can include new product updates or project spotlights.
Uses existing template:
2D - JR - Following up_3rd Request
(or rotate templates)
Flexibility: The cadence is fully configurable. If you want Day 3 to be Day 5, or Day 14 to be Day 10, it's a single number change. The templates are also swappable.

Snooze & Reply Handling

How the system handles rep requests and customer replies.

When a Rep Says "Don't Follow Up for 2 Months"

1
Rep reply detected (via email monitoring on kevin@eoslight.com)
2
Agent reads the reply β†’ detects snooze intent: "hold off until June"
3
Sets Follow_Up_Stage = "Snoozed" and FU_Snooze_Until = June 1
4
Creates Zoho Task: "Resume follow-up on [Deal]" due June 1, assigned to Kevin
5
Adds Note on the Potential: "Rep requested follow-up pause β€” reason: [their words]"
6
Daily cron skips this deal until June 1, then auto-resumes at next follow-up stage

When a Customer/Rep Replies to a Follow-Up

1
Reply detected in kevin@eoslight.com inbox (matching subject line)
2
Agent classifies: 🟒 Interested / 🟑 Question / πŸ”΄ Not Interested / ⏸️ Snooze / πŸ“§ Auto-Reply
3
Auto-follow-ups paused for this deal β†’ Follow_Up_Stage = "Responded"
4
Note added with reply summary. Kevin alerted via iMessage if human action needed.
Auto-replies (OOO) are ignored β€” they don't pause follow-ups or trigger alerts. Only real human replies change the follow-up state.

Manual Override

Anyone can manually set Follow_Up_Stage in Zoho at any time:

Agent Architecture

Kevin's question: Should this be a new dedicated agent? Yes β€” here's why and how.

Recommendation: Spin up a dedicated "Sales Pulse" agent on one of the existing Mac Minis. This keeps Valentina free for executive support, Alex focused on V-PEG, and gives the follow-up system its own resources and context window.
πŸ’Ό
Valentina
Executive Assistant
  • Email triage & responses
  • Calendar management
  • Morning/afternoon briefings
  • Agent coordination
  • Marketing & campaigns
  • Customer communication
πŸ“ Mac Mini M4 Pro (Primary)
πŸ”¬
Alex
Quoting & Engineering
  • V-PEG shadow testing
  • Quote comparison & QC
  • Drawing generation
  • Technical documentation
  • Pre-quote intake (next)
πŸ“ Mac Mini #2
🎯
Pulse
Sales Follow-Up Agent (NEW)
  • Daily follow-up cron (9:30 AM)
  • Reply monitoring & classification
  • Rep snooze management
  • Zoho notes & task creation
  • Follow-up reporting
  • Open quote analytics
πŸ“ Mac Mini #2 or #3 (second agent)

Why a Separate Agent?

ReasonDetail
FocusFollow-ups need their own context β€” deal history, rep preferences, cadence rules. Mixing this into Valentina's session would dilute both.
ResourcesValentina already handles email, calendar, briefings, campaigns, and coordination. Adding daily CRM automation would slow her down.
ReliabilityA dedicated agent means follow-ups run even when Valentina is busy with other tasks. No missed days.
CostPulse can run on Sonnet (cheaper) since the logic is straightforward. No need for Opus-level reasoning.
ScalingLater, Pulse could expand into: outbound prospecting, win/loss analysis, pipeline reporting, rep performance tracking.

Deployment Options

OptionWhereProsCons
A: Co-host on Alex's Mini Mac Mini #2 (100.81.25.123) No new hardware. Alex has spare capacity. Shares resources. If Alex is doing heavy V-PEG work, Pulse might slow down.
B: Co-host on Sage's Mini Mac Mini #3 (100.99.253.24) Sage is lighter weight (design tasks). More headroom. Same resource sharing concern.
C: Co-host on Valentina's Mini Mac Mini M4 Pro (Primary) Most powerful machine. Easy for Valentina to coordinate. Already the busiest machine.
My recommendation: Option B (Sage's Mini). Sage handles design work which is mostly bursty β€” she's idle between tasks. Pulse's daily cron is also bursty (runs once in the morning, ~15 min, done). They'd share well. And Pulse can run on Sonnet to keep costs low.

Daily Output

What Kevin sees every morning after the cron runs.

Sample iMessage from Pulse β†’ Kevin

🎯 Pulse · 9:45 AM
Project Pulse β€” Daily Report (Mar 27)

πŸ“§ 14 follow-ups sent today
  β€’ 5 Day-3 check-ins (new quotes)
  β€’ 4 Day-14 project updates
  β€’ 3 Day-30 follow-ups
  β€’ 2 Day-60 re-engagements

πŸ’¬ 3 replies received yesterday
  β€’ 🟒 Hilton Downtown (John D.) β€” "Sending revised plans next week"
  β€’ ⏸️ Marriott Lobby (Sarah K.) β€” "Hold until June, in design phase" β†’ snoozed
  β€’ πŸ“§ 2 auto-replies (OOO) β€” ignored

⚠️ Attention needed
  β€’ 8 deals at Day 90+ with no response
  β€’ 2 snooze periods expiring this week
  β€’ 1 bounced email: david@oldfirm.com (hard bounce)

πŸ“Š Pipeline snapshot
  β€’ 247 open potentials being tracked
  β€’ 12 in snooze | 35 responded (human handling)
  β€’ $2.4M total pipeline value in follow-up cycle

What Gets Logged in Zoho

Every automated action creates a Note on the Potential record:

πŸ“ [Pulse Auto] Day 3 follow-up email sent to John Smith (john@acme.com)
πŸ“ [Pulse Auto] Day 14 follow-up email sent to John Smith (john@acme.com)
πŸ“ [Pulse Auto] Reply received from John Smith β€” classified as: Interested
πŸ“ [Pulse Auto] Follow-ups paused β€” awaiting human response
πŸ“ [Pulse Auto] Rep requested snooze until 2026-06-01 β€” "in design phase"
πŸ“ [Pulse Auto] Snooze expired β€” resuming follow-ups at Day 30 stage

Function 2: Lead Reactivation β€” "Wake the Dead"

10-15 years of contacts in Zoho. Many dormant. Let's find out who's still out there.

Key Finding: The Zoho Leads module is empty β€” all leads over the years were converted to Contacts/Potentials. The real database is the Contacts module + Zoho Campaigns list (5,405 contacts). Pulse needs full CRM access (separate from V-PEG client).

Reactivation Timeline

Week 1
Email Hygiene
Export all contacts. Validate emails (MX records, syntax, known bounces). Segment: Active (recent) vs Dormant (1-3 years) vs Ancient (3+ years). Remove obvious dead emails before sending anything.
Week 2-3
Soft Re-Introduction
Start with Dormant segment. "It's been a while β€” here's what's new at EOS." Include: new products (LightSlab, MetalForms), project gallery, rep finder. 10 emails/day ramping to 50/day.
Subject: A lot has happened at EOS Light
"Since we last spoke, we've completed 94+ installations including NYSE, Facebook HQ, and Hard Rock Casino. We have 86 rep offices across North America..."
Week 4+
Value-Add Follow-Up
Opened but didn't click β†’ project spotlight matched to their vertical. Clicked β†’ direct outreach: "Want to connect with your local rep?" Bounced β†’ mark invalid, remove from lists.
Ongoing
Nurture & Route
Monthly "EOS Update" to re-engaged contacts. Quarterly vertical spotlights (hospitality, casino, healthcare). Warm leads auto-routed to nearest rep.

Safeguards

RiskProtection
Spam flagsStart 10/day, ramp weekly. Email validation before sending. Use Zoho's deliverability.
CAN-SPAM complianceEvery email has unsubscribe link + physical address. Immediate opt-out processing.
Domain reputationHard bounces auto-removed. Soft bounces retried once, then removed. Complaint rate monitored.
Annoying old contactsSoft, informational tone. One-touch unsubscribe. Max 3 attempts per contact.
Kevin's inbox floodedEmails sent from sales@eoslight.com (not kevin@). Replies to dedicated inbox.

Expected Results (First 90 Days)

~3,000
Contacts reached
15-20%
Expected open rate
~500
Dead emails cleaned
20-50
Warm leads generated

Email Infrastructure

All emails sent from Zoho CRM API β€” not Kevin's inbox. Auto-logged on every record.

Decision: Kevin does NOT want emails sent from his address. A new Zoho user/profile will handle all Pulse emails.

How It Works

🎯 Pulse Agent
Determines who needs follow-up
β†’
πŸ“§ Zoho CRM API
POST /send_mail
From: sales@eoslight.com
β†’
πŸ“¬ Customer Inbox
Professional email
with unsubscribe link
↓ Auto-logged
πŸ“‹ Zoho Record
Email appears in timeline
Notes + fields updated
Reply tracking active

Setup Required

1
Kevin: Choose email address β†’ sales@eoslight.com? pulse@eoslight.com? followup@eoslight.com?
2
Kevin: Create Google Workspace mailbox for the chosen address (5 min)
3
Kevin: Create Zoho CRM user for Pulse + assign CRM profile with send_mail permission
4
Kevin: Grant Zoho Campaigns access to new user (for reactivation campaigns)
5
Valentina: Generate OAuth token (Self Client) with full CRM + send_mail scopes
6
Valentina: Configure Pulse agent with credentials, test email send

Decisions Needed

DecisionOptionsRecommendation
Email address sales@eoslight.com
pulse@eoslight.com
followup@eoslight.com
sales@eoslight.com β€” professional, reusable, doesn't expose AI/agent branding
Reply destination Same inbox
Redirect to kevin@
Shared inbox
Same inbox β€” Pulse monitors it, alerts Kevin on hot leads
Signature name Person name
"EOS Light Sales Team"
"EOS Light"
"EOS Light Sales Team" β€” professional, no single-person dependency

Next Steps β€” Build Plan

Everything needed to go from proposal to running agent.

Phase 0: Prerequisites (Kevin β€” 20 minutes)

1
Choose email address for Pulse agent
2
Create Google Workspace mailbox
3
Create Zoho CRM user + grant Campaigns access
4
Approve follow-up cadence (Day 3, 14, 30, 60, 90, monthly)
5
Approve email templates (Valentina will draft for review)

Phase 1: Agent Deployment (Valentina β€” 1 day)

StepActionDetail
1.1Create macOS user on Sage's Mac MiniSSH into 100.99.253.24, create pulseagent user
1.2Set up OpenClaw workspaceIDENTITY.md, SOUL.md, AGENTS.md, TOOLS.md, HEARTBEAT.md
1.3Configure API keysAnthropic (Sonnet), Zoho OAuth, email credentials
1.4Set up iMessageFor daily reports to Kevin
1.5Start gateway + verifyTest Zoho connection, email send, iMessage

Phase 2: Quote Follow-Up (Week 1)

StepAction
2.1Create 4 custom fields in Zoho CRM
2.2Create Day 3 + Day 14 email templates
2.3Build follow-up cron (Python)
2.4Dry-run: generate report WITHOUT sending β†’ Kevin reviews
2.5Live test: 5 hand-picked Potentials
2.6Go live: daily cron at 9:30 AM ET

Phase 3: Lead Reactivation (Week 2-3)

StepAction
3.1Export + segment full Contacts database
3.2Email validation pass
3.3Create reactivation templates β†’ Kevin reviews
3.4Warm-up: 10 emails/day for 1 week
3.5Ramp to 25/day, then 50/day
3.6Monitor: bounces, opens, replies

Phase 4: Intelligence (Week 3-4)

StepAction
4.1Reply classification (interested / question / not interested / snooze)
4.2Auto-pause on reply + alert Kevin on hot leads
4.3Rep routing for warm leads by geography
4.4Weekly analytics dashboard

Cost Estimate

$30-50
Sonnet API / month
$0-14
Zoho user / month
$0
Mac Mini hosting
~$50-70
Total / month
ROI: If Pulse generates even 1 new project from reactivation or closes 1 deal faster from follow-ups, it pays for itself for years. Current average deal size is $5K-50K+.