E-commerce Core
Built product browsing, cart management with Zustand, and a complete Stripe checkout and order flow.
Solo Project · Full-stack Web App · 2025 - 2026
A full-stack e-commerce platform for selling original photography postcards, featuring Stripe checkout, AI-powered recommendations, and a fully automated CI/CD pipeline.
Role
Design, Development & Deployment
Timeline
2025 - 2026
Next.js

TypeScript

AWS

Stripe

Claude

PostgreSQL

Selling physical prints online requires more than a product page. It needs secure payments, reliable order handling, protection against abuse, and confidence that new code changes will not break checkout. The goal was to build a real store that could be trusted with real transactions, not just a demo.
I built a full-stack Next.js application with Stripe-powered checkout, authenticated accounts, transactional email, and an AI recommender that suggests postcards based on customer preferences. The platform is protected with rate limiting and input validation, and every change is verified by an automated CI/CD pipeline with end-to-end tests before deployment.
Built product browsing, cart management with Zustand, and a complete Stripe checkout and order flow.
Implemented account-based access with NextAuth v5, supporting secure sign-in and protected user flows.
Integrated the Anthropic Claude API to recommend postcards based on customer taste and browsing context.
Set up a GitHub Actions pipeline with Playwright end-to-end tests and deployed to Vercel with Prisma Accelerate.
Prisma provided type-safe database access for orders and products, while Prisma Accelerate handled connection pooling for serverless deployment on Vercel.
API routes needed protection from abuse without a dedicated server, so serverless-friendly Redis rate limiting was the right fit for the Vercel environment.
Because checkout is business-critical, I chose end-to-end tests that exercise real user flows, running automatically in GitHub Actions before every deployment.
Problem
The first Vercel deployment failed with a chain of interconnected issues, including a malformed database URL, top-level await breaking the build, and static generation conflicting with Prisma Accelerate.
Approach
I isolated each failure one at a time, reading build logs carefully, restructuring the auth setup to remove top-level await, and adjusting rendering strategy for database-dependent pages.
Result
The app deployed successfully, and I came away with a much deeper understanding of how Next.js builds, serverless databases, and environment configuration interact in production.
Problem
Automated tests failed in CI due to environment differences, including a Prisma seed incompatibility between tsx and ESM.
Approach
I reworked the seeding setup to be compatible with the CI environment and configured the workflow so tests run against a realistic database state.
Result
The pipeline now catches regressions before they reach production, so I can ship changes with confidence.
A live, deployed store handling real checkout flows with automated quality gates.
Serves as the e-commerce home for my postcard photography brand.
Demonstrates full-lifecycle skills: architecture, payments, testing, security, and deployment.
Built a browsing and cart experience with Zustand state management that persists across the session.
Built a browsing and cart experience with Zustand state management that persists across the session.
© 2025 Yooran Kim. All right reserved.
Built using Next.js, Typescript, Tailwind CSS and Framer Motion :)