LinkedIn · Interactive portfolio · Explore the code
I’m Teddy, a data engineer based in Singapore. At work, I turn product questions into SQL datasets, scheduled pipelines and tools people can use themselves. Outside work, I build things I want on my own desktop.
Manus AI · Previously Tencent Games · Earlier internship at Shopee, Search & Recommendation
M.Sc., Computer Engineering — NUS · B.Eng., Electrical & Electronic Engineering — NTU
- Pipelines and warehouse models: Python, SQL and Airflow; incremental loads, validation, backfills and production troubleshooting.
- Product analytics: subscription and cost data for AI products; player activity, retention and match data from my earlier work on overseas MOBA operations.
- Self-service data tools: Slack-integrated analytics, OAuth, query authorization and audit logging, with engineering and database partners.
My professional work lives in company repositories. The projects below are personal work you can inspect here.
Three new personal labs built with AI assistance and synthetic data. Each has a runnable demo, tests and documented limitations.
Try the demos: Player analytics · Failure and recovery replay · Quality gate explorer
| Lab | Engineering focus | Demo and evidence |
|---|---|---|
| MOBA Analytics Lab | DuckDB + SQL facts, observable D1/D7 retention and payment metrics; optional dbt models and a local Airflow retry/validation flow | Dashboard · dbt · Airflow · Measured loading experiment |
| Incremental Load Lab | SQLite transactions couple versioned state and checkpoints; tombstones, replay and recovery after process termination | Interactive replay · Process-kill experiment |
| Data Quality Gates | Declarative CSV contracts with eight check types; strict count/rate validation, structured reports and distinct error exit codes | Interactive report · Strict retention example · Actual failure output |
The dashboards explore recorded synthetic outputs. The quality dashboard covers the original six-check example; the linked strict retention example uses eight checks. Airflow is exercised locally with DAG.test; cloud deployment and distributed processing remain outside these labs' demonstrated scope.
| Project | What I built | Where to start |
|---|---|---|
| LeetCode Tracker | A practice app with bilingual problem ingestion, scheduled sync, progress tracking and a local judge. TypeScript · React · tRPC · MySQL | Schema · Sync orchestration · CI |
| Skin Lesion Analysis | My first deep-learning project, revisited with segmentation, classification and an evaluation retrospective that documents leakage and failed experiments. Python · TensorFlow | Results and limitations · Saved metrics |
| QuickMD | A native macOS Markdown viewer with diagrams, math, live reload and PDF export. Objective-C · AppKit · WKWebView | Screenshot and setup · Native app · Rendering tests |
| DeskCat | A desktop companion with a procedural teddy bear, cursor tracking and idle animations. Swift · SceneKit | English overview · Procedural model |
The tracker’s judge is for local development, not a hardened public execution service. The skin-lesion project is an experiment, not a clinical tool. Both repositories explain their limitations alongside the implementation.
| At work | In personal projects |
|---|---|
| Python · SQL · Airflow | TypeScript · React · tRPC |
| Redshift · TiDB/MySQL · AWS | TensorFlow · Jupyter |
| Git · pytest · CI/CD | Objective-C · Swift · AppKit · SceneKit |
How I build
I use AI coding assistants for implementation and review. I focus on understanding the design, checking the results and documenting the limitations.
My portfolio is a small Three.js studio. Click around the room; the cat follows your cursor. There’s a Text version if you’d rather skip the 3D.
Also: a restock notification tool, diving, and more side projects than spare weekends. English / 中文都可以。


