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

clubs — screen-blueprints/clubs.md · 20 screens

ScreenRouteShellDesignVerified
Club List (클럽)/(tabs)/(clubs)MainTabShellratified2026-09-17
Club Admin (관리)/clubs/[clubId]/adminDetailShellunreviewed2026-09-16
Club Album (앨범)/clubs/[clubId]/albumDetailShellunreviewed2026-09-14
Club Analytics (성장 분석)/clubs/[clubId]/analyticsDetailShellunreviewed2026-09-13
Club Attendance (출석 현황)/clubs/[clubId]/attendanceDetailShellunreviewed2026-09-17
Board Post Detail (게시글)/clubs/[clubId]/board/[postId]DetailShellratified2026-09-16
Board Create Post (글쓰기)/clubs/[clubId]/board/createDetailShellunreviewed2026-09-17
Club Challenges (도전 과제)/clubs/[clubId]/challengesDetailShellratified2026-09-17
Club Dues (회비)/clubs/[clubId]/duesDetailShellunreviewed2026-09-17
Club Detail — place surface (클럽 홈)/clubs/[clubId]PlaceShell (CollapsingTopBar + CollapsingHeaderLayer)ratified2026-09-17
Join Review Detail (가입 심사)/clubs/[clubId]/join-review/[userId]DetailShellratified2026-09-16
Club Members (멤버 관리)/clubs/[clubId]/membersDetailShellratified2026-09-17
Partner Suggester (복식 파트너 추천)/clubs/[clubId]/partnersDetailShellunreviewed2026-09-17
Public Club Profile (클럽 미리보기)/clubs/[clubId]/previewDetailShellratified2026-09-17
Club Sessions (일정 관리)/clubs/[clubId]/sessionsDetailShellratified2026-09-16
Club Settings (클럽 설정)/clubs/[clubId]/settingsDetailShellratified2026-09-17
Club Venues (코트 관리)/clubs/[clubId]/venuesDetailShellratified2026-09-16
Create Club Wizard (클럽 만들기)/create-clubWizardShellratified2026-09-17
Join Club (클럽 가입하기)/join-clubDetailShellratified2026-09-17
Leaderboard Share Redirect/lb/[clubId]none (bare YStack states, no AppHeader/DetailShell)unreviewed2026-09-13

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

ScreenRouteShellDesignVerified
Home (일간/주간/월간 브리핑)/(tabs)/(home)MainTabShellratified2026-09-13
Notification Center (알림)/home/notificationsDetailShellratified2026-09-16
ScreenRouteShellDesignVerified
Contact & FAQ (문의하기)/legal/contactDetailShell (via ContentPage, ground="canvas")unreviewed2026-09-17
Announcements (공지사항)/legal/noticesDetailShell (via ContentPage, ground="canvas")unreviewed2026-09-17
Privacy Policy (개인정보 처리방침)/legal/privacyDetailShell (via ContentPagePolicyDocumentPage, ground="canvas")unreviewed2026-09-14
Terms of Service (이용약관)/legal/termsDetailShell (via ContentPage)unreviewed2026-09-13

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

ScreenRouteShellDesignVerified
Match Result Share Preview/m/[matchId]DetailShellunreviewed2026-09-13
Match Board/match-boardDetailShellratified2026-09-17
Tournament Board/tournament-boardDetailShellunreviewed2026-09-17

messaging — screen-blueprints/messaging.md · 4 screens

ScreenRouteShellDesignVerified
DM Thread/messages/[threadId]DetailShellratified2026-09-17
DM Add Members (멤버 초대)/messages/add-membersDetailShellunreviewed2026-09-16
DM Inbox (메시지)/messagesDetailShellunreviewed2026-09-16
DM Create Group (단톡방 만들기)/messages/new-groupDetailShellunreviewed2026-09-16

profile — screen-blueprints/profile.md · 7 screens

