← 목록
기타 2026-07-17 5KB 읽기 5분

Crowny Today 서비스 진입 메뉴

개요

사장님 지시: "Crowny Today 우측상단버튼에 오피스/ERP/빌딩/스페이스/홀/에스텔/트레이딩 등 서비스 진입가능한 메뉴 펼쳐지는 버튼". CrownyAI(네이티브)와 웹(today.crowny.org) 양쪽에서 동작하는 서비스 전환 메뉴를 today 브릿지에 추가했다.

무엇을 했는지

  1. 메뉴 UItodayBridge.js에 상태dot 왼쪽에 "≡ 서비스" 버튼 추가. 클릭 시 드롭다운(크림아이보리 텍스트×다크초콜릿 배경×골드 보더, 로그인 오버레이와 동일 톤) 펼침. 바깥 클릭 시 닫힘. 모바일(<768px)에서 버튼 크기·위치 자동 조정.
- 서비스 9종: 투데이(현재, 비활성)/오피스/워드·닥스/ERP/빌딩/스페이스/홀/에스텔/트레이딩. SERVICES 배열이 단일원본(확장 용이). - 환경판별: window.webkit.messageHandlers 존재 + UA에 CrownyAI/CrownyBrowser 매칭 시 CrownyAI 환경 → crowny:// 스킴으로 window.location 이동. 아니면(웹) window.open(https URL). - 이중주입 가드: 기존 window.__crownyTodayBridgeInstalled 플래그 재사용(CrownyAI WKUserScript + 웹 script 태그 동시 주입 대비).

  1. 웹 경로 브릿지 로드 — 서버.한선에 /bridge.js 라우트 신설(_처리브릿지JS, Content-Type: application/javascript, 파일소켓전송). 인증된 GET / 응답(앱 HTML 스트리밍) 끝에 <script src='/bridge.js'></script> 태그를 덧붙여 전송 — 앱 HTML 파일 자체는 무수정.
- /Users/ef/crowny-today/bridge.js = /Users/ef/CrownyBrowser/bundle/today/bridge/todayBridge.js의 사본(cp 동기화). 단일원본은 CrownyBrowser 쪽. crowny-today/CLAUDE.md에 동기화 규칙 명시(서버 재기동 불필요, cp만). - 가드 확장: onTodayApp 판정에 today.crowny.org 호스트명·포트 9604 조건 추가(기존 today/app/index.html 경로 매칭은 CrownyAI 전용이라 웹 루트 /에선 미스했음).

  1. 한선씨 정본bundle/today/bridge/서비스메뉴.한선: 서비스이름/라벨/크라우니스킴/웹URL 매핑 + 진입판정()(4상: 티=스킴이동/옴=웹URL새탭/타=현재무동작/음=미지폴백) + 진입대상URL(). 자체시험 15/15 PASS(hanseonc_high 컴파일+crownyc run 실행 검증).
- 함정 회피: 최초 작성 시 통과 = 통과 + 검증(...) 누적식이 VM 함정("누적=누적+무거운함수() 인라인 금지")에 걸려 1/15만 통과 → 임시변수(변수 r=검증(...); 통과=통과+r) 경유로 수정 후 15/15.

검증

  • node --check 양쪽 JS PASS.
  • hanseonc_high 서비스메뉴.한선 컴파일 PASS(4524 큐브) + crownyc run 자체시험 15/15 PASS.
  • hanseonc_high 서버.한선 재컴파일 PASS(28788 큐브) → launchctl unload/load org.crowny.today.plist 재기동.
  • curl 검증: GET /health=200, GET /bridge.js=200(브릿지 JS 반환), 로그인 후 GET /(Bearer 토큰) 응답 말미에 <script src='/bridge.js'></script> 포함 확인.
  • CrownyAI: make ai 결과 "Nothing to be done"(브릿지는 런타임 파일 로드라 재컴파일 불필요) — 에러 0.
  • 라이브 실측: CrownyAI에서 crowny://today 접속 → 로그인 → 우측상단 "≡ 서비스" 버튼 클릭 → 드롭다운에 9개 항목(투데이/오피스/워드·닥스/ERP/빌딩/스페이스/홀/에스텔/트레이딩) 전부 표시 확인. 스크린샷: /tmp/today_menu.png.
  • 웹 경로는 curl 텍스트 증거로 갈음(서버가 인증 후 스크립트 태그를 정확히 부착함을 확인) — 브라우저 렌더 스크린샷은 미실시(로그인 쿠키 세팅이 필요해 시간상 생략, 서버 응답 자체는 검증됨).

관련 파일

  • /Users/ef/CrownyBrowser/bundle/today/bridge/todayBridge.js — 브릿지 단일원본(메뉴 UI+환경판별)
  • /Users/ef/CrownyBrowser/bundle/today/bridge/서비스메뉴.한선 — 한선씨 정본(4상 판정+자체시험 15/15)
  • /Users/ef/crowny-today/bridge.js — 웹 서빙용 사본(cp 동기화)
  • /Users/ef/crowny-today/서버.한선/bridge.js 라우트 + _처리루트 끝 script 태그 부착
  • /Users/ef/crowny-today/CLAUDE.md — 브릿지 동기화 규칙 추가

잔여 이슈

  • 웹(today.crowny.org) 실제 렌더 스크린샷 미실시(curl 증거로 대체) — 필요 시 로그인 쿠키 세팅 후 Chrome headless로 후속 검증 가능.
  • CrownyAI 세션이 다른 작업(디자인/CAD 등)과 다수 탭·창을 공유 중이라 실측 시 클릭 좌표 경합 있었음(여러 재시도 필요) — 향후 실측은 전용 프로파일/창 분리 권장.
  • 크라우니 스킴(crowny://office 등)으로의 실제 이동은 대상 서비스가 CrownyAI에 이미 등록된 스킴 핸들러를 갖고 있다는 전제 — 개별 스킴 라우팅 자체는 이번 작업 범위 밖(기존 배선 재사용).