Skip to content

Terminology Guide — TwoMore (투마)

Status: Reference

Single source of truth for all Korean-English terminology. UI labels, domain entities, enums, and code keys.


UI Label Rules

  • Top-level navigation vocabulary is fixed: 홈 / 클럽 / 경기 / 기록 / 프로필.
  • English top-level navigation vocabulary is fixed: Home / Clubs / Games / Records / Profile.
  • "클럽" is the bottom tab name (was "모임"). Do not use "모임" as a top-level tab or product navigation label.
  • "세션" (session) never appears in Korean UI. Use "일정".
  • "클럽" not "동호회" in UI (동호회 is spoken-only).
  • "경기" is the top-level games tab and also a played/scored match when context is clear.
  • "일정" is a scheduled session before it is played.
  • "기록" is the records/analytics top-level tab. Use leaderboard only for rank-comparison internals or subroutes.
  • "번개" not "번개 모임" (redundant). Discovery chip label: "번개 찾기". In code/engineering: always pickup (not meets/bunggae).
  • RSVP verb is 참석/불참 (owner 2026-07-29 vernacular migration) — 참석하다 (attend) / 불참하다 (decline), matching the community vernacular Korean tennis players already use on 밴드 (Band) for meetup RSVPs. 참가 is kept ONLY for 참가비 (participation fee) and tournament entry contexts; 참여 stays reserved for achievements.
  • Waitlist vocabulary is 예비 (예비 N번, 예비 등록, 예비 가능) — also 밴드-vernacular alignment. 대기 is retired from waitlist contexts entirely and reserved for process-queuing (e.g. 결제 대기 as a generic pending state, distinct from the session-fee copy below). 대기자 (the noun "waitlisted person") is retired along with it — 예비 covers both the state and the person; never re-introduce 대기자.
  • Session participation-fee transfer copy is 입금 (입금 필요 / 입금 완료 / 입금 확인 중), matching club-ledger vernacular (총무 users already say "입금" for dues/fee transfers) — replaces the old 송금 필요/송금 완료/송금 확인 중.
  • Match-generation CTA is 대진 짜기 — 대진 (existing noun, bracket/draw) + 짜다 (to construct/put together) reads as the natural verb Korean club organizers use, replacing the more clinical 경기 생성/경기 만들기.
  • 가입 for club membership, never 참여 or 참가. 참석 is reserved for RSVP/attendance CTAs — including pickup join buttons (e.g. "번개 참석하기"), which are attending a one-off event, not joining an org.
  • Semiannual dues cadence label is 6개월 (e.g. "6개월 3만원"), not 반기 — converged 2026-08 after the create-club wizard's cadence picker shipped 6개월 with a 4:1 majority over 반기 among the club/session/wizard surfaces that render dues cadence.
  • Save buttons use bare 저장, not 저장하기 — matches the 확인/취소/삭제 house style of single-word primary actions. Longer, context-qualified save actions (e.g. "점수 저장") stay two words when the object being saved needs disambiguating, but never add the 하기 suffix. The bare form is the rule for every single-word action (공유, 신고, 초대, 변경, 수정, 거절, 승인, 지명, 반영); the 하기 form survives only on the sanctioned CTA idioms — 시작하기 (get started), 가입하기 (join), 참석하기 (RSVP), 신청하기 (apply), 결제하기 (pay), 문의하기 (contact us) — and on …만들기.
  • One wording per concept (2026-09-13 consolidation; gated by check:i18n-near-duplicates). The same English under two Korean spellings, or the same Korean under two English renderings, is either one concept written inconsistently — folded through a copy plan (docs/design/copy-plans/) — or two concepts that share a word, recorded with a reason in scripts/i18n-near-duplicates-baseline.json. Rulings made in that pass:
    • People are 멤버, never 회원 (밴드 vernacular; 회원 survives only in 회원 탈퇴, the account). Removing a person is 내보내기; removing a thing is 삭제 (never 제거/빼기). Staff are 운영진; the admin role is 총무.
    • Declining anything is 거절 / 거절됨 — never 거부 (score claims) or 반려 (submissions). Staff approving a submission is 승인; accepting an offer made to you is 수락; finalising is 확정; OK is 확인.
    • States are past participles: 취소됨 (never bare 취소 as a state), 거절됨, 승인됨, 철회됨. Live status is 진행 중 everywhere; the caps LIVE pill is the one exception (a badge, not a label).
    • Dues: 완납 / 미납 / 일부 납부 for the ledger state, 납부 확인 for the 총무's action — never the verb phrase 납부 완료 (a third wording; gated). Session fees stay 입금 완료 / 입금 필요 / 입금 확인.
    • Subscription: 클럽 플랜 (상위 플랜, 플랜 업그레이드) — never 등급, which is the rating/trust tier word (gated).
    • Money vocabulary (U-14, 2026-09-17 ruling). 회비 = club dues, a per-member per-period charge; 참가비 = the per-session fee; 정산 = the host's ad-hoc cost split that sets a fee when a session has no fixed 참가비. Verbs: dues take 납부 확인 / 면제 / 납부 취소; session fees take 입금 확인 / 면제 (never 납부 — that word is reserved for dues). Both rosters render the SAME inline verb-pair row grammar — two pills [confirm][waive] on an open (unpaid/pending) row, one pill [undo] on a just-settled row, none on a waived/terminal row — one row grammar, two money vocabularies.
    • Lists: 전체 보기 = view all (a navigation to the full list); 더보기 = more (expand, load more, the ⋯ menu) — one spelling, no space, the Naver/Toss convention. Trailing dots on progress copy are three periods (불러오는 중...), never the … glyph.
    • Vocabulary axes: 종목 = singles/doubles (never 형식/방식 for it); 경기 방식 = session style (친목 / 실력별 / 토너먼트); 경기 유형 = match nature (친선 / 경쟁 / 토너먼트 / 리그); 성격 = club focus (친목형 / 경쟁형 / 성장형 / 균형형). 단식+복식 in full, 단복식 only as a chip; 혼합복식 in full, 혼복 only as a chip. The match board is 대진표.
    • 출석률 is the measured show-up rate (동호회 vernacular; the admin feature is 출석 현황 / 출석 확인); 참석 is the RSVP and the attended state; 참석자 are the people, 참가자 only for tournament entrants.
    • Venue facts: 운영 시간, 야간 조명, 코트 종류 (hard/clay), 시/군/구 for the district field, 지역 for a region, 위치 for a map position; 장소 stays the session-wizard word pending the owner's 장소/코트/테니스장 ruling.
  • Language-specific terms and one format per concept (2026-09-13 house-style pass; gated by check:i18n-house-style, which is this list in regex form with per-key allowlists — a new legitimate exception is added there WITH its reason here). The two consolidation passes caught shared spellings; this one applies the rulings to every leaf (a leak with no twin is still a leak), folds formats (templates: counters, units, ranges, dates, currency, court/round labels — check:i18n-near-duplicates now compares template signatures too), and fixes the English house style:
    • People and roles: 멤버 never 회원/클럽원/회원님; 총무 = club admin (EN admin), 대표 = owner (EN owner), 운영진 = the officers (EN admins), 운영팀 = TwoMore staff (EN staff), 호스트 = session host (EN host). Never 관리자/운영자/소유자 for a club role (venue ownership keeps 소유자/소유권); never organizer/manager in English.
    • Actions on people vs things: 내보내기 for a person (never 제거/추방/제외), 삭제 for a thing, 지우기 only for clearing a field; 거절 never 거부/반려. 참여 is reserved for achievements and milestones; 참가 for 참가비 and tournament entrants; everything else is 참석 (RSVP/attended) — a player taking the court is 출전.
    • Live and format words: 진행 중 for a status, 실시간 for a real-time surface (실시간 스코어카드), 라이브 only on the LIVE pill. 종목 = singles/doubles; 대진 방식 = how the draw is built (KOTC, Mexicano — never 경기 방식, which is the session style); 세트 방식 = the set format in match rules.
    • Spellings: 번개 never 픽업; 초대 코드 and 홈 코트 spaced; 게시글 never 게시물; 사진 never 이미지 (a map image alt excepted); 수정 never 편집; ELO in caps in both languages (never Elo); 입금 for session-fee money (결제 only on the PortOne CTA and a venue's payment methods), 납부 for dues.
    • Korean counters and formats: 사람 N명, 코트 N면 (never N개), 일정 N개 for items and N회 for occurrences, N번 코트 (never 코트 N / N코트), N라운드, N세트, N위, N점, N승 N패 N무, 총 N for a total (never 전체 N); N명 이상 (never N명+). Ranges use ~ with no spaces (1~3년, 2~30자, 10:00~12:00, 9월 1일~7일; formatTimeRange is the one time-range formatter, reading common.timeRange). One exception: a decimal rating band is notation, not prose — NTRP 3.0–3.5 / UTR 5.0–8.0 keep the en dash in both languages (the domain formatters in rating-region.config.ts / tier.config.ts / rating-scale-format.rules.ts cannot read i18n, and were aligned on the en dash 2026-09-13 after formatTierNtrp alone printed ~). The em dash never appears in Korean copy — meta joins with ' · ', prose with a period. Relative time is N분 뒤 / N시간 뒤 (never 후) and N분 전 / N시간 전; a duration is N시간 N분. A referenced label is quoted with straight single quotes ('공유'); the [필수]/[선택] consent markers are the one bracket use.
    • Rating bands (owner 2026-09-14): NTRP in both languages. Every band renders through formatNtrpBand (tier.config.ts) — NTRP 3.0–3.5 with the en dash as notation, 단식 NTRP 3.0–3.5 / Singles NTRP 3.0–3.5 (common.singlesBand), 복식 … / Doubles … (common.doublesBand). The UTR band display is retired (formatUtrBand deleted); UTR stays a model-held inference only.
    • No glued facts (owner 2026-09-14). A leaf never joins two facts with ·; each fact is its own key (or an entry of a readonly string[] leaf) rendered through MetaSegments, or the leaf is rewritten as a sentence. The no-middle-dot-join rule has no waivers.
    • Sanctioned 하기 CTAs grow by two: 확인하기 (go and check — distinct from 확인 = OK) and 확정하기 (the action — distinct from 확정 / 참석 확정, the state). The full list: 시작하기 가입하기 참석하기 신청하기 결제하기 문의하기 확인하기 확정하기 + …만들기; everything else is the bare form (글쓰기 for a board post, 투표, 기권, 반영).
    • English: sentence case for every label (proper nouns — Kakao Map, Naver Place, Court Climb, TennisTown — and the legal document titles Privacy Policy / Terms of Service excepted); Sign in / Sign out / sign-in never log in/out; waitlist / waitlisted never standby; event never gathering, and "schedule" only for the regular schedule; counts always through enCount / enPlural (never a hand-rolled n === 1 ? '' : 's'); numeric ranges with an en dash (2–30, 10:00–12:00; scores and statute section numbers keep the hyphen); #N for a position (never No. N); Court N, Round N; N going for an RSVP count, N KRW for money (never won); durations N min / N hr / N hr N min, relative chips Nm / Nh / Nd; month names through enMonthName (September 2026, never 9/2026 or Month 9); straight quotes, three periods (never the … glyph).
  • Tone: 해요체, contracted. All product copy is 해요체 (never 합니다체/습니다체) and prefers the contracted past-tense form — 됐어요 (not 되었어요), 됐고 (not 되었고). Two sanctioned 합니다체 exceptions only: (1) the PIPA consent checkbox labels (onboarding.consent.purposeLabels.*, e.g. "개인정보 처리방침에 동의합니다") — "~에 동의합니다" is the standard Korean legal-consent register, audit-reviewed 2026-08-09; (2) the delete-account type-to-confirm phrase (deleteAccountScreen.confirmPhrase, "탈퇴합니다") — a formal phrase the user types verbatim to confirm an irreversible action, deliberately weightier than the surrounding 해요체 UI (English sibling: "delete my account", lowercase to match a type-to-confirm affordance rather than a sentence). No other 합니다체 is permitted; i18n.test.ts's tone regex enforces this with exactly these two path allowlists.
  • 테니스장 (venue) vs 코트 (court), owner-ratified 2026-08-28 sweep. Venue-meaning labels — the facility itself: managing/searching/picking/reviewing a place, empty states, toasts — use 테니스장 (EN: venue/venues), never bare 코트. Individual-surface labels — court count, per-court roster, on-court assignment, surface material — keep 코트 (EN: court/courts), since a 테니스장 contains one or more courts. Idiomatic compounds are sanctioned exceptions and stay 코트 regardless of meaning: 홈 코트 (spaced), 코트비, 하드코트, 코트승급전 (owner-locked KOTC naming), and the brand taglines "코트 위에서 만나요" / "코트에서 불릴 이름" / "코트 밖에서의 노력도...". venues.courts.navCourt is a deliberate EN asymmetry — the ko facility-kind chip reads 테니스장 (paired with 연습장) but the EN chip stays "Courts" (colloquially correct for the kind, and "Venues" would misfit the sibling "Practice" chip). A handful of "umbrella" venue+court info-editing keys (fieldCourtInfo/modalTitleCourtInfo, hostConfirmTitle, correctionModalTitle, pendingReviewApproveConfirmMessage) plus two weather-tip strings and the showcase QA copy are still flagged pending a follow-up owner ruling — do not conflate them into either bucket without an explicit call. A third term, 장소 ("place"), is used in the session-creation wizard specifically to differ from the club wizard's 코트/테니스장 vocabulary; that three-way split is also pending an owner ruling and is not resolved by this sweep.

Tab Names (Bottom Navigation)

TabKoreanEnglishSub-tabsPurpose
1HomeZone-based dashboard (Anchor/Context/Momentum/Community)
2클럽Clubs내 클럽 / 탐색Manage clubs + discover new ones
3경기Games내 경기 / 번개 찾기My games + pickup discovery
4기록Records리더보드 / 전적 / 분석Rankings, match history, analysis
5프로필ProfileProfile with settings gear

Engineering Term Mapping

Code and comments use English. Korean terms appear only in src/config/i18n/.

Korean (UI)Engineering (code)Deprecated termsNotes
번개pickupmeets, bunggae, flashAlways pickup in code, types, variables, file names
일정 / 세션sessionKorean UI shows "일정", code uses session
경기matchSingle game within a session
클럽clubmoim (partially)Bottom tab label. moim still in some i18n keys
기록recordsranking, statsBottom tab. Use ranking only when specifically comparing rank
프로필profileBottom tab and profile routes

Action Verbs

ActionKoreanWhen
Join club가입하다Permanent membership
RSVP yes (attend)참석하다Confirming attendance — community-vernacular alignment (밴드 참석 문화)
RSVP no (decline)불참하다Declining attendance — natural opposite of 참석하다
Build the draw대진 짜기Match-generation CTA — 대진(noun) + 짜다(construct), replaces 경기 생성
Attendance stats출석출석률 (the measured show-up rate), 출석 현황 (the admin dashboard)
Achievement engagement참여하다Sustained engagement contexts
Apply (needs approval)신청하다게스트 신청, 가입 신청
Create만들기클럽 만들기, 번개 만들기 (pickup), 일정 만들기
Edit수정하기Content editing
Change변경하다Settings, roles
Delete삭제하다Permanent removal

Status Labels

ContextKoreanEnglishNotes
Session open모집 중Recruiting
Session full마감Full
Session live진행 중In Progress
Session done완료Completed
RSVP yes참석 확정ConfirmedWas 참가 확정 — 참가 reserved for fee/tournament contexts (2026-07-29)
RSVP pending확인 대기Pending
Waitlisted예비 (N번)WaitlistedWas 대기 중 — 밴드 예비 문화; N번 is the queue-position sub
Declined불참Declined
Fee payment needed입금 필요Payment NeededWas 송금 필요 — club-ledger 입금 vernacular (2026-07-29)
Fee payment submitted입금 확인 중Awaiting ConfirmationWas 송금 확인 중
Fee payment confirmed입금 완료PaidWas 송금 완료

Entities

KoreanEnglishCode KeyDescription
클럽ClubclubRegular tennis club with members, sessions, and dues
번개PickuppickupImpromptu game hosted by an individual; auto-creates a pickup club. Engineering term: pickup (deprecated: meets, bunggae)
모임(retired)Formerly the umbrella concept for 클럽 + 번개; fully retired from UI copy (2026-08 sweep — i18n.test.ts bans the string outright). Use 클럽 or 번개 directly, or 일정 for the scheduled-gathering sense.
일정 / 세션SessionScheduled gathering with date, time, courts, and RSVP
경기MatchSingle game within a session on one court in one round
라운드RoundOne rotation cycle where all courts play simultaneously
대진Bracket/DrawMatch assignments for a round
회비DuesMonthly membership fee record for a member
납부 기록Payment RecordAudit trail entry for a dues payment
프로필ProfileUser account with display name, avatar, global ELO
선수 통계Player StatsComputed stats: win rate, streak, matches played
ELO 기록ELO historyPer-match ELO rating change log
클럽 ELOClub ELOPer-club ELO rating for a user (separate from global)
게스트 신청Guest ApplicationNon-member application to join a public session
로테이션 설정Rotation ConfigMatch generation settings (partner mode, bench mode, etc.)
챌린지Monthly ChallengeClient-side computed monthly goal with progress tracking
업적AchievementUnlockable badge earned by reaching milestones
구독SubscriptionPaid plan subscription (individual or club scope)
테니스장VenueThe facility (venues spine row); a 테니스장 contains one or more courts
코트CourtAn individual numbered/named playing surface inside a 테니스장
초대 코드Invite CodeCode shared to let new members join a club
참석RSVPAttendance confirmation for a session

Roles (ClubRole)

KoreanEnglishCode KeyPermissions
대표Ownerownermanage_club, manage_members, manage_schedule, manage_matches, manage_dues
총무Adminadminmanage_club, manage_members, manage_schedule, manage_dues
경기이사Match Directormatch_directormanage_matches, manage_schedule
멤버Membermember(none) — never 회원 in UI (2026-09-13)

Permissions (ClubPermission)

KoreanEnglishCode KeyDescription
클럽 관리Manage Clubmanage_clubEdit club settings and info
멤버 관리Manage Membersmanage_membersInvite, remove, change roles
일정 관리Manage Schedulemanage_scheduleCreate and edit sessions
경기 관리Manage Matchesmanage_matchesGenerate rounds, enter scores, rotation config
회비 관리Manage Duesmanage_duesCreate/mark dues, view payment history

Enums

Session Status (SessionStatus)

KoreanEnglishCode Key
임시저장Draftdraft
모집 중Openopen
마감Lockedlocked
진행 중In Progressin_progress
완료Completedcompleted
취소됨Cancelledcancelled

Session Format (SessionFormat)

KoreanEnglishCode Key
복식Doublesdoubles
단식Singlessingles
단식+복식Singles & Doublessingles_doubles
혼합복식Mixed Doublesmixed_doubles

Session Style (SessionStyle)

KoreanEnglishCode Key
친목Socialsocial
실력별Competitivecompetitive
토너먼트Tournamenttournament

Session Visibility (SessionVisibility)

KoreanEnglishCode Key
멤버 전용Members onlymembers_only
공개Publicpublic

Public Invite Approval (PublicInviteApproval)

KoreanEnglishCode Key
수동 승인Manualmanual
자동 승인Autoauto

RSVP Status (RsvpStatus)

KoreanEnglishCode Key
참석Confirmedconfirmed
예비Waitlistedwaitlisted
취소됨Cancelledcancelled
불참No Showno_show

Note: no_show also renders 불참 (a member who RSVP'd 참석 but didn't attend). This is a pre-existing label overlap with the RSVP-decline verb 불참하다 — both read as "not present," which is the intentional plain-Korean meaning in both cases (decline-before vs. absent-after), not a drift bug.

Match Status (MatchStatus)

KoreanEnglishCode Key
예정Scheduledscheduled
진행 중In Progressin_progress
완료Completedcompleted
취소됨Cancelledcancelled

Match Format (MatchFormat)

KoreanEnglishCode Key
단식Singlessingles
복식Doublesdoubles

Dues / Payment Status (PaymentStatus)

KoreanEnglishCode Key
미납Unpaidunpaid
납부 완료Paidpaid
일부 납부Partialpartial
면제Waivedwaived

Guest Application Status (GuestApplicationStatus)

KoreanEnglishCode Key
승인 대기Pendingpending
승인됨Approvedapproved
거절됨Rejectedrejected
취소됨Cancelledcancelled

Elo Tiers (EloTier)

KoreanEnglishCode KeyRange
초급Beginnerbeginner0-1200
중급Intermediateintermediate1201-1600
상급Advancedadvanced1601+

Rotation Engine

Partner Mode (PartnerMode)

KoreanEnglishCode Key
전체 로테이션Rotate Allrotate_all
고정 파트너Fixed Pairsfixed_pairs
실력 균형Skill Balancedskill_balanced
랜덤Randomrandom

Bench Mode (BenchMode)

KoreanEnglishCode Key
공정 로테이션Fair Rotationfair_rotation
자발적Volunteervolunteer
없음Nonenone

Rotation Presets

KoreanEnglishCode Key
친목Socialsocial
실력별Competitivecompetitive
고정 복식Fixed Doublesfixed_doubles
랜덤Randomrandom
친목 단식Singles Socialsingles_social
실력별 단식Singles Competitivesingles_competitive
랜덤 단식Singles Randomsingles_random

Tournament Types

KoreanEnglishCode Key
ATP 파이널스ATP Finalsatp_finals
스위스 시스템Swiss Systemswiss
나침반 드로Compass Drawcompass
싱글 엘리미네이션Single Eliminationsingle_elimination
조별리그 + 녹아웃Group + Knockoutgroup_knockout

Challenges & Achievements

Challenge Types (ChallengeType)

KoreanEnglishCode KeyCategory
경기 도전Match Challengematchesmatches
승리 도전Win Challengewinsmatches
연승 도전Streak Challengestreakmatches
연습 도전Practice Challengepracticeskills
단식 도전Try Singlestry_singlesskills
새 코트 방문Visit New Courtvisit_new_courtfitness
오픈 모임 참가Join Public Meetjoin_public_meetfitness
새 파트너 플레이Play with New Partnersplay_with_new_partnerssocial
친구 초대Invite Friendinvite_friendsocial

Challenge Categories (ChallengeCategory)

KoreanEnglishCode Key
경기Matchesmatches
기술Skillsskills
체력Fitnessfitness
소셜Socialsocial

Achievement Tiers (AchievementTier)

EnglishCode Key
Bronzebronze
Silversilver
Goldgold
Platinumplatinum

Achievement Categories (AchievementCategory)

EnglishCode Key
Matchesmatches
Winswins
Streaksstreaks
Eloelo
Socialsocial
Attendanceattendance
Specialspecial

Subscriptions

Plans (PlanType)

KoreanEnglishCode KeyScopeMonthly (KRW)
무료Freefreeindividual0
플레이어Playerplayerindividual4,900
베이직Basicbasicclub8,900
프로Proproclub18,900
클럽+Club Plusclub_plusclub37,900

Subscription Status (SubscriptionStatus)

EnglishCode Key
Activeactive
Trialingtrialing
Past Duepast_due
Cancelledcancelled
Expiredexpired

Discovery Filters

Region (Region)

KoreanEnglishCode Key
서울Seoulseoul
부산Busanbusan
대구Daegudaegu
인천Incheonincheon
광주Gwangjugwangju
대전Daejeondaejeon
울산Ulsanulsan
세종Sejongsejong
경기Gyeonggigyeonggi
강원Gangwongangwon
충북Chungbukchungbuk
충남Chungnamchungnam
전북Jeonbukjeonbuk
전남Jeonnamjeonnam
경북Gyeongbukgyeongbuk
경남Gyeongnamgyeongnam
제주Jejujeju

Court Surface Types

KoreanEnglishCode Key
하드Hardhard
클레이Clayclay
잔디Grassgrass
실내Indoorindoor
기타Otherother

Payment Methods

KoreanEnglish
계좌이체Bank Transfer
현금Cash
카카오페이KakaoPay
토스Toss

Key Business Terms

KoreanEnglishDescription
투마TwoMoreApp name -- from "두 명 더" (two more players to fill a court)
총무Chongmu / AdminClub administrator -- primary user persona
정모Regular MeetupRecurring scheduled session
번개PickupImpromptu pickup session (code key: pickup, deprecated: meets/bunggae)
공개 모집Public InviteOpening a session to non-member guest applications
RSVP 마감RSVP DeadlineCutoff time for member attendance confirmation
예비WaitlistQueue for when session is full (was 대기; 대기 now reserved for process-queuing, e.g. 입금 확인 중 is a state not a 대기 label)
회비 주기Dues CadenceCadence prefix on the dues label: 월 (monthly) / 분기 (quarterly) / 6개월 (semiannual, was 반기) / 연 (yearly)
벤치 / 쉼Bench / Sit-outRound where a player does not play (rotation fairness)
부전승ByeAutomatic advancement when no opponent (odd player count)
위안전ConsolationSecondary bracket for eliminated players (compass draw)
타이브레이크TiebreakTiebreak scoring when set reaches 6-6
연승Win StreakConsecutive wins
연패Loss StreakConsecutive losses
승률Win RateWins divided by total matches (0.0-1.0)

First Encounter (Jargon)

U-07b (usability audit 2026-09-16) ratified one grammar for a term a player meets with no prior context — never a bare word + number with no explanation nearby.

  1. A term with a dedicated explainer sheet (실력/티어 → TierInfoSheet; 신뢐 등급 → TrustTierInfoSheet) gets the one shared "?" trigger, InfoHintButton (@twomore/ui) beside its label on a wizard field (LabeledField's labelRight) — never a hand-rolled Pressable + Icon(Info). On a profile/records surface where the term's own fact/badge is already the tap target (EloFactRow, hero-card.tsx's tier-badge Pressable, the public/own-profile trust-tier cell/title-badge), the fact itself opens the sheet instead — a second sanctioned shape, not a gap.
  2. A term with no explainer sheet gets a one-line caption under its label (LabeledField's caption prop) on its FIRST wizard appearance — e.g. 구성 (glossary.composition, "남성, 여성, 혼합 중 누가 참여하는지예요"). Add a key only where a real call site consumes it — an unwired glossary entry is a dead i18n key (check:i18n-dead-keys). 로테이션 needed no entry: its one wizard-adjacent field (몇 명이서 step's duration control) already avoids the bare jargon word (labeled "한 경기 시간" / "직접 입력 (분)", never "로테이션").
  3. A read-only summary row (session detail's FactList, etc.) states the rule as a plain, self-explanatory VALUE — sessionDetail.specRotationValue(n) = "20분마다 교대" — never a bare number sitting next to an unexplained label. The label may still be the terse canonical word (로테이션); only the value must carry the explanation.
  4. 대항전 is the one word for cross-club competition; 인터클럽 is retired (it was the only category chip still in English-loanword form, inconsistent with the other twelve). Surfaces: signals.category.interclub, the Android notification channel name (notification.expo.ts), and the send-push edge function's mirrored category map (supabase/functions/send-push/notification-copy.ts) — all three must move together.
  5. D-day notation stays — native Korean usage, not jargon.

Rejected: tooltips (no hover on a touchscreen), a standalone glossary screen (usability audit: nobody opens one).

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