짧은 안부부터 오늘의 이야기까지. 당신의 한 줄이 머무는 작은 방명록입니다. 개발자 이기정 · 202204243.
Translation pending
SocialTypeScript · CSSGitHub @dlrlwjd1OnlineOwner 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
이기정 202204243 — Next.js와 Neon Postgres 미니 방명록
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
로그인 없이 이름, 메시지, 글 비밀번호를 입력해 인사를 남기는 방명록입니다. 글을 수정·삭제할 때 작성 시 정한 비밀번호를 서버에서 검증합니다. • 작성: 이름(1~30자), 메시지(1~1,000자), 비밀번호(4~128자). • 조회: 전체 글을 최신 작성 순으로 표시. 이름·메시지·작성 시각(KST)을 함께 표시. • 수정: 올바른 비밀번호로 메시지만 변경. 이름·작성 시각·정렬 순서는 유지. • 삭제: 확인창에서 비밀번호를 검증한 뒤 삭제. • 비밀번호 오류: 수정·삭제 모두 HTTP 403과 한국어 안내. 기존 글은 유지. • UI: 개발자 이름과 학번, 반응형 화면, 키보드로 조작 가능한 대화상자. • 프로젝트 이름: GitHub·Vercel·Neon 모두 guestbook-202204243.Read the full README ↗
개발자: 이기정 · 학번: 202204243
로그인 없이 이름, 메시지, 글 비밀번호를 입력해 인사를 남기는 방명록입니다. 글을 수정·삭제할 때 작성 시 정한 비밀번호를 서버에서 검증합니다.
guestbook-202204243.Next.js App Router · TypeScript · React · Neon Postgres · Vercel. ORM 없이 parameterized SQL을 사용합니다. 비밀번호는 무작위 salt와 scrypt 해시로 저장하며 조회 API는 해시·salt·비밀번호를 반환하지 않습니다. 생성/수정/삭제는 서버에서 입력을 검증하고 동일 출처 및 요청 횟수 제한을 적용합니다.
npm ci
cp .env.example .env.local
npm run dev
.env.local의 DATABASE_URL에 Neon pooled 연결, DATABASE_URL_UNPOOLED에 direct 연결을 설정하세요. 실제 이름·학번은 기본값 이기정·202204243이며 환경변수로도 지정할 수 있습니다.
npm run db:migrate
DB 연결이 없으면 로컬에서만 .local-data/guestbook에 PGlite(Postgres WASM)를 생성합니다. Vercel에서는 반드시 Neon 연결을 사용합니다. 로컬 파일 DB는 배포 대체 수단이 아닙니다.
npm test # 실제 Postgres 엔진을 이용한 서비스 동작 테스트
npm run lint
npm run typecheck
npm run build
npx playwright install chromium
npm run test:e2e # 별도 로컬 DB, PC·모바일 CRUD와 비밀번호 거부
실제 Neon 검증은 운영과 분리된 임시 브랜치에서 scripts/verify-database.ts로 실행합니다. 실행 후 검증 글을 삭제합니다. API는 GET/POST /api/entries, PATCH/DELETE /api/entries/:id이며 변경 요청은 JSON입니다.
사용자 요청에 따라 Codex로 진행했습니다. Claude Code 실행 이력으로 표현하지 않습니다.
Matt Pocock의 grill-with-docs → to-spec → to-tickets → implement → code-review 스킬을 사용합니다. 최초 구현에서는 정식 grilling 인터뷰를 생략했습니다. 이후 Codex에서 인터뷰를 진행해 사용자 답변을 기록했으며, 보완 명세·티켓은 사용자 요청으로 개발을 제외하여 보류했습니다. 이를 전체 절차의 소급 완료로 표현하지 않습니다. 실제 진행 기록을 참고하세요. 공식 스킬은 Codex용 .agents/skills와 기존 .claude/skills에 보존했습니다.
Vercel 프로젝트의 production 환경변수로 DATABASE_URL, NEXT_PUBLIC_DEVELOPER_NAME, NEXT_PUBLIC_STUDENT_ID를 등록합니다. 마이그레이션은 직접 연결로 실행한 후 배포합니다. DATABASE_URL_UNPOOLED는 마이그레이션용이며 브라우저로 전달하지 않습니다.
비밀번호·토큰이 있는 .env.local, 로컬 데이터, Neon 연결 파일, Vercel 로컬 설정은 Git에서 제외합니다. 별도 운영자 계정/비밀번호는 없으며 각 글의 비밀번호로 해당 글만 관리합니다.
Vercel 프로젝트에 GitHub 저장소가 연결되어 있습니다. main 브랜치에 push하면 프로덕션 자동 배포가 실행됩니다.