Things I've built

Not just learning by reading — shipping things and logging them here.

TILT — The Maze Puzzle

Tilt to escape — fully playable by blind users via voice alone

Coming SoonMay 2026

A reaction-speed puzzle game where you tilt your phone to move a marker across a 3×3 grid to the target cell. The timer shortens each round, keeping pressure constant. Designed from the ground up for equal access: TTS announces your position and target each round, a metronome shifts from 60 to 180 BPM as time runs out, and haptic feedback marks every move and collision — so the game is fully playable without looking at the screen. Includes a real-time Supabase global leaderboard and a 3-step interactive onboarding tutorial.

React NativeTypeScriptExpoSupabaseexpo-sensorsexpo-speechexpo-audioexpo-haptics
TILT maze puzzle game screen
TILT main menu screen
Main menu
TILT gameplay screen
Gameplay
TILT game over and leaderboard screen
Game Over / Leaderboard

ChainPlay

Autoplay YouTube videos in the order you choose

Coming SoonMay 2026

An Android app for watching only the YouTube videos you picked, in your own sequence. Paste youtube.com/watch, youtu.be, Shorts, or embed URLs to add videos to a local playlist, then ChainPlay automatically moves to the next item when one ends. It uses the official YouTube player without login and supports previous/next controls, ▲▼ reordering, deleting videos, local persistence, and Korean/English auto-detection.

React NativeTypeScriptExpo SDK 54react-native-youtube-iframeAsyncStorageIntl API
ChainPlay 메인 화면
ChainPlay main screen in English
Main screen
ChainPlay add URL screen in English
Add URL

Cassette Music Player

A retro cassette music player with no skip button

ReleasedMay 2025

An Android music player that brings the 1980s cassette tape experience to a modern phone. Instead of instant skipping, you have to press and hold FF to move to the next track. Each cassette has Side A and Side B with a 30-minute limit per side, and tape noise plays between tracks. It uses local music files only, with no internet and no algorithm, so the experience stays focused on the songs you chose.

React NativeTypeScriptExpo SDK 54expo-routerexpo-avreact-native-reanimatedreact-native-svgAsyncStorage
Cassette Music Player 화면
Cassette Music Player Side A player screen
Player Side A
Cassette Music Player library screen
Library
Cassette Music Player Side B playing screen
Player Side B

back to dev

A developer blog — a 40-something PM returning to code

LiveApr 2026 ~

A personal developer blog documenting the journey back into development. The publishing workflow is fully automated: push a Markdown file to GitHub, and GitHub Actions publishes it on the scheduled date. Built with Next.js App Router to serve Korean and English routes separately, with SEO metadata, sitemap, and robots configured. This portfolio page is part of the same blog.

Next.jsTypeScriptVercelGitHub APIGitHub Actionsnext-intlTailwind CSS
back to dev blog home
Posts list page
Posts

WiFi QR Code Generator

No more reading out WiFi passwords to guests

LiveMay 2026

Built to eliminate the awkward WiFi password exchange at cafés, restaurants, and small businesses. Enter your SSID and password, get a QR code instantly. Print it as a card, stick it on the wall — guests scan with their camera and connect. Supports Korean, English, Chinese, and German.

ReactTypeScriptViteqrcode.reactZodi18n
WiFi QR 코드 생성기 화면

// more coming soon.