DE Toolkit Tools And Systems
Core Guides

Tools And Systems

09 — Tools & Systems

Goal of this doc: Know what every tool does, where to find it, and which one to open for any given task. No hunting around.


Your daily stack

ToolWhat it’s forWhere to access
HubSpotMigration pipeline tracking, deal records, activity loggingapp.hubspot.com
Supabase PortalMigration data, partner records, porting statusavaya.cloudmagicgroup.com/portal
n8nWorkflow automation — monitor, debug, re-triggern8n.cloudmagicgroup.com
SplunkEvent logging, health checks, alertingSplunk on ThinkPad (SSH tunnel)
SlackReal-time coordination, alerts#migrations, #hot-leads, #sales-alerts
CLI scriptsPorting, compliance, feature mapping, health checksexecution/ directory
UCaaS admin consolesPlatform provisioningPer-platform (see doc 05)

HubSpot — your migration queue

HubSpot is the canonical record for every migration. The deal object is what n8n 903 reads to fire. If something is wrong in HubSpot, the automation breaks.

Fields you own on every migration deal

FieldWhat it tracksWhen to update
Deal StageCurrent migration stage (1–7)Every stage transition — triggers n8n 903
AmountContract value (annual MRR)Confirm at handoff from sales — do not change
Close DateEstimated go-live dateUpdate as soon as FOC date is confirmed
Target SupplierUCaaS platform selectedConfirm at handoff
Seat CountNumber of seats (from assessment)Update if assessment reveals different count than sales estimated
Compliance FlagsHIPAA/PCI/FedRAMP/FERPA or NoneSet at assessment
Migration IDSupabase UUID for this migrationAuto-populated by n8n 903; verify it matches Supabase
NotesCurrent status summaryUpdate after every customer interaction

HubSpot deal stage → n8n trigger mapping

HubSpot Stagen8n event
Closed Won903 fires (all 6 stages)
Go-Live904 fires (health check schedule)

If a deal stage is changed and n8n doesn’t fire, check n8n execution history. The webhook trigger is https://n8n.cloudmagicgroup.com/webhook/migration-new.


Supabase — the migration data store

Supabase holds the technical record for every migration: porting status, compliance sign-offs, feature maps, health check results.

Accessing Supabase

Web portal (for data inspection):

  • https://avaya.cloudmagicgroup.com/portal → migrations table

Direct Supabase dashboard:

  • https://supabase.com/dashboard/project/wjuavuucarznaioipitu (prod Avaya project)

Via CLI scripts: The Python scripts in execution/ interact with Supabase directly through the REST API. The crm_client.py module handles all CRUD operations.

Key tables

TableWhat’s in itYour read/write
migrationsOne row per migration — metadata (JSON), status, created_atRead: daily. Write: via scripts.
leadsScored prospect poolRead only for DEs
partnersMSP partner accountsRead only for DEs
activitiesActivity log (Splunk-mirrored)Read: for debugging

Inspecting a migration record

# Check Supabase REST API directly (requires SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY from .env)
curl -X GET "https://wjuavuucarznaioipitu.supabase.co/rest/v1/migrations?migration_id=eq.<uuid>" \
  -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
  -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"

Or use the crm_client.py module:

from execution.crm_client import get_migration
migration = get_migration("<uuid>")

n8n — the automation backbone

n8n runs on the Surface at 10.1.50.206:5678. Accessible externally via https://n8n.cloudmagicgroup.com. All workflows are live and active.

Workflows you interact with as a DE

WorkflowWhat it doesWhen to use it
903Migration lifecycle (Stages 1–6)Fires automatically on HubSpot Closed Won. Re-trigger manually if it didn’t fire.
904Health checks (Day 1/7/30/60)Fires automatically when deal moves to Go-Live. Monitor outputs in Splunk.
902Lead intelligence + scoringSales team tool — you’ll rarely touch this

Accessing n8n

  • Browser: https://n8n.cloudmagicgroup.com
  • Login: admin / (password in /home/n8n/.env on Surface)
  • Direct SSH if external access is down: ssh -J thinkpad n8n@10.1.50.206

Re-triggering workflow 903 manually

If n8n didn’t fire on a HubSpot stage change:

curl -X POST https://n8n.cloudmagicgroup.com/webhook/migration-new \
  -H "Content-Type: application/json" \
  -d '{
    "migration_id": "MIG-XXXX",
    "customer_name": "Acme Corp",
    "customer_email": "it@acme.com",
    "company_domain": "acme.com",
    "seat_count": 45,
    "target_supplier": "RingCentral",
    "avaya_product": "Avaya IP Office 500",
    "urgency_level": "high",
    "avaya_contract_end": "2026-08-01",
    "deal_value": 32400,
    "partner_id": "CMTG-INTERNAL",
    "msp_slack_webhook": "https://hooks.slack.com/services/..."
  }'

