Overview
A two-person side project built with a UI designer (started February 2026, currently deployed to a stage environment). The designer owns the product concept and UI design; I own all of the engineering end-to-end: database modeling, backend API, frontend and shared UI component library, image-processing service, AWS infrastructure, and CI/CD.
The platform uses interactive SVG venue seat maps as an index: concert-goers submit real photos of the view from the seat they sat in, along with experience ratings (satisfaction, obstructed view, exit time, air-conditioning strength, etc.), so future ticket buyers can click a section on the seat map and see what that seat actually looks like.
Key contributions
Partnered with a designer and independently designed and built the entire system, spanning frontend, backend, database design, and infrastructure architecture
Highlights
- 01
AWS Serverless architecture
Packaged Next.js as a Docker image running on AWS Lambda via Lambda Web Adapter, with static assets served from S3 + CloudFront, keeping compute cost near zero when there is no traffic
- 02
Layered backend with dependency injection
Inspired by NestJS, every domain module follows Route → Controller → Service, with constructor injection so dependencies can be swapped for unit tests
- 03
Single-definition Zod DTOs
Derived every DTO from one Zod schema so a single definition is shared by the frontend, the backend, and data validation, covering request validation, response field filtering, and shared types
- 04
Chained middleware for the Next.js proxy
Reworked the Next.js proxy with a generic
chain()that composes route guards into a chain of responsibility, so adding a rule only takes one more factory - 05
Standalone image-processing service
Split watermarking and resizing into a separate image-processor Lambda triggered by S3 events and CDN requests, keeping image uploads and processing entirely off the main app to reduce its load
- 06
On-demand resizing with abuse protection
CloudFront routes
/resize/*through API Gateway to Lambda for on-the-fly resizing, with a 200/400/800 width whitelist preventing cache-busting cost attacks - 07
Monorepo engineering
Managed three modules with pnpm Workspaces + Turborepo, with the shared UI library bundled by tsup and deployed as a standalone Storybook site