Personal Project
Steveintel · Client Intelligence Engine
AI · Python · Claude API · 15 Modules
Steveintel: Autonomous Client Intelligence Engine
A company name is the only input. Fifteen parallel data modules, Claude analysis, and four output formats later, you have a brief ready to walk into a meeting with.
Personal Project · Live in Production
3-4 min
Report Generation
From company name to full brief
15
Intelligence Modules
Running in parallel via asyncio
4
Output Formats
Web · PDF · Word · PowerPoint
~$0.54
Cost Per Run
Marginal cost per full brief
At $0.54 per run in API costs, a brief that replaces 3-4 hours of analyst research has clear margin at any service price above $50. The cost model supports both a freelance service (charging per brief) and a self-serve SaaS product (charging monthly per seat).
The Problem
The Problem
Pre-pitch research is slow, scattered, and inconsistent. Getting a clear picture of a company before a client meeting or agency pitch means hours across LinkedIn, Google News, SEMrush, ad libraries, and review sites: work that takes a senior analyst half a day and varies in quality every time.
The question agencies and consultants actually need answered fast: “who is this company, where are they weak, and what is my angle?”, had no automated, structured answer. I built one.
What It Does
What It Does
One company name in. A structured, sourced, meeting-ready brief out. The pipeline handles everything in between.
Resolve
The company name is resolved to a domain via Serper. A run is created in Supabase and the pipeline starts immediately.
Collect
15 modules run in parallel via asyncio.gather. Apify crawls LinkedIn company pages, job listings, reviews, websites, and blogs. Serper pulls news, competitor signals, financial mentions, and partnership signals. DataForSEO returns SEO traffic, keyword rankings, and on-page audit scores. Wikipedia and Wikidata enrich company fundamentals. Each module degrades gracefully. One failure never stops the run.
Analyze
Claude Sonnet 4.6 analyzes each of the 15 sections independently using structured prompts with strict JSON output schemas. Claude Haiku 4.5 scores news article sentiment in a batched call. A two-pass synthesis engine then receives all 15 completed analyses and generates opportunity gaps and a strategic pitch angle, reasoning across the whole brief, not just one section.
Deliver
Four outputs are generated and uploaded to Supabase Storage: a live 15-section web report, a branded PDF, an editable Word document, and a 15-slide PowerPoint deck. All four are delivered simultaneously via the React web app and Telegram. Shareable public links are generated per brief.
The 15 Intelligence Modules
The 15 Intelligence Modules
Thirteen data-driven modules feed two Claude synthesis modules. Each has a defined source and a single responsibility.
System Architecture
System Architecture
Input
Company name or domain
A single string is all the pipeline needs to begin.
Orchestrator
asyncio.gather: 15 modules in parallel
One coordinator fans out to every module at once and waits for all of them, with graceful degradation per module.
Data Collection Layer
Apify
LinkedIn, jobs, reviews, website, blog
Serper
News, search, knowledge graph, financial signals
DataForSEO
SEO, traffic, keywords, OnPage audit
Wikipedia API
Founding data, description enrichment
Claude Analysis Layer
Sonnet 4.6 per section · Haiku 4.5 sentiment
Each section analyzed independently against a strict JSON output schema, with batched Haiku sentiment scoring for news.
Two-Pass Synthesis
Gaps and pitch angle receive all 15 analyses
The synthesis pass reasons across every completed section at once, not in isolation, to surface opportunity gaps and a strategic pitch angle.
Brief Assembly
Supabase: runs · sections · briefs · companies
Every run, section, brief, and company record is persisted to Supabase for history and shareable links.
Delivery
Web app · PDF · DOCX · PPTX · Telegram
All four output formats are generated and delivered simultaneously across the web app and Telegram.
Fifteen modules. One orchestrator. Web, PDF, Word, and PowerPoint from a single company name.
Two Ways to Run It
Two Ways to Run It
Web App
Input bar on the dashboard kicks off a run
Real-time 15-module progress as the pipeline runs
Tabbed brief viewer with per-section confidence scores
One-click PDF, DOCX, and PPTX export
Shareable link per brief
Telegram Bot
/analyze triggers the full pipeline
Live progress updates every 60 seconds
/section returns any of the 15 sections on demand
/export sends the PDF directly in chat
/history lists past runs
Screenshots
See It Running
Two views of the web app: the dashboard that lists every intelligence run, and the brief viewer that opens all 15 sections with their confidence scores.
Screenshot
Dashboard: Recent Runs

