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
leaderboardonly 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 inscripts/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-duplicatesnow 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일;
formatTimeRangeis the one time-range formatter, readingcommon.timeRange). One exception: a decimal rating band is notation, not prose —NTRP 3.0–3.5/UTR 5.0–8.0keep the en dash in both languages (the domain formatters inrating-region.config.ts/tier.config.ts/rating-scale-format.rules.tscannot read i18n, and were aligned on the en dash 2026-09-13 afterformatTierNtrpalone 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.5with 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 (formatUtrBanddeleted); 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 areadonly string[]leaf) rendered throughMetaSegments, or the leaf is rewritten as a sentence. Theno-middle-dot-joinrule 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-rolledn === 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 throughenMonthName(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.navCourtis 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)
| Tab | Korean | English | Sub-tabs | Purpose |
|---|---|---|---|---|
| 1 | 홈 | Home | — | Zone-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 | 프로필 | Profile | — | Profile with settings gear |
Engineering Term Mapping
Code and comments use English. Korean terms appear only in src/config/i18n/.
| Korean (UI) | Engineering (code) | Deprecated terms | Notes |
|---|---|---|---|
| 번개 | pickup | meets, bunggae, flash | Always pickup in code, types, variables, file names |
| 일정 / 세션 | session | — | Korean UI shows "일정", code uses session |
| 경기 | match | — | Single game within a session |
| 클럽 | club | moim (partially) | Bottom tab label. moim still in some i18n keys |
| 기록 | records | ranking, stats | Bottom tab. Use ranking only when specifically comparing rank |
| 프로필 | profile | 나 | Bottom tab and profile routes |
Action Verbs
| Action | Korean | When |
|---|---|---|
| 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
| Context | Korean | English | Notes |
|---|---|---|---|
| Session open | 모집 중 | Recruiting | |
| Session full | 마감 | Full | |
| Session live | 진행 중 | In Progress | |
| Session done | 완료 | Completed | |
| RSVP yes | 참석 확정 | Confirmed | Was 참가 확정 — 참가 reserved for fee/tournament contexts (2026-07-29) |
| RSVP pending | 확인 대기 | Pending | |
| Waitlisted | 예비 (N번) | Waitlisted | Was 대기 중 — 밴드 예비 문화; N번 is the queue-position sub |
| Declined | 불참 | Declined | |
| Fee payment needed | 입금 필요 | Payment Needed | Was 송금 필요 — club-ledger 입금 vernacular (2026-07-29) |
| Fee payment submitted | 입금 확인 중 | Awaiting Confirmation | Was 송금 확인 중 |
| Fee payment confirmed | 입금 완료 | Paid | Was 송금 완료 |
Entities
| Korean | English | Code Key | Description |
|---|---|---|---|
| 클럽 | Club | club | Regular tennis club with members, sessions, and dues |
| 번개 | Pickup | pickup | Impromptu 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. |
| 일정 / 세션 | Session | — | Scheduled gathering with date, time, courts, and RSVP |
| 경기 | Match | — | Single game within a session on one court in one round |
| 라운드 | Round | — | One rotation cycle where all courts play simultaneously |
| 대진 | Bracket/Draw | — | Match assignments for a round |
| 회비 | Dues | — | Monthly membership fee record for a member |
| 납부 기록 | Payment Record | — | Audit trail entry for a dues payment |
| 프로필 | Profile | — | User account with display name, avatar, global ELO |
| 선수 통계 | Player Stats | — | Computed stats: win rate, streak, matches played |
| ELO 기록 | ELO history | — | Per-match ELO rating change log |
| 클럽 ELO | Club ELO | — | Per-club ELO rating for a user (separate from global) |
| 게스트 신청 | Guest Application | — | Non-member application to join a public session |
| 로테이션 설정 | Rotation Config | — | Match generation settings (partner mode, bench mode, etc.) |
| 챌린지 | Monthly Challenge | — | Client-side computed monthly goal with progress tracking |
| 업적 | Achievement | — | Unlockable badge earned by reaching milestones |
| 구독 | Subscription | — | Paid plan subscription (individual or club scope) |
| 테니스장 | Venue | — | The facility (venues spine row); a 테니스장 contains one or more courts |
| 코트 | Court | — | An individual numbered/named playing surface inside a 테니스장 |
| 초대 코드 | Invite Code | — | Code shared to let new members join a club |
| 참석 | RSVP | — | Attendance confirmation for a session |
Roles (ClubRole)
| Korean | English | Code Key | Permissions |
|---|---|---|---|
| 대표 | Owner | owner | manage_club, manage_members, manage_schedule, manage_matches, manage_dues |
| 총무 | Admin | admin | manage_club, manage_members, manage_schedule, manage_dues |
| 경기이사 | Match Director | match_director | manage_matches, manage_schedule |
| 멤버 | Member | member | (none) — never 회원 in UI (2026-09-13) |
Permissions (ClubPermission)
| Korean | English | Code Key | Description |
|---|---|---|---|
| 클럽 관리 | Manage Club | manage_club | Edit club settings and info |
| 멤버 관리 | Manage Members | manage_members | Invite, remove, change roles |
| 일정 관리 | Manage Schedule | manage_schedule | Create and edit sessions |
| 경기 관리 | Manage Matches | manage_matches | Generate rounds, enter scores, rotation config |
| 회비 관리 | Manage Dues | manage_dues | Create/mark dues, view payment history |
Enums
Session Status (SessionStatus)
| Korean | English | Code Key |
|---|---|---|
| 임시저장 | Draft | draft |
| 모집 중 | Open | open |
| 마감 | Locked | locked |
| 진행 중 | In Progress | in_progress |
| 완료 | Completed | completed |
| 취소됨 | Cancelled | cancelled |
Session Format (SessionFormat)
| Korean | English | Code Key |
|---|---|---|
| 복식 | Doubles | doubles |
| 단식 | Singles | singles |
| 단식+복식 | Singles & Doubles | singles_doubles |
| 혼합복식 | Mixed Doubles | mixed_doubles |
Session Style (SessionStyle)
| Korean | English | Code Key |
|---|---|---|
| 친목 | Social | social |
| 실력별 | Competitive | competitive |
| 토너먼트 | Tournament | tournament |
Session Visibility (SessionVisibility)
| Korean | English | Code Key |
|---|---|---|
| 멤버 전용 | Members only | members_only |
| 공개 | Public | public |
Public Invite Approval (PublicInviteApproval)
| Korean | English | Code Key |
|---|---|---|
| 수동 승인 | Manual | manual |
| 자동 승인 | Auto | auto |
RSVP Status (RsvpStatus)
| Korean | English | Code Key |
|---|---|---|
| 참석 | Confirmed | confirmed |
| 예비 | Waitlisted | waitlisted |
| 취소됨 | Cancelled | cancelled |
| 불참 | No Show | no_show |
Note:
no_showalso 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)
| Korean | English | Code Key |
|---|---|---|
| 예정 | Scheduled | scheduled |
| 진행 중 | In Progress | in_progress |
| 완료 | Completed | completed |
| 취소됨 | Cancelled | cancelled |
Match Format (MatchFormat)
| Korean | English | Code Key |
|---|---|---|
| 단식 | Singles | singles |
| 복식 | Doubles | doubles |
Dues / Payment Status (PaymentStatus)
| Korean | English | Code Key |
|---|---|---|
| 미납 | Unpaid | unpaid |
| 납부 완료 | Paid | paid |
| 일부 납부 | Partial | partial |
| 면제 | Waived | waived |
Guest Application Status (GuestApplicationStatus)
| Korean | English | Code Key |
|---|---|---|
| 승인 대기 | Pending | pending |
| 승인됨 | Approved | approved |
| 거절됨 | Rejected | rejected |
| 취소됨 | Cancelled | cancelled |
Elo Tiers (EloTier)
| Korean | English | Code Key | Range |
|---|---|---|---|
| 초급 | Beginner | beginner | 0-1200 |
| 중급 | Intermediate | intermediate | 1201-1600 |
| 상급 | Advanced | advanced | 1601+ |
Rotation Engine
Partner Mode (PartnerMode)
| Korean | English | Code Key |
|---|---|---|
| 전체 로테이션 | Rotate All | rotate_all |
| 고정 파트너 | Fixed Pairs | fixed_pairs |
| 실력 균형 | Skill Balanced | skill_balanced |
| 랜덤 | Random | random |
Bench Mode (BenchMode)
| Korean | English | Code Key |
|---|---|---|
| 공정 로테이션 | Fair Rotation | fair_rotation |
| 자발적 | Volunteer | volunteer |
| 없음 | None | none |
Rotation Presets
| Korean | English | Code Key |
|---|---|---|
| 친목 | Social | social |
| 실력별 | Competitive | competitive |
| 고정 복식 | Fixed Doubles | fixed_doubles |
| 랜덤 | Random | random |
| 친목 단식 | Singles Social | singles_social |
| 실력별 단식 | Singles Competitive | singles_competitive |
| 랜덤 단식 | Singles Random | singles_random |
Tournament Types
| Korean | English | Code Key |
|---|---|---|
| ATP 파이널스 | ATP Finals | atp_finals |
| 스위스 시스템 | Swiss System | swiss |
| 나침반 드로 | Compass Draw | compass |
| 싱글 엘리미네이션 | Single Elimination | single_elimination |
| 조별리그 + 녹아웃 | Group + Knockout | group_knockout |
Challenges & Achievements
Challenge Types (ChallengeType)
| Korean | English | Code Key | Category |
|---|---|---|---|
| 경기 도전 | Match Challenge | matches | matches |
| 승리 도전 | Win Challenge | wins | matches |
| 연승 도전 | Streak Challenge | streak | matches |
| 연습 도전 | Practice Challenge | practice | skills |
| 단식 도전 | Try Singles | try_singles | skills |
| 새 코트 방문 | Visit New Court | visit_new_court | fitness |
| 오픈 모임 참가 | Join Public Meet | join_public_meet | fitness |
| 새 파트너 플레이 | Play with New Partners | play_with_new_partners | social |
| 친구 초대 | Invite Friend | invite_friend | social |
Challenge Categories (ChallengeCategory)
| Korean | English | Code Key |
|---|---|---|
| 경기 | Matches | matches |
| 기술 | Skills | skills |
| 체력 | Fitness | fitness |
| 소셜 | Social | social |
Achievement Tiers (AchievementTier)
| English | Code Key |
|---|---|
| Bronze | bronze |
| Silver | silver |
| Gold | gold |
| Platinum | platinum |
Achievement Categories (AchievementCategory)
| English | Code Key |
|---|---|
| Matches | matches |
| Wins | wins |
| Streaks | streaks |
| Elo | elo |
| Social | social |
| Attendance | attendance |
| Special | special |
Subscriptions
Plans (PlanType)
| Korean | English | Code Key | Scope | Monthly (KRW) |
|---|---|---|---|---|
| 무료 | Free | free | individual | 0 |
| 플레이어 | Player | player | individual | 4,900 |
| 베이직 | Basic | basic | club | 8,900 |
| 프로 | Pro | pro | club | 18,900 |
| 클럽+ | Club Plus | club_plus | club | 37,900 |
Subscription Status (SubscriptionStatus)
| English | Code Key |
|---|---|
| Active | active |
| Trialing | trialing |
| Past Due | past_due |
| Cancelled | cancelled |
| Expired | expired |
Discovery Filters
Region (Region)
| Korean | English | Code Key |
|---|---|---|
| 서울 | Seoul | seoul |
| 부산 | Busan | busan |
| 대구 | Daegu | daegu |
| 인천 | Incheon | incheon |
| 광주 | Gwangju | gwangju |
| 대전 | Daejeon | daejeon |
| 울산 | Ulsan | ulsan |
| 세종 | Sejong | sejong |
| 경기 | Gyeonggi | gyeonggi |
| 강원 | Gangwon | gangwon |
| 충북 | Chungbuk | chungbuk |
| 충남 | Chungnam | chungnam |
| 전북 | Jeonbuk | jeonbuk |
| 전남 | Jeonnam | jeonnam |
| 경북 | Gyeongbuk | gyeongbuk |
| 경남 | Gyeongnam | gyeongnam |
| 제주 | Jeju | jeju |
Court Surface Types
| Korean | English | Code Key |
|---|---|---|
| 하드 | Hard | hard |
| 클레이 | Clay | clay |
| 잔디 | Grass | grass |
| 실내 | Indoor | indoor |
| 기타 | Other | other |
Payment Methods
| Korean | English |
|---|---|
| 계좌이체 | Bank Transfer |
| 현금 | Cash |
| 카카오페이 | KakaoPay |
| 토스 | Toss |
Key Business Terms
| Korean | English | Description |
|---|---|---|
| 투마 | TwoMore | App name -- from "두 명 더" (two more players to fill a court) |
| 총무 | Chongmu / Admin | Club administrator -- primary user persona |
| 정모 | Regular Meetup | Recurring scheduled session |
| 번개 | Pickup | Impromptu pickup session (code key: pickup, deprecated: meets/bunggae) |
| 공개 모집 | Public Invite | Opening a session to non-member guest applications |
| RSVP 마감 | RSVP Deadline | Cutoff time for member attendance confirmation |
| 예비 | Waitlist | Queue for when session is full (was 대기; 대기 now reserved for process-queuing, e.g. 입금 확인 중 is a state not a 대기 label) |
| 회비 주기 | Dues Cadence | Cadence prefix on the dues label: 월 (monthly) / 분기 (quarterly) / 6개월 (semiannual, was 반기) / 연 (yearly) |
| 벤치 / 쉼 | Bench / Sit-out | Round where a player does not play (rotation fairness) |
| 부전승 | Bye | Automatic advancement when no opponent (odd player count) |
| 위안전 | Consolation | Secondary bracket for eliminated players (compass draw) |
| 타이브레이크 | Tiebreak | Tiebreak scoring when set reaches 6-6 |
| 연승 | Win Streak | Consecutive wins |
| 연패 | Loss Streak | Consecutive losses |
| 승률 | Win Rate | Wins 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.
- 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'slabelRight) — never a hand-rolledPressable+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-badgePressable, the public/own-profile trust-tier cell/title-badge), the fact itself opens the sheet instead — a second sanctioned shape, not a gap. - A term with no explainer sheet gets a one-line
captionunder its label (LabeledField'scaptionprop) 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 "로테이션"). - 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. - 대항전 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. - 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).