Kyaw Myo Htet

Bangkok · available immediately

I build the system, then
prove whether it works.

Full-stack and machine-learning engineer. Three production systems designed, built, deployed and operated solo — a 400-lesson learning platform, an open-source Windows virtual camera, and a cyclone-forecasting service that reported its own negative result.

400lessons shipped
3,392authored exercises
236automation scripts
83,565ML training sequences
3systems in production

Selected work

Product engineering · 2026

BurmeseLingo MINI

A free English-learning product for Myanmar learners starting from near zero. Every competing app assumes you can already read English to learn English — so the prompts, hints and error messages here are Burmese-first. That single decision drove the entire design.

  • Built80-unit journey · 400 active lessons · 3,392 authored exercises · 1,206 recorded audio clips · streaks, XP, 27 badges, weekly leagues, certificates
  • StackReact + Vite · Fastify + grammY (TypeScript) · Convex with a SQLite rollback mirror · Docker with health checks
  • Hard partContent integrity at 3,392 exercises. Manual review doesn't scale and a bad exercise silently teaches wrong English.
  • Answer236 automation scripts: an axe accessibility gate that fails the build, audio-coverage and provenance audits, a curriculum integrity check, an art-quality gate, a production smoke test.
ReactTypeScriptFastifyConvexSQLiteDockerPlaywrightaxe-core
BurmeseLingo MINI home screen: the lesson journey with numbered stops, hearts, gems and a Start lesson button
The journey map in Burmese, showing numbered lesson stops across a village landscape
Home and the journey map — Burmese prompts throughout

Content & design system

The part nobody demos

Four bespoke illustrated landscapes carry the journey — village, Bagan, Inle Lake, Yangon. They're hand-built SVG, not stock art, so they stay sharp at any size and cost almost nothing to ship. A gate in CI fails the build if any illustration drops below the quality bar.

The audio pipeline is the other half: 1,206 canonical MP3s with a coverage audit that verifies provenance and flags voice-gender drift, plus a browser text-to-speech fallback so a listening exercise never hard-fails on a missing clip.

  • WhyLearners are on low-end Android with unstable networks and often inside Telegram, not the App Store.
  • ResultA product that works on the devices its users actually own.
Later stops on the journey map, each with its own illustrated scene
An achievement badge from the reward system
Illustrated journey, reward badges, recorded audio

Systems engineering · open source · 2026

PocketLens

Turns an iPhone into a live Windows webcam over local Wi-Fi — no app store, no cloud relay. The hard part isn't streaming video: meeting apps don't accept a browser stream, they enumerate DirectShow capture devices on Windows. So the stream had to become a real camera.

  • ArchitecturePython aiortc WebRTC receiver · custom C++ DirectShow COM filter registered as a capture device · 1280×720 output
  • FallbackJPEG transport when WebRTC can't traverse — the failure mode only appears on real hardware and real networks.
  • PrivacyNo cloud relay. Local network only, dashboard bound to localhost, video held in memory.
  • ReleasedMIT · v0.1.1 via GitHub Actions producing Windows and source archives with SHA-256 checksums
PythonC++DirectShow COMWebRTCGitHub Actions
PocketLens dashboard showing the live preview and pairing controls
The iPhone camera page in Safari

Machine learning · research-grade · 2025–26

Storm Path Prediction

Tropical-cyclone track forecasting, six-hour steps out to 48 hours. Basin-specific variational-RNN and GRU/MLP ensembles trained on IBTrACS, served through FastAPI.

  • Scale83,565 sequences from 3,628 storms (1980–2024) · 72 GPU fits across four rolling-origin folds
  • ServingA reliability-first policy that refuses to serve the neural model when held-out backtests say a baseline is better.

The result I'm most willing to talk about: I froze the protocol, opened a 2025 NHC benchmark, and the official forecast beat my model at 12, 24, 36 and 48 hours. So I didn't promote it. A second 72-fit architecture family failed a pre-registered 2% advancement gate and was rejected too. Reporting that honestly was the actual work.

PyTorchVariational RNNGRU / MLPFastAPIRolling-origin CV
IBTrACS 3,628 storms · 1980–2024 83,565 sequences cleaned & versioned 4 rolling folds 72 GPU fits Ensemble GRU / MLP Frozen 2025 NHC benchmark NHC wins 12–48h Reliability-first policy falls back to motion baselines when the model isn't better Shipped Not promoted
Evaluation pipeline — the negative result is the deliverable

How I work

Three systems, built alone, means no one else was going to write the boring parts.

Measure before claiming

I froze the evaluation protocol before opening the benchmark, and shipped the fallback policy when the model lost. A number you can't defend is worse than no number.

Build the gate, not the review

3,392 exercises can't be checked by hand. So the build fails on accessibility regressions, audio drift and curriculum breaks instead of relying on someone noticing.

Leave a way back

Migrations get a rollback mirror. Deployments get health checks and a written runbook. Most of my work is making the bad day recoverable.