← 목록
기타 2026-06-21 4KB 읽기 4분

하마성경월드 고도화 — 하마식 통독 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일로 계산(의도된 습관 지표).