web apprelaunching
197cpd
Continuing-education platform for licensed professionals in the Philippines
Licensed professionals in the Philippines have to log continuing professional development units to renew, and providers have no good way to sell courses toward them. 197cpd is the platform for both sides: provider and learner accounts with roles, a course catalogue, quizzes, certificates, and payments. Built on the T3 stack with Next.js, tRPC, Drizzle on Postgres, NextAuth with Google and Facebook sign-in, Tailwind and shadcn, deployed on Vercel with Supabase. It is being relaunched and is not fully up today; the code is private because a co-founder owns the brand.
- next.js
- trpc
- drizzle
- postgres
- supabase
- nextauth
- tailwind
- vercel
data pipeline · measurementpublic soon
f1lag
How fast do prediction markets reprice after an F1 safety car, and is any of it fillable?
F1's live timing feed is the reference clock; Kalshi and Polymarket are the markets. The pipeline parses F1's SignalR stream archive, fits a UTC anchor per session and asserts its error (median 0.131 s across 28 safety-car, VSC and red-flag events), times each event from its first machine-readable tell rather than the headline, and lines that up against microsecond-stamped venue trades. A systemd-supervised capture records the live order book at race weekends so that “fillable” is measured, not assumed. Six executed notebooks walk the research honestly, including one that kills its own strategy when the live spread turned out to be double the assumption. 27 async tests, no credentials needed. It does not trade.
- python
- pandas
- websockets
- fastf1
- systemd
- pytest
- jupyter
client work · ml servicefreelance
SSP AI Transcriptionist
Whisper transcription service and desktop editor for a medical-transcription business
A medical-transcription business wanted its transcriptionists to start from a machine draft instead of a blank page. I built the service around Whisper on a GPU: a FastAPI inference API packaged in Docker and deployed to Google Cloud Run on an NVIDIA L4, a Cloudflare Worker in front of it, and a React editor that also ships as a Tauri desktop app with foot-pedal support for playback. Audio goes in, a timestamped draft comes out, the transcriptionist corrects it in place. Client work, so the code stays private; screenshots on request.
- fastapi
- whisper
- docker
- gcp cloud run
- nvidia l4
- cloudflare workers
- react
- tauri
clinical toolingshipped · in use
IOL Calculator Automation
Batch-fills the ESCRS IOL calculator from a spreadsheet
A clinical research team at Baylor was hand-typing every eye measurement into the ESCRS intraocular lens calculator, one case at a time. This tool loads their existing spreadsheet, steps through it row by row, and fills the web form for them. The CAPTCHA and the submit stay in human hands on purpose, because that is where the automation should stop. Results are written back into the same sheet. GitHub Actions builds the Windows executable so the researchers install nothing. It removed the manual data entry from the workflow and supported research the team has since published.
- python
- selenium
- excel
- github actions
- pyinstaller
infrastructurerunning
Kubernetes Homelab
A multi-node k3s cluster run the way production is run
A multi-node Kubernetes cluster that hosts my own services: this website's API, a PostgreSQL database, a media server, and local LLMs. Everything is declared in Git and reconciled by Flux CD, with Kustomize overlays per environment, CloudNativePG for the database, and SOPS-encrypted secrets in the repo. Remote access goes through Cloudflare Tunnels and Tailscale, so nothing is exposed directly. A second generation is being rebuilt declaratively with Ansible for the hosts and separate family and personal clusters. It exists so that I learn infrastructure by operating it, not by reading about it.
- kubernetes (k3s)
- flux cd
- kustomize
- cloudnativepg
- sops
- ansible
- cloudflare tunnel
- tailscale
this site's backgroundlive
F1 lap replay
Verstappen's COTA pole lap, replayed in real time behind this page
The background of this site is a canvas replaying a qualifying pole lap: the driver's own line traced from telemetry, corner numbers from the circuit centreline, and a car lapping it at real pace. Click the bar at the bottom for the focus view, where the line is coloured by speed. Positions and car data come from OpenF1 and the circuit geometry from MultiViewer, pulled by a build-time script so the site stays fully static. The static layers render once to an offscreen canvas and each frame only draws the car; measured at about 14% main-thread time on a phone emulation with the CPU throttled four times, at 30 fps with no glow on touch devices.
- canvas 2d
- typescript
- next.js
- cloudflare pages
- openf1
backendsmall · running
seanpe-api
A Go API for the homelab
The small backend behind my personal services: quotes, a notes index, and a few trackers, written in Go with Gin. Queries are generated from SQL with sqlc against PostgreSQL, the OpenAPI spec is generated from the handlers, and a multi-stage Dockerfile plus Kubernetes manifests deploy it to the cluster. My first Go service, kept deliberately boring.
- go
- gin
- sqlc
- postgres
- openapi
- docker
- kubernetes
research · killed with evidenceparked
Prediction-market arbitrage
A cross-venue arbitrage idea, measured until it died
The hypothesis was that the same prediction market on different venues would misprice for long enough to trade. I built the collectors to find out: a Rust mempool watcher, Python collectors on systemd with heartbeats and a six-hourly Telegram status, and notebooks over the captured order books. The honest result is that the visible gap had almost no size behind it and the resolution-agreement risk ate the rest, so the project is parked with the verdict written down and what would reopen it. The tooling and the lesson carried straight into f1lag.
- rust
- python
- systemd
- docker
- jupyter
client work2023 – 2025
ERP integrations at ConnectSys
A FastAPI backend and the pipelines behind a B2B ERP
At ConnectSys I architected the API server for B2B clients from scratch: FastAPI on PostgreSQL, Docker, GitLab CI/CD, and AWS Lightsail, with cloud-based Python microservices automating the clients' data-processing workflows and integrations into their ERP and automation tooling. Client code, so nothing to link; the work is on the résumé.
- fastapi
- python
- postgres
- docker
- gitlab ci
- aws lightsail