Skip to content

Screen Blueprint — TwoMore (투마) ​

Status: Reference Last reviewed: 2026-09-11

One current-state blueprint per real screen, read from the component code — what the page is for, what it is made of top to bottom, its states, its actions, and the gaps the code itself admits. The entries live in per-area files under screen-blueprints/; this file holds the conventions and the generated index.

Gate: yarn check:screen-blueprints (in yarn check) fails when a screen has no entry, an entry names a route that does not exist, two entries claim one route, an entry's header block or sections are malformed, or the screen file has commits newer than the entry's Verified date. Changing a screen means re-reading its entry and re-dating it in the same commit. The QA board and docs/workflows/page-blueprints.json are parsed from these files — there is no second copy to keep in sync.

History: the pre-2026-09-11 single-file document, with its change logs, is archived at history/screen-blueprint-archive-2026-09-11.md. Per-change narrative belongs in git and the rebuild log, never in an entry.


1. Conventions ​

Entry contract (parsed by scripts/lib/screen-blueprints.mjs) ​

#### <English title> (<Korean shell title>)

- **Route:** `/clubs/[clubId]/members`
- **Screen:** `ClubMembersScreen` — `packages/features/clubs/src/club-members-screen.tsx`
- **Shell:** DetailShell · title `멤버 관리` · headerRight: …
- **Design:** ratified | unreviewed
- **Verified:** YYYY-MM-DD

