Amsterdam. I like tackling everyday problems that used to take too long, with the tools that are actually useful now. Then I check whether what I built works.
Portfolio · Résumé · Engineering notes
Live demos: Pattern Forge · Info Desk · Relay · Python trading bot archive
Result: replay without look-ahead; CI runs tests, Docker and a PostgreSQL restart. The public demo does not serve that database.
Architecture: browser → Next.js candle API → Hyperliquid public quotes. A separate WebSocket carries live mid-price and does not write into replay. Recorded replay uses only the selected prefix; incomplete higher-timeframe groups are omitted, not guessed. Persistence is for local use and CI.
What I built: React/TypeScript workspace, validated candle snapshots, Docker build checks and failure-handling tests.
Code: app/ · closed-candle tests · ingest
npm ci && npm test && npm run build
Result: OFAC licenses, the White House oil fact sheet, and AP quotes on one claims table. SQLite writes a note only after a human approves. Demo and evals, not a newsroom in production.
Architecture: three tools (fetch_source, lookup_license, search_prior_notes) → Python claims table / named quantities / license parse → pending draft → approve(). Ollama is optional and off in CI.
What I built: a comparison of three public recordings (not synthetic barrel pages). Ranking conflict, OFAC scope gap, single-source royalties, jailbreak, 429 retry, and human reject — scored against SQLite.
python -m pip install -e ".[dev]" && python -m pytest
Architecture: React UI → stateless FastAPI → one deterministic matcher, also exposed as four read-only MCP tools. Returns quoted sentences, not a hiring score. Paste is the real input; Arbeitnow is a bounded demo snapshot.
What I built: search_job_board, summarize_job_board, review_job_evidence, export_job_review. Duplicates keep changed wording.
Code: backend/ · evidence tests · MCP
Matching is literal. An agent that calls these tools can still summarise; Relay does not decide eligibility.
Decision: publish the loss and keep branch prices distinct. Early tickets were often $0.96–$0.99; StratA used $0.40–$0.72 with 11–15 seconds remaining; UC looked at leftover $0.01–$0.20 asks.
What is public: ledger script, timing parser, browser case study. The private bot is not in this repository. Live trading stopped.
Code: analyze.py · EVIDENCE.md
An API acknowledgement is not a fill. Dublin was not compared with another region.
Merged Haystack #12635: AutoMergingRetriever now treats 0 as a stored hierarchy value, not missing metadata. That is one accepted fix, not Haystack product work.
Le Wagon Barcelona. Rails and PostgreSQL. Not sole-authored and not maintained.
My merged pull requests: parcel reservations, add-event button, logout, styles, fontsize. I also contributed event-index partials, a search bar and Cloudinary for event photos. That is not the whole schema.
DispatchOps · Transcript Desk · Wikinimous · API labs · Rails labs

