Lgcy Ai
πŸ“ž
πŸ””
AS

πŸš€ Marco Launch Cockpit

Overnight no-mock sprint in motion Β· Monday target 2026-06-08 (~2 days) Β· outreach LOCKED off

Last sync: 2026-06-06 (overnight; cockpit manually synced β€” live polling NOT active) Β· Alex (CEO agent)
Branch: main
Deploy: PRODUCTION β€” lgcyai.marcoruta.com
Launch Completion
73%Almost ready
Last checked: β€”
Reports as of: 2026-06-05
Click any number to see exactly what it is, who owns it, the proof, and what to do.
⏳ Near-real-time from latest saved agent reports (not live polling). Items not updated as of 2026-06-05 are flagged STALE; items with no recorded proof are flagged UNKNOWN β€” never faked green.

πŸ”” What Marco needs to do

Approve first safe batch (flip OUTREACH_ENABLED + SEND_TEST_MODE=false)High
Why: Email auth + Svix reply capture + Anna sender + lead backup are all done; the master gate is the only thing off. First safe batch plan is ready (25 SD leads).
If ignored: No revenue β€” the first batch never goes out.
πŸ‘€ Marco approves Β· Email / OutreachReview plan β†’
Add SEND_TEST_EMAIL in prodMedium
Why: Confirm the test-mode recipient is set in prod before the controlled dry run.
If ignored: Test-mode sends have no recipient.
πŸ‘€ Alex / Marco Β· Email / OutreachOpen Setup β†’
Share Google Calendar with service accountMedium
Why: Booking needs calendar access to read/write appointments.
If ignored: Leads cannot self-book; scheduling stays manual.
πŸ‘€ Mia Β· Scheduling / BookingOpen Calendars β†’
Rotate exposed portal passwordHigh
Why: PORTAL_PASSWORD now powers the admin login β€” and the old value was shared once. Set a fresh one so only you can sign in.
If ignored: Someone with the old password could log into the admin.
πŸ‘€ Marco Β· SecurityReview β†’
Approve Booking PR mergeMedium
Why: Booking is built but not merged.
If ignored: Scheduling never goes live.
πŸ‘€ Marco approves Β· Scheduling / BookingReview β†’
Approve push for MLLLow
Why: MLL research code is parked, uncommitted.
If ignored: MLL work is not backed up to a branch.
πŸ‘€ Marco approves Β· MLL / Permit IntelligenceReview β†’

πŸ“Š Workstream progress

