하마성경월드 고도화 — 하마식 통독 180일 + 회원
개요
hama.crowny.org를 "읽기 전용 브로셔"에서
사용자가 진도를 쌓는 실제 서비스로 고도화.
1차 고도화 = 정은수 소장의 플래그십 프로그램인
하마식 통독 180일을 실제 동작 기능으로 구현
+ 모든 저장 기능의 토대인
독립 계정(이메일+4자리 패스코드) + 게스트 우선.
진단 (고도화 전)
programs.json에 통독·필사·교육·커뮤니티 6개가 적혀있으나 전부 설명 카드뿐, 동작 0.
회원·로그인·진도·저장 전무. 사용자가 실제로 "할 수 있는" 것은 영상 시청/검색/카드 구경뿐.
사용자 결정
- 기능 우선순위: 하마식 통독 180일 (진도/스트릭)
- 회원 방식: 독립 계정 + 게스트 우선 (이메일+4자리 패스코드, 비로그인도 게스트 체험 후 가입 시 동기화)
구현
데이터
data/plan.json (47KB) — 66권 표준 장수(1189장) 기반 결정적 분배. 180일, 6~7장/일.
Day1 창세기1-7 → Day180 요한계시록17-22. 각 날: {day, label, refs, theme(섹션), chapters}.
생성기:
/tmp/gen-plan.js (정경 순서 평탄화 → 180 균등 분할 → 책별 범위 묶음).
백엔드 (server.js, Node/express — 프로덕션)
- 회원:
POST /api/auth/register(게스트 진도 병합), /api/auth/login, GET /api/me.
토큰=randomBytes(24) Bearer, 패스코드=sha256(salt:email:pass), users.json 키=이메일.
- 통독:
GET /api/plan, POST /api/me/toggle{day}, POST /api/me/reset.
진도 요약 summarize(): 완료수·진도율%·연속일(달력 streak)·다음 읽을 날. 진도 저장=
data/progress/<token>.json.
- 영속화: writeAtomic(tmp→rename). 기존 콘텐츠 API(daily/contents/programs/videos/subscribe) 보존.
프런트 (public/)
index.html: nav에 "통독" + 회원 버튼, 통독 섹션(#reading) + 회원 모달(로그인/가입 탭).
js/reading.js: 회원/게스트 통합. 대시보드(진도율 바·완료·연속·다음날), 180일 리스트(완료 토글·필터 전체/미완료/완료·"오늘 여기" 배지·본문 읽기→bible.crowny.org), 게스트 localStorage→가입 시 서버 병합, 낙관적 업데이트.
css/style.css: 통독/회원 컴포넌트(팔레트 gold/navy/coral 일치) +44줄.
한선씨 동반
crowny-data/services/통독진도.한선 — summarize 로직(완료수·진도율천분·다음읽을날·연속완료) 동반.
컴파일+실행 검증 통과. 패턴 학습
통독진도_진도율_연속_다음날_계산.
- 함정 적발: 한선씨
다음읽을날이 0(완독) 오답 → 원인 맵없는키INT_MIN(없는 키는 0 아님).
== 0 →
!= 1로 수정해 server.js와 일치. (메모리 reference_hanseon_suitability_audit 함정 재확인)
검증 (E2E, 로컬+공개)
- /api/plan → 180일 ✓ (게이트웨이 통과)
- 회원가입 + 게스트 2일 병합 → done2/streak2/next3 ✓
- 토글 Day3 → done3/percent1.7/next4 ✓ · 로그인 재현 ✓ · 잘못된 패스코드 401 ✓ · /api/me ✓
- 공개 https://hama.crowny.org/ 200, 통독섹션·reading.js·회원버튼 노출 ✓, ttfb 0.19s
- 테스트 유저/진도 정리 완료
관련 파일
/Users/ef/crowny-hama/server.js (회원+통독 API 추가)
/Users/ef/crowny-hama/data/plan.json (신규), data/users.json·data/progress/ (런타임 생성)
/Users/ef/crowny-hama/public/{index.html, js/reading.js, css/style.css}
/Users/ef/crowny-data/services/통독진도.한선 (한선씨 동반)
~/Library/LaunchAgents/com.crowny.hama.plist (KeepAlive, 1차 복원 시 생성)
잔여 이슈 / 다음 고도화 후보 (사용자 미선택)
- 묵상 저널 + 말씀 필사(타이핑 카운트), 문화렌즈 상세+노트, 영상 즐겨찾기/이어보기, 커뮤니티(통독 그룹·나눔 피드).
- bible.crowny.org 딥링크 포맷 확인 시 "본문 읽기"를 해당 구절로 정밀 연결(현재 ?ref= 쿼리 전달).
- 통독 진도 "달력 streak"는 완료 시각 날짜 기반 — 동일일 다수 완료는 1일로 계산(의도된 습관 지표).