Voice + email triage agent for legal practices — automates first-contact handling of inbound legal inquiries via a voice assistant (VAPI-based) and an outreach wizard for follow-up email sequences.
Lawstatics was a productization attempt that spun out of Semantic Law Search (Corpus). Where Corpus was the platform lawyers use internally, Lawstatics was the customer-facing layer: a triage agent that handles inbound calls and emails from prospective clients before they reach a lawyer.
Two components:
- Voice agent (
voice/) — Three iterations (V1.0.0, V1.0.1, V1.0.2). VAPI-based voice assistant that answers calls, captures intake details, and routes to the right practice area. Latest (V1.0.2) has a microservice architecture with separate apps, workers, and infra layers. - Outreach wizard (
outreach_wizard/) — Email outreach automation: lead enrichment, draft generation, SMTP sending, tracker. Used in the validation campaign described below.
Archived March 2026. Single-developer project. Validation campaign concluded the moat was insufficient; pivoted away.
- ✅ Voice agent V1.0.0, V1.0.1, V1.0.2 — full Next.js dashboards + Python backend + worker/infra split
- ✅ Outreach wizard V2.0.0 — config-driven email pipeline (FastAPI + SMTP)
- ✅ Lead enrichment + draft generation + tracker workflow
- ✅ Onboarding packet documentation
The outreach wizard was used to send 48 cold emails to law firms in March 2026. Result: 0 replies. The user concluded the product wasn't a moat business and pivoted resources to other ventures.
The agent code itself works. The market response said the commercial wedge didn't.
- The actual lead data, email drafts, and outreach tracker files (PII — kept private)
- VAPI API keys and SMTP credentials (use
.env.exampleif present, supply your own)
This is archived code; verify dependencies before running.
cd voice/"Lawstatics Voice V1.0.2"
# See README.md inside that dir for setup
# Architecture: voice/Lawstatics Voice V1.0.2/architecture_v1_0_2.htmlcd outreach_wizard
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -r requirements.txt
# Configure .env with SMTP credentials and CRM source
python app.pyThe voice layer uses VAPI for telephony + LLM orchestration rather than building a Twilio + Whisper + LLM pipeline from scratch. Trade-off: faster to ship, less control over latency. For triage (where calls are short and structured), VAPI was the right call.
The outreach wizard's prompts, sender personas, and follow-up cadences live in config files, not in code. Reason: the validation hypothesis was "the right pitch matters" — config-driven means you can A/B-test pitches without redeploying.
The wizard treats lead data as input only, never committed. The actual outreach campaign data (emails sent, replies received, tracker) is excluded from this repo by .gitignore. The agent code can run on any lead source.
lawstatics-triage/
├── voice/
│ ├── Lawstatics Voice V1.0.0/ First voice agent
│ ├── Lawstatics Voice V1.0.1/ Iteration
│ ├── Lawstatics Voice V1.0.2/ Final version (microservices)
│ └── LAWSTATICS_VOICE_ONBOARDING_PACKET.md
│
└── outreach_wizard/
├── app.py FastAPI entry point
├── config.py
├── db.py
├── email_sender.py SMTP integration
├── prompts/ Email draft templates
├── tests/
├── DEPLOYMENT.md
├── SMTP_PLAN_README.md
├── SYSTEM_ARCHITECTURE.html System diagrams
└── outreach-wizard-v2.0.0/ V2 codebase
Voice: VAPI (LLM voice orchestration), Next.js (dashboard), Python (workers), TypeScript Email: Python 3.11+, FastAPI, SMTP, SQLite Templates: HTML/Jinja for email drafts; YAML/JSON for prompt configs
MIT — see LICENSE.
Built by Jawad Bin Rashid. Sister project to Semantic Law Search.