Email Infra + Outreach SafetyWaiting on Marco
90%
Blocker: OUTREACH_ENABLED OFF by design β€” first safe batch awaiting Marco go.
Next: Approve first safe batch (flip OUTREACH_ENABLED=true AND SEND_TEST_MODE=false).
πŸ‘€ Alex / Marcosafe to deploy: yes
main Β· proof: LIVE: DMARC/SPF/DKIM verified; RESEND_WEBHOOK_SECRET set + Svix reply capture verified on prod (7bb3ebb); Anna sender (13f5c23); 2 controlled test sends; lead backup (9,304). Β· upd 2026-06-05
Agent CompanyComplete
100%
Blocker: None β€” LIVE in production.
Next: Feed real agent data when a runtime is connected.
πŸ‘€ Athena / Alexsafe to deploy: yes
main Β· proof: LIVE /agents + /agents/team (200); 19-role roster, CEO id=alex (cf43476). Β· upd 2026-06-05
Action InboxComplete
90%
Blocker: None β€” action buttons wired across the named surfaces.
Next: Done β€” buttons wired across cockpit, /agents, /airbnb-leads, /permits, /partners/map; per-row buttons are the next increment.
πŸ‘€ Alexsafe to deploy: yes
main · proof: LIVE /agents/inbox + Actions tab + /api/actions/{create,list,update}; create→assign→status→update verified on prod (2026-06-05). · upd 2026-06-05
Airbnb / STR LeadsComplete
100%
Blocker: None β€” LIVE in production.
Next: Marco uploads STR CSV β†’ dedicated Airbnb_STR_Leads tab + Camila feed.
πŸ‘€ Alex / Camilasafe to deploy: yes
main Β· proof: LIVE /airbnb-leads; dedicated Airbnb_STR_Leads tab (19 cols) created; import maps + dedupes (duplicate_key) into it + feeds Camila; smoke test passed (2026-06-05). Β· upd 2026-06-05
Permit BrowserComplete
100%
Blocker: None β€” LIVE in production.
Next: Optional: raise /permits page limit above 200 to show all ~2,036.
πŸ‘€ Matteo / Alexsafe to deploy: yes
main Β· proof: LIVE: /permits reads mll_solar_permits (2d2793e); shows 200 of ~2,036; 17/17 tests; read-only Β· upd 2026-06-05
Contractor MapComplete
100%
Blocker: None β€” Partners CRM connected + grouped by trade.
Next: Optional: precise per-address geocoding (paid) to replace city-centroid pins.
πŸ‘€ Irissafe to deploy: yes
main Β· proof: LIVE /partners/map; Partners CRM CONNECTED (22,620 partners, 2,500 markers). NEW 2026-06-05: visual TRADE grouping β€” per-trade chips with counts + colored icon badges (roofer/HVAC/electrician/general/pool/solar/other), filter by trade, color-pins-by-trade. Β· upd 2026-06-05
Lead Hygiene / DedupeComplete
100%
Blocker: None β€” non-destructive, fully reversible from backup.
Next: Re-run scripts/lead-dedupe.mjs after each big import; review Leads_Dedupe_Report.
πŸ‘€ Camila / Alexsafe to deploy: yes
main Β· proof: Done 2026-06-05: backed up all 9,304 leads to Leads_Backup_2026-06-05_1753, flagged 133 duplicates (pipeline_status=duplicate; NOTHING deleted), 69 groups in Leads_Dedupe_Report, 9,171 kept (winner = most-enriched). Outreach now SKIPS duplicates. Β· upd 2026-06-05
Operating Archive / BackupComplete
100%
Blocker: None β€” exit-ready archive created.
Next: Refresh after major changes; re-run the secret scan before sharing externally.
πŸ‘€ Alexsafe to deploy: yes
local Β· proof: Created 2026-06-06: ~/lgcy-ai-backups/lgcy-ai-operating-archive-2026-06-06 β€” sanitized repo snapshot (303 files, secrets redacted) + 11 docs (system/deploy/bugs/agents/data/camila/no-mock/exit/runbook/sensitive/monday). Secret scan CLEAN; redacted a committed Google-key TEMPLATE (no real key body). Outreach verified LOCKED off. 10 overnight-sprint backlog tasks filed to Action Inbox. Β· upd 2026-06-06
Report AgentIn progress
70%
Blocker: v1 covers leads/permits/partners/camila/outreach/monday/mistakes; STR report awaits the CSV import; richer per-record exports pending.
Next: Add STR report after CSV import; add downloadable per-record exports (real fields only).
πŸ‘€ Isabella / Alexsafe to deploy: yes
main Β· proof: NEW 2026-06-06: /reports + /api/reports LIVE β€” pull real reports (lead totals/segments/dedupe/scores, permit by-year + battery + valuation, partner by-trade, Camila scoring, outreach-lock, Monday readiness, mistakes log). Real data only; never invents phone/email. Β· upd 2026-06-06
Owner Governor (safety layer)Complete
100%
Blocker: None β€” additive guardrail; does NOT enable any send.
Next: Wire the enrichment-runner + permit/Camila enrichment paths when those are built (guard helpers ready).
πŸ‘€ Sofia / Alexsafe to deploy: yes
main Β· proof: INSTALLED 2026-06-06 (lib/owner-governor, owner-audit-log, owner-guards): hard-deny secrets/suppression/fake-data; EXACT owner-approval-phrase required for sends; paid calls gated. Wired into outreach/send, outreach/send-approved, outreach/send-sms, partners/send (approval-gated) + leads/enrich, leads/solar-enrich (paid-gated) + leads/import (audited). Self-test /api/owner-governor/test = 8/8. Β· upd 2026-06-06
Permit β†’ CRM EnrichmentIn progress
90%
Blocker: Pipeline LIVE; real outreach contact yield depends on permit↔CRM overlap. Phone outreach = review_required (no DNC/TCPA workflow). Marco picks the prospect permit segment.
Next: Run preview on the chosen prospect segment; review email_outreach_ready leads; outreach stays gated.
πŸ‘€ Renata / Alexsafe to deploy: yes
main Β· proof: LIVE 2026-06-06: /permits/enrichment + /api/permits/enrichment. Table permit_crm_enriched_leads (40 cols). Matching tiers, enrichment_score 0-100, dedupe, email_outreach_ready + phone review_required, CSV export. Self-test 10/10; preview 0 writes; Owner-Governor enforced. PV permits = Camila LEARNING data (PV->CRM overlap 0); PROSPECT permits = outreach targets (roof/electrical/EV/pool/HVAC/ADU/new-construction) per docs/permit-prospect-strategy.md. No sends. Β· upd 2026-06-06
Apify (data capture)In progress
70%
Blocker: Token must be set in Vercel (not local); actor not built/published on Apify yet (folder ready). GitHub-connected repo/branch/dir is Apify-dashboard config (cannot read from code).
Next: Set APIFY_TOKEN in Vercel; point Apify build at actors/permit-crm-public-data-normalizer (NOT repo root); publish actor. No actor run until approved.
πŸ‘€ Alex / Renatasafe to deploy: yes
main Β· proof: CORRECTED (Apify, not AWS Amplify) 2026-06-06: dedicated actor folder actors/permit-crm-public-data-normalizer (package.json, Dockerfile, .actor/actor.json, .actor/input_schema.json, src/main.js β€” normalize-only, dry_run default, output to dataset). /api/apify/test enhanced (free /users/me; token_exposed=false, actor_run_executed=false, paid_call_executed=false). Owner-Governor: APIFY_TEST_CONNECTION/LIST allowed, APIFY_ACTOR_RUN/DATASET_IMPORT/ENRICHMENT_RUN approval-gated; /api/apify/search paid run now governor-gated. No actor run, no paid call. Β· upd 2026-06-06
Launch CockpitComplete
100%
Blocker: None β€” LIVE in production.
Next: Wire a real agent-report feed later.
πŸ‘€ Alexsafe to deploy: yes
main Β· proof: Deployed to main (78dd9bd); synced to 2026-06-05 truth. Β· upd 2026-06-05
Scheduling / BookingSTALEWaiting on Marco
55%
Blocker: Booking PR not opened/merged.
Next: Open PR + Marco approves merge.
πŸ‘€ Mia / Alexsafe to deploy: no
feat/scheduling-portal Β· proof: Branch exists locally (unmerged) Β· upd 2026-06-04
Partners ReferralSTALEIn progress
55%
Blocker: Referral economics + SignWell unproven end-to-end.
Next: Verify referral flow in Partners chat.
πŸ‘€ Rafasafe to deploy: no
feat/partner-map Β· proof: Map + contractors API built (awaiting review) Β· upd 2026-06-04
Commercial SolarSTALEIn progress
50%
Blocker: Setup wizard UX + deployment unconfirmed.
Next: Confirm in Commercial Solar chat.
πŸ‘€ Alexsafe to deploy: no
feat/commercial-solar-outreach Β· proof: UX rebuild committed Β· upd 2026-06-04
MLL / Permit IntelligenceIn progress
70%
Blocker: PARKED: property enrichment (beds/baths/sqft) needs SanGIS registration (APN 100% ready). Positive-only (no control group). 2022 partial (2022/23 issue-year files 403).
Next: Obtain SanGIS PARCEL_ATTRIBUTES + join by APN; capture reply/booking outcomes to become predictive; add a control group.
πŸ‘€ Camila / Danielasafe to deploy: yes
main Β· proof: CORRECTED 2026-06-06: camila_solar_positive_permits re-filtered to PV-ONLY = 13,982 Photovoltaic approvals (~13,099 unique homes); removed 2,429 sub-permits (electrical/mechanical/combination-building) that the first pass over-counted as "16,411". By APPLICATION year: 2022=0 + 2023=57 (PARTIAL β€” those PV approvals are in SD 2022/23 issue-files that return HTTP 403), 2024=6157, 2025=5962, 2026=1806 (year in progress). YEAR + MONTH charts live (/agents/camila); APN 100%. ENRICHMENT PARKED β€” 0 enriched property records (beds/baths/sqft need SanGIS registration). Positive-only; no prediction. Β· upd 2026-06-06
πŸ“ How β€œLaunch Completion” is calculated
30%Production safety β€” Master kill switch LIVE (e289280); rollback runbook (ac860c4); Svix reply capture verified; lead backup done. Full prod env not yet audited.78%
20%Booking live β€” Portal built; PR/merge pending.50%
15%Email infrastructure β€” DNS auth + Svix reply capture done; Anna sender; OUTREACH OFF (first safe batch awaiting Marco).90%
15%Outreach safety (master kill switch) β€” OUTREACH_ENABLED kill switch LIVE (e289280); 18/18 tests; suppression enforced.80%
10%Agent Company β€” Routing + Action Inbox + Ask-Agent chat + ticket room REAL; Campaign Engine + Improve Agents are MOCK prototypes (openly labeled); autonomous execution NOT active.70%
10%MLL / Permit intelligence β€” 13,982 PV approvals + year/month charts LIVE (/agents/camila); enrichment PARKED (0 enriched β€” SanGIS registration; APN 100% ready).70%
Overall = Ξ£(weight Γ— category readiness) = 73%. Values are honest estimates from saved agent reports; unknowns are not faked.

