Hydrogen
Commerce primitives for you and your coding agents. Add cart, products, money, and accounts to the framework you already use.
가챠·캡슐토이 쇼핑몰 NextGacha — 1인당 같은 상품 최대 5개까지
Translation pending
CommerceTypeScript · JavaScriptGitHub @llmeajinllOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
요즘 정가에 물건을 구매해 웃돈을 붙여서 파는, 일명 되팔램이 중고거래에 성행하면서 정작 갖고 싶어하는 사람들이 돈을 더 주고 사야하는 불편함이 늘어나고 있습니다. 또 같은 제품을 파는 가게가 저렴한 가게의 제품을 대량 구매한 후 가격을 올려서 팔아 소비자들이 같은 제품을 비싸게 주고 사야하는 경우가 많아지고 있습니다. 이런 불편함을 줄이기 위해 한 사람당 한 물건을 최대 5개까지만 구매할 수 있는 정책을 추가한 쇼핑몰을 만들게 되었습니다. 전시용, 보관용, 예비용1, 예비용2, 선물용으로 생각해서 넉넉하게 5개로 정하게 되었습니다. 배포 사이트 : https://nextgacha.vercel.app 관리자 페이지 : https://nextgacha.vercel.app/manager 1. 사람1이 A가챠의 a캐릭터를 5개 구매 • 상품 확인, 배송중 상태일 때 사람1은 A가챠 a캐릭터는 구매 불가능, A가챠 b캐릭터 / B가챠 a캐릭터는 각각 5개 구매 가능 • A가챠의 a캐릭터 3개가 배송 완료가 되면 사람1은 A가챠 a캐릭터를 다시 최대 5개까지 구매할 수 있음Read the full README ↗
요즘 정가에 물건을 구매해 웃돈을 붙여서 파는, 일명 되팔램이 중고거래에 성행하면서 정작 갖고 싶어하는 사람들이 돈을 더 주고 사야하는 불편함이 늘어나고 있습니다. 또 같은 제품을 파는 가게가 저렴한 가게의 제품을 대량 구매한 후 가격을 올려서 팔아 소비자들이 같은 제품을 비싸게 주고 사야하는 경우가 많아지고 있습니다. 이런 불편함을 줄이기 위해 한 사람당 한 물건을 최대 5개까지만 구매할 수 있는 정책을 추가한 쇼핑몰을 만들게 되었습니다.
전시용, 보관용, 예비용1, 예비용2, 선물용으로 생각해서 넉넉하게 5개로 정하게 되었습니다.
배포 사이트 : https://nextgacha.vercel.app 관리자 페이지 : https://nextgacha.vercel.app/manager
사람1이 A가챠의 a캐릭터를 5개 구매
사람1이 A가챠의 a캐릭터 3개 구매
1명 (기획, 프론트, 백, 디자인)
| 분류 | 기술 |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Database | MongoDB |
| Auth | NextAuth v5 (카카오 OAuth) |
| 결제 | TossPayments SDK |
| 서버 상태 | TanStack React Query v5 |
| 전역 상태 | Jotai |
| 스타일링 | Vanilla Extract |
| 이미지 저장 | Vercel Blob |
| 테스트 | Node test runner (node:test) |
| 배포 & 모니터링 | Vercel |
장바구니(보유) + 배송중(keep) + 임시 수량을 실시간으로 합산해 최대 5개를 넘지 않도록 검증합니다. 재고가 5개 미만이면 재고 수를 상한으로 적용합니다.
총 소유 = 장바구니 수량 + 배송중 수량 + 현재 선택 수량
유효 상한 = min(5, 재고)
추가 가능 여부 = 총 소유 < 유효 상한
검증은 클라이언트(hook), API, 결제 확인 시 3단계로 이루어집니다.
결제 승인 시 포인트 차감 → 재고 감소 → 주문 생성 → 장바구니 초기화를 MongoDB 트랜잭션으로 묶어 원자성을 보장합니다. 어느 단계에서든 실패하면 전체 롤백됩니다.
await mongodbSession.withTransaction(async () => {
await reducePoint({ ... });
await reduceStock({ ... });
await addOrder({ ... });
await resetCart({ ... });
});
장바구니 수량 변경 시 서버 응답을 기다리지 않고 UI를 즉시 업데이트합니다. 요청 실패 시 이전 상태로 자동 복원합니다.
| 구분 | 저장소 | 설명 |
|---|---|---|
| 임시 장바구니 | Jotai (메모리) | 상품 상세 페이지에서 수량 조정 |
| 실제 장바구니 | MongoDB | 담기 버튼 클릭 후 DB에 저장 |
실수로 장바구니에 추가되는 상황을 방지하고 탐색 중 자유로운 수량 조정을 지원합니다.
장바구니 조회 시 $facet으로 장바구니, 배송중 항목, 재고 데이터를 단일 쿼리로 동시에 가져옵니다. 품절된 상품은 자동으로 장바구니에서 제거됩니다.
src/components/
├── atoms/ # 버튼, 태그, 슬라이더 등 기본 단위
├── molecules/ # 카드, 검색바, 장바구니 항목 등 조합
├── organisms/ # 헤더, 모달, 구매 패널 등 독립 섹션
├── templates/ # 페이지 레이아웃
└── pages/ # 페이지 단위 컴포넌트
src/
├── app/
│ ├── (router)/ # 사용자/관리자 페이지
│ ├── api/ # API 라우트 (30+)
│ └── hooks/ # 커스텀 훅
├── components/ # Atomic Design 컴포넌트
├── lib/ # 서버 유틸리티 (결제, 재고, 주문)
├── jotai/ # 전역 상태 정의
├── api/ # 서버 데이터 페칭 함수
├── shared/ # 공유 타입 및 유틸
└── styles/ # 전역 테마
Vanilla Extract를 사용해 빌드 타임에 CSS를 생성합니다. 런타임 오버헤드 없이 타입 안전한 스타일링이 가능합니다.
/api/protected/*, /mypage/* 는 미들웨어로 보호