Use exact field names — the workflow uses seat_count (not seats), target_supplier (not target_platform), customer_email (not contact_email).


CLI scripts — your execution toolkit

All scripts live in execution/. Run from the project root with the .env file sourced.

cd /home/stacksbyc/projects/avaya
source .env  # or add to your shell profile

porting_tracker.py

# Create a new port order
python3 execution/porting_tracker.py --action create \
    --migration-id <uuid> --numbers "415-555-0100,415-555-0101" --carrier "Spectrum Business"

# Check status
python3 execution/porting_tracker.py --action status --migration-id <uuid>

# Advance stage (when FOC received)
python3 execution/porting_tracker.py --action update \
    --migration-id <uuid> --stage foc_received --foc-date "2026-06-15"

# Generate port-day checklist
python3 execution/porting_tracker.py --action checklist --migration-id <uuid>

Stage progression: loa_pending → loa_submitted → foc_received → port_day → complete

compliance_checker.py

# Detect vertical and initialize
python3 execution/compliance_checker.py --migration-id <uuid> --industry "healthcare"

# View current status
python3 execution/compliance_checker.py --migration-id <uuid> --check-status

# Sign off a requirement
python3 execution/compliance_checker.py --migration-id <uuid> \
    --sign-off --requirement hipaa_baa_signed --signed-by "you@cloudmagicgroup.com"

# Stage gate check (0=pass, 2=blocked)
python3 execution/compliance_checker.py --migration-id <uuid> --can-advance --stage 5

feature_mapper.py

# Generate feature gap analysis
python3 execution/feature_mapper.py --source avaya --target ringcentral --output-format text

# Save to migration record in Supabase
python3 execution/feature_mapper.py --source avaya --target 8x8 --migration-id <uuid>

# Supported targets: ringcentral, teams, zoom, 8x8, dialpad, sangoma

health_check.py

# Run a health check with current metrics
python3 execution/health_check.py --migration-id <uuid> \
    --metrics '{"mos":4.1,"jitter":15,"latency":80,"packet_loss":0.1,"nps":8,"adoption_pct":0.85}'

tco_calculator.py

# Generate TCO comparison for a migration proposal
python3 execution/tco_calculator.py --seats 75 --current-cost 4500 --target-platform ringcentral

# Export as HTML (shareable with customer)
python3 execution/tco_calculator.py --seats 75 --current-cost 4500 --target-platform ringcentral --export-html

generate_proposal.py

# Generate assessment questionnaire (Stage 2)
python3 execution/generate_proposal.py --stage assessment --migration-id <uuid>

# Generate proposal document (Stage 3)
python3 execution/generate_proposal.py --migration-id <uuid>

Splunk — monitoring and observability

Splunk runs in Docker on the ThinkPad at 10.1.50.132.

Accessing Splunk

  • Web UI: http://10.1.50.132:8000 (if on the local network)
  • SSH to ThinkPad and port-forward if remote: ssh -L 8000:localhost:8000 thinkpad
  • Default index for Avaya events: avaya

Key searches

# All events for a specific migration
index=avaya migration_id="<uuid>"

# Compliance sign-offs for a migration
index=avaya action=compliance_signoff migration_id="<uuid>"

# Port order events
index=avaya (action=port_order_created OR action=port_stage_advanced)

# Health check results
index=avaya sourcetype=health_check

# Feature map completions
index=avaya action=feature_map_complete

# Any errors in the last 24h
index=avaya level=error earliest=-24h

The Splunk error monitor

A cron job (execution/splunk_error_monitor.py) runs every 5 minutes on the ThinkPad and sends Slack alerts for any critical errors. If you see an unexpected alert in #sales-alerts, search Splunk for the context.


Slack — real-time coordination

ChannelPurposeWhat to post there
#migrationsMigration team coordinationStage changes, port updates, go-live notifications, blockers
#hot-leadsHigh-priority lead alertsRead-only for DEs; escalation path if a customer in active migration has a sales question
#sales-alertsPlatform alerts (Stripe, Splunk, n8n errors)Monitor for system issues that affect your migrations
#competitive-digestDaily competitive intelBackground reading — not action items for DEs

Standard Slack messages for migrations

Migration received (Stage 1):

@migration-team — received handoff for [CUSTOMER NAME] ([SEATS] seats, [SUPPLIER]). Migration ID: [UUID]. Starting assessment this week.

Go-live complete:

[CUSTOMER NAME] is live on [SUPPLIER]. All [N] sites confirmed. E911 tested. Migration ID [UUID] complete. Health check Day 7 is [DATE].

Blocker:

BLOCKER — [CUSTOMER NAME] [UUID]: [DESCRIBE ISSUE]. [IMPACT]. Working on resolution. ETA: [TIME/DATE].


Next: 10 — Your 30-60-90 Plan →