← 목록
기타 2026-07-30 6KB 읽기 6분

크라우니 견적도구(quote.crowny.org) — 넥서스 ERP 통합 + 채팅·PDF·카카오 흐름

개요

클로드 디자인 핸드오프 2종(크라우니 견적서 작성도구.html 13.8MB, 크라우니디자인 규칙팩.html 13.7MB — dc base64 번들)을 언팩·패키징해 quote.crowny.org(:9626, crowny-services 한선씨 서비스서버)로 출시하고, 넥서스(:9802) ERP 허브/SD(영업) 모듈에 배선. 채팅 도우미로 견적 작성→PDF→카카오톡 전송 준비 흐름 완성.

무엇을 했나

  1. 언팩: __bundler/template JSON 디코드 + manifest 253리소스(폰트/JS/PNG) 파일화, UUID→assets/ 재작성. React/ReactDOM 선주입(원 로더 대행). 규칙팩은 dc 로직 없음 → 정적 조립.
  2. 서빙: crowny-services registry.psv에 quote|9626 등록(+migrated=한선씨 엔진), 파일소켓전송으로 613KB 무결 서빙(감사게이트 65,535B 캡 실측 후 우회). 게이트웨이/포트/와일드카드cert 공개 HTTPS 4경로 200.
  3. 서버 수리: 서비스서버.한선 하위 디렉토리 index.html 폴백 추가(끝"/" 경로 0바이트 200 함정) — 재컴파일 배포.
  4. 채팅창(chat.js, sonnet 위임): 우하단 「견적 채팅」 → ①어디에(거래처/담당/연락처) ②어떤 견적(품목|규격|수량|단위|단가 멀티라인) ③어디로(카카오톡/파일) ④요약확인 → localStorage(crowny-quote-tool-v1, profiles 필수 계약) 병합 주입 → 리로드로 견적서 자동 채움 → 「PDF로 저장」(window.print)+「안내문구 복사」+「카카오톡 열기」(kakaotalk:// + PDF 끌어놓기 안내).
  5. 한선씨 동반: chat.한선(파싱·공급가·부가세절사·총액 파리티, 컴파일 PASS, 실측 1,600,000/160,000/1,760,000 = 앱 화면 일치), erp/index.한선 QT 모듈행 추가. 뇌 학습 완료.
  6. 넥서스 배선: /app/erp/ 허브에 QT 견적도구 카드(모듈 11), sd.html에 진입 버튼(로컬/공개 호스트 분기). 디자인대조 게이트 PASS(대조스펙 마커), 디자인이식 diff 판정=옴(신규색 0).

관련 파일

  • 서비스: /Users/ef/crowny-services/public/quote/ (index.html, chat.js, chat.한선, rules/, assets/253)
  • 서버: /Users/ef/crowny-services/서비스서버.한선 (+registry.psv, migrated.txt)
  • 넥서스: /Users/ef/crowny-nexus-app/public/erp/{index.html,index.한선,sd.html}
  • 이식 정본: /Users/ef/.claude/design-port/견적서도구/ (원본·이식노트·diff리포트)
  • 검증샷: 세로형 견적서·규칙팩·채팅버튼 렌더 PASS(WKWebView)

잔여 이슈

  • 규칙팩 로드맵 1단계(quotes.save·pricebook.search·share.create 한선씨 MCP 서버, remote 어댑터) 미착수 — crowny-quote/v1 계약 문서는 /rules/ 라이브.
  • 카카오톡은 파일 첨부+문구 붙여넣기 준비까지(계정 자동 전송은 카카오 API 범위 밖, 수동 드래그앤드롭).
  • 채팅 플로우 브라우저 실조작 E2E(입력→리로드→채움)는 코드검토+계약검증까지 — 실사용 1회 확인 권장.

추가 수리 (같은 날 — 넥서스 화면 안 열림 버그)

  • 증상: 넥서스 접속 → 기기분기(3~4초) → /app/tablet/ 이동 후 빈 화면.
  • 원인: 감사게이트.한선 넥서스 정적서빙이 읽기()+적응전송 — 읽기() 65,535B 캡으로 tablet(74KB)/mobile(78KB)/pc(75KB) 페이지가 잘려 서빙(200이라 위장).
  • 수리: 정적서빙을 TCP쓰기 헤더+파일소켓전송(C레벨 스트리밍)으로 교체 + 확장자 없는 경로 index.html 폴백. 재컴파일·kickstart 후 4기기 페이지 파일크기=서빙크기 일치, 태블릿 WKWebView 렌더 PASS, 공개 https 74,412B 일치.

2차 확장 (같은 날 — 사용자 지시 5건)

  1. 넥서스 태블릿 오라우팅 수리: 창너비 기준(≤1279=태블릿) → pointer:coarse 터치 판정으로 교체(데스크탑=너비 무관 PC). 반응형라우터.한선 파리티 5/5. 250ms 인위 지연 제거.
  2. 전환 지연 원인 확정: 백엔드 2ms vs 게이트웨이 경유 첫 요청 간헐 2~4.8s 실측 — 단일스레드 게이트웨이 워커 head-of-line 블로킹. 근본해법=C 데이터플레인(오너 기결정 과제).
  3. 견적 분석도구(analyze.js/analyze.한선): 기존 견적서 붙여넣기·파일첨부·자유서술("명함 200매 장당 500원") → 품명·규격·수량·단위·단가 추출. 만원 환산·단가지시어·합계행 스킵. JS/한선 파리티 4케이스 일치.
  4. PDF로 출력 버튼: 크라우니AI WKWebView의 window.print() 브릿지 누락이 원인 — caJsPrint WKUserScript+메시지핸들러로 ⌘P 파이프라인(caPrintOfficeDocument) 연결. make ai+install-ai-app.sh+심볼가드(CrownyJsPrint=1). 앱 재시작 후 GUI 육안 잔여. 일반 브라우저는 원래 정상.
  5. 거래처 스크리닝(screen.js/screen.한선): 사업자등록증/명함/서명 텍스트 → 상호·담당(이름+직급 결합 토큰 우선, 4케이스 게이트)·전화·이메일·사업자번호·주소. 채팅 1단계 통합.
  6. 엑셀 매칭(xlsx.js/xlsx.한선): 라이브러리 0 xlsx 파서(ZIP 수동+DecompressionStream deflate-raw+정규식 XML — DOMParser 제거로 node 실검증 가능화). 헤더 사전으로 items/clients 모드 자동판정. 실 xlsx 2본(품목형·거래처형) E2E PASS. 채팅 2단계 .xlsx 첨부 통합.

3차 확장 (07-31 — 사용자 지시 7건)

  1. 비고란 줄바꿈: input 9곳→auto-grow textarea(총 11), 인쇄 시 전량 표시.
  2. 사업자사본/통장사본 업로드: profiles·clients 각 2필드(dataURL, 이미지 1200px 리사이즈, PDF 2MB 게이트).
  3. PDF 배율: 헤더 셀렉트 70~110%, @media print zoom만 적용. up() allowlist 함정(명시 필드 목록) 재확인.
  4. 품목→사양서 동기화: 「사양서로 동기화」 버튼 — 이름 매칭 갱신/추가/사양서 전용 행 보존(단위검증 3케이스).
  5. 사양서 행 이미지·제품링크 필드(+인쇄 썸네일).
  6. 패키지 생성: v견적→제안서/사양서 빈 필드 자동 채움 + 출력 문서 선택(견적서/제안서/사양서 체크, @media print 선택분만 연속 출력).
  7. 견적서 고유 링크(share.js/view.html/share.한선): owner=qs+10자 store 저장, 공개=평문/비밀번호=PBKDF2 15만회+AES-GCM 클라이언트 암호화(서버 비번 무저장), view.html 열람+「이어서 작성/수정」(localStorage 복원→본앱). 첨부 200KB 초과 시 제외 게이트. E2E 실측: 공개 링크 열람 렌더+합계 22,000 정확, 비번 복호 성공/오입력 거부.