Building an Executive Intelligence System: Multi-Perspective Reporting Architecture for Portfolio Management
Over the past development session, we built a comprehensive executive reporting system that synthesizes operational, technical, financial, and strategic intelligence across a four-entity portfolio (JADA, QueenofSanDiego, QuickDumpNow, DangerousCentaur) plus three ancillary business units. This post details the architecture, design decisions, and infrastructure choices that enable real-time stakeholder visibility into portfolio health.
The Problem: Fragmented Visibility Across Distributed Assets
Each entity in our portfolio operates independently—different tech stacks, billing models, customer acquisition channels, and operational processes. Leadership needed a unified view across all domains simultaneously, but from different lenses: the CEO needs asset inventory and revenue funnels; the CTO needs security hardening and cost optimization; the CFO needs burn-rate modeling and capital allocation rules. Building five separate reports manually would be unsustainable.
Architecture: Python-Driven SES Distribution Pipeline
We implemented a two-phase reporting system:
- Phase 1 — Report Generation: Created
/Users/cb/Documents/repos/tools/send_exec_reports.pyandsend_exec_reports_2.pyas standalone Python scripts that aggregate data from project handoff files, infrastructure documentation, and manual audits into structured narrative reports. - Phase 2 — Delivery: Leveraged AWS SES to distribute reports via authenticated SMTP endpoints, with sender verification against the
admin@queenofsandiego.comdomain (already SES-verified).
The reporting pipeline reads from repos.env for SES credentials (SMTP host, port, sender address) and uses Python's smtplib to send HTML-formatted emails. Each report is tailored to its audience:
- [CEO Report] — Asset inventory across all 4 primary entities, 8 identified shortfalls (empty sales pipeline, zero OTA listings, missing billing models for DangerousCentaur), 9 critical KPIs to track, and a prioritized 30-day action plan.
- [CTO Report] — Stack-by-stack security audit, 6 hardening gaps (hardcoded Stripe keys in repos, plaintext credentials, unauthenticated GAS endpoints, missing WAF), AWS cost baseline (~$50–84/month), and 10 engineering prioritization items.
- [Accounting/Controller Report] — Revenue recognition gaps, complete chart-of-accounts blueprint, category-by-category expense audit, and a 4-milestone roadmap to profitability through Q1 2027.
- [CMO Report] — Multi-channel visibility matrix, case for immediate 3,676-person email blast deployment, OTA sequencing roadmap (Sailo → GetMyBoat → Viator/GYG), and 30/60/90-day marketing milestones.
- [CFO Report] — Burn-rate modeling (~$7–9K/month), capital deployment framework (zero-cost initiatives → revenue-producing features), break-even targets (6 charters/month), and three non-negotiable financial guardrails.
Data Sources and Integration Points
The reporting system pulls from multiple authoritative sources:
/Users/cb/Documents/repos/agent_handoffs/projects/— Project-level strategic notes, bottlenecks, and resource allocation decisions./Users/cb/Documents/repos/sites/queenofsandiego.com/— Lambda function configurations (IAM roles, environment variables) and frontend asset inventories.repos.env— SES sender verification, SMTP credentials, domain configurations.- Manual domain audits — Hardcoded keys found during code review, infrastructure costs calculated from CloudFront distributions and Lambda invocation estimates.
Reports are sent as HTML-formatted emails via SES, with BCC to admin@queenofsandiego.com for audit trails. The system is designed for repeatability—running the script again with updated project handoffs will regenerate reports with fresh data.
Additional Domains and Stakeholder Coverage
Beyond the five primary reports, we identified three additional business units that warrant standalone reporting:
- 3028 51st St Rental Property — Real estate asset with distinct income stream, maintenance costs, and tenant management processes. Requires occupancy rate tracking, maintenance ROI, and capital improvement planning.
- Expert Yacht Delivery — Specialized logistics service with unique fulfillment costs, crew scheduling complexity, and seasonal demand patterns. Needs delivery margin analysis and crew utilization metrics.
- DangerousCentaur Client Portfolio (Billing Audit) — Identified as a revenue leakage risk with no formalized billing model. Requires invoice template standardization, payment terms matrix, and collections KPI tracking.
Each of these domains maps to a C-suite function (real estate CFO, VP Operations, VP Finance respectively), and their reporting cadence is quarterly to align with broader portfolio reviews.
Key Technical Decisions
Why SES over other email services? We already have verified sender domains in SES and the infrastructure cost is negligible (~$0.10 per 1,000 emails). Custom email templates are rendered in Python (using f-strings with HTML-safe escaping) before transmission. This avoids external dependencies and keeps credential management within our existing repos.env infrastructure.
Why separate reports vs. a dashboard? Reports are immutable artifacts that create a paper trail for decision-making. A dashboard would require real-time data syncing, which isn't feasible given our fragmented data sources (project handoffs, Lambda logs, S3 inventories). Monthly or quarterly report cycles are sufficient for strategic planning at this scale.
Why Python scripts vs. Lambda functions? These reports require substantial manual curation (reading project handoff notes, cross-referencing infrastructure costs). Automating them end-to-end would produce lower-signal noise. The scripts are run on-demand by leadership or on a scheduled cron, giving us the flexibility to inject new insights before distribution.
Infrastructure and Deployment
The reporting system has minimal infrastructure footprint:
- Execution Environment: Local development machine (reports can be generated and sent in under 30 seconds).
- SES Configuration: Verified sender domain
admin@queenofsandiego.com(already set up for transactional emails from Lambda functions). - SMTP Endpoint: AWS SES SMTP in us-west-2 (configurable via
repos.env). - Recipient Delivery: Primary recipient
c.b.ladd@gmail.com, with BCC audit copy toadmin@queenofsandiego.com.
No Lambda deployments, S3 buckets, or CloudFront distributions were created for this feature. Reports are generated on-demand and delivered via standard email transport.
What's Next: Instrumenting Data Collection
The current reporting system is semi-manual. To increase reporting velocity and reduce curation overhead, the next phases are:
- Automated KPI Collection: Add Lambda hooks to track key metrics (charter bookings, guest waivers signed, revenue per entity) and write to DynamoDB for aggregation.
- Centralized Logging: