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
8 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) - i18n and injection are left "unknown" honestly, because whether they're accepted is exactly the behaviour under test
- 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)119 Challenge
LiveScreenshots · 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)Easy Trend Explainer
LiveScreenshots · 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)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 - lowering it yields false positives (unrelated pairs), raising it misses real duplicates; where is the tradeoff set?
- 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
7 projectsParkPin
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 - the top priority is "does the location saved in the app always show correctly in the widget?"
- 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 - and the unsupported import is stated honestly on screen
- React
- TypeScript
- Hono
- Reading
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 - D-1 success promotes to D-3, a failed review re-queues to the next day with no next stage, overdue reviews surface oldest-first (pinned by unit tests)
- 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
6 projectsDegree 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.
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, etc.)
- React 19
- TypeScript
- Supabase
- EMBA
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 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.
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
- Firebase
- iOS
- Android
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
5 projectsinkrecall
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) - evidence-free verdicts are caught at the parsing layer
- 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)Lecturenote AI
ExperimentPairs lecture slides with a recording to draft per-slide study notes - Whisper STT + Claude.
QAWhen aligning the STT transcript to slide boundaries, an offset drift doesn't attach notes to the wrong slide
- React
- FastAPI
- Whisper
- Claude
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 - a consistent error pattern matters before accuracy (the precondition for correction)
- React Native
- Kotlin
- Monorepo
2026Solo BuilderStarted(First Commit date)
Archived
2 projectsJames 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 - without that, plausible items still don't earn trust (the core problem this project didn't solve)
- QA
- OpenAI
- FastAPI
- React
- SaaS
2025Solo BuilderStarted(First Commit date)