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:

Architecture

A Gemini orchestrator routes work to four specialized tool-calling agents:

Gemini Orchestrator
Query Agent
searches CRM
Outreach Agent
sends messages
Sync Agent
updates CRM
Reporting Agent
analytics
↓ integrations ↓
SMS/WhatsApp (Twilio)
Email (Resend)
Voice (ElevenLabs)
→ Human Escalation

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:

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

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.

Voice Agent Call Flow
Phone Call
Twilio
→
ElevenLabs Agent
Conversational AI
↓ server tool invocation
Webhook Endpoint
FastAPI
→
Signature Verification
ElevenLabs secret
↓ verified request
Scheduling Logic
CRM Booking
Voicemail Handler
↓ on voicemail
Auto-Reschedule

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:

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

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.

View on GitHub

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.