Building things
that actually work.

React · Svelte · TypeScript · Python · MongoDB

I build web apps across the full stack — React, SvelteKit, TypeScript, Python, and MongoDB. Clean code, clear communication, and I finish what I start.

Selected work

6 projects

About me

I'm a web app developer who spent nearly 20 years teaching in Busan and Seoul. That career built habits that transfer directly to software: explaining things clearly, keeping the end user in focus, and never stopping learning. The moment I realized I could make a webpage do something useful, I was hooked. I've been building ever since.

I work across the stack: React, Next.js, Svelte, JavaScript, TypeScript, Python, and MongoDB. I've built and shipped production apps used by real people, contributed to a React codebase overhaul at a startup, and built tools I rely on myself every day. I finish what I start, iterate based on feedback, and take pride in work that actually holds up.

I'm a constant learner who picks up new things fast and takes direction well. I enjoy being part of a team that holds the bar high, and I bring that same standard to everything I ship.

Skills & tools

  • React / Next.js Frontend
  • Svelte / SvelteKit Frontend
  • TypeScript Language
  • Python Language
  • Django Backend
  • MongoDB Database
  • Linux / Bash Tooling
  • Vim / Tmux Tooling

Visitors from around the world

18,543 total visits

Countries that have visited

  • United States — 7815 visits
  • China — 2069 visits
  • Singapore — 1231 visits
  • Germany — 787 visits
  • ?
  • United Kingdom — 749 visits
  • The Netherlands — 712 visits
  • South Korea — 694 visits
  • Russia — 647 visits
  • Canada — 433 visits
  • Sweden — 359 visits
  • France — 319 visits
  • Brazil — 307 visits
  • Hong Kong — 305 visits
  • Japan — 229 visits
  • Indonesia — 93 visits
  • India — 81 visits
  • Netherlands — 70 visits
  • ?
  • Vietnam — 56 visits
  • Poland — 54 visits
  • Ireland — 51 visits
  • Finland — 51 visits
  • Spain — 44 visits
  • Australia — 42 visits
  • Belgium — 34 visits
  • Czechia — 32 visits
  • Latvia — 29 visits
  • Serbia — 27 visits
  • Ukraine — 24 visits
  • Switzerland — 23 visits
  • Israel — 21 visits
  • South Africa — 18 visits
  • Austria — 16 visits
  • Türkiye — 16 visits
  • Bulgaria — 15 visits
  • Lithuania — 15 visits
  • Taiwan — 13 visits
  • Seychelles — 13 visits
  • Moldova — 11 visits
  • Pakistan — 10 visits
  • Italy — 9 visits
  • Estonia — 9 visits
  • Cambodia — 8 visits
  • Iran — 8 visits
  • Bangladesh — 8 visits
  • Morocco — 8 visits
  • Andorra — 8 visits
  • Nigeria — 7 visits
  • Thailand — 7 visits
  • Hungary — 7 visits
  • Norway — 6 visits
  • Turkey — 6 visits
  • Denmark — 6 visits
  • Kenya — 6 visits
  • Greece — 5 visits
  • Portugal — 4 visits
  • Kazakhstan — 4 visits
  • Romania — 4 visits
  • Malaysia — 4 visits
  • Algeria — 3 visits
  • Mexico — 3 visits
  • Ghana — 3 visits
  • Uruguay — 3 visits
  • New Zealand — 3 visits
  • United Arab Emirates — 3 visits
  • Luxembourg — 3 visits
  • Venezuela — 2 visits
  • Iceland — 2 visits
  • Argentina — 2 visits
  • Zimbabwe — 2 visits
  • Uganda — 2 visits
  • Sri Lanka — 2 visits
  • Colombia — 2 visits
  • Cameroon — 2 visits
  • North Macedonia — 2 visits
  • Ecuador — 2 visits
  • Dominican Republic — 2 visits
  • Uzbekistan — 2 visits
  • Armenia — 1 visit
  • El Salvador — 1 visit
  • Tunisia — 1 visit
  • Zambia — 1 visit
  • Philippines — 1 visit
  • Nepal — 1 visit
  • Panama — 1 visit
  • Chile — 1 visit
  • Antarctica — 1 visit
  • Monaco — 1 visit
  • Paraguay — 1 visit
  • Qatar — 1 visit
  • Libya — 1 visit
  • Slovakia — 1 visit
  • Slovenia — 1 visit
  • Albania — 1 visit
  • Angola — 1 visit
  • Peru — 1 visit
  • Iraq — 1 visit

Let's connect

Open to opportunities

Available for freelance projects, full-time roles, and interesting collaborations. I'm especially interested in building tools that save real time.