Dashboard: Recent Runs
The dashboard lists every intelligence run by company, with the overall score and current status at a glance.
Screenshot
Brief Viewer: 15 Sections

Brief Viewer: 15 Sections
The tabbed brief viewer opens all 15 sections with per-section confidence scores and the synthesized opportunity gaps.
Screenshots show mock data generated for demonstration purposes.
Technical Depth
Technical Depth
Four engineering decisions that shaped the system.
Two-Pass Synthesis Engine
The two highest-value sections, opportunity gaps and strategic pitch angle, received no input in the original single-pass design because asyncio.gather fired all 15 modules simultaneously: the synthesis modules ran before any data module had returned. The fix splits the run into two passes: the 13 data modules are analyzed first, and their completed outputs are injected into the two synthesis modules in a second pass that reasons across the whole brief. Confidence on the gaps section jumped from 20.6 to 97.0.
UAE Location for DataForSEO
Switching the DataForSEO location_code from US (2840) to UAE (2784) returned 1,132,595 monthly organic ETV versus 45,643 on the US default, roughly 25x richer traffic data for MENA-region clients. The location is now configurable per run via settings rather than hard-coded, so the same pipeline serves both regional and global targets.
Custom Tech Stack Detector
Rather than pay BuiltWith's $100/month minimum, the tech stack module is a custom Apify playwright actor that scans script tags, third-party domains, inline HTML hints, meta tags, and HTTP headers to fingerprint a site. It detects Next.js, Google Tag Manager, GA4, the Meta Pixel, Cloudflare, and more at zero marginal cost beyond the Apify compute the pipeline already runs.
Parallel Async Collection
asyncio.gather runs all 15 collectors simultaneously. Run sequentially, a single brief would take well over 60 seconds just to gather data. In parallel, the entire run completes in 3 to 4 minutes, including Claude analysis, PDF, Word, and PowerPoint generation, and Supabase Storage uploads. Each collector degrades gracefully, so one slow or failing source never blocks the rest.
How It Is Built
How It Is Built
Analysis
Claude Sonnet 4.6 + Claude Haiku 4.5
Backend
Python 3.14, FastAPI, Celery, Redis
Data Collection
Apify, Serper, DataForSEO, Wikipedia API
Database
Supabase PostgreSQL + Storage + Realtime
Frontend
React 18, Vite, Tailwind CSS, Recharts
Bot
python-telegram-bot v22.8
Report Generation
python-pptx, python-docx, WeasyPrint
Infrastructure
Hetzner VPS, nginx, Let's Encrypt TLS, pm2
Hosting
Vercel (frontend), Hetzner (backend)
What I Built
What I Built
Every part of this system: architecture, code, prompting, deployment, and iteration, was built by me using Claude Code as the development environment.
Diagnosed and fixed a critical two-pass dataflow bug where the highest-value section (opportunity gaps) scored 20.6/100 because it received no input from other modules — post-fix confidence reached 97.0/100
Replaced a $100/month third-party API dependency (BuiltWith) with a custom zero-cost technology detector built on existing Apify infrastructure
Configured DataForSEO for UAE location rather than US default, returning 25x richer organic traffic data for MENA-region clients, a non-obvious configuration decision with significant brief quality impact
Designed the full system architecture across 15 parallel async collectors, Claude analysis layer, and four delivery formats
Built and deployed three pm2 services on Hetzner with nginx reverse proxy and Let's Encrypt TLS, running alongside an existing production service without downtime
Designed the two-pass Claude synthesis engine so opportunity gaps and pitch angle reason across all 15 completed section analyses simultaneously rather than in isolation
Built the full React web app with real-time run status via Supabase Realtime, 15-section tabbed brief viewer, confidence score badges, and one-click exports
Wired the Telegram bot with six commands including live progress updates every 60 seconds during a run and PDF delivery directly in chat
Built the complete delivery layer: WeasyPrint PDF, python-docx Word, python-pptx 15-slide PowerPoint, all auto-generated and uploaded to Supabase Storage per run
15 data sources. 15 parallel modules. One brief. Zero manual research. The full output is ready before a manual analyst finishes their first tab: web report, PDF, Word doc, and PowerPoint.
Live. No password required.