Proof scope: Overnight: freed ~9.3GB disk; Camila positive-only baseline + by-year bar graph LIVE; Report Agent v1 LIVE; 11-doc operating archive created; dedupe/scoring/partner-grouping verified. OUTREACH_ENABLED OFF β€” 0 sends. Parked (Action Inbox): SD 2023 permit backfill, property enrichment, autonomous execution. Statuses are set from real proof only β€” rows without proof are BLOCKER or UNKNOWN, never green.

01

Executive Readiness

Internal Demo85–90%

Launch queue (5/5) live on production.

Controlled Outbound80–88%

Email auth + webhook/reply capture + kill switch + lead backup DONE. First batch NOT sent β€” awaiting Marco go.

Fully Automated Revenue Machine35–45%

Outbound ready; no automated end-to-end money loop yet.

02

Critical Blockers

P0 / P17 verified4 partial1 blocker
PBlockerStatusOwnerNext actionProofApproval
P0DMARC for marcoruta.comVERIFIEDMarco (DNS)DoneDMARC TXT live (verified 2026-06-05)β€”
P0SPF authorizes ResendVERIFIEDMarco (DNS)DoneSPF includes Resend (verified 2026-06-05)β€”
P0DKIM verified in ResendVERIFIEDMarco (DNS)DoneResend domain verified, DKIM CNAMEs live (2026-06-05)β€”
P0RESEND_WEBHOOK_SECRET + Svix verificationVERIFIEDAlexDoneSecret set in prod; signed Svix event β†’ 200, tampered β†’ 401 (2026-06-05, commit 7bb3ebb)β€”
P1Inbound reply captureVERIFIEDAlexDone (verification fixed)Svix verifier accepts real Resend events on prod (2026-06-05)β€”
P1Lead/CRM data backupVERIFIEDAlexDoneleads-backup-2026-06-05.json β€” 9,304 leads (11.74 MB)β€”
P1Agent faces missing on production sitePARTIALAlexCompare /agents prod vs staging, fix assetsAgent Company deployed; live faces not re-verifiedβ€”
P1Booking PR not opened/mergedBLOCKERMarco approves mergeOpen PR from feat/scheduling-portal-cleanBranch exists (unmerged)MARCO
P1Full production env NAME table (Vercel read)PARTIALMarco (Vercel read)Marco reads Vercel env names for the full tableBehaviorally verified in prod 2026-06-06: admin login + PORTAL_PASSWORD set, outreach gate fail-closed (0 sends), Svix webhook + Sheets working. Full Vercel NAME table still needs Marco Vercel read.β€”
P0Rollback planVERIFIEDAlexOptional: fill deployment IDsRunbook committed: docs/rollback-plan.md (ac860c4); code-grounded kill switchβ€”
P1Campaign Engine is a MOCK prototype (openly labeled)PARTIALAlexCreation now files REAL Action Inbox tasks; lead/outreach/reply pipelines stay MOCK projections until a connector is approved (outreach stays OFF)New 2026-06-06: /agents/campaigns "New campaign" creates real campaign + agent tasks in the Action Inbox; pipelines still labeled MOCKβ€”
P2Improve Agents tabs mostly static/mock contentPARTIALAlexWire Mistakes/Needs-info/Lessons tabs to the real /mistakes + Action Inbox, or label static; Action Inbox task filedStatic; the REAL mistake/work log is the separate /mistakes pageβ€”
03

