EGP-DS Markets + Sending Infrastructure — Morning Dashboard
Version: 1.0
Date: 2026-04-14 (morning)
For: Marc Williams (CDAIO) + Yolan (AdminOps)
Author: Betty Suarez, Chief of Staff
Scope: Status of the 64-market EGP-DS sending infrastructure buildout, related workstreams, and open decisions
Top-Line Status
| Track | Scope | Status | Count | Owner |
|---|---|---|---|---|
| A | SOP + PIT tab + Confluence body | ✅ Complete | 64/64 rows | Betty |
| B | GHL sub-accounts + admin-add | ✅ Complete | 128/128 mutations | Betty (automation) |
| C1 | Cloudflare DNS base records | ✅ Complete (after CF Pro upgrade) | 320/320 records | Betty (automation) |
| C2 | Mailgun domains + DKIM + SMTP creds | 🏃 Running | ~32/64 markets complete | Betty (automation) |
| C3 | GHL Custom SMTP + subdomain wiring | 🏃 Dispatched | 0/64 wired yet | Betty (subagent) |
| Jira SWAT | Parent + 2 sub-tasks for Aisha + Surafel | ✅ Live | SWAT-152 / 153 / 154 | Betty + team |
| SOP v1 → v2 | Team-facing artifact (removes admin-add noise) | ✅ md + HTML + PDF | 3 artifacts | Betty |
| Secret vault import | 64 PITs + 64 SMTP passwords + 7 API keys | ⏳ Pending Marc | 0/135 secrets | Marc |
P0 Blockers (need Marc decision before we can proceed)
BLOCKER #1 — Secret Key Vault selection
What: Marc hasn't picked a vault vendor yet. All secrets are currently staged in local files + Google Sheet.
Impact: Team cannot safely use PITs for multi-device work. Sheet-based staging is non-auditable and non-rotating.
Options:
- 1Password Business — fast setup, ~$20/user/month, existing EGP team already uses 1Password personal
- HashiCorp Vault — self-hosted, strongest controls, ~2-3 days setup + ongoing ops overhead
- Doppler — SaaS, developer-friendly, ~$9/user/month, great CLI
- AWS Secrets Manager — if EGP already has AWS, $0.40/secret/month, ~5 min setup
- Bitwarden Business — ~$5/user/month, open source, strong compliance story
Recommendation: 1Password Business (fastest path to working state, EGP already uses it personally, import flow is straightforward for 135 secrets).
Decision needed from Marc.
BLOCKER #2 — GHL HQ sub-account identification
What: Research scan of .tmp/ghl_locations_all.json could not identify a single definitive "EGP HQ" GHL location. The 29 active EGP-DS sub-accounts + 35 BOL delta sub-accounts are all market-scoped. The 4 PRBoost sending sub-accounts from CDAIO-191 are still pending Marc's UI-side creation.
Impact: Cannot send marketing/outreach emails from EGP HQ today without first (a) confirming which GHL location is HQ or (b) completing CDAIO-191 PRBoost sub-account creation.
Options:
- Option A (fastest): Use one of the 64 EGP-DS sub-accounts (e.g.
* EGP-DS Washington DC Capital Business Directory, as it matches EGP HQ Virginia address) as temporary HQ sender. 2 min. - Option B: Complete CDAIO-191 4-sub-account creation in GHL UI. 15 min of clicks.
- Option C: Send directly via Mailgun API (Path B from the
EGP-HQ-RELEASE-EMAILS-TODAY-RUNBOOK.md) — bypasses GHL entirely, uses the 4 PRBoost Mailgun domains that are already verified. Zero new config.
Recommendation: Option C (Mailgun direct) for TODAY — unblocks sending immediately. Then complete Option B over the weekend for CRM persistence.
Decision needed from Marc.
BLOCKER #3 — Sending/Transactional subdomain split for EGP-DS markets
What: Each EGP-DS market currently gets ONE Mailgun subdomain (mg.{slug}...) being wired as BOTH the sending and transactional domain in GHL (Track C3). Mailgun best practice is to separate: sending domain = marketing/outreach (higher volume, reputation risk), transactional = receipts/confirmations (lower volume, better reputation).
Impact: If marketing volume tanks sender reputation, transactional (appointments, receipts) goes down too.
Options:
- A (current plan): one
mg.{slug}...for both. Simpler, one-time setup, Marc can split later. - B: add a second subdomain
tx.{slug}...per market = another 64 Mailgun domains + 320 DNS records + 64 new SMTP creds. ~2 hours of automation time.
Recommendation: Option A for TODAY — ship the simpler model and split later if reputation metrics warrant it.
Decision needed from Marc (accept plan A, or authorize the extra 2h to build plan B now).
P1 Decisions (can wait until end of day)
DECISION #1 — Track C3 UI-only confirmed — Willemena or team execution
What: Track C3 subagent completed the investigation. **The GHL Marketplace API (Version 2021-07-28) does NOT expose Custom SMTP, Sending Domain, or Transactional Domain at the /locations/* level.** OAuth scope inventory confirms there is no emails. or emailServices. scope at all in GHL's catalog.
Impact: 64 markets × 3 settings each = 192 manual UI operations to wire SMTP + sending + transactional domains.
Deliverables in place:
tools/ghl_custom_smtp_wire.py— probe-and-fallback tool built; will auto-use a live endpoint if GHL ever ships one, no code change needed.00152-EGP-DS-Markets/EGP-DS-SMTP-WIRING-UI-RUNBOOK.md— full GHL UI path + per-market reference table + password variable refs (no plaintext).00152-EGP-DS-Markets/TRACK_C3_COMPLETION_REPORT.md/.html— findings + handoff.
Options:
- A (recommended): Willemena automates the UI via BrowserAct against the 64 markets. Estimated ~1 hour. Requires Willemena MCP server active (currently inactive — see Decision #2).
- B: Split the 64-market list across Aisha + Surafel. ~3.2 hours of clicks at 3 min/market, 1.6h per teammate.
- C: Betty runs BrowserAct sessions directly against the GHL agency. Similar to (A) but bypasses Willemena.
Recommendation: Option C for TODAY (Betty via BrowserAct) — (A) requires Willemena activation which is itself a decision, (B) burns team time that should go to PIT generation.
Decision needed from Marc.
DECISION #2 — Willemena activation
What: Willemena is configured as a GHL contact + webhook + MCP bridge tool (tools/betty_willemena_webhook.py, tools/betty_willemena_mcp_server.py) but has no active ~/.claude/agents/willemena*.md definition. She can receive webhooks but cannot execute Python tools until the MCP server is started.
Blocker: MCP server is a process that needs to be running. Not yet running.
Options:
- A: Start Willemena MCP server as a launchd daemon (
com.egp.willemena-mcp). ~15 min setup. Uses 00032 AI Agent Studio v2 architecture. - B: Defer Willemena activation — run Track C3 via Betty subagent instead. Pushes Willemena's first production run to next week.
Recommendation: Option B — Willemena is not on the critical path for today. Ship Track C3 via subagent.
DECISION #3 — AI Agent Studio v2 activation
What: v2 architecture designed (00032 folder, 166KB HTML) but zero agents activated. 23 planned agents, 0 live.
Blocker: None operationally — it's a strategic decision on when to light up Agent Studio vs. continuing with current subagent pattern.
Recommendation: Defer. Current subagent dispatch model is working (128/128 mutations overnight, zero failures). Revisit after EGP-DS buildout is complete.
DECISION #4 — JSM final config
What: Jira Service Management project EGPSD exists with 11 request types. Missing: SLA policies, queues, automation rules, portal branding, ORCA webhook.
Estimated work: ~4 hours of Jira UI config for SLAs + queues + automation, ~1 day for ORCA webhook integration.
Owner: Marc or delegate
Recommendation: Schedule a dedicated JSM config session with Yolan (he owns AdminOps). Not blocking any current work.
Completed Overnight / This Morning
| Task | Artifact | Location |
|---|---|---|
| SOP .md | EGP-DS-MARKETS-VALIDATION-SOP-v2.md | 00152-EGP-DS-Markets/ |
| SOP HTML | EGP-DS-MARKETS-VALIDATION-SOP-v2.html | 00152-EGP-DS-Markets/ (90KB) |
| SOP PDF | EGP-DS-MARKETS-VALIDATION-SOP-v2.pdf | 00152-EGP-DS-Markets/ (626KB) |
| IANA timezone map | market_iana_timezone_map.json | 00152-EGP-DS-Markets/ |
| PIT tab | 64 rows, 910 cells | Google Sheet |
| Confluence page v1 | EGP-DS Markets SOP page | EGPSWAT space, id 131072002 |
| Jira SWAT-152 | Parent task | https://egp-team.atlassian.net/browse/SWAT-152 |
| Jira SWAT-153 | Aisha sub-task (33 rows) | https://egp-team.atlassian.net/browse/SWAT-153 |
| Jira SWAT-154 | Surafel sub-task (31 rows + QA gate) | https://egp-team.atlassian.net/browse/SWAT-154 |
| Mail Accounts Registry | EGP-MAIL-ACCOUNTS-REGISTRY.md + .html | 00152-EGP-DS-Markets/ |
| This Dashboard | EGP-DS-MARKETS-MORNING-DASHBOARD-20260414.md + .html | 00011-EGP-CDAIO-Dashboard/ |
Running / In-Flight
| Workstream | ETA | Progress |
|---|---|---|
| C2 Mailgun apply | ~30 min remaining | 32/64 markets complete |
| C3 GHL SMTP wiring subagent | ~45-90 min (depends on API path) | Just dispatched |
| v2 Confluence page POST | ~5 min once Atlassian MCP reconnects | Waiting on MCP |
| SWAT Jira description updates (v1 → v2) | ~5 min once MCP reconnects | Waiting on MCP |
| PIT tab Wave 2 append (35 delta rows) | Need to check — Track A populated 64 rows already | Likely already done |
Security Posture (as of 09:30 ET)
- Marc is sole Agency Admin on EnRoute Growth Platform ✅ enforced across 128 admin-add mutations
- All 64 sub-accounts have Aisha + Surafel as Sub-Account Admin ✅ (location-scoped, post-verified)
- Zero P0 breach events across the overnight run
- Refresh token persistence patch ✅ (GHL rotates on every refresh — v2 tool now catches and writes back to .env)
- Cloudflare Pro upgrade applied ✅ (from Free 200-record cap → Pro 3,500 cap)
- .env.mailgun_smtp_creds ✅ chmod 600, SMTP passwords masked in all logs
- PIT tab ⚠️ accessible to Aisha + Surafel via sheet — will be redacted after vault import
Financial impact (overnight + this morning)
| Item | Cost | Period |
|---|---|---|
| Cloudflare Pro upgrade | $25/mo | Monthly, recurring |
| Mailgun (64 new sending domains) | ~$0 marginal | Already on pay-as-you-send Mailgun plan |
| GHL sub-accounts (35 new) | Included in agency subscription | No marginal cost |
| Secret key vault (TBD) | $0-$200/mo | Depending on vendor choice |
| Total new recurring | $25-$225/mo |
Next 2 hours — Betty's autonomous plan
- Monitor C2 until all 64 markets have SMTP creds in
.env.mailgun_smtp_creds - Monitor C3 subagent — if API path works, it runs
--applyautonomously; if not, it writes the UI runbook - Retry Atlassian MCP → POST v2 Confluence page + update SWAT-152/153/154 descriptions to reference v2 only
- Verify PIT tab has 64 rows (check with gsheets.py)
- Write completion reports for C2, C3 + brand-compliant HTML renders
- Update this Dashboard with delta progress at the 2-hour check-in
www.enroutegrowthplatform.io · CustomerSuccess@EnRouteGrowthPlatform.io · +1.866.891.2779
© 1991–2026 EnRoute Growth Platform. All rights reserved.