Selected AI and data modeling projects demonstrating end-to-end system design, implementation, and evaluation.
Multi-Agent LLM Systems
ouroAI: Multi-Agent CRM Automation Platform
Problem
Real-estate and sales teams need intelligent automation that can:
- Handle SMS, email, WhatsApp, and AI voice outreach
- Maintain context across channels
- Know when to escalate to humans
- Sync with CRM systems
Architecture
A Gemini orchestrator routes work to four specialized tool-calling agents:
searches CRM
sends messages
updates CRM
analytics
Retrieval: Hybrid Gemini embeddings + BM25 over CRM contacts and per-account knowledge bases synced to voice agents.
Evaluation
Replaced a hand-written 3-call prompt chain with a DSPy ChainOfThought pipeline:
- Three decisions: channel choice, escalation, reply generation
- Training: BootstrapFewShot on 89 labeled conversations
- Result: 88.9% accuracy on held-out validation set
Why this matters: Measurable, repeatable quality instead of prompt guesswork. The DSPy-optimized pipeline produces consistent results that can be tracked, debugged, and improved—unlike manually tuned prompts that drift over time.
Results and Engineering
- Scale: 238 commits, 28+ pull requests
- Stack: React, TypeScript, FastAPI, Supabase (Postgres + pgvector, Auth, RLS multi-tenancy), Docker, Railway
- Testing: 50+ pytest files, Vitest, Playwright E2E tests
AI Voice Call Scheduler with ElevenLabs & Twilio
Problem
Businesses need intelligent voice agents that can handle inbound and outbound calls, schedule appointments, handle voicemails, and sync with CRMs—without human intervention for routine calls.
Architecture
Inbound and outbound voice agents on ElevenLabs Conversational AI communicate over Twilio phone numbers. When the agent needs to perform actions—schedule an appointment, book into a CRM, or handle a voicemail—it invokes server tools that trigger signature-verified webhooks to a FastAPI backend.
Twilio
Conversational AI
FastAPI
ElevenLabs secret
Why signature verification matters: Server tools receive webhook requests from the public internet. Without cryptographic verification, a malicious actor could forge requests to create appointments or modify CRM data. ElevenLabs signs each webhook payload with a secret; the FastAPI handler verifies the signature before processing, ensuring only authentic agent-invoked actions are executed.
Post-Call Analysis
After each call completes, Gemini processes the full transcript to extract:
- Summary: Key points discussed
- Sentiment: Caller tone and satisfaction indicators
- Action items: Follow-up tasks identified during the conversation
- Reschedule intent: Whether the caller requested or implied a need to reschedule
This structured analysis enables automated follow-up workflows, quality monitoring, and CRM enrichment without manual review of every call.
Integration with ouroAI
This voice agent architecture integrates with ouroAI's multi-channel automation platform. Per-account knowledge bases are synced to the voice agents so they can reference account-specific context during calls. The ouroAI orchestrator's outreach agent can initiate outbound voice calls as one of its channels, and escalates to humans when the voice agent encounters scenarios requiring manual intervention.
Related Product
RealEstateISA (realestateisa.ai) is a production application built on ouroAI that includes this voice agent architecture, a Gemini-powered sales call grader, and integrations with Follow Up Boss and GoHighLevel CRM systems.
Results and Engineering
- Stack: ElevenLabs Conversational AI (server tools), Twilio (phone numbers), FastAPI (webhook endpoints), Gemini (transcript analysis), cryptographic signature verification
- CRM Integration: Follow Up Boss
CICA: Construction & Insurance Document AI
Problem: Commercial insurance underwriting and construction bidding require extracting structured data from complex documents (bid forms, specifications, proposals) and identifying financial, schedule, scope, and legal discrepancies.
What I Built: Structured extraction pipeline using OpenAI/Gemini with Pydantic/JSON-schema validation, LlamaIndex RAG, Azure Document Intelligence, and Reducto parsing. Built an LLM-judged evaluation harness to measure extraction accuracy and discrepancy detection across document types.
Stack: OpenAI, Gemini, Pydantic, LlamaIndex, Azure Document Intelligence, Reducto, LLM-based eval framework.
BrickNova AI: Real Estate Investment Assistant
Problem: Real estate investors need to quickly compare Miami (Brickell) condo units, understand ROI projections, and calculate total cost-to-own across multiple buildings.
What I Built: Conversational assistant with a Google ADK + Gemini orchestrator that routes queries to specialist agents using tool calling for unit search, building comparison, ROI modeling, and cost-to-own calculations.
Stack: Google ADK, Gemini 2.5 Flash, Next.js 15, TypeScript, FastAPI, Supabase, Railway.
AI × Transportation
LLM-Driven Four-Step Travel Demand Model
Problem: Traditional travel demand models require extensive calibration of hundreds of coefficients. Can LLMs replace estimated parameters with reasoning-based decision-making?
What I Built: A four-step travel demand model where trip generation, distribution, and mode choice are answered by an LLM decision engine instead of calibrated coefficients. Validated on Sioux Falls against ACS, LODES, NHTS, and traffic counts; compared with a conventional gravity/MNL model (67 coefficients) under transit, parking, and capacity policy scenarios. Engineered reproducible experiments with hash-keyed SQLite request cache, cost guard with dry-run, placebo-controlled prompt-framing tests, temperature scaling, and calibration ladder. Abstract submitted to Modeling Mobility (MoMo) 2027.
Stack: Python, LLM API (temperature scaling, structured outputs), SQLite, pytest (26 test files, 171 commits).
tdm-platform: Closed-Loop Travel Demand Model on Serverless Compute
Problem: Activity-based travel models are compute-intensive, region-specific, and expensive to run. How can we make them portable and affordable?
What I Built: Region-agnostic platform combining ActivitySim and AequilibraE (Frank-Wolfe user-equilibrium assignment with skim feedback) that builds a model region from open OSM/TIGER data. Demo region: 168 TAZs, 73k links. Runs on Modal serverless compute for approximately $0.07 per scenario.
Stack: Python, ActivitySim, AequilibraE, OSM/TIGER data processing, Modal serverless.
travel-mcp-server: MCP Server for Travel Model Outputs
Problem: LLM applications need structured access to travel model outputs (trip tables, skims, network data) stored in domain-specific formats like Parquet and OMX.
What I Built: Model Context Protocol (MCP) server with 8 tools that let LLM clients query travel model outputs using DuckDB SQL, pull trip statistics and skims, and generate charts. Packaged in Docker for easy deployment.
Stack: Python, MCP, DuckDB, Parquet, OMX, Docker.
GTFS Transit Feed Comparison Tool
Problem: Transit agencies need to identify changes between GTFS feed versions (routes, stops, trips, service patterns) for model updates and service planning.
What I Built: Automated comparison tool that ingests two GTFS feeds and produces detailed change reports.
Stack: Python, GTFS parsing.
Other AI Applications
Answr: Conversational Surveys & Interviews
Problem: Traditional surveys have low completion rates and miss nuance. How can LLMs conduct adaptive interviews that probe deeper based on responses?
What I Built: AI survey and interview applications for employee satisfaction, customer feedback, and transit-rider research. Built on OpenAI Assistants API and LlamaIndex workflows with LLM-driven follow-up probing, analysis dashboards, and WebRTC voice versions. Delivered a multilingual (English/Spanish) HR project management app within weeks of the Assistants API's November 2023 launch.
Stack: OpenAI Assistants API, LlamaIndex, WebRTC, multilingual support.