project.crowny.org 협업보상 UI v2
개요
project.crowny.org 협업 보상 시스템의 프론트엔드 UI를 순수 한선씨로 작성. 6개 화면을 단일 한선씨 모듈이 HTML/CSS/JS 문자열을 생성해 응답하는 TCP HTTP 서버로 구현. 백엔드(reward:9738, projint:9758, wallet:9410)는 이미 가동 중이며 UI는 이 위에 얹는다.
핵심 원칙: "분배는 한 번 시작하면 멈출 수 없다" — 그래서 분배 화면은 2단 확인 모달 + 미입금 WAL 화면 + 자동 폴링으로 안정성·가시성 강화.
무엇을 했는지
- 신규 모듈 작성:
/Users/ef/crowny-project/보상UI v2.한선(약 290줄, 함수 17개) - 6 화면 라우팅:
/ — 프로젝트 목록 (GET projint:9758/api/projects, sessionStorage에 선택 PID 보존)
- /contribute — 기여 등록 폼 (7유형 select + 점수/설명, POST reward:9738/api/contribute)
- /pool — 풀 충전 (CRN/FNC/CRM + 관리자 토큰, POST reward:9738/api/pool/create)
- /distribute — 분배 실행 (2단 확인 모달 + 위험 경고 + 결과 테이블)
- /rewards — 실시간 이력 (5초 폴링, CRN 기준 사용자별 막대 차트 + 누적 합계)
- /wal — 헬스체크 + 미입금 WAL 재시도 (POST reward:9738/api/retry)
- 공통 인프라: 다크 모드 verdant 스타일 (arch.crowny.org 톤), 상단 헬스 인디케이터, 토스트 알림, 모달, 6탭 네비게이션, 공통 fetch 래퍼
- 보안 처리: 관리자 토큰은
<input type=password autocomplete=off>+ 폼 제출 직후clearTok()로 즉시 비움. localStorage 저장 안 함. 프로젝트 ID만 sessionStorage 사용 (세션 만료 시 휘발). - 한선씨 함정 회피:
변수 _더미 = 0 — 첫 변수 1 평가 우회
- 예약어 회피: method → mm, 메서드 → 요청방식추출
- 함수명에 가져오기 미포함
- TCP읽기(cl, 4096) 2인자 명시
- 배열은 추가/꺼내 사용
- 컴파일 검증:
./hanseonc_high "보상UI v2.한선"→ 2227 토큰, 79428 큐브,/tmp/보상UI.toau2.2MB 생성, exit=0 - 포트 등록:
crowny-ports.sh set reward-ui 9764(9760은 flexible.crowny.org 점유 — 9764로 변경. gateway.yaml + PORTS.md 자동 갱신) - 실 기동 검증:
./crownyc run /tmp/보상UI.toau백그라운드 실행 → 9764 LISTEN - 응답 검증 (전 화면 HTTP 200):
/health | 200 | 79 B (JSON) |
| / | 200 | 9541 B |
| /contribute | 200 | 10593 B |
| /pool | 200 | 10416 B |
| /distribute | 200 | 11276 B |
| /rewards | 200 | 10483 B |
| /wal | 200 | 9689 B |네비게이션 6 라벨 전부 렌더 확인.
- 패턴 학습:
crownycode-learn.sh add "보상UIv2"완료 — 다음 세션에서 재사용 가능
관련 파일
/Users/ef/crowny-project/보상UI v2.한선— 신규 UI 모듈/Users/ef/crowny-project/보상대시보드.한선— 기존 단일 페이지 UI (129줄, 그대로 둠)/Users/ef/crowny-project/보상분배서버.한선— 백엔드 reward:9738 (확인용 참조만)/Users/ef/crowny-project/프로젝트통합서버.한선— projint:9758 (확인용 참조만)/tmp/보상UI.toau— 컴파일 결과 (재생성 가능)~/.claude/knowledge/PORTS.md—reward-ui → :9764신규 등록
빌드/실행
bashcd /Users/ef/CrownyOS/crownyc
./hanseonc_high "/Users/ef/crowny-project/보상UI v2.한선" > /tmp/보상UI.toau
./crownyc run /tmp/보상UI.toau
# → http://localhost:9764
잔여 이슈
- gateway 노출:
gateway.yaml에reward-ui항목은 자동 등록됐으나, 실제gatewayreload 또는reward-ui.crowny.org도메인 매핑은 미진행 (사용자가 도메인 결정 후 gateway 세션에서 처리 권장). - 포트 변경: 요청은
9760이었지만flexible.crowny.org가 선점 →9764로 양보. 필요 시crowny-ports.sh free 9760 9790으로 재할당 가능. - 백엔드 가동 가정:
reward:9738,projint:9758이 가동 중이어야 화면이 데이터를 표시. 데몬 미가동 시 UI는 "응답 없음" 알림만 표시 (UI 자체는 정상 동작). - wallet 연동 시각화 없음: 현재 화면은 분배 결과만 표시. 개별 사용자의 wallet 잔액 조회 UI는 미구현 (wallet:9410 API 명세 확인 후 추가 권장).
- 인증/RBAC 부재: 관리자 토큰 1단 체크만 존재. auth.crowny.org SSO 연동은 추후 확장.
- CSP/CORS: UI 서버는 자체 HTML을 응답하므로 CSP 불필요. 단, JS가
reward:9738을 직접 호출하므로 reward 서버의 CORSAccess-Control-Allow-Origin: *에 의존 — 백엔드 헤더가 그대로 유지돼야 함.