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

크라우니텔 PWA화 (마스터플랜 W1 §① 클라이언트측)

개요

crowny-tele 마스터플랜 §① PWA화 뼈대 구현. 서버 파일(텔레서버.한선)은 절대 미접촉 — 병렬 세션이 서버 정적라우트를 별도 추가 예정.

무엇을 했는지

  1. public/manifest.webmanifest — name/short_name/icons(192·512·maskable)/
display:standalone/theme_color·background_color:#1d1410/start_url:/m/lang:ko
  1. public/icons/ — icon-192.png, icon-512.png, icon-maskable-512.png.
PIL(python3)로 직접 드로잉(집 심볼 + 브랜드 그라디언트 #c05b2e→#a84a22), maskable은 풀블리드 배경+세이프존(중앙 42% 반경) 내 심볼.
  1. public/sw.js — install=앱셸(mobile-app.html·manifest·아이콘) precache,
activate=구버전 캐시(CACHE_VERSION 불일치) 정리+clients.claim(), fetch=/api/*·/rt/* 절대 network-only(화이트리스트 엄격), 셸/정적자산은 cache-first(+오프라인 폴백). GET 외 메서드/교차출처는 미관여.
  1. public/mobile-app.html head에 manifest link·apple-touch-icon·
apple-mobile-web-app-capable·status-bar-style·apple-mobile-web-app-title 추가 + 하단 스크립트에 registerServiceWorker()(try/catch, 실패 무해) 추가.
  1. 동반: public/sw.한선 — sw.js와 동일 라우팅 판단 로직(네트워크전용/셸/자산
판정)을 한선씨로 재현한 감사용 동반본 + 자체 검증 6/6 통과. sw.js는 ServiceWorkerGlobalScope(브라우저 전용 API) 필요라 부득이 JS 사용.

검증

  • node --check public/sw.js PASS, 인라인 메인스크립트 node --check PASS
  • python3 -m json.tool public/manifest.webmanifest PASS
  • file public/icons/*.png → 192x192/512x512/512x512 PNG 확인
  • 텔레서버.한선 mtime 세션 시작 전 그대로(무접촉 확인)

관련 파일

  • /Users/ef/crowny-tele/public/manifest.webmanifest
  • /Users/ef/crowny-tele/public/sw.js
  • /Users/ef/crowny-tele/public/sw.한선
  • /Users/ef/crowny-tele/public/icons/icon-192.png
  • /Users/ef/crowny-tele/public/icons/icon-512.png
  • /Users/ef/crowny-tele/public/icons/icon-maskable-512.png
  • /Users/ef/crowny-tele/public/mobile-app.html (head 6줄 + SW등록 스니펫)

잔여 이슈

  • 서버 정적라우트(/manifest.webmanifest·/sw.js·/icons/*) — 오케스트레이터가 추가 예정(내 담당 아님)
  • 실제 아이폰 시뮬레이터 설치·오프라인 검증 — 오케스트레이터 담당
  • mobile-app.한선 전체 동반은 미작성 — 기존 1300+줄 대형 vanilla 앱(타 세션 소유)에
head 6줄+SW등록 스니펫만 추가한 것이라 전체 재현은 과잉/왜곡 위험 판단, 범위 밖 보류
  • 디자인대조.sh FAIL(tabbar/omni/bm/ib 등)은 CrownyBrowser 크롬(브라우저 UI) 규격 —
메신저 앱(crowny-tele)에는 해당 요소가 원래 없음, 오탐으로 판단해 조치 보류