
A developer who creates business value and reduces team pain points
About Me
Hello, I'm Sangmin Lee. I have developed the product and operational features teams need, with a focus on frontend development.
Across commerce, mobile WebView, insurance, and medical and clinical analysis products, I proposed an app-release-bound event area as an independent WebView product and turned developer-run content operations into tools for operators.
More recently, while building medical and clinical analysis products, I have taken ownership not only of responsive design, accessibility, and performance, but also deployment, log storage, and request tracing.
I use AI development assistants for more than code generation. I established project-specific instructions, skills, hooks, and PR validation standards. I care more about how a technical choice changes the user's and team's next task than about the technology itself.
Across commerce, mobile WebView, insurance, and medical and clinical analysis products, I proposed an app-release-bound event area as an independent WebView product and turned developer-run content operations into tools for operators.
More recently, while building medical and clinical analysis products, I have taken ownership not only of responsive design, accessibility, and performance, but also deployment, log storage, and request tracing.
I use AI development assistants for more than code generation. I established project-specific instructions, skills, hooks, and PR validation standards. I care more about how a technical choice changes the user's and team's next task than about the technology itself.
Oprimed
2026.02 - Present · Service DeveloperMedical and Clinical Analysis Products
Medical and Clinical Analysis Screen DevelopmentI work on screens, accessibility and performance improvements, AI development tooling, CI/CD, and backend logging for medical and clinical analysis products.
- I developed condition setup, job execution, results, and report screens so input and output remained connected throughout long-running analyses. I coordinated responsive breakpoints and error and re-entry behavior that were not in the original plan with product, design, and backend teammates.
- I introduced accessibility standards that the existing product did not have so key screens could be used with a keyboard, and checked login, service selection, and session-expiration screens with Playwright.
- To reduce image requests and UI maintenance cost, I replaced image-based UI with shared components. Static images are converted into viewport-specific WebP assets at build time and only changed assets are regenerated and verified, reducing the calculated transfer size of conversion candidates by about 95%. A separate Lighthouse comparison reduced LCP from 1.3 to 1.0 seconds and Speed Index from 3.4 to 0.7 seconds.
- To visualize analysis results and reduce repeated requests, I developed ECharts and Plotly charts and moved disease lists to a TanStack Query cache, removing direct calls from individual screens.
AI Development Tooling
- To prevent incorrect interpretation of medical and clinical context, I created an AI workflow in which Codex and Claude reference project-specific instructions, task-specific skills, execution hooks, and PR rules stored in the repositories.
- I reviewed diffs and typecheck, test, and build results so people could verify AI-generated changes and the team could use the same standards. Teammates could also adapt and use the same instructions and hooks.
Infrastructure and Backend
Tech Stack
Next.js
React
TypeScript
Tailwind CSS
Radix UI
TanStack Query
Zustand
React Hook Form
ECharts
Plotly
Vitest
Playwright
axe-core
GitHub Actions
Husky
Docker
Python
Django
Django REST Framework
PostgreSQL
Codex
Claude
MCP
- To align different project runtime environments, I moved a Vite and React Router-based Portal to Next.js and aligned package versions, the Docker runtime, and deployment method with the other frontend projects.
- To reduce mistakes from manual deployment and missed changes, I moved Docker deployment to GitHub Actions and ran typecheck, test, and build through Husky. Key screens were checked separately through Playwright scenarios.
- To separate business data from logs and make error requests easier to find, I added log databases to three backends and stored entries by environment, service, and request ID. I also added log-query APIs and a frontend error-reporting API to Admin.
- I added health checks so GitHub Actions could inspect actual server state. They check backend HTTP responses and container status and leave an Actions Summary and logs when an issue is detected.
CodeCrayon
2023.05 - 2025.07 (2 years 3 months) · Frontend DevelopmentCommerce and Back Office
Commerce and Back OfficeAs an early team member, I developed commerce and back-office products, mobile WebView and web games, and content-operations tools.
- I developed product discovery, ordering, payment, and account features so domestic and international users could use the appropriate language and payment method, supporting Korean, Japanese, English, and Chinese screens.
- To match how mobile customers and desktop sellers work, I moved customer screens to a mobile-first UI while retaining a desktop layout for the seller dashboard.
- To keep operations features moving after the previous owner shifted to app development, I migrated the Flutter Web back office to Next.js and moved product, order, settlement, event, and inquiry management features.
WebView and Web Games
WebView and Web Games
- I proposed a WebView area and demonstrated a prototype so events and games could be added without waiting for an app release. After it was adopted, I developed and operated the frontend project.
- I developed the Phaser-based Flying Pop as repeat-visit content. When a follow-up game was needed to use accumulated bonuses, I also owned the Open Sesame frontend and connected rankings, result submission, and bonus accrual and spending across both games. Excluding duplicate play, we observed approximately 2,000 to 3,000 weekly unique users in the database.
- I worked with the app and backend developers to integrate the Flutter bridge and game APIs so the web games could connect to app features and the server. I connected app sharing and navigation with game result submission.
- I applied Branch share links and Airbridge deep links so users could receive extra play after ad completion and enter games through shared links. I also handled duplicate progression during result submission and Safari audio playback and screen-exit issues exposed in WebView.
AI Use and Operations Tools
AI Use and Operations Tools
Tech Stack
Next.js
React
TypeScript
MUI
Tailwind CSS
Jotai
SWR
React Hook Form
Toss Payments
PayPal
Phaser
Flutter InAppWebView
Branch.io
Airbridge
Node.js
Express
AWS Bedrock
OpenAI API
Google Cloud Translation
Axios
Cheerio
- So operators could translate subtitles without a developer, I turned an AI subtitle translation CLI into a multi-file, multilingual tool and added it to the back office. Three to four operators used it for about three months while I was employed.
- I built a prototype to test whether AI could produce initial drafts for Sellectors product blog posts.
- To reduce repeated searches across video platforms, I built a tool that brings results from three platforms into one screen. It reduced the operations team's review time from about 50 minutes to under 10 minutes, while operators retained final judgment on whether content was unauthorized.
all of them Co., Ltd. · Japan
2021.07 - 2023.04 (1 year 10 months) · Frontend DeveloperShared Subscription Entry and Performance Improvement
Shared Subscription Entry and Performance ImprovementInsurance products connecting client entry, subscription, and operations
- To reuse one insurance subscription modal across multiple client pages, the shared CDN SDK accepts an API key and display options as configuration and separates product-specific screen assets by planId. I handled customer-data transfer and the subscription URL connection within the same flow.
- A Japanese client reported that a blank screen and loader remained visible for about five seconds on subscription entry. Treating this as a potential pre-subscription drop-off issue, I first grouped initial React data requests with Promise.all and moved customer-data loading into the first screen instead of immediately changing frameworks.
- Based on remaining performance headroom and low migration cost, I moved the subscription flow I owned into a separate Next.js codebase and assembled initial data through SSR.
- I measured the migrated build in Korea with Lighthouse's default desktop settings and confirmed an LCP of 1.2 seconds. Rather than treating that as proof for the Japanese environment, I asked a local teammate to revalidate it and deployed after the client reported that actual entry time had dropped to about 1.2 to 1.5 seconds.
Subscription and Operations Systems
Subscription and Operations Systems
Tech Stack
React
Next.js
TypeScript
Redux
Context API
Java
Spring Boot
Doma2
MySQL
Redis
GraphQL
DynamoDB
S3
Sass
GitLab CI/CD
- I owned one subscription flow from occupation-based premium calculation through applicant information, disclosures, card payment, and completion.
- For separate cancer and hospitalization insurance products, I developed and refined estimates, plans, policyholder and insured-party information, disclosures, payments, and mid-flow save and restore, clearing card data on restoration.
- I developed insurance-customer search and detail views plus transaction and subscription histories from the React frontend through the Spring backend, and built a module that stores administrator CSV files in S3.
- For separate policy and agency back offices, I handled branch and agent views, policy, payment, and premium-invoice queries, and file-upload screens.
Datalogics
2020.08 - 2021.07 (1 year) · Operations, Maintenance, and DevelopmentConsular Call Center Maintenance and Smart-DIS ETL Development
Consular Call Center Maintenance and Smart-DIS ETL Development
Tech Stack
Java
JavaScript
JSP
eGovFrame
MyBatis
MariaDB
Oracle
Linux
HTML
CSS
- I operated and maintained the Ministry of Foreign Affairs Consular Call Center application. I developed selected JSP survey screens and an API connected to the database batch server, handled feature improvements and bug fixes, and troubleshot the toll-free calling app.
- I developed data-migration features for the Smart-DIS data integration and ETL tool and made Oracle queries work with MariaDB.
- I made Linux-only features available on Windows, replaced online-dependent libraries with alternatives that worked on the intranet, and then wrote the operations manual.
Datalogics
2017.08 - 2019.05 (1 year 10 months) · Infrastructure EngineerPublic-Sector Infrastructure Build and Operations
Public-Sector Infrastructure Build and Operations
Tech Stack
Linux
Server
Network
L2/L3
Firewall
IPS
TMS
Backup
- For operations and maintenance at the Office for Government Policy Coordination, I managed servers in Sejong and Seoul, L2 and L3 network equipment, firewall, IPS, and TMS security appliances, and backups, and handled incident recovery, security-audit responses, and preparation for National Assembly inspections.
- For the Social Security Information Service advancement project, I handled equipment inspection, rack mounting, and installation testing.
- For child-protection agency builds and maintenance, I dismantled and reinstalled equipment for a call-center relocation and set up new agencies.
External Activities
2020.03
Hybrid App and Web Developer Training Program
- To transition from infrastructure to software development, I studied Java and Spring-based web development, REST APIs, and the fundamentals of Android and iOS app development.