Profile
Systems fail at boundaries.
I work on the boundaries.
Software engineer with production experience across robotics (ROS1/2, WebSocket, embedded C), automotive (V2X, CAN, AUTOSAR), and full-stack product work (React, TypeScript, Node). 42 Seoul for systems fundamentals, SEA:ME for automotive depth, Bosch for safety-critical constraints, Pickit 3D for operator-facing production reality.
Status Leuven, Belgium — building Earprint and Ariadne. Available for full-time roles.
Position
The robot arm crashes. The operator sees an error.
Six layers between them. I own all six.
Pickit 3D
Reconnect logic that determined whether a robot arm re-homed safely after a WiFi drop — or kept trying until an operator intervened.
Bosch
V2X interface specification that was the only thing preventing a safety-scenario mismatch from shipping as a test pass.
Ariadne
Evidence engine that traces every LLM output to its source — because at scale, hallucination isn't a caveat, it's a system failure.
Full-stack range in robotics and automotive isn't a résumé category — it's the only way to close the bugs that span layers. A specialist in one layer leaves every other layer as a blind spot. I don't leave blind spots.
Skills
Stack and capabilities.
Stack
Systems & Languages
Robotics & Infra
Web & Product
Spoken languages
Korean (native) · English C1, IELTS 7.5 · Japanese A1
What I've shipped
- ·Reconnect / backoff systems — WebSocket and ROS clients that recover from network failure in the field without operator intervention
- ·Data contract design — V2X and ROS2 interface specs defining every field, encoding, and edge case before first integration
- ·Operator-facing UIs — HMIs and config panels where error states are first-class, not afterthoughts
- ·Log and observability tooling — Timezone-aware download / convert / triage pipelines for distributed field deployments
- ·Cross-layer debugging — Tracing failures from protocol encoding through ROS topic contracts to UI state
Origin
I didn't start by building systems.
I started by trying to explain them.
Age 14 · Pol Math School
The school ran a specific kind of contest: not “solve this problem” but “explain this phenomenon rigorously.” Scored on clarity of reasoning, not just correct answers. You could arrive at a wrong conclusion elegantly and score higher than someone who got it right by accident.
- State every assumption before using it
- Prove relationships step by step, no jumps
- Test logic against edge cases before claiming it holds
define → model → break → revise
The scoring function changed — from a judge's pen to a production incident. The discipline didn't.
Coordinate calculation from distances between three points in space
Geometry / computation
Method: Rigorous derivation, verified against test cases
→Always validate models against edge cases before trusting them.
DNA replication via Scratch
Biology + simulation
Method: Break a complex phenomenon into explicit rules; test each
→Decompose systems into verifiable components.
Regular pentagon in the complex plane
Pure mathematics
Method: Symbolic proof + explicit notation of every assumption
→Invisible assumptions kill systems.
Darwin's evolution via EvoDots simulation
Scientific reasoning + tooling
Method: Use simulation to test competing theories; observe which survives
→Elegance that fails under pressure is not elegant.
Leuven · 2025
Experience
Each role added a constraint the previous one couldn't prepare you for.
Pickit 3D · Research & Software Engineer
C · C++ · Python · TypeScript · React · WebSocket · ROS1 · Docker
Why here: First production ownership with real operators and no pause button. A robot arm mid-pick cannot wait for a developer to SSH in.
- ·Owned the operator-facing feature cycle across React UI, WebSocket streaming, Fastify API, and ROS1 — shipped fixes that unblocked robot pick-and-place operations within the same sprint they were reported.
- ·Designed a Python WebSocket library with exponential backoff and message schema validation — adopted as the integration baseline across multiple internal tools.
- ·Built end-to-end log tooling: timezone-normalized download, cloud upload/convert pipeline, multilingual triage UI — eliminated a multi-hour manual handoff per field incident.
Robert Bosch · V2X Communication
C · Python · TypeScript · React · ROS2 · Docker
Why here: V2X is safety-critical automotive communication — an interface bug isn't a ticket, it's a scenario failure. First time my data contract decisions had formal consequences.
- ·Built a V2X vehicle demonstrator for safety-critical ITS-G5 scenarios: authored the message interface specification (every field, encoding, edge case) before implementation, then validated end-to-end across multiple test runs.
- ·Designed V2X ↔ vehicle software interface contracts upfront — decoupling the Bosch safety module from vehicle-side integrators and eliminating integration-phase renegotiation.
- ·Designed and implemented a React HMI for an eBike safety prototype: explicit state machine, operator-first interaction model, clear separation of active / passive safety states.
SEA:ME · Master-level program in Automotive & Mobility
C · C++ · CARLA · ROS · Python
Why here: First time writing code that had to survive hardware variability and industrial deployment constraints, not just pass tests in a controlled environment.
- ·Four-module curriculum co-initiated with Volkswagen: embedded systems (ARM, bare-metal C/C++), autonomous driving (ROS perception pipeline), connected vehicles (CAN, AUTOSAR, V2X), and a capstone with automotive industry partners.
- ·First time engineering for reproducibility and certification: edge cases matter when the vehicle is moving; a fix that works 99% of the time is a 1% liability.
- ·Learned the bridge vocabulary: message contracts become interface specs, bugs become failure modes, latency becomes safety margin.
École 42 · Common Core and Advanced Core
C · Unix · algorithms · systems
Why here: 42 is self-paced and peer-reviewed — no fixed graduation, no instructors. The constraint forces you to build the mental model yourself rather than inherit someone else's abstraction.
- ·Built from scratch in C — custom libc (libft), printf, get_next_line, then progressively harder systems: process control, IPC, FD management, memory handling with no safety net.
- ·Minishell: POSIX-compatible shell — lexer, parser, built-ins, pipe chains, redirections, signal handling. Requires a precise model of what the kernel does on fork, exec, and dup.
- ·Peer evaluation model: every submission reviewed by three peers. Trains the discipline of writing code that is readable and provably correct, not just functional.
Projects & leadership
Shipped independently — no spec, no team, no one else to debug it.
Earprint · YouTube Music taste analyzer
Next.js · TypeScript · Neon pgvector · Cloudflare Workers · Chrome MV3 · Gemini · Deezer · Last.fm
- ·Chrome MV3 extension with bulk playlist import — multiple YouTube Music playlists at once including private Recaps; artist cleanup pass via Gemini to recover real artist names from fan-uploaded videos.
- ·Taste DNA profile: reminiscence-bump imprint scoring + familiarity↔novelty index; Music Zodiac (12 listening archetypes from top genres and moods); Gemini-written psychology profile generated once per analysis credit.
- ·Worldcup bracket from full library (8–256 tracks, multiple modes); shareable profile pages /s/<id> with dynamic OG images; Auth.js + Neon pgvector embedding-based recommendations, Cloudflare Workers.
Ariadne · Local-first LLM workspace
TypeScript · Python · Fastify · React · SQLite · Anthropic / OpenAI / Gemini / Kimi / Ollama · Docker · Cloudflare Tunnel
- ·Four chat modes — Instant (<2 s TTFT), Standard (thinking + grounded, Sources footer), Agent (plan-execute ~38 s), Deep (orchestrate multi-step) — across Claude, OpenAI, Gemini, Kimi, and Ollama.
- ·Hybrid search (BM25 + vector + symbol + RRF, Hit@1 82.4%); workspace memory injected into context; sandboxed TS/JS dashboards rendered per-query in the Surface panel.
- ·Actions engine (actions.yaml), cron scheduler, and webhook triggers; templates and run definitions with staged diff; evidence engine tracing every claim to its source document.
ColorSavesLife · Bosch ConnectedExperience (BCX) 2024
Python · C++ · ROS2 · Gazebo · YOLOv5 · eye-tracking
- ·AR overlay system recoloring traffic signals and road markings in real time for colorblind drivers — transparent display output, YOLOv5 detection, prototyped end-to-end in ROS2 / Gazebo.
- ·Plugin-based Python architecture: each sensor modality (depth camera, eye-tracker) is a self-contained plugin — eye-tracking was the first live plugin, feeding gaze data into the detection pipeline.
- ·Led and presented the cross-functional team to 1st place at BCX 2024, competing against automotive and tech teams from Bosch, Mercedes-Benz, Volkswagen, and others across Europe.
Autonomous Lane-Keeping-Assist · SEA:ME
Python · CNN · CARLA
- ·Trained a CNN on CARLA camera frames to detect lane boundaries and output a real-time steering correction signal — image preprocessing, convolutional extractor, regression head.
- ·Built the full data pipeline from scratch: capture loop, annotation tooling, train/val/test split, batch export and evaluation.
- ·Traced a key failure mode: regression head amplified prediction noise at high speed under sharp curvature — a failure that only appears outside the training distribution.
Rush03 · Rock band, keyboardist & leader at École 42 Seoul
Community of 50 · 3 events · 200–300 attendees
- ·Founded and led Rush03 — 50-member rock band and student community at 42 Seoul, mixing every stage of the program. Delivered three live events for 200–300 attendees.
- ·Built the planning process the next cohort inherited: timeline templates, equipment checklists, rehearsal schedules, and a risk-response playbook for the three most common failure modes.
- ·Discovered something about coordination at scale: the bottleneck is almost never the work itself — it's the shared model of what "done" means.
Education & credentials
Degrees, programs, and certifications.
Degrees & training
B.Sc. Mechatronics
Korea National Open University
B.Sc. Artificial Intelligence
Korea National Open University · GPA 3.44 / 4.5
B.Sc. Computer Engineering
Korea Academic Credit Bank · GPA 4.24 / 4.5
B.Sc. Business Administration
Korea Academic Credit Bank · GPA 3.77 / 4.5
École 42 · Common & Advanced Core
Seoul / Wolfsburg
SEA:ME · Master-level program
Wolfsburg · Automotive & Mobility
Selected certifications
Mar 2025
IELTS Academic 7.5 (C1)
British Council
Nov 2020
Engineer Information Processing
HRD Korea — system development / info processing / PM
Dec 2019
Computer Specialist in Spreadsheet & DB · Level I
KCCI — advanced productivity & data management
Oct 2019
Network Advisor · Level 2
ICQA — network administration
Curriculum Vitae
Download the CV, or reach out directly.
Open to full-time roles in robotics, automotive, and real-time systems — especially where the stack spans more than one layer.
contact@kwanho.dev ↗Recurring themes
Four failure modes that follow me across every stack.
The languages change. The problems don't.
Layer blindness
Every system that broke in unexpected ways had one thing in common: someone forgot to write down an assumption they were making. The type system didn't capture it. The tests didn't cover it. Then a timezone changed, or a packet hit a size limit, or a new operator followed the UI literally instead of the way it was intended.
Operator reality
Operators don't read manuals. They form a mental model from the first five interactions, then operate from memory. A UI that requires sequential steps will be used non-sequentially. Working at Pickit meant shipping code that real operators used in front of a running robot arm — that constraint changes every design decision.
Interface clarity
Two teams, one interface: that's where most production systems quietly die. Not from bad engineering on either side, but because each team built to a different implicit spec. At Bosch, V2X interfaces fed into safety-critical scenarios — every field, every encoding, every edge case was defined upfront, not negotiated after integration.
Decisions over time
The architecture that seemed obvious under deadline pressure is the hardest to change 18 months later — not because it was wrong, but because it crystallised assumptions that were reasonable at the time and became constraints on every subsequent decision. Tracking these patterns isn't pessimism. It's the discipline of building systems you'll still trust a year from now.
Available now
Open to full-time roles in robotics, automotive, and real-time systems.
Based in Leuven, Belgium. Open to relocation or remote. Especially interested in roles where the stack spans hardware and product.
