Data applications, live in production.

Ask a weather or football warehouse a question in plain English, explore interactive visualizations, or query the REST API — each one running now, on data refreshed by automated pipelines.

I design, build and operate all of it end to end: the infrastructure, the two PostgreSQL warehouses, the pipelines that feed them, the AI agents and analytics on top, and four browser games.

  • 7 public web apps
  • 4 browser games
  • 2 text-to-SQL agents
  • 1 self-managed EC2 host

Portfolio

Weather

Hourly observations and forecasts from NOAA and Apple WeatherKit, loaded by automated AWS pipelines into PostgreSQL on EC2.

Automated Data Pipeline — WeatherKit

Apple WeatherKit forecasts loaded every four hours into a self-managed PostgreSQL database on AWS EC2, orchestrated by Lambda and EventBridge.

  • AWS Lambda
  • EventBridge
  • PostgreSQL
  • REST API

Automated Data Pipeline — NOAA

Hourly observations for 112 US airport stations, refreshed nightly from NOAA's GHCNh Parquet files into self-managed PostgreSQL on AWS EC2 by Lambda and EventBridge.

  • NOAA GHCNh
  • AWS Lambda
  • PyArrow
  • PostgreSQL

Weather REST API

Historical observations and forecasts from the two PostgreSQL databases behind the visualizations, served as JSON with interactive documentation and an OpenAPI specification.

  • Flask
  • REST
  • JSON
  • PostgreSQL

Football play-by-play

Every FBS college football and NFL play since 2014, sourced from ESPN: one row per play, with every player identified by a stable ID.

Play-by-Play Explorer

Filter every play by league, side of the ball, team, player and outcome. A Dash application on a DuckDB snapshot, with drill-down and CSV or Excel export.

  • Dash
  • DuckDB
  • Plotly
  • AG Grid

Other builds

Smaller applications, each built on a different stack.

  • PromptPace

    A typing-rhythm coach for writing AI prompts that measures burst speed, thinking pauses, corrections and spelling from the timing of every keystroke.

    FastAPI · PostgreSQL · JavaScript Live app Docs

  • Recipe Web App

    A recipe manager in Flask and PostgreSQL: search, print to PDF, or transcribe a recipe card from a photo with Claude or Gemini.

    Flask · PostgreSQL · Vision LLM Live app Docs

Expertise

Data engineering

Designing and operating relational and document databases — PostgreSQL, MySQL, SQLite and MongoDB — and building ETL and EtLT pipelines in Python, SQL and Bash that ingest JSON, CSV, Parquet, XML and YAML. Production pipelines run unattended on AWS Lambda and EventBridge, load into a self-managed PostgreSQL instance, back up to S3 nightly, and raise an alert when a run fails.

  • PostgreSQL
  • DuckDB
  • AWS Lambda
  • EventBridge
  • S3
  • Parquet
  • postgres_fdw
Explore the REST API docs

Analytics & modeling

Building robust data models in Python with Pandas, Polars, PySpark and SQLAlchemy. Answering difficult questions with advanced SQL — CTEs, window functions and CASE expressions — and applying sound statistical and aggregation methods so that the conclusions drawn from the results hold up.

  • Pandas
  • Polars
  • PySpark
  • SQLAlchemy
  • Window functions

AI & agents

Connecting language models to a data warehouse without compromising its security. An LLM agent reads the live schema and writes the PostgreSQL; a Model Context Protocol server executes it under a SELECT-only role, behind a query guard and a statement timeout. The web tier holds no database credentials and builds no SQL, and a token budget that fails closed caps what public use can cost. One tested security model now serves two warehouses, weather and sports.

  • MCP
  • LangChain
  • Gemini
  • Claude
  • Text-to-SQL
  • Guardrails
Try Ask Weather

Delivery & platform

Delivering the work as production software. Flask, FastAPI, Streamlit, Dash and Bokeh applications, and plain-JavaScript games, are self-hosted on a single EC2 instance behind nginx, with TLS from Let's Encrypt renewed automatically and each application running as its own systemd service, most with a dedicated service user and a memory ceiling. An analytics pipeline captures every request into PostgreSQL for a live dashboard, and every site is measured rather than assumed: Lighthouse audits, security-header grades and Core Web Vitals from real visitors.

  • nginx
  • systemd
  • Let's Encrypt
  • Flask
  • FastAPI
  • Streamlit
  • Dash
  • Bokeh
View the data visualizations

Let's discuss your next data and analytics project.

I take on freelance engagements of any size: data pipelines and warehousing, analytics and modeling, and AI interfaces built on the data you already have.

Use the form to get in touch. A résumé is available on request.