tiomta.com 실서비스 전환 — 편성DB·결매칭·로그인·판매자 콘솔
개요
사장님 지시 6갈래 처리: ①하단 이모지 경위 확인·정본 복원 ②로그인 모달 ③/preview 목업 보존 후 실서비스화(관리자 입력 없으면 빈 상태) ④결마다 추천 컨텐츠 DB 매칭 실작동 ⑤셀코어DB 내부DB 구축여부 확인 ⑥판매자/파트너 로그인 시 판매자페이지 직행.
① 하단 이모지 경위 — "어쩔 수 없어서"가 아님
핸드오프 정본(TiomtaModuleShop.dc.html §하단 탭바)은
이모지 아이콘이 없다: 텍스트 라벨만 12.5px, 잠금 시 "라벨 🔒" 인라인, bg rgba(20,14,9,0.96) 플랫 바. feed.html의 큰 이모지(🧭☀️💬📦🪷)+별도 🔒줄은 이전 세션의 임의 변형(기술적 불가피성 없음) →
정본대로 복원 완료(텍스트 라벨만).
⑤ 셀코어DB 확인 결과
- 구축됨: tok/티옴타셀DB.한선 — 회원·스레드 27셀 방사형(결코드 6자리 "AABBCC" → 축별 floor(v/34) 트릿 → 27셀 주소).
- 미구축이었던 것: 편성(피드 컨텐츠) DB → 이번에 같은 수식으로 신규 구축(아래).
신규 구축
티옴타편성.한선 (엔진 SSOT, 자체시험 18/18)
- data/scenes.psv 스키마(20열: 장면ID|상태|브랜드|…|결코드|…|제출자), 상태=편성(노출)/검수대기/보류.
- 결매칭: 편성셀주소(27셀, 티옴타셀DB.한선과 동일 수식)·편성셀거리·편성매칭점수(같은셀2/이웃1/기타0)·편성매칭퍼센트(62+점수17 → 62/79/96)·편성정렬순서(점수 내림차순 안정).
server.js (JS 파리티 래핑)
- GET /api/feed/scenes — 공개. 결코드 우선순위 ?code= → 로그인 profile.gyeolCode. 편성만 노출, 점수 정렬, match% 부여(무결코드=matched:false·match:null).
- GET/POST/DELETE /api/admin/scenes — ADMIN_USERS 게이트. POST=upsert(상태 승인 토글 포함).
- GET/POST /api/seller/scenes — 로그인+role(seller|partner) 게이트. 제출=항상 검수대기.
- profile 스키마 확장: role(member|seller|partner 화이트리스트)·gyeolCode(6자리 검증).
- 라우트: /preview→preview.html(목업 6장면 스냅샷 보존), /seller→seller.html.
프론트
- feed.html 실서비스화: 목업 제거→/api/feed/scenes 페치, 빈 상태 카드("오늘의 편성이 아직 없습니다"+판매자콘솔 안내), esc() XSS 게이트, match null=결 탐색 중 칩.
- 로그인 모달(feed.html): 로그인/가입 토글→/api/auth/ 프록시→tiomta_token 저장→/api/me·/api/profile→seller/partner면 /seller 직행(접속 시 자동직행 포함, ?stay=1 우회). 게이트 탭 클릭 시 비로그인=모달 유도. 로그인 칩(로그아웃 겸용).
- admin.html: 결 편성 관리 섹션(목록·편성 승인/내리기·수정·삭제·18필드 입력폼).
- seller.html 신규: 판매자 콘솔 — 로그인 게이트→판매자/파트너 등록(PUT /api/profile role)→내 장면 목록+제출폼(검수대기 접수 고지).
- landing.한선 v3: /preview·/seller 매핑+판매자직행인가() — 자체시험 18/18.
검증 (라이브 실측)
- 한선: 티옴타편성.한선 18/18 · landing.한선 18/18 · node --check PASS · 통제 재기동(keepalive 자동복구).
- 라우트 7종 title 정확(/,/preview,/seller,/intro,/tools,/landing,/test) — 로컬+공개 HTTPS.
- API: 빈 상태 {scenes:[]} · admin 무토큰 403 · seller 무토큰 401.
- 결매칭 실측(임시 시드→검증→비움): code=350070 → 같은셀(401585) match 96 우선, 먼셀(999999) 62, 검수대기 장면 미노출, 무결코드 matched:false. 한선 단언값과 파리티 일치.
- 학습 래칫: tiomta_편성DB_결코드_27셀매칭_정렬 · tiomta_판매자직행_경로매핑_v3.
잔여
- GUI 육안 검증 보류(브라우저 사용자 활동으로 스크립트 주입 타임아웃 — /preview 구코드도 동일 증상, 코드 무관). 추후 빈상태·모달·판매자콘솔 스크린샷 확인.
- 가입(signup) 필드 계약은 auth.crowny.org(9401) 응답에 따름 — 실패 메시지 그대로 노출됨. 필요시 필드 보강.
- 결코드 발급 UX: 진단(tiomtaType)→gyeolCode 자동 산출 배선은 미착수(현재 profile.gyeolCode 수동/API).
- 피드 실사화(이미지)·tok 재컴파일·미포팅 4모듈 기존 잔여 유지.
관련 파일
/Users/ef/crowny-tiomta/{티옴타편성.한선, server.js, public/{feed.html, preview.html, seller.html, admin.html, landing.한선}, data/scenes.psv}
로그인 수리 (2026-07-24) — 크라우니 통합계정 실작동
- 원인: tiomta 프록시가
/api/auth/login을 업스트림에 그대로 전달했으나 CrownyAuth(9401) 실계약은 /api/login·/api/register → 404로 로그인 불가.
- 수리: server.js 프록시 경로 매핑(login→/api/login, signup→/api/register) + landing.한선 인증경로매핑() 동반(자체시험 21/21).
- 통합 관리 확인: CrownyAuth(9401)=크라우니 통합계정 단일 DB(사용자 377, accountId CRW·@crowny.org·wallet 공용). 티옴타 로그인/가입/verify 전부 이 계정 — 아이디/비번 통합 충족.
- 종단 실측(테스트 계정 tiomta-e2e-test): 가입→토큰 · 로그인→토큰 · /api/me 인증 · 판매자 등록(role=seller·gyeolCode=350070) · 판매자 장면 제출→검수대기(피드 미노출) · 승인(편성)→프로필 결코드 자동 매칭 96% 노출 · 공개 HTTPS tiomta.com 로그인 ok. 검증 후 테스트 장면 제거(피드 빈 상태 복원). 테스트 계정은 auth DB에 잔존(삭제 API 없음, 명명으로 식별 가능).
스펙 갭 3건 구현 + 핸드오프 원본 100% 서빙 (2026-07-24 계속)
스펙 갭 구현 (전부 라이브 실측)
- §B3 스토리 오버레이: 헤드라인 탭→히어로·인용·본문·업력·검수배지·AI노트·리뷰·"왜 나에게"(match%)·CTA. 스키마 9필드 확장(body/archive/aiNote/review/financeLine/benefit/repeatTier/Pct/Price) — admin·seller 폼 포함.
- §B4 예약시트 세부 + 실예약: benefit·finance·repeat 카드+수수료 바(브랜드76/배송16/모듈8). POST /api/feed/reserve — reserved 원장 멱등·base+1·L1→L2 자동 전이(leveledUp 토스트). 실측: base 10→11, level 1→2, 재시도 already:true, 무토큰 401.
- §B2 일일 6장면 캡: 8편성 중 상위 6만 노출 실측. 티옴타편성.한선 27/27(일일캡·선두컷·예약가능인가·예약후회원레벨).
- 헤드리스 육안: 시드 피드(예약 11/3,000 반영)·빈 상태 카드 PASS. (claude-in-chrome 주입은 계속 타임아웃 — 헤드리스 크롬 캡처로 대체 확립)
핸드오프 원본 100% 서빙 (사장님 지시 "그대로 적용해 보여줘")
- tiomta.com/handoff = design_handoff_tiomta 원본 무수정 서빙(19파일): 전체설계·설계자료·개발명세·룰설명서 캔버스 + 앱 셸(데스크톱 바타입) + 7모듈(.dc.html=동작 프로토타입) + README/RULES/SPEC/DOSSIER. 디바이스별 허브(캔버스/바타입 셸/모바일 402×874/데스크톱 콘솔/문서). 태블릿 전용 프레임은 핸드오프에 없음(정직 표기).
- 헤드리스 육안: 전체설계 캔버스(3a 0.9%룰·2a 크리에이트·1a 개요)·앱 셸(브라운바+모듈탭+폰프레임+AI레일) 원본 그대로 렌더 PASS. 공개 HTTPS 200.
- 함정 2건: ①한글 파일명 NFC/NFD 미스매치→SPA 폴백 200 위장(server.js existsSync 실패 시 NFD/NFC 재시도 패치, 메모리 기록) ②python 원라이너 open(p,'w')가 인자 평가 전 truncate→시드 유실(선독후쓰기로 교정).
- 다중 세션 충돌: /design 경로를 크라우니메일 핸드오프 세션들이 사용 중(디자인시스템·런칭티저) → 내 산출물을 /handoff로 분리, /design 인덱스는 양쪽 링크만.