What's Next
매거진 작업 보드
매체가 *지금 만들고 있는 것 · 다음 만들 것 · 이미 만든 것* 을 칸반으로 공개합니다. 카드는 내부 spec 의 frontmatter 와 동일 source — 실시간 갱신됩니다.
진행 중
(8)apps/web — COLDSURF Labs 페이지
apps/web — `/labs/feed` (COLDSURF AB Test · B안)
apps/web — Labs Research Notes
apps/web — Labs Virtual Interview 포맷 실험
실존 인물에 가상 발언을 씌우지 않으면서 "인터뷰형" 콘텐츠를 만들 수 있는 세 가지 포맷을 정리·시연한다.
coldsurf io absorption
EventDetail — coldsurf-io /event/[slug] 흡수
coldsurf-io 의 공연 상세 페이지를 paul-rockstar 의 `/stage/event/:slug` 로 흡수. 1차 슬라이스(헤더·라인업·상세 안내·다른 판매처) 푸시, 나머지 섹션·자동 수집·도메인 매핑 진행 중.
critique
Phase 0d — Editorial signal-driven seed import (C)
Paul 이 Pick 한 시드 레이블·감독 12곳의 MB/TMDb 카탈로그를 야간 batch 로 import. catalog-ingestion C 전략의 실행 자리.
editorial institution
Field Notes 포맷 launch
Pick(큐레이션) 과 RN(방법론) 중간의 _현장 지속성 증거_. 정식 시리즈로 격주 1편 cadence 운영 — 스캐폴드·라우트·Cover 진입점 완료, 첫 노트 발행 대기.
editorial institution
댓글 인입화 — Giscus → 자체 댓글 인프라
Giscus 임베드를 자체 댓글 시스템으로 전환. Phase A — UI + auth-portal redirect (backend X, mock 데이터). Phase B+ 에서 backend·migration·운영 표면.
예정
(28)billets-admin: paul-rockstar 토큰 기반 ocean-road 대체
coldsurf — 채용/잡 보드 (씬 채용 공고)
씬의 채용 공고(venue·promoter 스태프 모집)를 매체가 큐레이션하거나 venue owner 가 직접 발행. 두 방향성 킵, 결정 미정.
뉴스레터 약관동의 — 버전 갱신 시 기존 구독자 처리
새 PRIVACY TermsVersion 발행 시 기존 구독자의 consentVersion 처리 정책·운영 플레이북. coldsurf 측 작업.
COLDSURF — Promoter Status Wedge (큐레이션 라벨 + 주간 메일링)
coldsurf-studio — 재방문율 대시보드
coldsurf-studio — venue analytics 대시보드
venue 별 analytics — 해당 venue 의 공연별 view · venue 페이지 방문율 · referrer breakdown.
coldsurf-studio — 공연장주 인증 후 venue 연결 (ownership)
공연장주가 studio 가입·로그인 후 본인 venue 의 ownership 을 검증·연결. venue 관리·analytics 의 권한 게이트.
apps/web — `/labs/survey` (분기형 밸런스게임 · 유형 도출)
답에 따라 다음 질문이 갈라지고 말단에서 "유형"을 도출하는 분기형 설문. 클라이언트 only(응답 수집 없음), `/labs/feed`와 동일한 정적 SSG 패턴.
apps/web 개인 브랜딩 강화
auth client
Auth Client Phase E — Web consumers (coldsurf-io · billets-admin) 가 hosted portal 로 redirect
wamuseum 의 coldsurf-io · billets-admin 의 auth route handler 를 `auth.coldsurf.io` 로 *redirect* 만 하도록 정리. consumer 측 OAuth 실수행 코드 제거. SDK 직접 의존 끊김 (portal 이 단일 OAuth 실수행자).
auth client
Auth Client Phase F — RN (billets-app) 의 WebView opener + postMessage 캡처
billets-app 이 `auth.coldsurf.io/login?mode=webview&provider=...` 을 WebView 로 열고, postMessage 로 token 받아 native storage 에 영구화. SDK 직접 의존 X — 기존 native sign-in SDK (`@react-native-google-signin/google-signin` 등) 제거 후보.
coldsurf io bridge
앱 셸·디자인 시스템 통일 (C안)
단일 COLDSURF 플랫폼 — paul-rockstar(Vite SSG) 셸이 coldsurf-io 의 공연·티켓 도메인을 흡수. 매거진(비평·해외) + 슈퍼앱(공연·티켓·국내) 두 면을 *정적 호스팅 위* 한 앱에서. (2026-06-01 방향 반전 — 비용 axis 추가로 흡수 주체 paul-rockstar 측으로 결정.)
critique
Phase C — 독자 계정 + 평가 (가벼운 시그널)
별점 + 상태(읽음/봄/들음). Letterboxd/RYM 의 초기 모양. 실행 home 은 [`web-work-first-class/review-model-write`] (= 글 atom 의 메타 일부로 흡수 검토).
critique
Phase D — 독자 글 비평 (UGC 1급)
독자가 자기 글을 작품에 붙임. Letterboxd Review atom. 실행 home 은 [`web-work-first-class/review-model-write`].
critique
Phase E — 과금 모델 (작품 후원 wedge)
발견자(편집부) · 후원자(독자) · 받는 곳(작품/아티스트) 이 모이는 monetization. 실행 home 은 [`web-work-first-class/patreon-monetization`].
critique
Phase 0e — On-demand catalog 진입 (A)
독자가 Review 작성 진입 시 MB/TMDb/OpenLibrary 검색 → 후보 선택 → 로컬 Work 생성. 시드 바깥의 작품을 _수요_ 따라 자라게.
critique
Phase 0f — 커버 아트 fallback chain
CAA → Discogs → Bandcamp → Wikipedia fair-use 의 fallback chain. CAA hit 71% 측정으로 _진짜 필요_ 확정. seed + on-demand 양쪽에서 공통 호출.
discovery loop
Open Submissions — /submit 외부 제보 채널
1인 편집장이 _혼자 못 보는 영역_ 을 외주하는 전용 표면. methodology 의 외부 제보 채널 한 줄을 페이지로 승격.
discovery loop
Discovery Trail — Pick 의 발견 경로 메타데이터
_어떻게 발견했는가_ 를 기록. 슬로건의 _증명 회로_. 알고리즘 의존도/외부 제보 기여를 누적 가시화.
discovery loop
Watchlist — 내부 후속 관찰 리스트
_Pick 이전 단계_ 의 작품을 추적. 승격 시 _Discovered N months before pick_ backdated 신뢰 자산.
editorial institution
billets cross-link — Concert card → /reviews permalink
billets Concert card 의 Pick 배지 → apps/web 영구 발행물 deep link.
editorial institution
Reader Score / Subscribe-to-see 페이월 (Phase 2)
Pitchfork 식 _READER SCORE → 🔒 Subscribe to see_ — 편집 기관의 상업적 회수 자리.
editorial institution
Mind 매거진 본문 typographic 정밀화
drop cap 세부 (dark theme contrast · 크기 ramp) + pull quote 강조 + body 글자 크기·leading 미세 조정.
editorial institution
Fundraising 캠페인 — 자체 결제 내재화
Tumblbug 등 외부 캠페인 위탁을 건너뛰고 Stripe Connect / 토스페이먼츠 분배 결제로 직행.
editorial institution
YouTube — 글의 부 채널
발행한 글의 영상 부 채널. 매체 본체는 글, YouTube 는 도달 채널.
work first class
Phase C — Review 모델 + 작성
독자의 글 비평 atom. workId · authorId · body · rating?. auth blocker (B10).
work first class
Phase D — /critics/<id> + Featured Review
비평가 프로필 페이지 + 편집장의 _featured_ 표시 권한.
work first class
Phase E — Patreon 모델 결제 (자매 epic 묶음)
비평가 후원 + 매체 후원 + 작품 후원. paywall 과 통합. 가장 늦은 단계.
보류
(3)coldsurf io bridge
coldsurf.io 이벤트 → 매거진 Pick 역링크
표면 cross-link 가교 — 도메인 비-교차(해외 비평 vs 국내 KOPIS 99%+)로 분모 자체가 임계 미달. 통합(`ui-unification`) 으로 자연 해소.
coldsurf io bridge
같은 handle, 두 프로필의 수렴
가교 — 통합(`ui-unification`) 이 결정되면 한 프로필로 자연 해소. 가교 비용은 throwaway.
coldsurf io bridge
두 서브도메인 전환 wayfinding
가교 — 통합(`ui-unification`) 이 결정되면 두 서브도메인 자체가 하나로 합쳐져 wayfinding 의의 사라짐.
완료
(61)coldsurf-studio — 공연 중심 재구성
billets-server fast-jwt CRITICAL 보안 업그레이드 — @fastify/jwt 9→10 (wamuseum)
paul-rockstar 측 [`coldsurf-server-fast-jwt-security`](./coldsurf-server-fast-jwt-security.md) 의 자매 카드. 같은 fast-jwt 5 CVE 3종이 wamuseum/billets-server 에도 그대로 노출 — 같은 레포 아니라 분리. @fastify/jwt 9→10 으로 fast-jwt 6.2.4 흡수.
billets-server — partner cutover (wamuseum 잔존 코드 제거)
paul-rockstar/coldsurf-studio-server 로 이미 이전된 partner 라우트·핸들러를 wamuseum/billets-server 에서 단계적으로 비활성화→삭제하고, billets-admin 워크스페이스를 deprecate.
fast-jwt CRITICAL 보안 업그레이드 — @fastify/jwt 9→10 (auth·studio server)
fast-jwt 5.0.6 의 인증 우회·알고리즘 혼동·캐시 혼동(critical/high) 3종을 @fastify/jwt 9→10(fast-jwt 6.2.4)으로 닫음. auth-server·studio-server staging e2e 라운드트립 검증 완료. Dependabot 안전-승리 PR(#45)에서 의도적으로 제외했던 갈래.
coldsurf-studio — admin 모바일 최적화
AdminShell·이벤트 도메인 페이지·테이블·스캐너를 모바일 뷰포트(≤ 480px)에서 사용 가능하게. 스캐너 검증의 선결 조건.
coldsurf-studio — 무료티켓(EntryTicket) admin UI 이관
wamuseum/billets-admin의 entry-ticket 도메인(무료티켓 발급/풀 대시보드/스캐너)을 coldsurf-studio admin으로 이관. 서버는 이미 완료.
coldsurf-studio-server — 파트너 서버를 떼어내기
coldsurf-studio-server: AWS Lambda 배포 (surfers-root reusable workflow 호출)
paul-rockstar 모노레포 마이그레이션
SPEC: 시리즈 연결 — "실행되지 않는 조직"
Sitemap 빌드 시 생성
View count — Supabase Edge Function + RLS 셋업
Supabase Edge Function 으로 블로그 view count 트래킹. SQL/RLS 정책 + dev/prod 환경변수 셋업.
web — 회원탈퇴(soft-deactivate) + 최소 계정 面
billets-app 과 동일한 soft-delete 정책으로 web 에 회원탈퇴를 신설. 백엔드·SDK 는 이미 존재(`DELETE /v1/user/deactivate`)하므로 web-only. 탈퇴 버튼이 설 *계정 surface* 부터 만든다.
web — 회원 재활성(이메일 코드 → activate)
탈퇴(soft-deactivate)한 web 사용자가 스스로 돌아오는 경로. 백엔드·SDK 는 이메일 인증코드 기반 재활성을 *이미 지원* — web 은 그 UI(sendCode → activate)만 신설. OAuth-only 인 web 에 유일하게 없는 복귀 surface.
web — Full SSG (body prerender + hydration)
prerender 가 `<head>` 만 채우고 `<body>` 는 빈 셸로 두는 현재 구조를 빌드 타임 body 렌더(renderToString)+클라 hydration 으로 승격. 사이트링크·소셜 unfurl·이벤트 SEO·크롤 신뢰도의 공통 뿌리.
web — Link Unfurl (OG Image) for Labs For You
뉴스레터 월간 호 발송 — 수동 트리거(mailer-cli)
월간 호(號) 발행 시 list=PAUL_ROCKSTAR 구독자에게 일괄 메일 1회 발송. 호당 1회 사람이 명시적으로 실행.
뉴스레터 가입 시 최신 호 발송 — welcome 에 최신 호 얹기
구독 직후 신규 구독자 1명에게 가장 최근 발행 호를 메일링. 사이클 중간 가입자의 starvation 을 메우고 welcome 을 즉시 가치 전달로 바꾼다. broadcast 카드가 미뤄둔 *공개 메타 엔드포인트* 를 필수로 승급.
뉴스레터 구독 — 이메일 구독 + 수신거부
월간 호(號) 이메일 구독·웰컴메일·수신거부 e2e 완료. billets-server 의 기존 뉴스레터를 list 구분자로 확장(coldsurf / paul-rockstar). 발송(broadcast)은 분리 카드.
web — SEO 구조화 데이터(JSON-LD) + keywords
coldsurf-io 의 generateLdJson 수준으로 따라잡기 — apps/web prerender 에 JSON-LD(WebSite/Article/Review/Breadcrumb) + keywords 메타 추가
web — /stage 정식 섹션 (공연 面 · 발행물 ↔ 라이브 루프)
billets 공연 데이터를 매거진 포맷 표면으로 승격. Labs 실험과 분리된 상시 섹션 + Pick 양방향 브리지.
auth client
Auth Client Phase A — paul-rockstar 측 changeset + release.yml 셋업
paul-rockstar 에 GitHub Packages publish 인프라 도입. surfers-root 의 release.yml 미러. Phase B~D 의 cross-repo 소비를 물리적으로 가능하게 하는 게이트.
auth client
Auth Client Phase B — `@coldsurfers/auth-client` 패키지 작성
paul-rockstar/packages/auth-client 신규 — AuthClient 클래스 + types + storage adapter + Google/Apple/Email provider helper. surfers-root 의 data-models 패턴 미러 (build-less TS source export).
auth client
Auth Client Phase C — coldsurf-studio 가 첫 consumer (workspace:*)
paul-rockstar/coldsurf-studio 의 Google·Email 호출부를 @coldsurfers/auth-client 로 교체. workspace:* 로 직링크 → SDK 의 첫 실사용 검증.
auth client
Auth Client Phase D — Hosted Auth Portal (auth.coldsurf.io) — SDK 의 첫 진짜 client-side consumer
`auth.coldsurf.io` Next.js 앱 신규. 모든 OAuth (Google · Apple · Email) 의 *단일 호스팅 진입점*. Dual return mode — `postMessage` (RN WebView) · `redirect` (Web). 후속 Phase E (web consumers redirect) · F (RN WebView) 의 게이트.
auth client
Auth Client Phase E follow-up — coldsurf-io orphaned OAuth route cleanup
wamuseum/coldsurf-io 의 portal 이주 (6d8dfc08c) 직후 *고아 상태로 남은* OAuth 라우트 4개 + `/social-redirect` 페이지 + 관련 상수·import 제거. Phase E Surface 1 의 5개 체크박스가 한 번에 풀린다. email 로그인·`google-signup`·`local-reissue-token` 은 *적극 사용 중* — 별도 카드로 분리.
coldsurf io bridge
Work 를 공유 prisma schema 의 1급 객체로
로컬 TS 레지스트리 Work 를 공유 Postgres(PaulRockstarWork)로 승격 — 브리지의 척추.
coldsurf io bridge
PaulRockstarArtist 신설 + Work↔Artist 조인
카탈로그 아티스트(~1,329)를 공유 DB PaulRockstarArtist 로 1급화 + Work↔Artist 내부 조인. `/artists/<slug>` 페이지 첫 consumer. billets 다리·콜라보 분해는 Phase 2.
critique
Phase 0 — 카탈로그 ingestion 전략 결정
비평의 장 의 첫 결정. 4 갈래 (A/B/C/D) 비교 + PoC 3편 측정 (Sub Pop · Domino · Mothland) → C+A 조합 확정 채택. 실행은 sub-card 3장으로 분기.
critique
Phase A — Work entity 신설 (데이터 모델 1차)
Pick 에서 작품 메타 분리 → workId 참조. /works/<type>/<slug> canonical 페이지. 실행은 자매 epic [`web-work-first-class/`] 에서 수행.
critique
Phase B — Work 에 외부 카탈로그 식별자 옵셔널 필드
Work 에 옵셔널 외부 ID (MusicBrainz · TMDb · ISBN · OpenLibrary 등) 필드 + 카탈로그 선정 메모. 자동 import 는 분리 — [`catalog-ingestion.md`] 자리.
editorial institution
COLDSURF Pick 발행 표면 신설
/reviews 아카이브 + 영구 permalink + OG 카드. 매체의 핵심 atom.
editorial institution
Methodology 페이지 — Pick 은 어떻게 뽑히는가
/reviews/methodology — 선정 기준·발행 주기·이해상충·외부 제보 채널 공개.
editorial institution
Homepage 매거진화 — 명함 강등
/ 를 "이번 호의 표지" 로 전환. 명함 Hero 는 colophon 으로 이동.
editorial institution
Colophon 신설 — about + resume 통합 강등
/colophon 한 페이지에 발행자 정보·외부 채널·발행 정책 통합. about/resume 는 1급 IA 에서 강등.
editorial institution
Section archive 의 매거진화
카테고리별 _섹션 표지_ 매거진화. dev=Engineering, catholic=Catholic, life(구 avclub 잔여)=B-SIDE, labs=reader only. /blog 제거 + 리다이렉트.
editorial institution
Field Notes — sitemap · RSS 진입
`/field-notes` 인덱스 + 개별 노트(KO/EN) 를 sitemap·RSS 에 노출해 검색·구독 표면 확보.
editorial institution
매체 네이밍 — Paul Rockstar
COLDSURF Reviews(generic) → Paul Rockstar(편집자 페르소나). 1인 편집 + 보증인 정체성을 이름 자체로.
editorial institution
PicksList 좌측 cover 썸네일
리스트 아이템 좌측에 80×80(sm 96×96) 정사각 cover 썸네일.
editorial institution
OG dev preview 정합
OG 카드 출력을 dist/og/ → public/og/ 로 이동해 Vite dev/build 양쪽 동일 경로(/og/...) 서빙.
editorial institution
매체 태그라인 — Discover what you didn’t expect
"매주 한 건의 _위상_" → "Discover what you didn’t expect". value proposition 또렷화 + cadence 약속을 헤드라인에서 분리.
editorial institution
Pick Likes — 익명 1-인-1-좋아요
클라이언트 + Edge Function + Prisma 마이그레이션. paywall 이전 단계의 audience signal.
editorial institution
Comments (Giscus) — PickDetail + MindEssay 임베드
coldsurfers/giscus 리포 · General 카테고리. 광고 없음 · GitHub Discussions 모더레이션 위임.
editorial institution
Pick 상세 — Listen 채널 + Watch 채널 분리
음악 9편 Bandcamp/Spotify/Apple Music · films 2편 Apple TV+/Hulu/Disney+. 음악 vs 영상 정체성 분리.
editorial institution
매거진 후원 페이지 (/support)
독자가 편집자를 후원. Ko-fi(글로벌) · KakaoPay(한국) 2채널. methodology 의 _광고 수익 없음_ 의 짝.
editorial institution
billets API — Auth Microservice 분리
billets-server 의 인증 로직을 별도 마이크로서비스로 추출. billets + paul-rockstar 공통 의존. Phase A 완료 — dev/prod 배포 + cross-server JWT 양방향 검증 통과.
editorial institution
Mind 매거진 — /mind layer 신설
essay 카테고리(19편) 를 _Life Magazine 스타일 편집 지면_ 으로 재구성. /mind archive + /mind/essays/<slug> detail.
editorial institution
Mind frontmatter 보강 (lede · featuredAt · dropCap)
Post 인터페이스에 옵션 3종 추가 + getFeaturedEssay() SSOT + Otrovert/John Wick 시범 적용.
editorial institution
What's Next — 외부 공개 칸반 보드
/whats-next 라우트 — docs/kanban/ frontmatter 를 source 로 4컬럼 (In Progress · To Do · Paused · Done) 보드. spec 의 3컬럼 안에서 paused 컬럼이 추가되어 운영.
editorial institution
월간 호(號) — 스냅샷 기반 온라인 매거진
apps/web/src/posts/ 의 해당 월 글들을 별도 디렉터리로 스냅샷 복사해 편집자가 손본 *n월호* 매거진을 발행한다.
editorial institution
호(號) Reader — 웹에 잡지 문법 입히기
/issues/<month>/read — 표지·목차·편집장의 글·본문을 시퀀스로 잇는 연속 reader. 잡지의 _구조 문법_ + _유한성 문법_ 을 웹에서 재현.
i18n
Phase A — UI 문자열 i18n 인프라
src/i18n/locales/{ko,en}.ts + useLang() hook. 페이지 컴포넌트의 하드코딩 한국어 → 번역 맵 추출.
i18n
Phase B — Content i18n
11 Picks 의 postSlug → .en.md 보유 100%. methodology EN 작성. 신규 Pick KO/EN 동시 발행 원칙.
i18n
Phase C — 글로벌 라우팅 + 자동 감지
navigator.language 기반 첫 진입 redirect + localStorage 사용자 선택 저장 + GlobalLangToggle.
i18n
Phase D — SEO 보강 (hreflang · og:locale)
hreflang 모든 페이지로 확장. <html lang> locale 별 정확히. og:locale + og:locale:alternate.
tss migration
web-next 스캐폴딩 — TSS 셸 + CF Workers
apps/web-tss-poc 를 기반으로 apps/web-next 워크스페이스를 만들고, Cloudflare Workers 배포 파이프라인 + 최소 1 라우트(/) SSR 까지 동작.
tss migration
SEO 재배선 — @paul-rockstar/seo → TSS head() 어댑터
apps/web 의 buildSeoTags(PageSeoInput) → TSS head() shape 어댑터 도입. /, 그리고 이후 모든 라우트의 SEO 가 한 패턴(seoHead(input)) 으로 표현됨.
tss migration
i18n 재구성 — KO/EN 이중 트리 + useLang·LangLink 이식
apps/web 의 LangContext·useLang·LangLink·useLocalizedSeoMeta·useAutoLocaleRedirect 를 TSS 위로. KO `/` + EN `/en/*` 이중 라우트 트리 셋업. Phase A–E 완료.
tss migration
라우트 트리 이식 — App.tsx ~40 <Route> → TSS 파일 기반 트리
apps/web 의 LocalizedRoutes (~40 라우트) 를 한 카테고리씩 apps/web-next/src/routes/ 로 이식. i18n 인프라(카드 3) 위에서 페이지 컴포넌트는 import 경로 변경 외 무수정.
work first class
Phase A — Work 모델 + 마이그레이션
apps/web/src/works/ + Pick 에 workId 옵션 필드. 11 Pick → Work 추출 + 중복 검증.
work first class
Phase B — /works/<type>/<slug> canonical 페이지
작품 페이지 신규. 1차는 _그 작품을 다룬 Pick 목록_ 만. 향후 phase 에서 Review 등 추가.