
Picktable (Woorim) - D2C F&B Commerce PlatformProfessional Work
Picktable is a direct-to-consumer food and beverage commerce platform built for Woorim F&B Inc., delivering premium HMR and meal-kit products direct from the client's own factories.
I served as a full-stack developer across the product lifecycle — the consumer mobile WebView app, the operations admin dashboard, and the NestJS and PostgreSQL API behind both. The platform supports Kakao and Apple social login, Toss Payments and PortOne, bilingual Korean/English localisation, 3PL logistics export, real-time notifications, and a complete order lifecycle from browse to delivery.
Full Stack Developer
Authentication & Security
Implemented JWT authentication with refresh-token rotation and reuse detection.
Built SMS OTP signup and password reset flows.
Integrated Kakao Sync and Apple Sign In.
Implemented role-based access control across consumer and admin applications.
E-commerce
Implemented cart, checkout, order and payment flows.
Integrated Toss Payments including payment retry and bank-transfer flows.
Built exchange, refund and cancellation workflows.
Implemented 3PL export functionality.
Admin Dashboard
Built 12+ admin screens covering products, members, orders, promotions and events.
Implemented bulk product actions, Excel exports and role-based admin access.
Consumer Application
Built 15+ mobile WebView screens.
Implemented product listing, infinite scrolling, search, MyPage, orders, coupons, points and address management.
Implemented banner carousel and touch interactions.
Internationalization & Infrastructure
Added Korean/English localization across consumer and admin interfaces.
Added SEO assets and performance optimizations.
Implemented TypeORM migrations and operational logging.
1. JWT Auth Race Conditions
Problem: The WebView application could show authenticated UI while the authentication cookie had already expired, resulting in 401 responses and refresh retry loops.
Solution: Centralised authentication state using Redux, implemented a typed auth interceptor, and added atomic token handling to prevent OTP race conditions.
2. Checkout Performance
Problem: Sequential SKU and order-item queries created unnecessary database operations during checkout.
Solution: Implemented batch SKU lookups and batch order-item inserts, reducing N+1 query patterns in the checkout flow.
3. Payment Webhook Race Conditions
Problem: Payment webhooks could arrive before the frontend payment redirect completed, creating potential duplicate or inconsistent payment states.
Solution: Implemented idempotent webhook handling, validation around payment identifiers, and Slack notifications for payment failures.
4. 3PL Integration
Problem: The fulfilment partner's export format changed during development, including a carrier change from Hanjin to Lotte.
Solution: Built a configurable export pipeline and updated the format to match the fulfilment partner's requirements while migrating existing carrier data.
Result: Duplicate webhooks, retried OTP submissions and a mid-flight carrier change stopped being incidents and became handled cases. Because the export pipeline takes the format as input rather than hard-coding it, the carrier switch was a configuration edit and a data migration rather than a rewrite.