Writing
Notes
Longer-form write-ups on things I have built - the constraints, the decisions, and the parts that did not work the first time.
OpenClaw: the assistant I actually run
A technical write-up of the personal assistant I run on a GCP VM: one long-lived gateway, file-backed state, SQLite memory indexes, Telegram delivery, cron-driven automations, and the operational tradeoffs that only show up in production.
Space Insights: two ways to see a wildfire from orbit
A satellite data platform on Databricks Free Edition running two independent fire pipelines - thermal detection across the whole planet and optical burn-scar detection over four regions - built so that they can check each other.
Every fire on Earth, every morning
Building a global thermal-anomaly pipeline on Databricks Free Edition: NASA FIRMS, H3 hexagons, the 7% bug I nearly shipped, and why the public demo has no backend at all.
What a fire leaves behind
Detecting burn scars from Sentinel-2 on Databricks Free Edition: why the change matters and the reflectance does not, reading satellite pixels without downloading scenes, cloud shadow as the real adversary, and why the model I trained is not allowed to overrule the arithmetic next to it.
OpenCloud: a team assistant with memory and guardrails
A technical write-up of an internal Slack and Teams assistant built around MCP sidecars, persistent team memory, and explicit safety controls. More runtime than chatbot, with real deployment, evaluation, and governance concerns.
Five investors, one stock engine
Lens scores the same company through five investing philosophies instead of pretending there is one universal definition of a “good stock”. The interesting work was not the radar chart - it was taming messy financial APIs, explicit heuristics, and a cheap but disciplined GCP deployment.
Memry: turning books into study material, with all the messy bits left in
I built Memry to turn PDFs and EPUBs into summaries, flashcards, and spaced-repetition review. The interesting part was not the AI demo - it was dealing honestly with lossy PDF extraction, token limits, provider differences, and the parts of the pipeline that quietly degrade quality.
Model Predictive Control
How I helped turn cloud-side model predictive control for industrial compressors into a production system: per-site forecasting, Databricks MLOps, firmware integration, and certificate-based device provisioning. The hard parts were latency, deployment safety, and identity - not just the optimiser itself.
A security scanner that files its own pull requests
How I built an Azure DevOps task that detects the stack, runs multiple scanners, uses an LLM to triage the noise, and opens remediation PRs with guardrails. The interesting part was deciding where automation should stop.
Cloud4crc: a modular monolith for desktop tools
A FastAPI platform for technician desktop tools, built as a modular monolith with dual API contracts, layered Azure AD auth, and Azure-native delivery. The interesting part is how much of the design is shaped by backward compatibility and operational reality rather than fashion.
Building an IoT fleet management platform
How I built an end-to-end platform for monitoring and controlling industrial compressors worldwide - from embedded C++ on Yocto Linux to live dashboards, firmware rollout flows, and telemetry pipelines.
Building a multi-tenant RAG knowledge assistant
I built and deployed several internal knowledge assistants for different engineering groups at a large industrial company. The interesting work was not the chat UI - it was making retrieval, isolation, grounding, and operations hold up across very different document sets.
Building a Databricks data platform that could survive reality
How I built a production Databricks lakehouse for mixed batch and streaming sources without letting each source invent its own architecture. The interesting work was not the tooling itself, but the boundaries between bronze, silver, gold, and governance.
My finance app starts with a bank statement
A local-first finance tracker built around PDF and Excel imports, GPT-assisted transaction extraction, and a deliberately simple categorisation loop. The interesting part is not the charts but the ingestion boundary: turning messy bank exports into something I can trust and correct over time.