尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證캐스팅스와이프 만드는거 개발진 두명이랑 공유
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗공고 링크 하나로 지원을 받고, 추천·비교·팀 투표로 최종 후보를 정하고, 오디션 일정까지 한 곳에서.
배우는 앱 설치 없이 공유된 링크로 바로 지원합니다. 모바일 퍼스트 반응형 웹(PWA) 입니다.
빠른 시작 · 주요 기능 · 구조 · 협업 가이드 · 로드맵
pnpm install && cp .env.example .env.local && pnpm dev
| 랜딩 | 제작자 스튜디오 |
|---|---|
| 배우 검색 | 팀 보드 |
제작자
| 기능 | 화면 | 내용 |
|---|---|---|
| 프로젝트·배역 | /studio, /studio/projects/new | 4단계 등록 마법사(임시 저장), 프로젝트 수정, 배역별 공개 지원 링크 |
| 지원자 검토 | /studio | 지원자 목록·필터·내부 상태·메모, 공개 결과 단계 관리 |
| 배우 검색 | /studio/actors | 이름·성별·연령·키·지역·특기·경력·가능일 필터, 정렬·페이지네이션, 관심 저장 |
| 배우 추천 | /studio/recommend | 배역 조건과 프로필을 비교하는 조건 기반 적합도 % + 추천 이유 (외부 AI 아님 — 외모 평가·자동 캐스팅 결정 없음) |
| 후보 비교 | /studio/compare | 이상형 월드컵식 VS 토너먼트, 결과 저장 |
| 팀 보드 | /studio/board | 칸반(검토 중→1차 합격→최종 후보→보류), 팀원 하트 투표·댓글, 이메일 초대, 지원하지 않은 배우도 후보로 추가 |
| 오디션 캘린더 | /studio/calendar | 월간/목록 뷰, 채팅에서 확정·조율 중인 오퍼 자동 병합, 장소·대면/비대면, 시간 충돌 감지 |
| 메시지 | /studio (메시지 탭) | 지원자별 채팅, 오디션 시간 제안→배우 선택→확정 |
배우
| 기능 | 화면 | 내용 |
|---|---|---|
| 프로필 관리 | /me/profile | 완성도 %, 사진 업로드(대표 지정), 태그·특기, 필모그래피, PDF 자료실, 출연 불가일, 미리보기 |
| 배우 홈 | /me | 받은 캐스팅 제안 수락/거절, 내 지원 현황, 모집 공고 |
| 지원·현황 | /apply/[slug], /status/[token] | 가입 없이도 링크로 지원 가능, 로그인 배우는 프로필 자동 채움, 오디션 시간 선택 |
요구사항: Node.js 24+, pnpm
pnpm install
cp .env.example .env.local # SESSION_SECRET을 24자 이상 임의 문자열로 수정
pnpm dev
http://localhost:3000 접속 → 데모 계정으로 로그인하거나 새로 가입하세요.
demo1234)| 역할 | 계정 | 설명 |
|---|---|---|
| 제작자 (오너) | [email protected] | 샘플 프로젝트 2개·지원자·오디션 데이터 포함 |
| 제작자 (팀원) | [email protected] | 김감독 — 첫 프로젝트 팀원, 팀 보드 협업 데모용 |
| 배우 | actor01~[email protected] | 프로필 완성된 배우 16명 (검색 공개) |
첫 실행 시 데모 계정·샘플 배역·가상 지원자가 자동 생성됩니다. 끄려면 .env.local에 SEED_DEMO=false.
pg 클라이언트, 비동기 접근 계층은 src/lib/sql.ts (스키마는 src/lib/db.ts가 첫 접속 때 자동 생성)src/lib/auth.ts)data/uploads/ (이미지·PDF, 매직바이트 검증, 5MB)💡 배포: 데이터는 Neon Postgres에 저장되어 서버리스(Vercel)에서도 유지됩니다. 사진·PDF 업로드는 아직 로컬
data/uploads/라서, 영구 저장(Vercel Blob)으로 옮기기 전까지 Vercel에서는 재시작 시 사라집니다.
src/
app/ # App Router 페이지 + API
api/ # roles, applications, actors, board, calendar, compare,
# recommendations, proposals, favorites, auth, uploads ...
studio/ # 제작자: 홈 / actors / recommend / compare / board / calendar / projects
me/ # 배우: 홈 / profile
apply/[slug]/ # 공개 지원 (무가입)
status/[token]/ # 지원자 상태·오디션 응답
lib/
db.ts # 스키마 + 쿼리 (Postgres, 비동기)
accounts.ts # 사용자·프로필·프로젝트·제안
board.ts # 팀 보드(후보·투표·메모)
calendar.ts # 캘린더 이벤트 + 오퍼 병합 ← DB 의존
calendar-grid.ts # 순수 월그리드/충돌 로직 ← 리프 모듈(클라이언트 import 가능)
fit.ts # 적합도 점수 (순수 함수)
compare.ts # 토너먼트 브래킷 (순수 함수)
auth.ts / session-token.ts / validation.ts / profile.ts
tests/ # node:test 단위 테스트 (33개)
docs/ # PRD 보조 문서, API 계약, 기술 설계, 협업 규칙
node_modules/next/dist/docs/ 관련 가이드를 확인하세요. (params는 Promise로 await, cookies() await 등)lib/db.ts·lib/accounts.ts·lib/calendar.ts를 'use client' 파일에서 import하면 pg가 브라우저 번들에 섞여 500이 납니다. 클라이언트는 리프 모듈(calendar-grid.ts, fit.ts, compare.ts, profile.ts)의 타입/순수 함수만 import 하세요.getProducerId()/getActorId()로 역할 검증. 제작자는 자기 프로젝트(팀원 포함)만, 배우는 자기 데이터만.db.ts의 CREATE TABLE IF NOT EXISTS + addColumn() 패턴으로. 기존 DB 마이그레이션 자동.pnpm typecheck # tsc --noEmit
pnpm test # node --test tests/*.test.mjs
pnpm build # next build
pnpm format:check # prettier --check
pnpm format # prettier --write
화면은 390px(모바일) 과 1280px(데스크탑) 두 폭에서 확인하세요.
main에 직접 푸시하지 말고 브랜치 → PR로. 규칙은 docs/COLLABORATION.mdpnpm typecheck && pnpm test && pnpm format — CI 없이 로컬에서 확인.env.local, data/는 gitignore 됨. 새 env 키는 .env.example에 예시로만 추가자세한 계획은 docs/IMPLEMENTATION_BACKLOG.md와 docs/TECHNICAL_DESIGN.md §7을 참고하세요.
팀 프로젝트 — 내부 사용 · Made with 💜 for film crews & actors
Vercel Storage에서 Neon을 프로젝트에 연결하면 DATABASE_URL이 자동으로 들어갑니다. DEMO_MODE=true와 24자 이상 무작위 SESSION_SECRET을 설정하면 제작자·배우 체험 버튼으로 바로 입장하고, 빌드 때 scripts/prepare-demo.ts가 가상 계정·배역·지원자를 Neon에 채웁니다(여러 번 실행해도 중복되지 않음). 데이터는 영구 보존되므로 실제 운영 전에는 DEMO_MODE를 끄세요. 로컬 개발도 같은 DATABASE_URL을 쓰므로, 따로 쓰려면 Neon 브랜치를 만들어 그 연결 문자열을 .env.local에 넣으세요.