Work
Things I built.
Products and tools I framed as problems through a QA engineer's lens and shipped end to end as a builder. Each case study carries the QA read too - what breaks and where, the boundary conditions, and where the regression risk lives. Numbers are only what I could verify; stages still being measured are labeled “not yet measured.”
These are closer to an idea notebook than a finished portfolio. When an idea shows up, I build the smallest version I can and let the result tell me “is this worth keeping as a product?” Some entries stay at MVP; others are kept as “stopped decisions.”
Keeping what I build running comes down to operating cost, so I weigh infra on that axis too. Some projects, for instance, moved off managed services like Render and Neon onto a self-hosted Mac mini to cut spend that wasn't pulling its weight.
Live
6 projectsAdversary
LiveCLIAn open-source library that turns one schema into explained adversarial test inputs - boundary values, i18n, and injection, each with a plain-language reason it might break.
QADoes it label correctly whether a generated value satisfies the field's own constraints (validity: valid / invalid / unknown)
- TypeScript
- Zod
- OpenAPI
- Open Source
- QA
2026QA Engineer · OSS AuthorStarted(First Commit date)Sheen
LiveScreenshots · 3A menu bar app for cleaning your Mac - lock the keyboard to wipe it, fill the screen with a flat color to reveal smudges, dust, and dead pixels, plus spill first-aid (bonus). No permissions, no data collection; sandboxed and shipped on the Mac App Store.
QAKey-swallow completeness - no keystroke leaks to the app behind the overlay while active (including the accessory-focus regression, verified by hand)
- Swift 6
- AppKit / SwiftUI
- macOS Menu Bar
- Mac App Store
- Zero-permission / Sandboxed
2026Solo BuilderStarted(First Commit date)Frameboard
LiveScreenshots · 4RICE · ICE · MoSCoW · Value × Effort in one workspace - open-source prioritization.
QAOne board component switches the input columns, legend, and formula correctly for each of the four frameworks (RICE / ICE / MoSCoW / Value × Effort)
- Next.js 15
- FastAPI
- PostgreSQL
- Open Source
2026Founder · Product · EngineerStarted(First Commit date)QA Learning 101
LiveA QA learning platform for picking up testing methodology and automation hands-on - you write tests against practice apps that look like the real thing.
QAdata-testid selectors survive CSS and component-structure changes so E2E holds up on refactors (proving out the learning standard)
- QA
- Education
- React
- FastAPI
2026Solo BuilderStarted(First Commit date)Jira AI Duplicate Detector
LiveCLIPython CLI that finds duplicate Jira issues by embedding their title and description and flagging pairs above a threshold - Excel reports plus usage and cost stats.
QAThe similarity threshold's precision/recall
- Python
- CLI
- OpenAI
- Jira
2025Solo BuilderStarted(First Commit date)QAlity - Playwright × Jira
LiveCLITriggers Playwright automation from Jira issues and writes results back as comments.
QAJira round-trip integrity - issue → run → comment reply → status transition runs end-to-end with nothing dropped in between
- Playwright
- Python
- Jira API
2025Solo BuilderStarted(First Commit date)
MVP
10 projects출석 알리미
MVPMobileA serverless phone-only app that rings a few minutes before class and, when you tap the notification, shows the attendance-window countdown and opens the university's electronic-attendance app - a one-day MVP where the platform constraints, not the features, are the whole story.
QADo late-semester notifications quietly vanish against the iOS 64-pending-per-app cap
- Expo / React Native
- TypeScript
- iOS / Android
- Local Notifications
- QA
2026Solo BuilderStarted(First Commit date)BodyCut Training
MVPA mobile web app that puts body composition, running, and strength work on one screen so you can cut fat without losing muscle - the local LLM writes only the interpretation, and every number on the screen is computed by code.
QADoes the auth gate run before the route handlers, and does login response time leak whether an account exists
- TypeScript
- Hono / SQLite
- Local LLM (Ollama)
- Auth / Security
- QA
2026Solo BuilderStarted(First Commit date)ParkPin
MVPMobileA personal parking app that logs your spot by floor and zone and shows it on a home widget (iOS and Android) without opening the app - offline-first, local storage.
QAWhere the widget and app split the same location data (iOS App Group) is the most regression-prone spot
- React Native / Expo
- TypeScript
- Home Widget (iOS/Android)
- Offline-first
2026Solo BuilderStarted(First Commit date)이거먹어
MVPMobileA food decision advisor that narrows "what should I eat today?" down to 1-3 picks using taste, your current state, and location.
QAAllergens, hard excludes, and constraints are filtered up front by a hard filter (DB query), not a probabilistic LLM, and can never be bypassed (the one place a wrong answer hurts someone)
- React Native
- FastAPI
- AI
- PostgreSQL
2026Founder · Product · EngineerStarted(First Commit date)Book Map
MVPScreenshots · 8A reading roadmap that shows what order to read in for a topic - the goal is showing the path, not a list of recommendations.
QAAnonymous localStorage progress and logged-in server progress don't diverge
- React
- TypeScript
- Hono
- Reading
2026Solo BuilderStarted(First Commit date)Lecturenote AI
MVPA web app that pairs lecture slides with a transcript to draft per-slide study notes. In three months it grew into a semester management tool, and in all that time I never built the one thing it needed: a way to measure whether the notes are right.
QAWhen aligning the STT transcript to slide boundaries, an offset drift must not attach notes to the wrong slide
- React
- FastAPI
- Whisper
- Claude
- RAG
- QA
2026Solo BuilderStarted(First Commit date)DocuStory
MVPAn analysis engine that turns Korean real-estate documents into risk signals.
QASame document, always the same score - with
nowpinned toFIXED_NOW, does the result exactly match the stored golden?- Python
- FastAPI
- Real Estate
2026Founder · Product · EngineerStarted(First Commit date)TinyWords
MVPA vocabulary app that builds a daily word habit with spaced review and streaks - a web/mobile/desktop MVP with AI word generation, sentence coaching, and pronunciation scoring.
QADoes review surface at the right moment
- TypeScript
- PWA
- Capacitor
- OpenAI
- Language Learning
2026Solo BuilderStarted(First Commit date)ReleaseGate
MVPAn AI evaluation SaaS that turns release-or-hold decisions into data - just before launch.
QAScore reproducibility - the same inputs (coverage, open defects, change-risk) yield the same confidence score (deterministic rubric)
- SaaS
- AI
- FastAPI
- React
2026Product · QA EngineerStarted(First Commit date)TransLoop
MVPScreenshots · 6A language-learning app built around the double-translation loop - translate the source into the foreign language, then days later back-translate your own version to your mother tongue and compare what's lost.
QAThe access/refresh flow - on a 401 the one-shot auto-refresh runs exactly once without looping, and falls back to /login safely on failure
- FastAPI
- React
- OpenAI
- Language Learning
2025 - 2026Solo BuilderStarted(First Commit date)
EMBA
12 projectsSPARK Live
EMBAA seminar Q&A where the audience follows the slides on their phones, asks by name on the slide they are looking at, and the presenter answers per slide starting with the most-upvoted - built from four documents in three days and 252 commits, run at a real event, and the result was five questions.
QAAre the acceptance criteria 1:1 with tests
- Next.js
- TypeScript
- Supabase Realtime
- Cloudflare Workers
- Self-hosted
- Playwright
- QA
2026Solo BuilderStarted(First Commit date)EMBA Election System
EMBAScreenshots · 6A cohort-leader election system built in a day because a Google Form could guarantee neither one-person-one-vote nor a secret ballot - identity by a hash of student ID and phone number, secrecy by file layout, a count check before tallying. An adversarial audit 35 minutes before polls opened fixed four defects, and 35 of 37 members voted.
QAAn adversarial audit 35 minutes before opening
- Node.js
- Express
- No DB
- Election
- EMBA
- QA
2026Solo BuilderStarted(First Commit date)스파크 AI 창업 점집
EMBAAn unstaffed booth web app that runs on each visitor's own phone from a QR code, built on one GPU and a fixed event window - so the hard part was reliability, not AI.
QADo concurrent requests on a single GPU all slow down and then time out together? The record in my notes has one of four concurrent requests succeeding, and the original logs were not kept, so I could not reproduce it. I put a FIFO serialisation queue (one in flight) in the gateway, and clients that leave while waiting get dropped from the queue with their abort propagated upstream, which cuts the self-amplifying congestion where abandoned requests keep occupying the GPU
- Next.js 15
- Self-hosted LLM
- Fallback Design
- Live Event
- QA
2026Solo BuilderStarted(First Commit date)SPARK 주간 읽을거리
EMBAA weekly article roundup I used to write by hand, moved onto a publishing pipeline with a real validation gate - and when a rule collided with reality, I demoted it to a warning instead of deleting it, so the violation stays on screen.
QADoes the gate actually stop, or just log and continue
- Node.js
- SQLite
- Cloudflare Pages
- Local LLM
- Content Pipeline
- QA
2026Solo BuilderStarted(First Commit date)Degree Planner
EMBAA degree-requirement calculator that moves the SKKU EMBA graduation worksheet to the web - enter your courses and it computes requirement fulfillment and the attainable degree. It began as a standalone app on Supabase and in August moved into the EMBA app as a web-view-only screen, and along the way a path where autosave could overwrite data was caught.
QASame input, same result - the requirement calc is a side-effect-free pure function with constants, pinned by unit tests on the tricky boundary combos (exactly 45 credits, business 6 / non-business 12, Advanced 18, 4 semesters completed)
- React 19
- TypeScript
- Supabase
- EMBA
2026Solo BuilderStarted(First Commit date)데일리 다이제스트
EMBAA private reading archive that parses posts from a paid subscription content service day by day and keeps restated summaries instead of the body - the copyright constraint is enforced by the schema and a save gate, not by a document.
QASplitting errors from warnings in the save gate
- TypeScript
- Playwright
- Local LLM
- Postgres
- Self-hosted
- QA
2026Solo BuilderStarted(First Commit date)Prompt Forge
EMBAScreenshots · 7An async, hands-on learning platform for picking up LLM usage with cohort peers - guides, a roadmap, courses, plus a browser-side IDE that runs prompts against the LLM directly.
QAEvery added content card gets the three principles (AI drafts, humans verify, no sensitive data) enforced by the screen structure (removing a human-hands regression)
- FastAPI
- React
- LLM
- Education
2026Solo BuilderStarted(First Commit date)EMBA 119 Challenge
EMBAScreenshots · 6A timing-sense game where you stop exactly at 11.900 seconds - an MVP for an SKKU EMBA event.
QAMeasurement accuracy is trust - the client clock isn't taken at face value; the server re-validates against its own baseline
- React
- FastAPI
- Render
2026Solo BuilderStarted(First Commit date)EMBA E-Members
EMBAScreenshots · 3A community app for SKKU EMBA members - the member directory, business-card QR sharing, mentoring, schedule, board, and cafeteria menu in one place. After the June launch on both stores, a 2.0 round widened it to business cards, welfare, bookings, a meal kiosk, the degree planner, and elections, and that round, backend and admin included, was effectively a one-person job.
QAThe boundaries of inherited code (token expiry/re-login, network failures, empty states, missed push) hold up in real members' hands, not just a demo
- Flutter
- NestJS
- Firebase
- iOS
- Android
- AWS
2026PM · DeveloperStarted(First Commit date)EMBA Typhoon
EMBAOperations system for a grad-school golf club - from live scoring to payments.
QALive scoring - when several people enter scores at once mid-round, the tally doesn't drift (concurrency)
- Next.js
- Express
- Prisma
2026Solo BuilderStarted(First Commit date)Cohort Connect
EMBAScreenshots · 5A cohort-ops web app for grad-school peers - school-domain OAuth keeps it to the cohort only, with survey, announcements, anonymous feedback, emergency contacts, and meeting rooms in one place.
QAThe @g.skku.edu-restricted OAuth actually blocks non-cohort accounts - no path routes around it
- Next.js 15
- Supabase
- Cloudflare Workers
2026Solo BuilderStarted(First Commit date)ClassVault
EMBAAccess-code archive for sharing course materials with grad-school peers.
QAThe access-code session actually blocks material access for anyone without the code (code-exposure and reuse boundary)
- Vite
- Supabase
2026Solo BuilderStarted(First Commit date)
Experiment
6 projectsmalkkeum
ExperimentCLIv0 of a tool that re-checks shopping and subscription screens against Korea's e-commerce law on every deploy - the law becomes test cases, verdicts use only a four-grade check-up vocabulary, and anything a model decided is held until a person reviews it. Three weeks of validation are under way and there are no results yet.
QACan a statute be turned into test cases
- TypeScript
- Playwright
- Local LLM
- Rule catalog
- QA
2026Solo BuilderStarted(First Commit date)Speak Five
ExperimentScreenshots · 3The early skeleton of a learning app where you listen to, repeat, and recall five English sentences matched to your job and situation - 18 hours and 8 commits set up the selection screen, the time-zone rules, and the test gates, and nothing else. Zero sentences so far, and even the product name is provisional.
QAIs the code under test the code that ships
- React
- TypeScript
- Vite
- Capacitor
- Playwright
- Temporal
- QA
2026Solo BuilderStarted(First Commit date)inkrecall
ExperimentMobileAn iPadOS-only AI error-notebook - an AI grades your Apple Pencil handwriting step by step, analyzes weaknesses, generates similar problems, and schedules spaced-repetition (FSRS) review. A thin SwiftUI client on a thick FastAPI backend.
QAGrading output always conforms to the structured schema (per-step verdict, error type, evidence)
- SwiftUI (iPadOS)
- PencilKit
- FastAPI / Python
- Multimodal LLM
- FSRS (SRS)
2026Solo BuilderStarted(First Commit date)AI Project Loop Lab
ExperimentTurns a one-paragraph idea into a Project Brief, MVP scope, dev issues, and next steps - exported as a single Markdown doc.
QAGeneration of the four sections (Brief, MVP scope, issues, next steps) doesn't break on empty, vague, or very long one-paragraph input
- Next.js
- TypeScript
- Claude Code
2026Solo BuilderStarted(First Commit date)Weather 1-Week
ExperimentA 7-day weather forecast on Cloudflare Workers backed by Open-Meteo - search by city (KO/EN) or use your location, no API key needed.
QACity search handles both KO/EN spellings, typos, and non-existent place names safely
- Cloudflare Workers
- TypeScript
2026Solo BuilderStarted(First Commit date)Gyroball RPM
ExperimentAndroid app that measures a gyroball's RPM in real time from camera and audio frequency.
QAIs it reproducible under the same conditions
- React Native
- Kotlin
- Monorepo
2026Solo BuilderStarted(First Commit date)
Archived
3 projectsEasy Trend Explainer
ArchivedScreenshots · 6Daily-refresh service that has AI break down today's trends into four categories.
QADaily auto-generation - guard the regression so one failure can't spread across several days (invisible piled-up regression)
- Next.js
- AI
- Vercel KV
2026Solo BuilderStarted(First Commit date)James Company
ArchivedAn all-in-one QA community platform for the QA ecosystem - paused after pivoting to a public-good activity.
QAWith several features (posts, resources, profiles) bundled into one platform, the access-permission boundaries don't leak between beginners, practitioners, and leads
- QA
- Community
- Platform
2025FounderStarted(First Commit date)CaseMaker (Figma2Checklist)
ArchivedA full-stack tool where you paste a document URL (a public Notion page) and GPT-4o-mini drafts and groups a QA test checklist - an experiment testing "from design/docs to QA" (shift-left), wired up through auth and payments.
QAHow do you measure an auto-generated checklist's accuracy and omissions and prevent regressions
- QA
- OpenAI
- FastAPI
- React
- SaaS
2025Solo BuilderStarted(First Commit date)