Public repositories and in-house builds, with the technical decisions written out. Client work under agreement isn't listed — ask and we'll talk through comparable projects.
Discovery, extraction, generation and dispatch in a single pipeline.
An outreach system that finds businesses on LinkedIn and Google Maps, crawls their websites for contact details, generates a personalised message for each contact, sends it over SMTP and logs every send so no one is contacted twice. A second track discovers prospects on freelance marketplaces and drafts pitches for them.
It runs unattended with cooldown logic between cycles, keeps every stage in reviewable CSV files rather than a black box, and falls back to a locally hosted model when cloud APIs are unavailable — so a rate limit or an outage doesn't halt the pipeline.
Built to be pointed at a real client catalogue.
A production-shaped catalogue scraper: page-by-page crawling with pagination handling, structured extraction of name, price, currency, image and stock status, price parsing with currency detection, and deduplication by product ID. Exports to both CSV and JSON, ready for a spreadsheet or a database load.
Headless by default for server and CI use, with a configurable delay between requests so it stays polite to the target. Swapping selectors, adding proxy rotation, writing to PostgreSQL instead of CSV, or scheduling it to diff prices over time are all deliberate extension points rather than rewrites.
Manifest V3 Chrome extension.
Describe a goal in plain English and the extension carries it out: it analyses the live DOM to work out which controls to use, then navigates, clicks, types and scrolls. Extracted text goes into a memory scratchpad it can reuse across tabs and sites, so multi-step tasks survive a page change.
Provider-agnostic across Gemini, GPT-4o, Groq and local Ollama models, on a bring-your-own-key basis — running costs and data stay with the user, and everything executes locally rather than through a hosted service.
Two related builds.
Scrapes competitor listings and reviews, then uses generative models and sentiment analysis to compare features and surface where a product is losing on perception rather than capability. Results land in a SQL database so they can be queried and tracked over time instead of read once and lost.
A second build extends the same pipeline into structured feature-by-feature comparison, producing the kind of grid a product team can act on directly.
Deployed service, not a notebook.
Extraction exposed as a service rather than a script: an HTTP API that accepts a target and returns structured records, containerised and deployed to a VPS with a managed browser runtime behind it. Built so a client's own systems can request data on demand instead of waiting for a file.
Research systems, not signal selling.
Backtesting and reinforcement-learning experiments against live-market data through MT5 and demo accounts, with a separate execution engine for running strategies under controlled conditions. Built as research infrastructure — reproducible runs, logged results, no claims about returns.
Automation with OCR in the loop.
n8n workflows that take documents in whatever form they arrive — scans, photographs, PDFs — run OCR over them, and push the extracted fields into the systems that need them. The kind of process that otherwise consumes a person's morning, running instead on a trigger.
Classification on messy real-world text.
A supervised model that separates genuine job listings from fraudulent ones, built through the full cycle — exploratory analysis, feature engineering, model comparison and evaluation. Representative of the classification and scoring work we take on: churn, lead quality, fraud and content triage.
Contribution to a widely used library.
Diagnosed and fixed a string truncation bug in glaze, a high-performance C++ serialisation and reflection library. Patch reviewed and merged upstream.
Tell us which, and we'll tell you what it costs and when it lands.