尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证심리 설문
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗심리학 연구에 특화된 설문 플랫폼입니다. 연구자가 심리척도를 등록하고 역문항·하위요인을 설정해 설문을 생성·배포하면, 응답자의 응답을 자동 채점하고 관리자에게 기술통계와 원자료 내보내기를 제공합니다.
일반적인 설문 도구와 달리 척도를 재사용 단위로 관리하고, 버전·잠금으로 과거 응답의 재현 가능성을 보장합니다.
prisma/
schema.prisma # 도메인 모델 (16개 엔티티)
seed.ts # 관리자 + 샘플 척도/설문 seed
src/
app/
(auth) login, register, privacy
surveys/ # 응답자: 내 설문
s/[publicId]/ # 설문 안내/시작
respond/[id]/ # 응답 화면(자동저장) + 완료
result/[id]/ # 응답자 결과
admin/ # 관리자 콘솔(대시보드/척도/설문/응답/통계)
api/ # Route Handlers (인증/척도/설문/응답/통계/내보내기)
lib/
scoring.ts # 채점 순수 함수 (테스트됨)
statistics.ts # 기술통계 순수 함수 (테스트됨)
shuffle.ts # 문항 무작위화 (테스트됨)
scoreResponse.ts # DB 채점 파이프라인
surveyStats.ts # 설문 모니터링/통계 집계
export.ts # CSV/XLSX/코드북 생성
auth.ts, http.ts, validation.ts, audit.ts, lock.ts ...
tests/
unit/ # scoring, statistics, shuffle
integration/ # DB 기반 채점 파이프라인
e2e/ # Playwright 핵심 시나리오
.env.example 를 복사해 .env 를 만듭니다.
| 변수 | 설명 |
|---|---|
DATABASE_URL | 애플리케이션 런타임용 PostgreSQL 연결 문자열 (Supabase 는 pooler/6543 권장) |
DIRECT_URL | 마이그레이션용 직접 연결 (Supabase 는 5432) |
SESSION_SECRET | 세션 관련 비밀키 (긴 랜덤 문자열) |
NEXT_PUBLIC_APP_URL | 배포 도메인 (QR/배포 URL 생성) |
SEED_ADMIN_EMAIL / SEED_ADMIN_PASSWORD | 초기 관리자 계정 (seed) |
실제 비밀번호·비밀키는 저장소에 커밋하지 마세요.
# 1) 의존성 설치
npm install
# 2) 로컬 PostgreSQL (Docker)
docker compose up -d
# 3) 마이그레이션 + seed
npm run prisma:migrate # 스키마 반영
npm run db:seed # 관리자 + 샘플 척도/설문
# 4) 개발 서버
npm run dev # http://localhost:3000
npm run prisma:migrate # 개발: 마이그레이션 생성/적용
npm run prisma:deploy # 배포: 기존 마이그레이션 적용
npm run prisma:generate # Prisma Client 생성
npm run db:seed
npm test # 단위 + 통합 (Vitest, DB 필요)
npm run test:e2e # E2E (Playwright, dev 서버 + seed 필요)
npm run typecheck # 타입 검사
npm run lint # ESLint
seed 로 생성됩니다. 기본값은 .env 의 SEED_ADMIN_EMAIL / SEED_ADMIN_PASSWORD (예: [email protected] / Admin1234!). 배포 전 반드시 변경하세요.
convertedScore = maxScore + minScore - rawScore (일반 문항은 원점수와 동일)Participant 익명 코드 사용)canViewPii) 있는 관리자만survey_{surveyId}_{yyyyMMdd_HHmm}.{csv|xlsx}이 앱은 Supabase를 Postgres 호스트로만 사용합니다. @supabase/supabase-js·anon 키·Data API는 사용하지 않으며, DB 접근은 서버사이드 Prisma뿐입니다.
public 테이블에 Row-Level Security를 켜 두었고, anon/authenticated용 허용 POLICY는 없습니다(deny-by-default). Prisma 연결(테이블 오너)은 RLS를 우회합니다.RESEARCHER는 본인이 만든 Scale/Survey(및 그 응답)만 관리합니다. ADMIN은 전체 접근. 타 연구자의 PUBLISHED/LOCKED 척도 버전만 설문에 부착할 수 있습니다.SESSION_SECRET으로 세션 쿠키(psych_session)에 HMAC 서명을 적용합니다. 프로덕션에서는 반드시 긴 랜덤 값을 설정하세요.rls_disabled_in_public이 사라졌는지 확인하고, DB 비밀번호·시드 관리자 비밀번호를 기본값에서 회전하세요.DATABASE_URL(pooler), DIRECT_URL(direct) 확보DATABASE_URL, DIRECT_URL, SESSION_SECRET, NEXT_PUBLIC_APP_URL)prisma generate && next build (기본 npm run build 에 포함)npm run prisma:deploy && npm run db:seed대시보드 추이 그래프, 박스플롯, 결과지 PDF, 이메일 일괄 발송, SPSS/R 내보내기 프리셋, 척도 라이브러리, 논문 PDF 척도 추출(P2) 등.
문서 15장의 관리자·응답자·분석 시나리오가 실제 DB 흐름으로 동작하며, scripts/smoke.mjs 및 Vitest/Playwright 테스트로 검증됩니다.