ScreenRouteShellDesignVerified
Profile (프로필)/(tabs)/(profile)MainTabShellratified2026-09-17
Profile Share Receiver/p/[userId]none (bare route file, no MainTabShell/DetailShell)unreviewed2026-09-11
Public Profile/profile/[userId]DetailShellratified2026-09-17
Achievements Gallery (업적)/profile/achievementsDetailShellunreviewed2026-09-13
Friends (친구 목록)/profile/friendsDetailShellunreviewed2026-09-17
Add Friend (친구 찾기)/profile/friends/addDetailShellunreviewed2026-09-17
Practice Log (연습 기록)/profile/practiceDetailShellratified2026-09-16

records — screen-blueprints/records.md · 6 screens

ScreenRouteShellDesignVerified
Records (기록)/(tabs)/(records)MainTabShellunreviewed2026-09-16
Record Detail/records/[period]DetailShellratified2026-09-16
Head-to-Head (상대 전적)/records/analysis/rivalsDetailShellunreviewed2026-09-17
Record Day Detail (일일 요약)/records/dayDetailShellunreviewed2026-09-13
Records History (전적)/records/historyDetailShellratified2026-09-16
Records Leaderboard (리더보드)/records/leaderboardDetailShellratified2026-09-13

sessions — screen-blueprints/sessions.md · 13 screens

ScreenRouteShellDesignVerified
Activity (경기)/(tabs)/(sessions)MainTabShellratified2026-09-16
Court Directory (테니스장)/courtsDetailShellratified2026-09-17
Create Session Wizard/create-sessionWizardShellunreviewed2026-09-17
Session Invite Share Preview/s/[sessionId]DetailShellunreviewed2026-09-13
Session Attendance (출석 확인)/sessions/[sessionId]/attendanceDetailShellunreviewed2026-09-16
Session Edit (일정 수정)/sessions/[sessionId]/editDetailShellratified2026-09-17
Pickup Host Dashboard (호스트 관리)/sessions/[sessionId]/hostDetailShellunreviewed2026-09-17
Session Detail/sessions/[sessionId]DetailShellratified2026-09-17
Match Rules Editor (경기 규칙)/sessions/[sessionId]/match-rulesDetailShellunreviewed2026-09-16
Session Participants (참석자 관리)/sessions/[sessionId]/participantsDetailShellunreviewed2026-09-16
Session Payments (결제 현황 / 비용 정산)/sessions/[sessionId]/paymentsDetailShellunreviewed2026-09-17
Public Pickup Preview/sessions/[sessionId]/previewDetailShellunreviewed2026-09-16
Spectator Scorecard (경기 스코어카드)/sessions/[sessionId]/scorecardDetailShellratified2026-09-17

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

ScreenRouteShellDesignVerified
Settings (설정)/settingsDetailShellratified2026-09-16
Blocked Users (차단 목록)/settings/blockedDetailShellunreviewed2026-09-17
Change Password (비밀번호 변경)/settings/change-passwordDetailShellunreviewed2026-09-13
Consent History (동의 이력)/settings/consent/historyDetailShellunreviewed2026-09-14
Consent Management (동의 관리)/settings/consentDetailShellunreviewed2026-09-17
Delete Account (회원 탈퇴)/settings/delete-accountDetailShellunreviewed2026-09-13
Edit Profile (프로필 수정)/settings/edit-profileDetailShellratified2026-09-17
Profile Visibility (프라이버시)/settings/privacyDetailShellunreviewed2026-09-13
Notification Settings (알림 설정)/settings/signal-preferencesDetailShellunreviewed2026-09-13

venues — screen-blueprints/venues.md · 8 screens

ScreenRouteShellDesignVerified
Venue Directory Detail/directory-venues/[id]DetailShellratified2026-09-16
Venue Contribution Detail/venue-contributions/[id]DetailShellunreviewed2026-09-16
Venue Contributions Inbox/venue-contributionsDetailShellunreviewed2026-09-13
New Venue Contribution/venue-contributions/newDetailShellunreviewed2026-09-13
Venue Owner Claim Detail/venue-owner-claims/[id]DetailShellunreviewed2026-09-16
Venue Owner Claims List/venue-owner-claimsDetailShellunreviewed2026-09-13
New Venue Owner Claim/venue-owner-claims/newDetailShell (via OwnerFrame)unreviewed2026-09-13
Venue Detail/venues/[id]DetailShellratified2026-09-16

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