Skip to content

cykim1228/MoyeoRock

Repository files navigation

MoyeoRock — 모여樂

친구들과 가능한 시간을 모아 함께 즐길 약속을 잡는, 가입 없는 경량 약속 조율 웹 서비스.

모여 + 樂(즐길 락) — 함께 모여서 즐거운 시간을 만든다.

기술 스택

  • Next.js (App Router) + TypeScript + Tailwind CSS v4
  • Postgres (Vercel Marketplace의 Prisma Postgres 무료 플랜) + Prisma ORM + Accelerate
  • 비밀번호: bcryptjs / 검증: zod / ID: nanoid
  • 마이그레이션: Prisma Migrate (prisma/migrations/*)

시작하기

1. Vercel 환경변수 가져오기

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에 등록>

2. 의존성 설치

npm install            # postinstall 에서 prisma generate 자동 실행

3. 마이그레이션

최초 1회 / 스키마 변경 시 로컬에서 마이그레이션 파일을 생성합니다.

npx prisma migrate dev --name init

생성된 prisma/migrations/* 폴더는 git에 커밋합니다. 배포 시 npm run buildprisma migrate deploy && next build 를 실행하므로 운영 DB에 자동 적용됩니다.

4. 개발 서버

npm run dev

http://localhost:3000

5. 프로덕션 빌드 & 배포

git push               # Vercel 자동 배포
# 또는
vercel deploy

로컬에서 빌드만 검증하려면 DATABASE_URL 이 채워진 상태에서 npm run build 를 실행합니다.

화면 구조

라우트 화면
/ 랜딩
/new?step=1~5 약속 만들기 (5단계 multi-step)
/e/[slug] 이벤트 페이지 — 참여하기 / 참여 현황
/e/[slug]/manage 호스트 관리 (수정/삭제)

API

메서드 경로 동작
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

About

[SIDE] 모여서 즐기자

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors