New diagrams: - business-flow.svg: acquisition → check → order → filing → delivery - technical-architecture.svg: full Docker stack, data tier, external services - order-flow.svg: detailed worker pipeline with eSign gate and handler map Updated docs: - infrastructure.md: DocServer, email servers, backup server sections - architecture.md: linked to new SVGs, updated date Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
215 lines
16 KiB
XML
215 lines
16 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 900" font-family="Inter, system-ui, sans-serif" font-size="11">
|
|
<defs>
|
|
<marker id="arr" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
<path d="M0,0 L8,3 L0,6 Z" fill="#64748b"/>
|
|
</marker>
|
|
<marker id="arr-green" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
<path d="M0,0 L8,3 L0,6 Z" fill="#059669"/>
|
|
</marker>
|
|
<marker id="arr-blue" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
<path d="M0,0 L8,3 L0,6 Z" fill="#1e3a5f"/>
|
|
</marker>
|
|
</defs>
|
|
|
|
<!-- Title -->
|
|
<text x="700" y="30" text-anchor="middle" font-size="18" font-weight="700" fill="#1e3a5f">Performance West — Business Flow</text>
|
|
<text x="700" y="48" text-anchor="middle" font-size="10" fill="#94a3b8">Customer acquisition → compliance check → order → filing → delivery</text>
|
|
|
|
<!-- ═══ ACQUISITION CHANNELS ═══ -->
|
|
<rect x="20" y="70" width="200" height="160" rx="10" fill="#eff6ff" stroke="#bfdbfe" stroke-width="1.5"/>
|
|
<text x="120" y="90" text-anchor="middle" font-size="12" font-weight="700" fill="#1e3a5f">Acquisition Channels</text>
|
|
<text x="35" y="112" font-size="10" fill="#475569">📧 Listmonk email campaigns</text>
|
|
<text x="35" y="128" font-size="10" fill="#475569">🔍 Google / Bing organic</text>
|
|
<text x="35" y="144" font-size="10" fill="#475569">💬 Reddit / forum monitoring</text>
|
|
<text x="35" y="160" font-size="10" fill="#475569">📞 Referrals / word of mouth</text>
|
|
<text x="35" y="176" font-size="10" fill="#475569">⚖️ Attorney referral program</text>
|
|
<text x="35" y="196" font-size="10" fill="#475569">📊 FCC deficiency alerts (2,718)</text>
|
|
<text x="35" y="212" font-size="9" fill="#94a3b8">Direct SMTP via Postfix + DKIM</text>
|
|
|
|
<!-- Arrow: Acquisition → Free Tool -->
|
|
<line x1="220" y1="150" x2="280" y2="150" stroke="#64748b" stroke-width="1.5" marker-end="url(#arr)"/>
|
|
|
|
<!-- ═══ FREE COMPLIANCE CHECK ═══ -->
|
|
<rect x="285" y="80" width="220" height="140" rx="10" fill="#dcfce7" stroke="#86efac" stroke-width="1.5"/>
|
|
<text x="395" y="100" text-anchor="middle" font-size="12" font-weight="700" fill="#059669">Free Compliance Check</text>
|
|
<text x="300" y="120" font-size="10" fill="#374151">performancewest.net/tools/</text>
|
|
<text x="300" y="134" font-size="10" fill="#374151">fcc-compliance-check</text>
|
|
<text x="300" y="155" font-size="9" fill="#475569">• Enter FRN → auto-run from email</text>
|
|
<text x="300" y="168" font-size="9" fill="#475569">• Queries RMD, CPNI, USAC, BDC</text>
|
|
<text x="300" y="181" font-size="9" fill="#475569">• Shows issues with severity</text>
|
|
<text x="300" y="194" font-size="9" fill="#475569">• CTA: "Fix These Issues"</text>
|
|
<text x="300" y="208" font-size="9" fill="#94a3b8">Logged to compliance_check_log</text>
|
|
|
|
<!-- Arrow: Check → Order -->
|
|
<line x1="505" y1="150" x2="565" y2="150" stroke="#059669" stroke-width="1.5" marker-end="url(#arr-green)"/>
|
|
<text x="535" y="142" text-anchor="middle" font-size="9" fill="#059669" font-weight="600">Order</text>
|
|
|
|
<!-- ═══ CHECKOUT ═══ -->
|
|
<rect x="570" y="80" width="200" height="140" rx="10" fill="#fef3c7" stroke="#fcd34d" stroke-width="1.5"/>
|
|
<text x="670" y="100" text-anchor="middle" font-size="12" font-weight="700" fill="#92400e">Checkout & Payment</text>
|
|
<text x="585" y="120" font-size="10" fill="#374151">Batch or single service order</text>
|
|
<text x="585" y="140" font-size="9" fill="#475569">💳 Stripe (card, ACH, Klarna)</text>
|
|
<text x="585" y="153" font-size="9" fill="#475569">🅿️ PayPal</text>
|
|
<text x="585" y="166" font-size="9" fill="#475569">₿ SHKeeper (BTC, ETH, USDC)</text>
|
|
<text x="585" y="186" font-size="9" fill="#475569">→ PG compliance_orders</text>
|
|
<text x="585" y="199" font-size="9" fill="#475569">→ ERPNext Sales Order</text>
|
|
<text x="585" y="212" font-size="9" fill="#475569">→ Telegram notification</text>
|
|
|
|
<!-- Arrow: Checkout → Worker -->
|
|
<line x1="770" y1="150" x2="830" y2="150" stroke="#1e3a5f" stroke-width="1.5" marker-end="url(#arr-blue)"/>
|
|
<text x="800" y="142" text-anchor="middle" font-size="9" fill="#1e3a5f" font-weight="600">Dispatch</text>
|
|
|
|
<!-- ═══ WORKER PROCESSING ═══ -->
|
|
<rect x="835" y="70" width="260" height="160" rx="10" fill="#ede9fe" stroke="#c4b5fd" stroke-width="1.5"/>
|
|
<text x="965" y="90" text-anchor="middle" font-size="12" font-weight="700" fill="#5b21b6">Worker Processing</text>
|
|
<text x="850" y="110" font-size="10" fill="#374151">Python job server (port 8090)</text>
|
|
<text x="850" y="128" font-size="9" fill="#475569">1. Generate documents (DOCX→PDF)</text>
|
|
<text x="850" y="141" font-size="9" fill="#475569">2. Upload to MinIO</text>
|
|
<text x="850" y="154" font-size="9" fill="#475569">3. Send for eSign (portal link)</text>
|
|
<text x="850" y="167" font-size="9" fill="#475569">4. Client signs → resume pipeline</text>
|
|
<text x="850" y="180" font-size="9" fill="#475569">5. File with FCC/USAC (Playwright)</text>
|
|
<text x="850" y="193" font-size="9" fill="#475569">6. Capture confirmation</text>
|
|
<text x="850" y="206" font-size="9" fill="#475569">7. Email docs to client</text>
|
|
<text x="850" y="222" font-size="9" fill="#94a3b8">AUTO_FILING=false → admin review</text>
|
|
|
|
<!-- Arrow: Worker → Delivery -->
|
|
<line x1="1095" y1="150" x2="1145" y2="150" stroke="#1e3a5f" stroke-width="1.5" marker-end="url(#arr-blue)"/>
|
|
|
|
<!-- ═══ DELIVERY ═══ -->
|
|
<rect x="1150" y="80" width="220" height="140" rx="10" fill="#dbeafe" stroke="#93c5fd" stroke-width="1.5"/>
|
|
<text x="1260" y="100" text-anchor="middle" font-size="12" font-weight="700" fill="#1e3a5f">Delivery & Portal</text>
|
|
<text x="1165" y="120" font-size="9" fill="#475569">📄 Documents emailed to client</text>
|
|
<text x="1165" y="136" font-size="9" fill="#475569">📋 FCC confirmation number</text>
|
|
<text x="1165" y="152" font-size="9" fill="#475569">🌐 Portal order tracking</text>
|
|
<text x="1165" y="168" font-size="9" fill="#475569">📊 ERPNext Sales Invoice (paid)</text>
|
|
<text x="1165" y="184" font-size="9" fill="#475569">📅 Compliance calendar created</text>
|
|
<text x="1165" y="200" font-size="9" fill="#475569">🔄 Annual renewal auto-scheduled</text>
|
|
|
|
<!-- ═══ SERVICE CATALOG ═══ -->
|
|
<rect x="20" y="270" width="1350" height="30" rx="6" fill="#1e3a5f"/>
|
|
<text x="700" y="290" text-anchor="middle" font-size="12" font-weight="700" fill="#fff">Service Catalog — 20 Telecom Services + Corporate + Privacy + TCPA</text>
|
|
|
|
<!-- Service boxes row 1 -->
|
|
<rect x="20" y="310" width="155" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="97" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">FCC Carrier Reg</text>
|
|
<text x="97" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#059669">$1,299</text>
|
|
<text x="97" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Bundle: 6 services</text>
|
|
|
|
<rect x="185" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="242" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">499-A Filing</text>
|
|
<text x="242" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$499</text>
|
|
<text x="242" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Annual revenue</text>
|
|
|
|
<rect x="310" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="367" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">CPNI Cert</text>
|
|
<text x="367" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$199</text>
|
|
<text x="367" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Annual cert</text>
|
|
|
|
<rect x="435" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="492" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">RMD Filing</text>
|
|
<text x="492" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$249</text>
|
|
<text x="492" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">+$100 FCC fee</text>
|
|
|
|
<rect x="560" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="617" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">CALEA SSI</text>
|
|
<text x="617" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$799</text>
|
|
<text x="617" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">SSI plan</text>
|
|
|
|
<rect x="685" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="742" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">BDC Filing</text>
|
|
<text x="742" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$199-349</text>
|
|
<text x="742" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Voice / BB / both</text>
|
|
|
|
<rect x="810" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="867" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">STIR/SHAKEN</text>
|
|
<text x="867" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$499</text>
|
|
<text x="867" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Implementation</text>
|
|
|
|
<rect x="935" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="992" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">State PUC</text>
|
|
<text x="992" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$399</text>
|
|
<text x="992" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Per state + fees</text>
|
|
|
|
<rect x="1060" y="310" width="115" height="70" rx="6" fill="#fff" stroke="#e2e8f0"/>
|
|
<text x="1117" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#1e3a5f">NECA OCN</text>
|
|
<text x="1117" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#1e3a5f">$2,650</text>
|
|
<text x="1117" y="360" text-anchor="middle" font-size="8" fill="#94a3b8">Incl. NECA fees</text>
|
|
|
|
<rect x="1185" y="310" width="185" height="70" rx="6" fill="#dcfce7" stroke="#86efac"/>
|
|
<text x="1277" y="330" text-anchor="middle" font-size="10" font-weight="600" fill="#059669">Compliance Check</text>
|
|
<text x="1277" y="345" text-anchor="middle" font-size="16" font-weight="700" fill="#059669">FREE</text>
|
|
<text x="1277" y="360" text-anchor="middle" font-size="8" fill="#059669">Lead generation tool</text>
|
|
|
|
<!-- ═══ eSIGN FLOW ═══ -->
|
|
<rect x="20" y="410" width="660" height="130" rx="10" fill="#fef2f2" stroke="#fca5a5" stroke-width="1.5"/>
|
|
<text x="350" y="430" text-anchor="middle" font-size="12" font-weight="700" fill="#991b1b">eSign Portal — Officer Signature Required Before Filing</text>
|
|
|
|
<rect x="35" y="445" width="120" height="40" rx="6" fill="#fff" stroke="#fca5a5"/>
|
|
<text x="95" y="462" text-anchor="middle" font-size="9" fill="#374151">Handler generates</text>
|
|
<text x="95" y="474" text-anchor="middle" font-size="9" fill="#374151">document</text>
|
|
<line x1="155" y1="465" x2="175" y2="465" stroke="#991b1b" stroke-width="1" marker-end="url(#arr)"/>
|
|
|
|
<rect x="180" y="445" width="110" height="40" rx="6" fill="#fff" stroke="#fca5a5"/>
|
|
<text x="235" y="462" text-anchor="middle" font-size="9" fill="#374151">Upload PDF to</text>
|
|
<text x="235" y="474" text-anchor="middle" font-size="9" fill="#374151">MinIO</text>
|
|
<line x1="290" y1="465" x2="310" y2="465" stroke="#991b1b" stroke-width="1" marker-end="url(#arr)"/>
|
|
|
|
<rect x="315" y="445" width="110" height="40" rx="6" fill="#fff" stroke="#fca5a5"/>
|
|
<text x="370" y="462" text-anchor="middle" font-size="9" fill="#374151">Email JWT link</text>
|
|
<text x="370" y="474" text-anchor="middle" font-size="9" fill="#374151">to officer</text>
|
|
<line x1="425" y1="465" x2="445" y2="465" stroke="#991b1b" stroke-width="1" marker-end="url(#arr)"/>
|
|
|
|
<rect x="450" y="445" width="110" height="40" rx="6" fill="#fef2f2" stroke="#f87171"/>
|
|
<text x="505" y="462" text-anchor="middle" font-size="9" font-weight="600" fill="#991b1b">Client draws/</text>
|
|
<text x="505" y="474" text-anchor="middle" font-size="9" font-weight="600" fill="#991b1b">types signature</text>
|
|
<line x1="560" y1="465" x2="580" y2="465" stroke="#991b1b" stroke-width="1" marker-end="url(#arr)"/>
|
|
|
|
<rect x="585" y="445" width="80" height="40" rx="6" fill="#dcfce7" stroke="#86efac"/>
|
|
<text x="625" y="462" text-anchor="middle" font-size="9" font-weight="600" fill="#059669">Resume</text>
|
|
<text x="625" y="474" text-anchor="middle" font-size="9" font-weight="600" fill="#059669">pipeline</text>
|
|
|
|
<text x="350" y="525" text-anchor="middle" font-size="9" fill="#94a3b8">Applies to: RMD (perjury), CPNI, CALEA SSI, 499-A engagement letter, discontinuance</text>
|
|
|
|
<!-- ═══ EMAIL INFRASTRUCTURE ═══ -->
|
|
<rect x="700" y="410" width="670" height="130" rx="10" fill="#f0fdf4" stroke="#86efac" stroke-width="1.5"/>
|
|
<text x="1035" y="430" text-anchor="middle" font-size="12" font-weight="700" fill="#059669">Email Infrastructure — Direct SMTP</text>
|
|
|
|
<text x="715" y="452" font-size="9" fill="#374151" font-weight="600">Campaign sending:</text>
|
|
<text x="715" y="465" font-size="9" fill="#475569">Listmonk → Postfix (207.174.124.71) → DKIM signed → direct delivery</text>
|
|
<text x="715" y="478" font-size="9" fill="#475569">200/day warmup → 2,718 FCC deficiency subscribers on List 9</text>
|
|
|
|
<text x="715" y="498" font-size="9" fill="#374151" font-weight="600">Transactional email:</text>
|
|
<text x="715" y="511" font-size="9" fill="#475569">Carbonio (co.carrierone.com) — order confirmations, intake links, eSign links</text>
|
|
|
|
<text x="715" y="530" font-size="9" fill="#374151" font-weight="600">Auth: SPF (-all) + DKIM (2048-bit) + DMARC (quarantine) + PTR (FCrDNS)</text>
|
|
|
|
<!-- ═══ ANALYTICS ═══ -->
|
|
<rect x="20" y="560" width="450" height="110" rx="10" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/>
|
|
<text x="245" y="580" text-anchor="middle" font-size="12" font-weight="700" fill="#1e3a5f">Analytics & Tracking</text>
|
|
<text x="35" y="600" font-size="9" fill="#475569">📊 Umami (analytics.performancewest.net) — page views, events, funnels</text>
|
|
<text x="35" y="615" font-size="9" fill="#475569">🎯 Custom events: compliance-check-start/complete, order-cta-click, checkout-start</text>
|
|
<text x="35" y="630" font-size="9" fill="#475569">📈 Server-side: payment-complete event, compliance_check_log table</text>
|
|
<text x="35" y="645" font-size="9" fill="#475569">📧 Campaign tracking: opens (TrackView pixel), clicks (auto link wrapping)</text>
|
|
<text x="35" y="660" font-size="9" fill="#475569">🔄 UTM attribution: listmonk campaigns → compliance checker → checkout</text>
|
|
|
|
<!-- ═══ MONITORING ═══ -->
|
|
<rect x="490" y="560" width="420" height="110" rx="10" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/>
|
|
<text x="700" y="580" text-anchor="middle" font-size="12" font-weight="700" fill="#1e3a5f">Monitoring & Alerts</text>
|
|
<text x="505" y="600" font-size="9" fill="#475569">📡 Prometheus + Grafana — 10 service probes, container health</text>
|
|
<text x="505" y="615" font-size="9" fill="#475569">🔔 Alertmanager → Telegram (critical 1h, warning 6h repeat)</text>
|
|
<text x="505" y="630" font-size="9" fill="#475569">🤖 Playwright selector health checks (daily cron)</text>
|
|
<text x="505" y="645" font-size="9" fill="#475569">📨 Bounce watcher daemon → Listmonk webhook (blocklist after 2)</text>
|
|
<text x="505" y="660" font-size="9" fill="#475569">🔐 Nightly container security updates (base image patches)</text>
|
|
|
|
<!-- ═══ BACKUP ═══ -->
|
|
<rect x="930" y="560" width="440" height="110" rx="10" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/>
|
|
<text x="1150" y="580" text-anchor="middle" font-size="12" font-weight="700" fill="#1e3a5f">Backup & Data</text>
|
|
<text x="945" y="600" font-size="9" fill="#475569">🗄️ PostgreSQL: 4x/day dumps → MinIO → off-site rsync</text>
|
|
<text x="945" y="615" font-size="9" fill="#475569">🗄️ MariaDB (ERPNext): daily dump → off-site</text>
|
|
<text x="945" y="630" font-size="9" fill="#475569">📦 MinIO mirror: daily bucket sync</text>
|
|
<text x="945" y="645" font-size="9" fill="#475569">📝 Forgejo: daily repo dump</text>
|
|
<text x="945" y="660" font-size="9" fill="#475569">💾 Off-site: rsync to appbackups LXC (207.174.124.50)</text>
|
|
|
|
<!-- Footer -->
|
|
<text x="700" y="700" text-anchor="middle" font-size="9" fill="#94a3b8">Performance West Inc. — Cheyenne, WY — Updated 2026-05-07</text>
|
|
</svg>
|