Skip to content
View ChristianVerdin's full-sized avatar

Block or report ChristianVerdin

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ChristianVerdin/README.md

Christian Verdin

AI engineer and senior data scientist who ships agentic systems to production and keeps them running.

Eight years of production ML at Fortune 500 scale. By day I lead production AI for a Fortune 500 data science team: a multi-agent analytics platform on Databricks used by hundreds of business users, the evaluation and observability layer behind it, and the MCP surface that lets other AI clients call it. By night I ship the projects below: production-deployed, written outside work hours, built end to end by me, and run through real platform reviews (Apple App Store, Amazon Ring Appstore).

LinkedIn Email Live App Store


Projects

Project What it does Status Stack Code
312Deals Chicago food & drink deals: 83,000+ active deals across 12,000+ venues and 149 neighborhoods from 20,000+ tracked sources, ingested by an LLM extraction pipeline. Agent-first surface: REST API · 11-tool MCP server · 18 WebMCP tools · custom GPT · in-app chat Live Next.js · FastAPI · SQLite on Cloudflare R2 · MCP 312deals-webmcp · MIT (WebMCP Challenge entry)
CFB GameDay Board Every FBS game on one screen: kickoff-hour stadium weather, TV, and rivalry trophies, then live scores and a game sheet with drives, box score, and win probability. Version 1.1 adds a Today's Games widget and universal links. Stdlib Python, vanilla JS, zero dependencies, SwiftUI app for iPhone, iPad, and Mac Live · App Store Python · JavaScript · SwiftUI · Vercel cfb-gameday-board · MIT
Camera Recall Private Ring app for personal use: natural-language Q&A over my own camera event history. Deliberately metadata-only (no video, clip, or snapshot scopes). Passed Ring Appstore certification on first submission Certified · personal FastAPI · Postgres · Railway · 300+ tests private
World Cup bracket tracker Twice-daily auto-updating tracker for an AgentMail World Cup 2026 bracket. GitHub Actions + AgentMail API, no servers Complete Python · GitHub Actions worldcup_agentcup-tracker · MIT

Where to start reading

  • 312deals-webmcp: how a data platform exposes itself to browser-native agents. 17 tools on document.modelContext, a "Tonight" planner a person and their agent build together, write-with-consent tips routed to human review. Start at docs/04-WEBMCP-ARCHITECTURE.md.
  • cfb-gameday-board: the cleanest end-to-end example. Zero-dependency Python server and snapshot builder, vanilla JS client, SwiftUI app and WidgetKit widget, scripted App Store Connect release pipeline, self-healing GitHub Action that rebuilds the slate seven times a week. Start at docs/ARCHITECTURE.md, then ios/APP_STORE.md.

312Deals: Chicago Food & Drink Deals

LLM extraction pipeline + agent-first distribution for local commerce

