Glassy music-player overlay for YouTube Music — synced lyrics, dynamic color from artwork.
Svelte 5 (runes) · Tailwind v4 · Vite 8 · CRXJS 2 · Manifest V3 · Shadow DOM (CSS isolation)
src/
content/ # YTM 페이지에 주입되는 content script
main.ts # 진입점 — Shadow DOM mount + Svelte App
sync.ts # YTM <video> ⇄ playerState 양방향 브리지
metadata.ts # 곡 정보 DOM 스크레이프
ytm-controls.ts # play/next/prev 버튼 어댑터
palette.ts # 아트워크에서 dominant/accent RGB 추출
lyrics-scraper.ts # 가사 셸 파싱 → 균등 타임스탬프 분포
background/
service-worker.ts # 툴바 액션 → applifyOn 토글 (chrome.storage.local)
lib/
stores.svelte.ts # Svelte 5 룬 기반 reactive store
types.ts # Track / LyricLine / Palette
format.ts # fmtTime
components/
App.svelte / Stage.svelte / NowPlaying.svelte / ...
styles/
app.css # 글래스/마스크/keyframes (Tailwind 외)
tokens.css # CSS 변수 (--bg-r/g/b, --accent-*)
dev/
sample-tracks.ts # 프리뷰 픽스처
preview.ts # standalone 프리뷰 진입점
pnpm install
pnpm dev # CRXJS 모드 — dist/ 를 unpacked extension 으로 로드
pnpm dev:preview # 프리뷰 모드 — http://localhost:5180 에서 단독 페이지로 확인
chrome://extensions 열기dist/ 선택music.youtube.com 방문 → 우리 UI 가 YTM 위에 오버레이됨pnpm build # → dist/
zip -rq applify-ytm-0.1.0.zip dist/
pnpm check # svelte-check (타입 + a11y)
자세한 시각/UX 의도는 /Users/dev-soon/workspace/temp/design_pkg/applify-tm/chats/chat1.md (디자인 핸드오프 챗 트랜스크립트) 참조.
핵심 결정:
1fr 0fr 트랜지션verification-report.md 참조.