Email Infrastructure

11 verified2 partial
FieldStatusValueProof
Sending domainVERIFIEDmarcoruta.com (verified)Resend domain verified (2026-06-05)
DMARCVERIFIEDLiveDMARC TXT published (2026-06-05)
SPFVERIFIEDAuthorizes Resendinclude:_spf.resend.com live (2026-06-05)
DKIMVERIFIEDVerifiedResend DKIM CNAMEs verified (2026-06-05)
From nameVERIFIEDConfiguredSEND_FROM_NAME present
From emailVERIFIEDConfiguredSEND_FROM_EMAIL present
Outreach senderVERIFIEDAnna <anna@marcoruta.com>Assigned setter (not owner); writes/signs as Anna; OUTREACH_FROM_* (13f5c23)
Reply-toPARTIALDefaultNo dedicated var; replies captured via webhook
Inbound routingVERIFIEDReply capture verifiedSvix events accepted on prod (2026-06-05)
Webhook secretVERIFIEDSet in prodSigned Svix β†’ 200, tampered β†’ 401 (2026-06-05)
CAN-SPAM addressVERIFIEDConfiguredSEND_PHYSICAL_ADDRESS present
Outbound deliverabilityVERIFIEDProvenTwo controlled test sends, messageId recorded (2026-06-05)
UnsubscribePARTIALRoute exists (/api/unsubscribe)List-Unsubscribe + footer applied; end-to-end unproven
04

