I build AI workflows that keep people in the loop, and interactive maps that make complex data explorable.
Applied AI student at NTU Singapore · Previously at the University of Pennsylvania and UCL, with a background in urban planning.
中文:我做以人工复核为核心的 AI 工作流,以及让复杂数据可以被探索的交互地图。
Now building · October 2026
- LawAI is now organised around the case: chat sessions bind to a matter, AI usage and soft budgets are tracked per matter, and evidence catalogues export to CSV and Word.
- Scenario Forge shipped HGO Atlas, a second editor for the HGO mod's native pixel map, and a scroll-driven landing page.
- Job Apply Pilot released v0.7.0; v0.8 is in preparation.
A local-first job-search assistant: discover and rank roles, tailor resumes and cover letters, and let Codex or Claude browser agents prepare applications while you review every step. CLI plus a bilingual browser workbench; an independent continuation of ApplyPilot.
Get started → · Python SQLite Playwright Typer
A case-centred workspace for legal teams. Every finding links back to the paragraph that supports it; reviewers record decisions, track missing evidence and export the work.
| Each matter collects its to-dos: evidence to supply, findings to review. | Research briefs say which sources were confirmed and which still need checking. |
Shown with a fictional sample case and public case summaries. Built on an existing document-audit engine whose original authorship is retained. Case overview → · Python FastAPI React TypeScript SQLite
Team project: StashSeek organises and searches saved videos. I worked on the frontend, account linking, AI search and the browser companion (PR #21).
A political map studio for alternate history and worldbuilding, with two browser editors: five starting worlds (Modern World, HOI4 1936 and 1939, TNO 1962, blank), and HGO 1936 with 11,894 states and 20,782 provinces. Export PNG or JPG at up to 4×, in English or Chinese.
| Scenario Forge · vector political maps | HGO Atlas · the mod's native pixel map |
JavaScript Python D3.js Canvas TopoJSON
|
Explore nearly 3.6 million historical incident records by police district, Census tract or around a point, then compare areas. Coverage and uncertainty are shown next to each result.
Explore the app → MapLibre GL JS Turf.js Chart.js Python
|
More projects: data analysis, creative tools and product case studies
- NYPD Temporal Analysis: source audit, conservative cleaning and temporal exploration of public arrest data.
- Bank Marketing Prediction: coursework with a pinned UCI source, fixed splits and reproducible models (data governance).
- Nightlight Disaster Observatory: aggregate research on disaster recovery, nighttime lights and electricity outages.
- KARDS Card Forge: a browser card designer built on Canvas rendering. Unofficial fan project.
- Harbour Lights: a donor-management MVP case study with fictional data.
AI & automation: Python · OpenAI Agents SDK · Playwright · Typer
Applications: React · TypeScript · FastAPI · SQLite
Maps & visualisation: D3.js · Canvas · MapLibre GL JS · Turf.js · Chart.js
Data & reliability: pandas · Jupyter · pytest · GitHub Actions
Last updated October 2026.