Portfolio

Applications

bndwth

Venue and event discovery platform combining an admin CMS with a public catalog. Discovers venues via Google Places, scrapes event agendas in the background using Trigger.dev, and uses LLM-powered data extraction to parse structured event information from unstructured web content. Features a calendar view, artist discovery, and JSON export for data seeding.

DatoCat

Conversational AI data analysis platform for marketers. Upload CSV, JSON, or Parquet files and explore them through a natural language interface. Features AI-powered insight generation, intelligent SQL query generation, auto-generated visualizations, and an interactive app builder that creates custom dashboards from plain-language descriptions. All data processing runs client-side via DuckDB Wasm.

DatoFlow

AI-driven data collection and enrichment platform for marketing intelligence. Manages multi-source data feeds from social media and web scraping via Apify, runs scheduled collection jobs with Trigger.dev, and enriches records with LLM-powered automated classification and entity extraction. Features Observable Plot and D3 visualizations for interactive data exploration.

Graphext

ML-powered data exploration platform. Led data science and ML engineering efforts since 2017, building intelligent data ingestion, automated feature engineering, and predictive modelling capabilities.

Rally

Full-stack squash match management platform. Track matches with game-by-game scoring, organize clubs with membership systems, run leagues with automatic promotion/relegation, and climb ladders with head-to-head rankings. Supports tournaments, casual pickup games, and open challenges.

Le Grow

Interactive AI design tool for procedurally generating LEGO brick sculptures using evolutionary computation. Uses L-systems for structure generation and a genetic algorithm guided by user aesthetic preferences. Features real-time 3D rendering with Three.js, physics simulation via Rapier3D for stability testing, and multi-component fitness scoring including symmetry, connectivity, and interlocking metrics.

Worm Circuitry Explorer

Computational neuroscience tool for interactive neural circuit analysis of the C. elegans connectome. Visualize neural subcircuits with force-directed graph layouts, discover paths between neuron groups with configurable constraints, and explore both synaptic and electrical connections including neuromuscular junctions. Includes PubMed integration for literature search and export to GraphML, GML, and adjacency matrices.

Voopter Airfare Dashboard
Voopter Airfare Dashboard

Interactive R/Shiny dashboard for exploratory statistics of millions of airfare searches. Analysis of pricing factors, seasonality, and booking patterns.

euphoria — NaturalMotion

Real-time AI middleware for adaptive character behaviour in AAA games. Procedural AI-driven physics simulation enabling characters to react dynamically to their environment. Shipped in Red Dead Redemption, Max Payne 3, Star Wars: The Force Unleashed, and Backbreaker.

Libraries & Code

Python library for structured output from LLMs over tabular data. Combines prompt engineering via Jinja2 templates with Pydantic response models and concurrent batch execution over DataFrames. Supports OpenAI, Anthropic, and Google providers via LiteLLM. Used to build AI agents for automated data enrichment at Graphext and Apify actors for SEO research.

TypeScript companion to Cuery for structured output from LLMs with Zod schema validation. Ships pre-built AI-powered analytics tools for classification, entity extraction, sentiment analysis, topic modelling, and web search. Runs on Deno, Node.js, and in the browser. Published to JSR and npm.

Lector

Fast, intelligent parsing library for CSV files that handles messy real-world data with zero configuration. Automatically detects encodings, dialects, and preambles, then uses ML-informed type inference to identify column types more accurately than pandas or Arrow — correctly handling large integer IDs, nested lists, non-ISO timestamps, and semantic types like URLs. Battle-tested in production at Graphext across thousands of diverse data sources.

Pype

Schema-validated, backend-agnostic ML pipeline orchestration framework. Write transformation steps once using Ibis expressions and run them unchanged on DuckDB, PostgreSQL, Snowflake, BigQuery, or Spark. Steps declare input/output schemas with Arrow types, enabling static DAG validation before execution. Pipelines can be defined via Python, YAML, or a builder API — all three produce the same validated DAG. Used as the backbone for ML data pipelines at Graphext.

Sensorimotor Life

Sensorimotor Life draws on current theoretical developments in the enactive approach to life and mind. It examines and expands the premises of the sciences of the human mind, while developing an alternative picture closer to people’s daily experiences. Enactive ideas are applied and extended, providing a theoretically rich, naturalistic account of meaning and agency. The book includes a dynamical systems description of different types of sensorimotor regularities or sensorimotor contingencies; a dynamical interpretation of Piaget’s theory of equilibration to ground the concept of sensorimotor mastery; and a theory of agency as organized networks of sensorimotor schemes, as well as its implications for embodied subjectivity

NLP and graph analytics study of ideological communities around Spanish political parties and media outlets. Text analysis of tweet content combined with network clustering to reveal media consumption bias in retweet activity.

dynmx

C++ framework for evolutionary optimization of recurrent neural networks and simulation of embodied agents. Includes real-time OpenGL visualization with scene graph support. Used for PhD research on motor control and spinal neural network dynamics.