Production vs Staging Proof

Agent pages5 verified
PageStatusProof
/agentsVERIFIEDLIVE on prod (200) β€” Agent Company deployed (cf43476)
/agents/teamVERIFIEDLIVE on prod (200)
/agents/war-roomVERIFIEDLIVE on prod (200) β€” 2026-06-05
/agents/onboardingVERIFIEDLIVE on prod (200) β€” 2026-06-05
/agents/learningVERIFIEDLIVE on prod (200) β€” 2026-06-05
05

Lead Quality Gate

15 blocker
Lead has emailBLOCKER
Lead has phoneBLOCKER
Email verifiedBLOCKER
Phone verifiedBLOCKER
Suppressed / do-not-contactBLOCKER
Already sentBLOCKER
Missing owner nameBLOCKER
Missing trade/sourceBLOCKER
Needs Vapi fallbackBLOCKER
Has solar alreadyBLOCKER
Solar permitBLOCKER
Battery permitBLOCKER
Utility knownBLOCKER
ZIP knownBLOCKER
Campaign eligibleBLOCKER
06

Campaign Safety Gates

11 verified2 partial1 blocker
SEND_TEST_MODEVERIFIED
SEND_TEST_EMAILPARTIAL
OUTREACH_ENABLED = OFFVERIFIED
do_not_contact respectedVERIFIED
sent_at respectedVERIFIED
Unsubscribe respectedVERIFIED
Reply capture workingVERIFIED
Manual kill switchVERIFIED
Admin auth (session login, not Basic popup)VERIFIED
Rollback planVERIFIED
Lead backupVERIFIED
PPA-only messaging (no tax-credit claims)VERIFIED
Error loggingPARTIAL
Cost controlBLOCKER
07

Branch / PR Tracker

2 verified2 partial
BranchPurposeStatusProof
mainProduction (launch queue + Svix webhook + Anna sender + Airbnb/STR)VERIFIEDDeployed 2026-06-05; /agents, /airbnb-leads, /permits, /partners/map all 200
fix/svix-webhook-verifierResend/Svix reply captureVERIFIEDMerged to main (7bb3ebb); verified on prod
feat/marco-launch-cockpitLive-status cockpitPARTIALBuilt; not merged to main
feat/scheduling-portal-cleanBooking / scheduling portalPARTIALBranch exists; PR not opened
08

Env Var Tracker

local .env.local (names only)10 verified2 partial3 blocker
VariableLocalNote
RESEND_API_KEYPRESENTPresent (send)
RESEND_WEBHOOK_SECRETPRESENTSet in prod β€” verified via signed Svix 200 (2026-06-05)
SEND_TEST_MODEPRESENTPresent
SEND_TEST_EMAILCHECKUsed for test sends; confirm in prod before batch
OUTREACH_ENABLEDCHECKUnset = OFF by design (master gate fail-closed). Flip to true only on Marco go.
ANTHROPIC_API_KEYPRESENTPresent
GOOGLE_SHEET_IDPRESENTPresent
GOOGLE_SERVICE_ACCOUNT_EMAILPRESENTPresent
GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEYPRESENTPresent
SEND_PHYSICAL_ADDRESSPRESENTPresent (CAN-SPAM)
SEND_FROM_EMAILPRESENTPresent
SEND_FROM_NAMEPRESENTPresent
BLOB_READ_WRITE_TOKENMISSINGMissing β€” only needed for Blob avatar uploads
TELEGRAM_BOT_TOKENMISSINGMissing β€” needed for reply/approval alerts
TELEGRAM_CHAT_IDMISSINGMissing
09

Launch Tests

9 verified4 unknown
Official domain loadsVERIFIED
Agent faces visible on live siteUNKNOWN
Booking flow worksUNKNOWN
Duplicate lead testUNKNOWN
Test email sendsVERIFIED
Reply testVERIFIED
Unsubscribe testVERIFIED
Airbnb/STR CSV upload + dedupeVERIFIED
do_not_contact testVERIFIED
sent_at testVERIFIED
Lead-quality testUNKNOWN
Error state testVERIFIED
Rollback testVERIFIED
10

Proof Standard

Every blocker and test carries: Status Β· Owner Β· Proof required Β· Current proof Β· Next action Β· Risk.

  • VERIFIED Β verified with recorded proof
  • PARTIAL Β configured but not proven end-to-end
  • BLOCKER Β known blocker, not done
  • UNKNOWN Β cannot be verified from inside the app today