친구들과 가능한 시간을 모아 함께 즐길 약속을 잡는, 가입 없는 경량 약속 조율 웹 서비스.
모여 + 樂(즐길 락) — 함께 모여서 즐거운 시간을 만든다.
- Next.js (App Router) + TypeScript + Tailwind CSS v4
- Postgres (Vercel Marketplace의 Prisma Postgres 무료 플랜) + Prisma ORM + Accelerate
- 비밀번호:
bcryptjs/ 검증:zod/ ID:nanoid - 마이그레이션: Prisma Migrate (
prisma/migrations/*)
Vercel 프로젝트(moyeo-rock)에 Prisma Postgres 통합이 연결되어 있으면 다음 명령으로 환경변수가 .env.local에 자동 주입됩니다.
npm i -g vercel # 처음 한 번
vercel link # 처음 한 번 — 이 디렉토리를 Vercel 프로젝트에 연결
vercel env pull .env.local.env.local 에는 아래 변수들이 들어옵니다.
DATABASE_URL=prisma+postgres://... # Accelerate 프로토콜 (런타임 쿼리)
POSTGRES_URL=postgres://... # 직결 (마이그레이션 도구용)
PRISMA_DATABASE_URL=...
APP_SECRET=<랜덤 32자 이상 — 직접 채우거나 Vercel에 등록>
npm install # postinstall 에서 prisma generate 자동 실행최초 1회 / 스키마 변경 시 로컬에서 마이그레이션 파일을 생성합니다.
npx prisma migrate dev --name init생성된 prisma/migrations/* 폴더는 git에 커밋합니다. 배포 시 npm run build 가 prisma migrate deploy && next build 를 실행하므로 운영 DB에 자동 적용됩니다.
npm run devgit push # Vercel 자동 배포
# 또는
vercel deploy로컬에서 빌드만 검증하려면 DATABASE_URL 이 채워진 상태에서 npm run build 를 실행합니다.
| 라우트 | 화면 |
|---|---|
/ |
랜딩 |
/new?step=1~5 |
약속 만들기 (5단계 multi-step) |
/e/[slug] |
이벤트 페이지 — 참여하기 / 참여 현황 |
/e/[slug]/manage |
호스트 관리 (수정/삭제) |
| 메서드 | 경로 | 동작 |
|---|---|---|
| POST | /api/events |
이벤트 생성 |
| GET | /api/events/[slug] |
이벤트 + 응답 조회 |
| PATCH | /api/events/[slug] |
메타 수정 (관리비번 검증) |
| DELETE | /api/events/[slug] |
이벤트 삭제 (관리비번 검증) |
| POST | /api/events/[slug]/access |
접근 비번 검증 → 쿠키 발급 |
| POST | /api/events/[slug]/responses |
응답 UPSERT (이메일 키) |
| 테이블 | 핵심 컬럼 |
|---|---|
events |
slug (PK), name, date_start/end (DATE), excluded_dates (JSONB), time_start/end (SmallInt), access_password_hash (NULL 허용), admin_password_hash, created_at/updated_at (Timestamp(3)) |
responses |
id (BigInt), event_slug (FK CASCADE), name, email (정규화), available_slots (JSONB), unavailable_slots (JSONB), submitted_at/updated_at (Timestamp(3)). UNIQUE (event_slug, email) |
응답은 (event_slug, email) UPSERT로 누적/수정됩니다. 같은 이벤트에서 같은 이메일은 하나의 행만 존재.
심야게임방 © 2026