A production platform aggregating 83,000+ active deals across 12,000+ venues and 149 neighborhoods across Chicagoland, read from 20,000+ tracked sources. The pipeline runs venue web pages, newsletters, and submissions through LLM extraction with schema validation, content hashing, adaptive scheduling with exponential backoff, and automated 0 to 100 quality scoring, at under a cent of Claude spend per extracted deal. Distribution is agent-first: an 18-endpoint REST API, an 11-tool MCP server, 18 in-page WebMCP tools (entered in OpenAI's WebMCP Challenge, Sept 2026), a custom GPT, in-app chat, and a machine-readable llms.txt scoring 96/100 on Mintlify's Agent Score. Programmatic SEO (100+ landing pages) took organic search from an average position of about 24 at launch to page one by June. Since the February 2026 launch: 39,000+ visitors, 9,800+ in the last 28 days, with no paid traffic. Search Console shows 26,000+ clicks and 2.3M+ impressions at an average position of 7.0. Traffic figures run through October 27, 2026.

Live: 312deals.com · Public code: 312deals-webmcp

312Deals homepage, October 28, 2026: search with day and neighborhood filters, Active Now, AI prompt chips, and 12,000+ venues, 83,000+ deals, 149 neighborhoods

312Deals map, October 28, 2026: deal pins across Chicago and the suburbs, 33 active now, with the deal list beside it 312Deals AI Guide, October 28, 2026: asked what happy hours are in Wicker Park tonight, it answers with four venues, their hours and their prices

More screenshots

312Deals Halloween in Chicago 2026 guide: three bar crawls with times, prices and organizer links

312Deals Plausible traffic, March 1 to September 17, 2026

Plausible, March 1 to September 17, 2026. Older than the figures above.

312Deals Google Search Console, March 1 to mid-September 2026

Google Search Console, March 1 to mid-September 2026, captured September 17. Older than the figures above.

What's interesting technically

  • Agent surface as a first-class product: the same tool definitions serve the MCP server, the WebMCP registration, and the custom GPT, so a person, a browser agent, and a desktop agent get identical capabilities.
  • Extraction economics: content hashing and adaptive scheduling turned an LLM-per-page pipeline into something that costs under a cent of Claude spend per extracted deal.
  • Eval before edit: the extraction prompt has a hand-labeled test set and a held-out set, and changes ship only when they hold on pages the prompt has never seen. That's how a cheaper model got in without a quality loss.
  • Data as a distributed artifact: SQLite with WAL and FTS5, distributed through Cloudflare R2 with If-Match ETag guards, so the read path never blocks on the write path.
  • Quality loop: automated 0 to 100 scoring plus a user-driven review queue, and public venue payloads are sanitized through an explicit allow-list.

Built with: Next.js TypeScript FastAPI Python SQLite Cloudflare R2 MCP / FastMCP WebMCP Railway Vercel Plausible


CFB GameDay Board: College Football Slate on Web and iOS

One screen for every FBS Saturday | Live on the web and the App Store for iPhone, iPad, and Mac | Public, MIT

Venue, kickoff-hour stadium weather, and TV and streaming for every FBS game, then live score, clock, and down and distance once games kick, refreshed every 30 seconds while games run. Tap any live or final game for a game sheet with the scoring summary, box score, leaders, drives, and ESPN win probability. Named rivalries carry their trophy on the card, and a Rivalry filter pulls them together. Built with a deliberately small footprint: a standard-library Python server and snapshot builder, a vanilla JavaScript client with no framework and no build step, and a native SwiftUI app. Built, deployed to the web, and submitted to App Review in a single day. Free, no ads, no account, and Apple's privacy label reads Data Not Collected.

Version 1.1 (on the App Store since October 22, 2026) adds a Today's Games widget for the Home Screen and Lock Screen in small, medium, and large sizes, set to all games, the Top 25, or rivalry games. Universal links open cfbgameday.app links straight in the app. Long-press the icon for quick actions, including Rivalry Games, and six in-app events on the App Store cover rivalry Saturdays, Rivalry Week, and the postseason. The same app runs on iPhone, iPad, and Mac, where the window resizes.

Live: cfbgameday.app · App Store · Source: cfb-gameday-board

CFB GameDay Board, Week 9 Saturday on desktop: a rivalry desk with five trophy games, including Notre Dame vs Navy and Florida vs Georgia, above the weather and travel desk

CFB GameDay Board's large Today's Games widget on the iPhone Home Screen: Saturday's Top 25 games with weather, kickoff time and network

What's interesting technically

  • Weather at the kick hour: Open-Meteo forecast for each venue city, with rain, wind, heat, and altitude flags and an impact read per game.
  • A refresh that heals itself: a GitHub Action rebuilds the slate seven times a week, each run scheduled hours early because GitHub starts scheduled runs late. A run that loses kickoff forecasts retries and heals itself, and it fails loudly only when it can't.
  • One snapshot, every surface: the site, the app, and the WidgetKit widget all read the same weekly snapshot and live feed, and unit tests render the widget against a frozen week of real games.
  • Release pipeline as code: archive, export, validate, upload, attach, and submit through the App Store Connect API from one script, and the same pattern is reusable for the next iOS app.

Built with: Python (stdlib) JavaScript SwiftUI WidgetKit WKWebView Vercel GitHub Actions Open-Meteo


Camera Recall: Natural-Language Q&A over Smart-Camera Events

Certified on the Amazon Ring Appstore | metadata-only by design

A private Ring app I built for personal use: it answers questions like "did the dog walker come today, and how long did they stay?" over my own camera event history. The architecture deliberately holds no live-video, clip, or snapshot scopes, so it never touches footage. Passed Ring Appstore certification on the first submission (Aug 2026) and a second re-validation round (Sept 2026), with a published architecture page, a reviewer demo environment, and a versioned privacy-and-legal questionnaire. Production answers are deterministic today. An LLM agent layer is staged behind re-certification, because certified answers state exactly what the system does.

Stack: FastAPI PostgreSQL Railway 300+ tests GitHub Actions. Private repository.


World Cup bracket tracker

Scheduled agent automation with no servers

A twice-daily auto-updating tracker for an AgentMail World Cup 2026 bracket: a GitHub Action pulls results through the AgentMail API, recomputes standings, and commits the refreshed page. Small on purpose: a compact, readable example of cron-style agent automation that runs entirely on GitHub infrastructure.

Source: worldcup_agentcup-tracker · Python GitHub Actions AgentMail

Earlier projects: LakeshoreIQ, Illinois property search and neighborhood data built on public sources.


How I build

  • Production first. Every flagship project has real users or a real platform review behind it. A demo is the starting line.
  • Measure before optimizing. I build the tracing and evaluation layer first and let the evidence pick the re-architecture.
  • Safety as architecture. Metadata-only scopes, least-privilege grants, copy-on-write test branches, and rollback paths are design inputs, not afterthoughts.
  • Agent-first surfaces. Anything I build for people also gets an MCP or WebMCP surface so other agents can use it.
  • Documentation that survives handoff. Every repo carries a CLAUDE.md/CONTEXT.md with verified state, constraints, and gotchas, written for the next engineer and for AI coding agents alike.

Technical skills

Agentic AI & LLM systems: multi-agent supervisor/router architectures, parallel fan-out and answer composition, text-to-SQL and retrieval-grounded agents, MCP server development (cloud-deployed and local stdio), WebMCP, tool design for long-running agent operations, LLM document intelligence, prompt engineering and agent steering · Claude · GPT-4/5 · Gemini · Amazon Bedrock · Mosaic AI · LangChain/LangGraph

LLMOps, observability & evaluation: MLflow 3 tracing and evaluation, Langfuse, trace ETL and span/session/token analysis, ground-truth success metrics, LLM-as-judge, source-attribution checks, token cost and latency optimization, human-feedback instrumentation

Machine learning & statistics: LightGBM, XGBoost, CatBoost, NLP and sentiment classification, time-series forecasting, A/B testing and experimental design, causal inference, survival analysis, model calibration

Data & platform: Databricks (Apps, Genie, Mosaic AI agents, Unity Catalog, Lakebase, Delta Lake, serverless jobs, Asset Bundles), Spark/PySpark, PostgreSQL, Supabase, Redis, SQLite/FTS5, streaming and medallion pipelines

Engineering & release: Python, TypeScript/JavaScript, SQL, R, Swift/SwiftUI · React, Node/Express, FastAPI, Next.js · AWS (Bedrock, SageMaker, S3, Lambda), Cloudflare (DNS, R2), Vercel, Railway, Docker, GitHub Actions · service-principal and OAuth auth, least-privilege grant design, copy-on-write DB branching, deploy-source verification, feature-flag rollback · App Store and Ring Appstore certification


Let's connect

Always open to collaborating and/or connecting. Chicago-based, remote or relocation welcome.

LinkedIn · christiandverdin@gmail.com · Medium

Popular repositories Loading

  1. worldcup_agentcup-tracker worldcup_agentcup-tracker Public

    Twice-daily auto-updating tracker for my AgentMail World Cup 2026 bracket — GitHub Actions + AgentMail API, no servers.

    Python 1

  2. ChristianVerdin ChristianVerdin Public

    Personal portfolio

  3. botdirectory.ai botdirectory.ai Public

    Forked from elie222/botdirectory.ai

    Open-source directory of agent-bot prompts for Grok Bot, Rakazo, and any agent — botdirectory.ai

    Astro

  4. 312deals-webmcp 312deals-webmcp Public

    312deals.com source for the OpenAI WebMCP Challenge — a live Chicago deals site where you and your agent plan tonight together (17 WebMCP tools on document.modelContext)

    TypeScript

  5. cfb-gameday-board cfb-gameday-board Public

    CFB GameDay Board: college football slate with venue, kickoff weather, TV, posted lines, and live cover/total. Web at cfbgameday.app, App Store app for iPhone, iPad and Mac. Stdlib Python + vanilla…

    Python

  6. App-Store-Connect-CLI App-Store-Connect-CLI Public

    Forked from rorkai/App-Store-Connect-CLI

    Fast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more

    Go