**Purpose.** One sentence.
**Anatomy.** A fenced tree, top of screen to bottom.
**States.** Bullets: loading / empty / error / offline / role-gated variants.
**Actions.** Bullets: each tappable → destination or mutation.
**Gaps.** ⚠ bullets that are true in the code today, or `none found`.
  • Route is the join key to the page inventory — one route in backticks (a screen serving several routes lists them comma-separated). A pure <Redirect> route is not a screen and gets no entry.
  • Design: ratified = an owner ruling exists for this design; unreviewed = written from the code and not yet reviewed by the owner. Flipping to ratified is the owner's call: the QA board has a toggle, and yarn docs:apply-qa-board <saved-board.html> writes the board's rulings back into these files (and prints the board's notes).
  • Verified is the date the entry was last read against the screen file. The gate compares it to git history.
  • Annotation language is English; Korean appears only as the actual UI copy in backticks or quotes.
  • Current state only. No change logs, no "was", no history paragraphs.

Tree symbols ​

SymbolMeaning
→Navigation destination
▸Conditional render (role, data, feature flag)
✦Call-to-action button
[C]Component name as it appears in code

Cross-cutting rules the entries assume ​

  • Empty states: structural chrome (headers, tabs, nav) always persists; sections with no data use progressive disclosure unless the section is a primary feature (empty-state-ux-analysis.md).
  • Terminology: terminology-guide.md — 클럽 tab, 일정 = session, 경기 = match/activity tab, pickup = 번개 in code, 참석/불참 = RSVP, 가입 = club membership.
  • Tabs: tab-switching screens use SegmentedTabs/TabView/TabPanel, never conditional rendering of hook-bearing panes (canon/components.md).
  • Overlays: ModalPanel only — the layout contract is in canon/styling.md.

2. Screen index ​

auth — screen-blueprints/auth.md · 4 screens ​

ScreenRouteShellDesignVerified
Email sign-in (이메일 로그인, L0-02)noneDetailShellunreviewed2026-11-11
Onboarding (온보딩, L0-04)noneWizardShell (one per step)unreviewed2026-11-15
Update required (업데이트가 필요해요, L0-05)nonenone (a full EmptyState, no header, no tab bar)unreviewed2026-11-11
웹 공유 페이지 (L0-07)nonenone (a bare 480 px phone column on web; no header, no tab bar, no AppNav on a public path)unreviewed2026-11-11

clubs — screen-blueprints/clubs.md · 31 screens ​

ScreenRouteShellDesignVerified
Club List (클럽)/(tabs)/(clubs)MainTabShellunreviewed2026-11-13
Club Album (앨범)/clubs/[clubId]/albumDetailShellunreviewed2026-11-13
Club Analytics (성장 분석, L3-03)/clubs/[clubId]/analyticsDetailShellunreviewed2026-11-15
Club Attendance (출석 현황, L3-07)/clubs/[clubId]/attendanceDetailShellunreviewed2026-11-13
Board Post Detail (게시글)/clubs/[clubId]/board/[postId]DetailShellunreviewed2026-11-15
Board Create Post (글쓰기)/clubs/[clubId]/board/createDetailShellunreviewed2026-11-12
Club Challenges (클럽 대항전, L3-10)/clubs/[clubId]/challengesDetailShellunreviewed2026-11-13
Club Challenge Proposal (대항전 신청, L3-10)/clubs/[clubId]/challenges/newDetailShellunreviewed2026-11-13
Club Dues (회비 관리, L3-11)/clubs/[clubId]/duesDetailShellunreviewed2026-11-13
Club Detail — place surface (클럽 홈)/clubs/[clubId]PlaceShell (CollapsingTopBar look="circles" + CollapsingHeaderLayer)unreviewed2026-11-15
Join Review Detail (가입 심사)/clubs/[clubId]/join-review/[userId]DetailShellunreviewed2026-11-15
Club Members (멤버 관리)/clubs/[clubId]/membersDetailShellunreviewed2026-11-15
Partner Suggester (복식 파트너 추천)/clubs/[clubId]/partnersDetailShellunreviewed2026-11-13
Club Reports (신고 관리, L3-28)/clubs/[clubId]/reportsDetailShellunreviewed2026-11-13
Club Sessions (일정 관리, L3-27)/clubs/[clubId]/sessionsDetailShellunreviewed2026-11-13
Club Settings (클럽 설정)/clubs/[clubId]/settingsDetailShellunreviewed2026-11-13
Club Deposit Account (입금 계좌)/clubs/[clubId]/settings/accountDetailShellunreviewed2026-11-13
Club Regular Meets (정기 일정)/clubs/[clubId]/regular-meetsDetailShell (scroll={false})unreviewed2026-11-13
Club Regular Meet Editor (정기 일정 수정)/clubs/[clubId]/regular-meets/[meetId]DetailShellunreviewed2026-11-13
Club Regular Meet New (정기 일정 만들기)/clubs/[clubId]/regular-meets/newDetailShellunreviewed2026-11-13
Club Journey (클럽 테니스 여정, L3-51)/clubs/[clubId]/journeyDetailShellunreviewed2026-11-13
Club Groups (조)/clubs/[clubId]/groupsDetailShellunreviewed2026-11-13
Club Album Manage (앨범 관리)/clubs/[clubId]/album/manageDetailShellunreviewed2026-11-13
Club Event Create (행사 만들기)/clubs/[clubId]/events/newDetailShellunreviewed2026-11-13
Club Event (행사)/clubs/[clubId]/events/[eventId]DetailShellunreviewed2026-11-13
Club Venues (테니스장 관리, L3-29)/clubs/[clubId]/venuesDetailShellunreviewed2026-11-13
Create Club Wizard (클럽 만들기)/create-clubWizardShell for the editable draftunreviewed2026-11-15
Join Club (클럽 가입하기)/join-clubDetailShellunreviewed2026-11-12
Leaderboard Share Redirect/lb/[clubId]DetailShellunreviewed2026-11-11
Club Dues Plan (회비 설정, L4-14)/clubs/[clubId]/dues/planDetailShellunreviewed2026-11-13
Club Ledger (장부, L3-46)/clubs/[clubId]/dues/ledgerDetailShell (scroll={false} over a FeedList)unreviewed2026-11-13

home — screen-blueprints/home.md · 2 screens ​

ScreenRouteShellDesignVerified
Home (홈)/(tabs)/(home)MainTabShellunreviewed2026-11-15
Notification Center (알림)/home/notificationsDetailShellunreviewed2026-11-12
ScreenRouteShellDesignVerified
Contact (문의하기, L3-43)/legal/contactDetailShellunreviewed2026-11-10
Announcements (공지사항)/legal/noticesDetailShellunreviewed2026-11-08
Notice (공지)/legal/notices/[noticeId]DetailShell (the kit DocPage)unreviewed2026-11-08
Privacy Policy (개인정보 처리방침, L3-45)/legal/privacyDetailShellunreviewed2026-11-12
Terms of Service (이용약관, L3-44)/legal/termsDetailShellunreviewed2026-11-11

matches — screen-blueprints/matches.md · 3 screens ​

ScreenRouteShellDesignVerified
Match Result Share Preview/m/[matchId]DetailShellunreviewed2026-11-13
Manage Scorecard (스코어카드 운영, L3-39)/match-boardDetailShell (the shared page's frame)unreviewed2026-11-13
Tournament Board (legacy link resolver)/tournament-boardnone (draws nothing; a failed read draws QueryErrorState)unreviewed2026-11-13

messaging — screen-blueprints/messaging.md · 5 screens ​

ScreenRouteShellDesignVerified
DM Thread/messages/[threadId]DetailShell (scroll={false})unreviewed2026-11-15
DM Add Members (멤버 초대)/messages/add-membersDetailShellunreviewed2026-11-15
DM Inbox (메시지)/messagesDetailShellunreviewed2026-11-11
DM Requests (메시지 요청)/messages/requestsDetailShellunreviewed2026-11-08
DM Create Group (단톡방 만들기)/messages/new-groupDetailShellunreviewed2026-11-13

profile — screen-blueprints/profile.md · 9 screens ​

ScreenRouteShellDesignVerified
Profile (프로필)/(tabs)/(profile)MainTabShellunreviewed2026-11-15
Profile Share Receiver/p/[userId]DetailShellunreviewed2026-11-11
Public Profile (공개 프로필, L2-06)/profile/[userId]DetailShellunreviewed2026-11-15
Achievements Gallery (업적, L3-09)/profile/achievementsDetailShellunreviewed2026-11-15
Tennis Journey (테니스 여정, L3-08)/profile/journeyDetailShell scroll=falseunreviewed2026-11-11
Friends (친구 목록, L3-18)/profile/friendsDetailShell scroll=falseunreviewed2026-11-15
Add Friend (친구 찾기)/profile/friends/addDetailShellunreviewed2026-11-15
My Session Fees (참가비 내역, L3-16)/profile/feesDetailShellunreviewed2026-11-11
Trust Record (신뢰 기록, L3-01)/profile/trustDetailShellunreviewed2026-11-13

records — screen-blueprints/records.md · 5 screens ​

ScreenRouteShellDesignVerified
Records (기록)/(tabs)/(records)MainTabShellunreviewed2026-11-15
Record Detail (기간 기록)/records/[period]DetailShellunreviewed2026-11-15
Head-to-Head (선수별 전적)/records/analysis/rivalsDetailShellunreviewed2026-11-11
Record Day Detail (하루 기록)/records/dayDetailShellunreviewed2026-11-13
Records Leaderboard (순위표)/records/leaderboardDetailShellunreviewed2026-11-13

sessions — screen-blueprints/sessions.md · 11 screens ​

ScreenRouteShellDesignVerified
Activity (경기)/(tabs)/(sessions)MainTabShell chrome="tabs"unreviewed2026-11-12
Create Session Wizard/create-sessionDetailShell (the review page: Header backunreviewed2026-11-12
Session Invite Share Preview/s/[sessionId]DetailShellunreviewed2026-11-13
Session Attendance (참석 확인, L3-36)/sessions/[sessionId]/attendanceDetailShell titled 참석 확인 with the club and the day as its sub line and the session tools switcher (참석자참석 확인) in its fixed subhead rowunreviewed
Pickup Host Dashboard (호스트 관리, L3-37)/sessions/[sessionId]/hostDetailShell scroll={false} titled 호스트 관리 with the pickup's sub line (venue, then day), over one FeedListunreviewed2026-11-13
Session Detail (일정 상세, L2-02)/sessions/[sessionId]DetailShell header="collapsing" collapsingLook="circles" (the MediaBand under the bar; a bare back-only DetailShell for error, offline cold and not found; a plain DetailShell titled 일정 수정 in edit mode)unreviewed2026-11-15
Match Rules Editor (경기 규칙)/sessions/[sessionId]/match-rules, /create-session/match-rulesDetailShellunreviewed2026-11-13
Session Participants (참석자 관리, L3-35)/sessions/[sessionId]/participantsDetailShell scroll={false} titled 참석자 관리 (staff) or 참석자 (payer, member), sub line the club then the day, over one FeedList; staff of a club that tracks attendance get the switcher in the shell's subhead; a payer gets a pinned band; 정산 나누기 is a second shell of the same routeunreviewed2026-11-13
Match Preview (매치 미리보기, L2-03)/sessions/[sessionId]/previewDetailShell header="collapsing" collapsingLook="circles" (the MediaBand under the bar; a bare back-only DetailShell for error, offline cold and not found)unreviewed2026-11-15
Spectator Scorecard (스코어카드, L3-38)/sessions/[sessionId]/scorecardDetailShellunreviewed2026-11-13
Draw (대진 짜기, L3-47)/sessions/[sessionId]/drawDetailShellunreviewed2026-11-13

settings — screen-blueprints/settings.md · 9 screens ​

ScreenRouteShellDesignVerified
Settings (설정, L4-15)/settingsDetailShell navRootunreviewed2026-11-14
Blocked Users (차단한 사용자)/settings/blockedDetailShellunreviewed2026-11-14
Change Password (비밀번호 변경, L4-12)/settings/change-passwordDetailShellunreviewed2026-11-15
Consent History (동의 이력)/settings/consent/historyDetailShellunreviewed2026-11-13
Consent Management (동의 관리, L4-19)/settings/consentDetailShellunreviewed2026-11-13
Delete Account (회원 탈퇴, L4-13)/settings/delete-accountDetailShellunreviewed2026-11-14
Edit Profile (프로필 수정)/settings/edit-profileDetailShellunreviewed2026-11-13
Privacy Settings (공개 범위 설정, L4-17)/settings/privacyDetailShellunreviewed2026-11-15
Notification Settings (알림 설정)/settings/signal-preferencesDetailShellunreviewed2026-11-11

venues — screen-blueprints/venues.md · 7 screens ​

ScreenRouteShellDesignVerified
Venue Detail (장소 상세, L2-04)/venues/[id]DetailShellunreviewed2026-11-13
Venue Contribution Detail (제안 상세, L3-33)/venue-contributions/[id]DetailShellunreviewed2026-11-15
Venue Contributions Inbox (장소 정보 제안 내역, L3-30)/venue-contributionsDetailShell scroll=unreviewed2026-11-15
New Venue Contribution (장소 정보 제안, L4-07)/venue-contributions/newDetailShellunreviewed2026-11-15
Venue Owner Claim Detail (장소 소유권, L3-34)/venue-owner-claims/[id]DetailShell scroll=unreviewed2026-11-15
Venue Owner Claims List (소유권 신청 내역, L3-31)/venue-owner-claimsDetailShell scroll=unreviewed2026-11-13
New Venue Owner Claim (소유권 신청, L4-08)/venue-owner-claims/newDetailShell (ApplicationShell)unreviewed2026-11-13

Markdown remains the source of truth. Run yarn docs:check before handoff.