Enterprise ESG (LCA) Data Platform
for a large petrochemical manufacturerEuropean customers' rising demand for LCA data outgrew Excel and manual work. I designed the backend and the ERP (SAP) integration interfaces for a platform to manage and use that data, coordinating data specs and server setup directly with the client's infra team.
- NestJS
- GraphQL
- MSSQL
- Nginx
- Windows Server
- SAP
- Claude Code
- Result
- Selected and optimized storage to improve overall system performance, and drove key technical decisions.
- Takeaway
- In enterprise DX, aligning stakeholders on data definitions is harder than the implementation. Technical correctness alone isn't enough — I documented the Node.js-vs-Java/Spring concern (single-thread) with Worker Threads and I/O-bound workload evidence to reach agreement.
AI-Powered OCR Data Extraction Pipeline
Extracts product-usage data (e.g. cement volume) from factory forms. Irregular layouts and merged cells were beyond rule-based parsing, so I fed the confidence scores and diffs of two OCR APIs into an AI layer for correction and adjudication — making AI a judgment component in the system, not just automation.
- NestJS
- GraphQL
- AWS
- Redis
- Supabase
- OpenAI API
- Claude Code
- Result
- Cut OCR processing cost from ~5–6¢ to ~2–3¢ per item (~55%).
- Takeaway
- I filled what deterministic rules couldn't with AI judgment — kept verifiable by grounding it in the two OCRs' confidence and diffs, not by trusting a single black box.
YourAiWorkforce
prompt is suggestion, graph is law.
A multi-agent planning pipeline that tames a stochastic 8B local model into behaving deterministically enough to trust — turning a founder's rough idea into a PRD and architecture doc, entirely on a 16GB MacBook at zero API cost. Commercial APIs make multi-agent "just work," but that's the model doing the heavy lifting. So instead of trusting the model, I clamp it: a separate critic, a save-validation gate, response post-processing, and state isolation wrap each probabilistic component in a deterministic shell.
- LangGraph
- Ollama (qwen3:8b)
- deepseek-r1:8b
- FastAPI
- SqliteSaver
- LangSmith
- Result
- Phase 0 (idea → PRD → architecture) runs end-to-end, fully local. Scope is deliberately capped at Phase 0 as a finished product, given an 8B model's code-generation ceiling.
- Takeaway
- State isolation has two directions: outbound (a subagent's turns polluting the parent thread) is solved via a separate state and a RemoveMessage finalize; inbound (the subagent's LLM still receiving the parent's messages) is a deliberate trade-off, compensated by a structured briefing packet — not hidden. Determinism comes from the graph, not the prompt.
Phase 1–6 (build / QA / deploy) exist as persona designs — roadmap, not yet wired.