Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗운동(유산소 / 근력)을 기록하면 정해진 규칙으로 하루 점수가 매겨지고, 이번 달 누적 점수가 지난달 같은 기간보다 높아졌는지 보여주는 개인 운동 기록 웹앱입니다. 연속으로 운동하면 3일째부터 보너스가 붙습니다. "작심삼일을 넘겨라."
여러 사람이 각자 계정으로 쓰고, 각자 자기 기록만 봅니다.
하루 점수 = 운동 점수 + 연속 보너스 + 인증샷 (하루 최대 23점)
| 항목 | 규칙 | 하루 최대 |
|---|---|---|
| 운동 점수 | 유산소 분 × 강도(1~3) ÷ 9 + 근력 세트 수 × 1. 하루 기록을 모두 합친 뒤 20점 상한 | 20 |
| 연속 보너스 | 연속 1일차 0, 2일차 +1, 3일차부터 +2. 하루라도 쉬면 다시 1일차. 월이 바뀌어도 이어짐 | 2 |
| 인증샷 | 운동한 날 인증 사진을 1장 이상 올리면 +1 (여러 장이어도 1점). 촬영 또는 앨범에서 선택 | 1 |
전체 규칙은 CLAUDE.md에 있습니다.
| 화면 | 내용 |
|---|---|
| 로그인 / 회원가입 | 아이디 + 비밀번호, 30일 자동 로그인 |
| 홈 | 이번 달 누적 점수와 지난달 같은 기간 대비, 연속 배너, 요약 3칸, 이번 주 흐름, 오늘 점수 |
| 운동 추가 | 유산소(종목·시간·강도) / 근력(부위·세트·메모), 인증샷(촬영 또는 앨범), 오늘 완료한 운동 |
| 기록 | 월 캘린더(운동한 날·쉰 날·점수 농도), 날짜 상세, 주차별·월별 점수 추이 그래프 |
| 멀티 | COMING SOON (이번 버전에서는 구현하지 않음) |
하단 탭 바: 홈 / 운동 추가 / 기록 / 멀티. 화면 디자인 기준은 stitch/ 폴더입니다.
api/index.js)@neondatabase/serverless)node:testapi/index.js Vercel 서버리스 진입점 (lib/app.js를 내보냄)
lib/app.js Express 앱, 모든 API 라우트
lib/db.js Neon 연결, 테이블 자동 생성
lib/auth.js 회원가입·로그인, 서명 쿠키
lib/date.js 한국 시간 기준 날짜 계산
lib/score.js 점수 계산 (순수 함수)
lib/home.js, records.js, workouts.js, photos.js 화면별 데이터 조립·검증
public/ 화면 (Vercel 정적 배포 폴더)
scripts/ 예시 데이터 스크립트 (로컬 전용)
test/ node:test 테스트
npm install
cp .env.example .env # 아래 환경변수를 채운다
npm run dev # http://localhost:3000 (코드를 바꾸면 자동 재시작)
| 이름 | 설명 |
|---|---|
DATABASE_URL | Neon 연결 문자열 (Neon 대시보드 > Connect) |
SESSION_SECRET | 쿠키 서명용 긴 랜덤 문자열 (32자 이상). 예: node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))" |
BLOB_READ_WRITE_TOKEN | Vercel Blob 토큰 (Vercel 프로젝트 > Storage > Blob) |
.env는 Git에 올리지 않습니다. 테이블은 첫 요청 때 자동으로 만들어집니다.
npm test # DB 없이 도는 테스트 (DB가 필요한 테스트는 건너뜀)
npm run test:db # .env의 실제 DB·Blob까지 사용하는 전체 테스트 (테스트 계정은 끝나면 지움)
화면을 확인할 때 쓰는 로컬 전용 스크립트입니다. API나 화면에서는 실행할 수 없습니다.
npm run seed -- <아이디> # 지난달 1일 ~ 오늘 예시 기록
npm run seed -- <아이디> --months 6 # 6개월 전 1일 ~ 오늘
npm run clear-demo -- <아이디> # 예시 기록만 지우고 가입일을 원래대로
[예시] seed-demo가 붙습니다. clear-demo는 이 표시가 있는 기록만 지우고, 직접 입력한 기록은 남깁니다.seed는 가입일을 예시 시작일로 바꿉니다. 원래 가입일은 scripts/.demo-signup.json(Git 제외)에 보관했다가 clear-demo가 되돌립니다.ap-southeast-1(싱가포르)에 있습니다.vercel.json을 따릅니다 (빌드 명령 없음, 정적 폴더 public).vercel.json의 "regions": ["sin1"](싱가포르)입니다. DB와 같은 지역이라 쿼리가 빠릅니다. DB 지역을 바꾸면 이 값도 맞춰 주세요.BLOB_READ_WRITE_TOKEN이 자동으로 등록됩니다.DATABASE_URL, SESSION_SECRET을 Production(필요하면 Preview도)에 등록합니다. SESSION_SECRET은 로컬과 다른 새 값을 권장합니다.main 브랜치에 push하면 자동으로 배포됩니다.Secure; HttpOnly; SameSite=Lax가 붙었는지 봅니다.동작 방식:
public/은 정적 파일로 배포됩니다./api/* 요청은 api/index.js 함수 하나(Express 앱)가 처리합니다./api/me 401을 받고 로그인 화면으로 보냅니다.lib/date.js가 한국 시간으로 계산합니다.npm audit에 high 4건이 표시됩니다.
@vercel/blob → @vercel/oidc → @vercel/cli-config → [email protected] 경로입니다. @vercel/cli-config가 최신 버전에서도 zod를 4.1.11로 고정해 두어서, @vercel/blob을 최신(2.8.2)으로 써도 수정된 zod(4.6.6 이상)로 올라가지 않습니다.@vercel/[email protected]으로 내리는 것(npm audit fix --force)인데, 메이저 다운그레이드라 비공개 저장 기능이 보장되지 않아 적용하지 않았습니다.zod는 Vercel CLI 설정 파일을 읽을 때만 쓰이고, 사용자 입력은 거치지 않습니다. 상위 패키지가 고정을 풀면 업데이트합니다.