← Cockpit Wireframes Pages by level Navigation map
Pages — lists A: tabs, inboxes, club management▾
Shipped app (old grammar)Components · 공유 키트상세 페이지 — 플랫 언어Session Card · 밴드 없는 카드
홈 · Home
Home · 홈
시작 · Entry
Onboarding · 시작
ArchiveStrip Map · 세션 스트립 전체 시나리오Headers · 헤더 아이콘Card Continuity · 카드 = 상세의 예고편Session Hero · 더 조용한 공유 카드 (제안)Session Share Card · 히어로 = 공유 카드Session List Frame · 날짜 섹션 · 패널 필터 · 2+2 카드Compaction — 일정 · 코트 · 스코어카드Compaction — 클럽 상세 · 홈Compaction — 기록 · 프로필Live anchor — 진행 중 밴드Density · 카드 밀도토스트 — 리디자인 제안Club List · 클럽Clubs · 클럽클럽 상세 — 여섯 탭 플랫운영 섹션 — 플랫 목표위저드 내비게이션 — 결정 보드드래프트 복원 — 무음 복원클럽 조 편성 — 모델 결정 보드게스트 → 회원 — 심사 흐름Page polish — titled postsWeb app — desktop layoutProduct questions — openWeb app — desktop adaptation, round 2Visual tone — pure white, flat rows, one Tag, a colour budgetLibrary — chrome, surfaces, rows, labelsLibrary — controls, overlays, states, formsLibrary — page patterns, scaling, motionLibrary — additions from the pagesEmpty-once — 프로필 빈 섹션Notification groups — 할 일 밴드 그룹화Profile Cockpit · 프로필 압축Session Detail — Redesign · 일정Venue Detail — Redesign · 테니스장Profile Detail — Redesign · 프로필Tournament Detail — Redesign · 대항전Applicant Detail — Redesign · 가입 심사Canvas Migration — 회비 · 멤버 · 규칙Record Detail — Redesign · 기록Venue Finder · 코트 찾기Venue Filters · 코트 필터 재구성Notifications · 알림Panel Placement · 하단 고정
For owner review

Lists A: tabs, inboxes, club management

Twenty-one list routes: the 클럽 and 경기 tab roots, the 알림 and 메시지 inboxes, the thirteen club management lists, a member’s 참가비 내역 and the three session sub-lists.

L1-02클럽

Every club the viewer belongs to, and the way to find, join or start one.

클럽
내 클럽클럽 찾기
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구성장형
잠실 스매시
12
NTRP 2.5–3.5혼합복식
다음 일정 일 09:00미납
게스트 클럽
분당구친목형
분당 더블스
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원게스트
보관한 클럽
보관됨서초구
서초 주말 테니스
10월 28일까지 복구할 수 있어요
3일 전 보관
클럽
홈클럽경기기록프로필
9:41
844 FOLD
Ideal Four clubs, a guest club, an archived one
클럽
내 클럽클럽 찾기
강남구친목형
강남 라켓클럽
가입 33
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
서초구균형형
반포 한강 테니스
처리할 일 5
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구성장형
잠실 스매시
12
NTRP 2.5–3.5혼합복식
다음 일정 일 09:00미납
클럽
홈클럽경기기록프로필
9:41
844 FOLD
Official An official's waiting work is the row's state Tag: 가입 3 for one kind, 처리할 일 5 for several; a member's answer stays in the who row
클럽
내 클럽클럽 찾기
마포구경쟁형
마포 서브앤발리
가입 제안이 와 있어요
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
클럽
홈클럽경기기록프로필
9:41
844 FOLD
Offered A club that offered membership leads 내 클럽: its offer in the state Tag; no button, the row opens the club page
클럽
내 클럽클럽 찾기
마포구경쟁형
마포 서브앤발리
가입 제안이 와 있어요
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
클럽
홈클럽경기기록프로필
9:41
844 FOLD
Offered, dark The same list on the dark canvas
클럽
내 클럽클럽 찾기
마포구경쟁형
마포 서브앤발리
가입 제안이 와 있어요
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
클럽
홈클럽경기기록프로필
9:41
844 FOLD
Offered, 200% The name wraps; the Tag keeps one line
클럽
내 클럽클럽 찾기
아직 가입한 클럽이 없어요마음에 드는 클럽을 찾아 가입하거나, + 버튼으로 직접 만들어 보세요
클럽 찾기
클럽
홈클럽경기기록프로필
9:41
First-run No clubs yet: find one; the FAB creates or joins with a code
클럽
내 클럽클럽 찾기
보관한 클럽
보관됨서초구
서초 주말 테니스
10월 28일까지 복구할 수 있어요
3일 전 보관
보관됨용산구
용산 클레이 클럽
복구 기간이 지났어요
2주 전 보관
클럽
홈클럽경기기록프로필
9:41
Archived only Populated, not empty: a deadline per club
클럽
내 클럽클럽 찾기
추천 클럽
필터
마포구경쟁형
마포 서브앤발리
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원4자리 남음
용산구균형형
용산 클레이 클럽
NTRP 3.5–4.5남성단식
주 1회 주말월 50,000원승인 후 가입
성동구친목형
성수 로브
정원 마감
NTRP 3.0–4.0혼합복식
주 3회 저녁월 30,000원
서초구성장형
잠원 스핀
NTRP 3.0–3.5여성복식
주 2회 아침무료초대 전용
클럽
홈클럽경기기록프로필
9:41
클럽 찾기 Search at the top right; the filter is the first head’s one control
클럽
내 클럽클럽 찾기
추천 클럽
필터 2
서울 서초구초대 전용
서초구성장형
잠원 스핀
NTRP 3.0–3.5여성복식
주 2회 아침무료초대 전용
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원초대 전용
클럽
홈클럽경기기록프로필
9:41
Filtered 필터 2 stays in the head; one removable Choice per value, the region as one
클럽
내 클럽클럽 찾기
추천 클럽
필터 2
서울 서초구NTRP 4.5 이상
조건에 맞는 클럽이 없어요필터를 줄이거나 다른 지역에서 찾아보세요
필터 초기화
클럽
홈클럽경기기록프로필
9:41
Filtered-empty 필터 2 stays; reset clears filters, never the first-run action
클럽
내 클럽클럽 찾기
클럽
홈클럽경기기록프로필
9:41
Loading One skeleton at the Feed item pitch (128)
클럽
내 클럽클럽 찾기
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구성장형
잠실 스매시
12
NTRP 2.5–3.5혼합복식
다음 일정 일 09:00미납
게스트 클럽
분당구친목형
분당 더블스
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원게스트
보관한 클럽
보관됨서초구
서초 주말 테니스
10월 28일까지 복구할 수 있어요
3일 전 보관
클럽
홈클럽경기기록프로필
9:41
오프라인이에요
다시 시도
844 FOLD
Offline, cached Loaded clubs stay under the offline strip (decision 16); the cold frame above is a separate state
클럽
내 클럽클럽 찾기
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
홈클럽경기기록프로필
9:41
Cold offline Nothing cached: offline, never an empty list
클럽
내 클럽클럽 찾기
강남구친목형
반포 한강공원 주말 복식 테니스 클럽
99+
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
서울특별시 송파구경쟁형
송파 올림픽공원 평일 저녁 단식 테니스 클럽
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
서초구균형형
반포 한강 테니스
99
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구성장형
잠실 스매시
승인 대기
NTRP 2.5–3.5혼합복식
주 2회 아침월 30,000원
클럽
홈클럽경기기록프로필
9:41
Overflow A 20-character name wraps; 99+ caps the count
클럽
내 클럽클럽 찾기
강남구친목형
강남 라켓클럽
3
NTRP 3.0–4.0혼합복식
다음 일정 토 19:00참석
송파구경쟁형
송파 베이스라인
승인 대기
NTRP 3.5–4.5혼합복식
주 3회 저녁월 40,000원
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원
송파구성장형
잠실 스매시
12
NTRP 2.5–3.5혼합복식
다음 일정 일 09:00미납
게스트 클럽
분당구친목형
분당 더블스
NTRP 3.0–4.0혼합복식
주 2회 저녁월 30,000원게스트
보관한 클럽
보관됨서초구
서초 주말 테니스
10월 28일까지 복구할 수 있어요
3일 전 보관
클럽
홈클럽경기기록프로필
9:41
클럽
클럽 만들기
초대 코드로 가입
Menu The FAB opens two commands
클럽
내 클럽클럽 찾기
추천 클럽
필터 2
서울 서초구초대 전용
서초구성장형
잠원 스핀
NTRP 3.0–3.5여성복식
주 2회 아침무료초대 전용
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원초대 전용
홈클럽경기기록프로필
9:41
필터
지역
서울 서초구
종목
복식단식단식+복식혼합복식
요일
월화수목금토일
시간대
오전오후저녁
가입 방식
바로 가입승인 후 가입초대 전용
수준
NTRP 3.0–4.0
3.0
초기화결과 2개 보기
Sheet The shared field pieces: the region a Picker Cell, a Choice set per facet, the level a band with its Stepper
클럽
내 클럽클럽 찾기
추천 클럽
필터 2
서울 서초구초대 전용
서초구성장형
잠원 스핀
NTRP 3.0–3.5여성복식
주 2회 아침무료초대 전용
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원초대 전용
홈클럽경기기록프로필
9:41
필터
요일
월화수목금토일
시간대
오전오후저녁
가입 방식
바로 가입승인 후 가입초대 전용
수준
NTRP 3.0–4.0
3.0
초기화결과 2개 보기
Sheet, end The same Sheet scrolled to its end: 요일 to 수준, the level band with its Stepper
한강
취소
검색 결과
서초구균형형
반포 한강 테니스
NTRP 3.0–3.5혼합복식
주 1회 주말월 20,000원승인 후 가입
서초구성장형
잠원 한강 스핀
NTRP 3.0–3.5여성복식
주 2회 아침무료초대 전용
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Search The field replaces the title; the matches are one list of clubs
클럽 · /(tabs)/(clubs)
Route/(tabs)/(clubs), aliases /clubs and ?tab=discover. Tab root, tab bar visible. ClubListScreen.StackHeader 56 (title 20/28; on 클럽 찾기 the 검색 icon at the top right) · Tabs 48 · 16 (24 on 클럽 찾기) · Feed item 128 (the who row takes the footer’s place; an archived club has no who row, so its footer stays) · Section head 72 · … · on 클럽 찾기 the first head, 추천 클럽, holds the filter trigger as its one control (필터 ▾, or 필터 N ▾ in the selected look while N facets are on, in the head either way) and, only while a filter is on, one row of removable Choices sits under it (36, then 16: the region as one Choice, the level as one) · FAB 클럽 56, 16 above the Tab bar (on both panes) · Tab bar 64 + inset (98).Reads내 클럽: useMyClubs + useMyGuestClubs + archived memberships, sorted by next session; a row is buildClubCardModel (name, getClubRegionText, member count and cap, NTRP band, unread posts) plus, review 46 (M12, proposed), the stored facts the old ClubCard already prints: focus, member_composition (a declared policy, not a measured mix), preferred_format, regular_meet_days, dues_amount and dues_cycle, join_policy and last_activity_at. 승인 대기 needs the viewer’s pending requests on the list payload (new). 클럽 찾기: useViewerDiscoverClubs(filters, query); the gate fact is derived from join_policy, the open seats and recruitmentStatusLabel. The facets are the app’s (ClubDiscoveryControls: 종목, 지역 (시/도, then 시/군/구: one filter), 수준 (the NTRP band), 요일, 시간대, 가입 방식), drawn in the filter grammar’s order: 지역, 종목, 요일, 시간대, 가입 방식, 수준; the search matches a club’s name and description.TapsMember row → 클럽 홈 (/clubs/[id], push, tab bar hides) · 클럽 찾기 row and 승인 대기 row → 클럽 홈 too (a non-member sees the same page: the retired /preview is gone) · guest row → the hub · archived row → /clubs/[id]/settings (the recovery view) · FAB 클럽 → MenuSheet: 클럽 만들기 → /create-club, 초대 코드로 가입 → /join-club (클럽 찾기 is the tab’s second view) · 검색 (클럽 찾기 only) → the header search · 필터 ▾ (the 추천 클럽 head) → FilterSheet: 지역 (a Picker Cell) opens the 시/도 picker, then 시/군/구, and 수준 is the level band with its Stepper; a removable Choice clears only its own facet, 필터 초기화 in the empty state clears them all.Spokenh1 클럽 · h2 게스트 클럽, 보관한 클럽, 추천 클럽 · tablist 내 클럽, 클럽 찾기. First stops: "클럽", "내 클럽" (on 클럽 찾기 "클럽", "검색", "클럽 찾기"). The filter: "필터", and "필터 2" while two are on; a removable Choice: "서울 서초구 삭제". The FAB: "클럽 추가", which opens the menu. A row: "강남 라켓클럽, 강남구, 친목형, NTRP 3.0부터 4.0, 혼합복식, 다음 일정 토 19:00, 참석, 읽지 않은 게시글 3개".RulingsThe cohesion pass (the owner, 2026-10-25; §1.18): the page makes things, so it makes them with its FAB, labelled with its noun (클럽), never a header +; a viewer who makes more than one kind on one page gets a MenuSheet, here 클럽 만들기 · 초대 코드로 가입 (클럽 찾기 is the tab’s second view already, so the menu does not repeat it, and the first-run state does not repeat the menu as two Cells). Club names wrap to two lines at 100% and never crop (library 2.4). A list that holds only archived clubs is populated, not the newcomer empty state. A newcomer’s EmptyState button leads to 클럽 찾기. Review 46 (M12, proposed): a club row is the Feed item (library §5) with its who row in the footer’s place, 128 tall like the rows on 홈: overline region | focus, then level, composition and format, then rhythm, dues and the gate (a member’s own club says its next session and their state instead). The 모집 중 and 정원 마감 Tags became the gate fact (4자리 남음, 정원 마감), 승인 대기 and 게스트 the viewer’s relation in its place, and the unread Count tag follows the name. In 클럽 찾기 the thumbnail is the club’s featured photo, else its logo. The owner’s page review (2026-10-27; the discovery grammar): 클럽 찾기 has no inline search field. Search is the icon at the header’s top right (the same as 경기), and filtering is the first head’s one control, 필터 ▾ or 필터 N ▾, which opens a FilterSheet of the app’s facets in the app’s order; the active filters show under that head only while they are on, one removable Choice per value. The region is one filter, the app’s RegionDistrictFilter (시/도, then 시/군/구, "서울 서초구" on the Choice), and the level is the app’s band slider over the five NTRP bands (2.0–3.0, 3.0–3.5, 3.5–4.0, 4.0–4.5, 4.5+), never chips; 시간대 and 가입 방식 are drawn now. 내 클럽 has neither search nor filter. The owner’s page review (2026-10-28; the filter grammar): a FilterSheet is built only from the shared field pieces, as a form is, never from its own chips. The order is where (지역, a Picker Cell), then what (a Choice set per facet, plain labels: the live count is on the button, never inside a Choice), then how much (수준, the level band the forms draw, with its Stepper); fields stand 32 apart.

L1-03경기

Find a pickup to join, and see my own schedule and the sessions I saved. The third pane, 테니스장, is drawn on List B.

경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
9월 19일 (토)내일
매치최유나
양재 시민의숲
14:00~16:00
단식여성NTRP 3.0–3.5
매치한소희
올림픽공원
09:00~11:00
복식NTRP 3.0–4.03~4번 코트
매치정우진
잠실 보조경기장
마감
19:00~21:00
복식NTRP 3.0–4.04번 코트
9월 20일 (일)모레
매치강도윤
탄천 테니스장
08:00~10:00
복식NTRP 3.0–4.02번 코트
매치윤채원
한강 반포 코트
16:00~18:00
혼합복식NTRP 3.5–4.0
매치
홈클럽경기기록프로필
9:41
844 FOLD
Ideal 매치 찾기: the saved region is on, three days, the live row first; the next page loads as skeleton Feed items
경기
예정매치 찾기테니스장
열린 매치
필터
열린 매치가 없어요새 매치가 올라오면 여기에 보여요
매치
홈클럽경기기록프로필
9:41
First-run Nothing open and no filter on: the FAB is the action, no button
경기
예정매치 찾기테니스장
열린 매치
필터 3
이번 주단식서울 송파구
조건에 맞는 일정이 없어요날짜나 경기 유형을 바꿔 보세요
필터 초기화
매치
홈클럽경기기록프로필
9:41
Filtered-empty 필터 3 stays in the head; reset returns to the saved region, never starts a pickup
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
매치
홈클럽경기기록프로필
9:41
Loading The head and its filters are real; one skeleton at the Feed item pitch (128)
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
일정을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
매치
홈클럽경기기록프로필
9:41
Error A failed read says so and offers a retry; the filters stay
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
매치
홈클럽경기기록프로필
9:41
Cold offline Nothing cached: offline, never empty
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
매치
홈클럽경기기록프로필
9:41
오프라인이에요
다시 시도
Stale Cached rows stay under the offline strip
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
서울올림픽공원 국민체육진흥공단 테니스장 A구장
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포한강공원 잠원지구 시민 테니스장 야간 조명 코트
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
매치강도윤
탄천 종합운동장 보조경기장 테니스 코트
마감
08:00~10:00
복식NTRP 3.0–4.02번 코트
매치
홈클럽경기기록프로필
9:41
Overflow A long place crops on one line; the detail has it whole
경기
예정매치 찾기테니스장
9월 20일 (일)모레
매치강도윤
탄천 테니스장
08:00~10:00
복식NTRP 3.0–4.02번 코트
매치윤채원
한강 반포 코트
16:00~18:00
혼합복식NTRP 3.5–4.0
테니스장 찾기
홈클럽경기기록프로필
9:41
End of list The Tabs have pinned and draw the one hairline; the Feed ends with one line and its door
경기
예정매치 찾기테니스장
내 일정
필터
9월 18일 (금)오늘
일정강남 라켓클럽
대치유수지체육공원
호스트
18:00~20:00
복식2~3번 코트
9월 19일 (토)내일
매치한소희
올림픽공원
참석
09:00~11:00
복식3~4번 코트
매치최유나
양재 시민의숲
미납
14:00~16:00
단식코트 1면
매치정우진
잠실 보조경기장
예비 2번
19:00~21:00
복식4번 코트
9월 21일 (월)3일 뒤
일정강남 라켓클럽
탄천 테니스장
참석
08:00~10:00
복식2번 코트
매치 찾기
홈클럽경기기록프로필
9:41
844 FOLD
예정 My state is the deciding fact; the Feed ends with one line and its door
경기
예정매치 찾기테니스장
내 일정
필터
예정된 일정이 없어요일정에 참석 신청하면 여기에 보여요
매치 찾기
홈클럽경기기록프로필
9:41
예정 first-run No FAB on this pane: the button is the action
경기
예정매치 찾기테니스장
내 일정
필터
9월 19일 (토)내일
대항전올림픽공원
vs 송파 베이스라인
참석
09:00~11:00
복식3~4번 코트
매치최유나
양재 시민의숲
참석
14:00~16:00
단식코트 1면
홈클럽경기기록프로필
9:41
예정, a tagged session A 대항전 session reads its opponent as the title; the venue moves to the overline, beside 대항전
경기
예정매치 찾기테니스장
내 일정
필터
9월 19일 (토)내일
대항전올림픽공원
vs 송파 베이스라인
참석
09:00~11:00
복식3~4번 코트
매치최유나
양재 시민의숲
참석
14:00~16:00
단식코트 1면
홈클럽경기기록프로필
9:41
예정, a tagged session, dark The same frame in the dark palette
경기
예정매치 찾기테니스장
내 일정
필터
9월 19일 (토)내일
대항전올림픽공원
vs 송파 베이스라인
참석
09:00~11:00
복식3~4번 코트
매치최유나
양재 시민의숲
참석
14:00~16:00
단식코트 1면
홈클럽경기기록프로필
9:41
예정, a tagged session, 200% The same frame at 200% text: lines wrap, nothing is cut
경기
예정매치 찾기테니스장
내 일정
필터
9월 18일 (금)오늘
일정강남 라켓클럽
대치유수지체육공원
호스트
18:00~20:00
복식2~3번 코트
9월 19일 (토)내일
매치한소희
올림픽공원
참석
09:00~11:00
복식3~4번 코트
매치최유나
양재 시민의숲
미납
14:00~16:00
단식코트 1면
매치정우진
잠실 보조경기장
예비 2번
19:00~21:00
복식4번 코트
9월 21일 (월)3일 뒤
일정강남 라켓클럽
탄천 테니스장
참석
08:00~10:00
복식2번 코트
매치 찾기
홈클럽경기기록프로필
9:41
필터
보기
전체저장됨
날짜
전체
지역
전국
종목
단식복식단식+복식혼합복식
경기 유형
정기매치대회리그대항전
경기 방식
친선경쟁
코트 유형
하드클레이잔디실내
수준
전체
2.0
참가비
전체
무료
초기화결과 6개 보기
Sheet 예정’s filter: 보기 first (전체 or 저장됨), then the same facets as 매치 찾기
경기
예정매치 찾기테니스장
내 일정
필터 1
저장됨
9월 19일 (토)내일
매치최유나
양재 시민의숲
14:00~16:00
단식여성NTRP 3.0–3.5
매치한소희
올림픽공원
09:00~11:00
복식NTRP 3.0–4.03~4번 코트
9월 20일 (일)모레
매치강도윤
탄천 테니스장
08:00~10:00
복식NTRP 3.0–4.02번 코트
홈클럽경기기록프로필
9:41
저장됨 저장됨 is a filter: its Choice under the head, bookmarked sessions by day
경기
예정매치 찾기테니스장
내 일정
필터 1
저장됨
저장한 일정이 없어요관심 있는 일정을 저장해 보세요
홈클럽경기기록프로필
9:41
저장됨 empty Nothing saved: one empty kind and no button; the Choice’s × is the way back
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
홈클럽경기기록프로필
9:41
필터
날짜
이번 주
지역
서울 송파구
종목
단식복식단식+복식혼합복식
경기 유형
정기매치대회리그대항전
경기 방식
친선경쟁
코트 유형
하드클레이잔디실내
수준
NTRP 3.0–4.0
3.0
참가비
무료~20,000원
무료
초기화결과 12개 보기
Sheet 매치 필터: the app’s eight facets from the shared field pieces; 날짜 and 지역 are Picker Cells, the level and the fee bands
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
홈클럽경기기록프로필
9:41
필터
경기 방식
친선경쟁
코트 유형
하드클레이잔디실내
수준
NTRP 3.0–4.0
3.0
참가비
무료~20,000원
무료
초기화결과 12개 보기
Sheet, end The same Sheet scrolled to its end: 경기 방식 to 참가비
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
홈클럽경기기록프로필
9:41
날짜
오늘내일이번 주이번 달
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
적용
날짜 The shared date picker, opened from the 날짜 Cell: the presets over the Calendar, 이번 주 drawn as a range
올림픽
취소
검색 결과
매치한소희
올림픽공원
09:00~11:00
복식NTRP 3.0–4.03~4번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
테니스장송파구
올림픽공원 테니스장
코트 12면하드야외
영업 중시간당 12,000원4.3
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Search The field replaces the title; one list, each row’s overline names its kind
Games
UpcomingPickupsVenues
Open pickups
Filters 1
Seoul
Fri, Sep 18Today
PickupWoojin Jung
Daechi Park
Live
18:00–20:00
Doubles3.0–4.0Courts 2-3
PickupSeoyeon Lee
Banpo Riverside
20:00–22:00
Doubles3.0–4.0Courts 1-2
PickupJihoon Park
Songpa Olympic
1 spot left
20:00–22:00
Mixed3.5–4.5
Sat, Sep 19Tomorrow
PickupYuna Choi
Yangjae Forest
14:00–16:00
SinglesWomen3.0–3.5
Pickup
HomeClubsGamesRecordsProfile
9:41
English One-word tabs, short venue names, sentence case
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치
홈클럽경기기록프로필
9:41
844 FOLD
200% The title and the facts wrap to two lines; the day header stacks
경기
예정매치 찾기테니스장
열린 매치
필터 1
서울
9월 18일 (금)오늘
매치정우진
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
매치이서연
반포 한강 테니스장
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
매치박지훈
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
9월 19일 (토)내일
매치최유나
양재 시민의숲
14:00~16:00
단식여성NTRP 3.0–3.5
매치
홈클럽경기기록프로필
9:41
Dark 매치 찾기 in the dark palette
경기 · /(tabs)/(sessions)
Route/(tabs)/(sessions), aliases /activity and ?tab=pickup_finder. Tab root, tab bar visible. ActivityScreen, three panes (예정, 매치 찾기, 테니스장; R3, 2026-10-20: 저장됨 is a value of 예정’s filter, not a pane), each a Feed with no Module above it; 매치 찾기 is the representative page.StackHeader 56 (title, 검색) · Tabs 48 (they pin; once the pane scrolls they draw the one edge hairline and the Header none, and the day headers stay in the flow) · 24 · the pane’s first Section head (열린 매치 on 매치 찾기, 내 일정 on 예정), whose one control is the filter trigger: 필터 ▾, or 필터 N ▾ in the selected look while N facets are on, in the head either way · only while a filter is on, one row of removable Choices under the head (36, then 16): the region is one Choice (서울 송파구), and 매치 찾기 opens with the saved region on · Day header 58 · Feed item 128 (the time and the deciding fact; then format, level and courts) · … · while the next page loads, skeleton Feed items at the same 128 pitch, never a spinner · the Feed end: its door, a task Cell 48 (32 below the last row) · FAB 56 above the Tab bar (64 + inset), on 매치 찾기 only. The offline strip sits under the Tabs.Reads매치 찾기: useOpenPickupsInfinite minus useMyRsvps, filtered by applyPickupFilters (the facets are PickupFilterBar’s: 날짜, 종목, 경기 유형, 지역 (시/도, then 시/군/구: one filter), 수준 (the NTRP band), 경기 방식, 코트 유형, 참가비, drawn in the filter grammar’s order: 날짜, 지역, 종목, 경기 유형, 경기 방식, 코트 유형, 수준, 참가비; the region opens on the member’s saved region, else a one-shot location lookup), day-sectioned by useDaySectionedSessionList; a row is buildSessionInfoModel via useSessionCardModels (venue, time, format, composition, NTRP band, friendsGoing, distanceKm); review 46 (M13, M21, proposed): the model adds where.usedCourts, from sessions.used_courts (migration 00499, already stored and enterable), written 3~4번 코트. 예정: useMyParticipatingSessions through the same applyPickupFilters (the app’s 내 경기 pane carries the same bar, with no default region); with 보기 on 저장됨, useSavedSessionIds then useSessionsByIds. The header search lists every match as one list. 테니스장 (drawn on List B): VenueFinder intent="explore".Taps매치 찾기 row → /sessions/[id]/preview · 예정 rows, 저장됨 included → /sessions/[id] · FAB → /create-session (a pickup) · 검색 → the header search on the active pane · 필터 ▾ (the pane’s first head) → FilterSheet: 날짜 opens the date picker (the presets over the Calendar, 적용), 지역 opens the 시/도 picker, then 시/군/구, and 수준 and 참가비 are bands, each with its Stepper; on 예정 its first group, 보기, is 전체 or 저장됨 · a removable Choice clears only its own facet; 초기화 in the Sheet, or in the filtered-empty state, returns to the defaults · a Feed’s door: 예정’s 매치 찾기 → the 매치 찾기 pane, 매치 찾기’s 테니스장 찾기 → the 테니스장 pane · venue row → /directory-venues/[id] · 목록에 없는 테니스장 추가 → /venue-contributions/new · 제안 내역 → /venue-contributions.Spokenh1 경기 · tablist (3) · h2 per Day header ("오늘, 9월 18일 금요일"). First stops: "경기", "검색", "예정". The filter: "필터", and "필터 1" while one is on; a removable Choice: "서울 삭제". A row: "매치, 정우진, 대치유수지체육공원, 오후 6시부터 8시까지, 진행 중 3라운드 중 2라운드, 복식, NTRP 3.0부터 4.0, 2번부터 3번 코트". The FAB: "매치 만들기". A Feed’s end is read once, the line then its door: "열린 매치는 여기까지예요", "테니스장 찾기".RulingsReview 46 (M13, M21, proposed): a session row is the Feed item (library §5), 128 tall. The overline names the kind and the host, the venue is the title, the time and the deciding fact (live, full, the seats left at two or fewer; in 예정 the viewer’s own state) are the first facts, and format, composition (only when it restricts), level and the booked courts are the who row; no day prefix under a day header (the today dot is gone). The Live, 마감 and 마감 임박 Tags became the deciding fact; the trailing 6/8, the posted time and the friends going are gone, because the who row takes the footer’s place. A facts row is one line, about 238 at 390: it lists the facts that fit, whole (courts and composition give way to level and format). IA-2: 테니스장 stays a pane of 경기, the third since 저장됨 folded into 예정’s filter. IA-5: 경기 carries 검색 only. IA-6: the FAB is on 매치 찾기 only. A venue row (a Feed item too) has no bookmark and its thumb is the library cascade: the venue’s photo, else the map tile, else the court tile. English: tabs one word, venue short names, 24-hour clock, no NTRP prefix on rows. R3 (2026-10-20, the lead’s calls): 경기 has three panes (review 27 § 4, narrowed in review 39): 예정 is your own sessions by day and its Feed head carries the pane’s one filter (필터 ▾), whose first group, 보기, is 전체 or 저장됨 (the app’s 내 경기 pane filters with the same eight facets as 매치 찾기, so 예정 does too); every pane is a Feed with no Module above it. A Feed loads its next page as skeleton rows, never a spinner, and ends with one end line and its door: 예정’s is 매치 찾기, 매치 찾기’s is 테니스장 찾기 (the FAB creates, so no door repeats it), 테니스장’s the two ways to fix a missing venue. Once a pane scrolls the pinned Tabs alone draw the hairline. The header search is one list of mixed kinds, not two previews with a 전체 보기 each. The cohesion pass (the owner, 2026-10-25; §1.16): the first-open Notice 내 지역 기준으로 보여드려요 is gone: it was a line about the list, and the region Choice under the head says it. The owner’s page review (2026-10-27; the discovery grammar): no pane draws an inline search field (the header icon is the search), and each pane’s filter is its first head’s one control, 필터 ▾ or 필터 N ▾, with its facets in a FilterSheet in the app’s order and the active filters under the head only while they are on, one removable Choice per value. The saved region is 매치 찾기’s default and shows as such ("서울"); the region is one filter (the app’s RegionDistrictFilter) and the level the app’s band slider over the five NTRP bands, never chips; 경기 방식, 코트 유형 and 참가비 are drawn now. 저장됨 stays a value of 예정 but as a filter, in the Sheet’s 보기 group, because a head holds one control. The owner’s page review (2026-10-28; the filter grammar): the Sheet is built only from the shared field pieces, as a form is. 보기 first when the pane has one, then where and when (날짜 and 지역, Picker Cells stacked full-bleed), then what (a Choice set per facet, plain labels), then how much (수준 and 참가비, each the forms’ band: Slider, readout and Stepper, WCAG 2.5.7); fields stand 32 apart. 날짜 opens the kit’s one date picker (the app’s DateSelection: a tapped day sets a day, the presets set a day, the week or the month). The fee is a band over the app’s six stops (무료 to 100,000원), not chips.

L3-13알림

Everything that reaches the viewer from any part of the app, newest first in three time sections over the last 30 days; one filter shows what is unread or what waits on them.

알림
오늘
전체
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
윤
윤채원님이 가입을 신청했어요
강남 라켓클럽함께 2명
1시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
새 신고가 들어왔어요
강남 라켓클럽스팸/광고
어제
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
최소 인원이 부족해요
강남 라켓클럽9월 19일
어제
일정이 취소됐어요
송파 베이스라인9월 20일
9월 16일
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
844 FOLD
Ideal An official: 오늘, 이번 주, 이전 알림; the first head carries the filter
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
844 FOLD
Member A member: a cancellation is an ordinary unread row, and it counts
알림
오늘
전체
한소희님 외 2명이 친구 신청을 보냈어요
강도윤님 외 3명이 참석해요
강남 라켓클럽9월 19일
2시간 전
새 일정 12개가 올라왔어요
강남 라켓클럽매주 토요일
3시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
9:41
Grouped A repeat is one row: the latest actor and 외 N; a request group opens in place
알림
오늘
전체
한소희님 외 2명이 친구 신청을 보냈어요
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
강도윤님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
2시간 전
임하준님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
3시간 전
강도윤님 외 3명이 참석해요
강남 라켓클럽9월 19일
2시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
9:41
Group open Each request answers in its own row; the group row stays
알림
오늘
전체
환불 확인이 아직 남았어요
강남 라켓클럽9월 19일
5분 전
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
9:41
Refund reminder The host’s reminder after 72 hours names the refund that waits, not a cancelled event
알림
오늘
전체
박지훈님의 사유 인정 요청이 3일째 답을 기다려요
강남 라켓클럽
1시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
9:41
사유 인정, an official The request and its 3-day reminder (its own row, so it pushes again): the requester’s face and name, no category or note; 처리할 일 while the request waits
알림
오늘
전체
박지훈님 외 2명이 사유 인정을 요청했어요
강남 라켓클럽
9:41
사유 인정, several Several requests in one club fold into one row, the latest requester and 외 N, as 친구 신청 do; it opens in place
알림
오늘
전체
사유 인정 요청이 인정됐어요
강남 라켓클럽
1시간 전
사유 인정 요청이 거절됐어요
강남 라켓클럽
3시간 전
9:41
사유 인정, the person The answer, accepted or declined, arrives after the 10 minutes in which the one who answered can undo it: a quiet row, no action
Notifications
Today
All
Jihoon Park’s excusal request has waited 3 days
Gangnam Racket Club
1h
Your excusal request was accepted
Gangnam Racket Club
1h
This week
Jihoon Park asked for an excusal
Gangnam Racket Club
Yesterday
Your excusal request was declined
Gangnam Racket Club
3h
9:41
사유 인정, English The four rows in English: sentence case, the requester named, the answer quiet
알림
오늘
전체
대항전 신청이 왔어요
강남 라켓클럽
어제
대항전 일정이 올라왔어요
강남 라켓클럽
어제
이번 주
대항전 신청이 수락됐어요
강남 라켓클럽
1시간 전
대항전 신청이 거절됐어요
강남 라켓클럽
3시간 전
대항전이 취소됐어요
강남 라켓클럽
5시간 전
9:41
클럽 대항전, an official A proposal waits (처리할 일), then the answer, a cancellation and a tagged session: the club and no opponent, person or day
알림
오늘
전체
대항전 신청이 왔어요
강남 라켓클럽
어제
대항전 일정이 올라왔어요
강남 라켓클럽
어제
이번 주
대항전 신청이 수락됐어요
강남 라켓클럽
1시간 전
대항전 신청이 거절됐어요
강남 라켓클럽
3시간 전
대항전이 취소됐어요
강남 라켓클럽
5시간 전
9:41
클럽 대항전, an official, dark The same frame in the dark palette
알림
오늘
전체
대항전 신청이 왔어요
강남 라켓클럽
어제
대항전 일정이 올라왔어요
강남 라켓클럽
어제
이번 주
대항전 신청이 수락됐어요
강남 라켓클럽
1시간 전
대항전 신청이 거절됐어요
강남 라켓클럽
3시간 전
대항전이 취소됐어요
강남 라켓클럽
5시간 전
9:41
844 FOLD
클럽 대항전, an official, 200% The same frame at 200% text: lines wrap, nothing is cut
알림
오늘
전체
대항전 신청 3건이 왔어요
강남 라켓클럽
9:41
클럽 대항전, several Several proposals to one club fold into one row with their count, as 친구 신청 do
알림
오늘
전체
대항전 신청 3건이 왔어요
강남 라켓클럽
9:41
클럽 대항전, several, dark The same frame in the dark palette
알림
오늘
전체
대항전 신청 3건이 왔어요
강남 라켓클럽
9:41
클럽 대항전, several, 200% The same frame at 200% text: lines wrap, nothing is cut
알림
오늘
전체
대항전 결과가 나왔어요
강남 라켓클럽
1시간 전
9:41
클럽 대항전, a member The settled result reaches every member of both clubs once: a quiet row, no action
알림
오늘
전체
대항전 결과가 나왔어요
강남 라켓클럽
1시간 전
9:41
클럽 대항전, a member, dark The same frame in the dark palette
알림
오늘
전체
대항전 결과가 나왔어요
강남 라켓클럽
1시간 전
9:41
클럽 대항전, a member, 200% The same frame at 200% text: lines wrap, nothing is cut
Notifications
Today
All
A club challenge request came in
Gangnam Racket Club
Yesterday
3 club challenge requests came in
Gangnam Racket Club
Yesterday
Your challenge request was accepted
Gangnam Racket Club
1h
This week
Your challenge request was declined
Gangnam Racket Club
3h
A club challenge was cancelled
Gangnam Racket Club
5h
A challenge event was posted
Gangnam Racket Club
Yesterday
Earlier
A club challenge has its result
Gangnam Racket Club
1h
9:41
클럽 대항전, English The seven rows in English: sentence case, the club and no opponent
Notifications
Today
All
A club challenge request came in
Gangnam Racket Club
Yesterday
3 club challenge requests came in
Gangnam Racket Club
Yesterday
Your challenge request was accepted
Gangnam Racket Club
1h
This week
Your challenge request was declined
Gangnam Racket Club
3h
A club challenge was cancelled
Gangnam Racket Club
5h
A challenge event was posted
Gangnam Racket Club
Yesterday
Earlier
A club challenge has its result
Gangnam Racket Club
1h
9:41
클럽 대항전, English, dark The same frame in the dark palette
Notifications
Today
All
A club challenge request came in
Gangnam Racket Club
Yesterday
3 club challenge requests came in
Gangnam Racket Club
Yesterday
Your challenge request was accepted
Gangnam Racket Club
1h
This week
Your challenge request was declined
Gangnam Racket Club
3h
A club challenge was cancelled
Gangnam Racket Club
5h
A challenge event was posted
Gangnam Racket Club
Yesterday
Earlier
A club challenge has its result
Gangnam Racket Club
1h
9:41
844 FOLD
클럽 대항전, English, 200% The same frame at 200% text: lines wrap, nothing is cut
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
Friend request A pending 친구 신청 answers in its row; a tap on it opens the profile
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님과 친구가 됐어요
강남 라켓클럽
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
Answered After 수락 the row keeps its place: the pair goes, the dot clears, the sentence says what happened
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
삭제
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
Swipe A left swipe reveals 삭제 on that row: the one way to delete
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
알림을 삭제했어요
되돌리기
Undo A full swipe removes the row; the Toast offers 되돌리기 for 8 s
알림
오늘
전체
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
윤
윤채원님이 가입을 신청했어요
강남 라켓클럽함께 2명
1시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
새 신고가 들어왔어요
강남 라켓클럽스팸/광고
어제
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
최소 인원이 부족해요
강남 라켓클럽9월 19일
어제
일정이 취소됐어요
송파 베이스라인9월 20일
9월 16일
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
All read After a visit: every dot cleared (opened, or seen when the viewer left), nothing moved
알림
받은 알림이 없어요일정, 경기, 회비 소식이 여기에 모여요
9:41
Empty Nothing in 30 days: no button, nothing to do here
알림
오늘
안 읽음
읽지 않은 알림이 없어요
전체 보기
9:41
Filtered A filter with nothing in it: say so, offer 전체 보기
알림
9:41
Loading One skeleton at the person pitch
알림
알림을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error The feed failed: say so, offer a retry
알림
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: never “no notifications”
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
이번 주
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
장소 제안의 검토 소식이 도착했어요
올림픽공원 테니스장
9월 9일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
오프라인이에요
다시 시도
Stale Cached rows stay under the offline strip
알림
오늘
전체
이서연님이 9월 19일 일정의 호스트를 맡고 참석 확정 시간도 바꿨어요
강남 라켓클럽
5분 전
송파 베이스라인 정기 총회 안내와 회비 변경 공지가 올라왔어요
송파 베이스라인공지
1시간 전
일정이 곧 시작돼요
강남 라켓클럽9월 19일
어제
9:41
Overflow Long sentences wrap to two lines; nothing is cut
알림
오늘
전체
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
윤
윤채원님이 가입을 신청했어요
강남 라켓클럽함께 2명
1시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
새 신고가 들어왔어요
강남 라켓클럽스팸/광고
어제
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
최소 인원이 부족해요
강남 라켓클럽9월 19일
어제
일정이 취소됐어요
송파 베이스라인9월 20일
9월 16일
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
알림 필터
전체
14
안 읽음
2
처리할 일
4
Filter The Choice ▾ opens three values, each with its count; 안 읽음 is what is still dotted, 처리할 일 is what waits on the viewer
알림
오늘
처리할 일
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
윤
윤채원님이 가입을 신청했어요
강남 라켓클럽함께 2명
1시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
새 신고가 들어왔어요
강남 라켓클럽스팸/광고
어제
9:41
처리할 일 The filter on 처리할 일: only what waits on the official, under the same time sections; each row opens its page
알림
오늘
처리할 일
처리할 일이 없어요
전체 보기
9:41
처리할 일 empty Nothing waits: one empty kind and no button; the head’s Choice is the way back
Notifications
Today
All
Seoyeon Lee reported a payment
Gangnam Racket ClubFee 10,000 KRW
5min
CY
Chaewon Yoon asked to join
Gangnam Racket ClubPlayed with 2
1h
New session posted
Gangnam Racket ClubSat, Sep 19
3h
New notice posted
Gangnam Racket ClubSeptember meetup
5h
This week
Jihoon Park asked for an excusal
Gangnam Racket Club
Yesterday
A new report came in
Gangnam Racket ClubSpam
Yesterday
Jihoon Park and 2 others commented
Gangnam Racket ClubVenue review
Yesterday
Not enough players yet
Gangnam Racket ClubSat, Sep 19
Yesterday
The session was cancelled
Songpa BaselineSun, Sep 20
Sep 16
The draw is posted
Gangnam Racket ClubSat, Sep 19
Sep 15
Your ELO went up 12
Gangnam Racket ClubWed, Sep 9
Sep 14
Earlier
Your trust score dropped 4
No-show
Sep 11
The treasurer confirmed your dues payment
Songpa Baseline30,000 KRW
Sep 5
You and Sohee Han are now friends
Gangnam Racket Club
Sep 2
9:41
English Sentence case, the actor first, relative time as 5min
알림
오늘
전체
참가비 입금이 곧 마감돼요
송파 베이스라인10,000원
30분 전
한소희님이 친구 신청을 보냈어요
강남 라켓클럽
수락
거절
1시간 전
일정이 취소됐어요
송파 베이스라인9월 20일
2시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
9:41
844 FOLD
200% Sentences and facts wrap, the pair stacks, nothing is cut
알림
오늘
전체
이서연님이 입금을 알렸어요
강남 라켓클럽10,000원
5분 전
윤
윤채원님이 가입을 신청했어요
강남 라켓클럽함께 2명
1시간 전
새 일정이 올라왔어요
강남 라켓클럽9월 19일
3시간 전
공지가 올라왔어요
강남 라켓클럽9월 모임 안내
5시간 전
이번 주
박지훈님이 사유 인정을 요청했어요
강남 라켓클럽
어제
새 신고가 들어왔어요
강남 라켓클럽스팸/광고
어제
박지훈님 외 2명이 댓글을 남겼어요
강남 라켓클럽새 테니스장 후기
어제
최소 인원이 부족해요
강남 라켓클럽9월 19일
어제
일정이 취소됐어요
송파 베이스라인9월 20일
9월 16일
대진표가 올라왔어요
강남 라켓클럽9월 19일
9월 15일
ELO가 12점 올랐어요
강남 라켓클럽9월 9일
9월 14일
이전 알림
신뢰 점수가 4점 내려갔어요
무단 불참
9월 11일
총무가 회비 입금을 확인했어요
송파 베이스라인30,000원
9월 5일
한소희님과 친구가 됐어요
강남 라켓클럽
9월 2일
9:41
Dark The same page in the dark palette
알림 · /home/notifications
Route/home/notifications, pushed from the bell on 홈, tab bar hidden. NotificationCenterScreen.Page grammarHeader · Feed: the last 30 days in three time sections, newest first, with no Module above it; the first head carries the page’s one filter (전체, 안 읽음, 처리할 일); there is no read control (no 모두 읽음, no row mark): opening the page clears the bell’s badge, a row’s dot clears when the row is opened, and the 안 읽음 value lists what is still dotted. A pushed list never caps. The cohesion pass (the owner approved this page, 2026-10-25; its look stays): one home for every action (§1.18), so the Header’s right is one icon, the gear 알림 설정, with no ⋯ and no Select mode; a row has no ⋯ and its tap opens what the alert is about; one alert is deleted by its swipe, with a Toast; 이런 알림 끄기 left with the row menu, because 알림 설정 holds it.StackHeader 56 (back, 알림, the gear 알림 설정) · 12 · Section heads 오늘 / 이번 주 / 이전 알림 (12 below; 32 above, none above the first), the first one drawn carrying the filter Choice ▾ at the right (no read control) · PersonRow in the notifications context: 68 (64 with no line 2, 116 with the 친구 신청 pair), the dot in its 8 + 8 slot, the visual 40, the text from 88, the time at the trailing edge · the page’s 40 tail.ReadsOne feed of every signal from the last 30 days that was not dismissed, chat left out (expires_at only gates the push and mutes the row); one row per group key, carrying the latest actor and the count; a row’s family from the kit’s six (FVK_NOTIF_FAMILIES, also the 알림 설정 page). 처리할 일 is a view of this same feed, not a second query: the rows whose request is still open (see Outstanding); 홈’s 할 일 (deriveHomeTasks plus the officer counters) is read on 홈 only. The bell: the unread rows of this feed, one per group, no netting; opening the page clears it, and a row’s dot clears when the row is opened (useAcknowledgeSignals); delete and undo: signals_dismiss_batch and signals_undismiss. Lane E § 5 lists the migrations.TapsRow → getSignalRoute(signal): money, 가입 신청, 사유 인정, 신고 and scores open their own pages (a 회비 push opens 클럽 홈 at 회비, the owner, 2026-10-21) · the filter Choice ▾ → value Sheet (전체, 안 읽음, 처리할 일; a count in a figure column; a tap selects and closes) · under 처리할 일 a row does what it does under 전체: it opens its page or answers in place (수락 / 거절 on a 친구 신청) · opening the page clears the bell’s badge · a row’s dot clears when the row is opened, and the dots still showing count as seen when the viewer leaves the page; there is no read control and nothing moves · a request group opens in place · 수락 / 거절 answer a 친구 신청 in its row · the header’s gear → 알림 설정 (/settings/notifications) · a swipe → 삭제, which ends in a Toast with 되돌리기 for 8 s.Spokenh1 알림 · h2 오늘, 이번 주, 이전 알림. First stops: "뒤로", "알림", "더보기". A row starts "읽지 않음, " when unread: "읽지 않음, 이서연님이 입금을 알렸어요, 강남 라켓클럽, 10,000원, 5분 전", and nothing after it (no ⋯). A group says its sentence whole ("박지훈님 외 2명이 댓글을 남겼어요") and a request group "펼치기" or "접기". Custom action on a row: 삭제. The dot is hidden.Order (D1)Time sections, not read bands: 오늘 is the calendar day, 이번 주 runs back to Monday, 이전 알림 to 30 days. Reading a row (a tap; the rest count as seen when the viewer leaves) clears its dot and the row stays where it is, so the list never reshuffles under the thumb (Slack, GitHub). A section with no rows is not drawn; the first one drawn carries the Choice. A filter keeps the sections and drops the rows it does not name, so a section it empties is not drawn. Newest first, no severity sort.Chat (D2)Not here: 메시지 keeps its own badge and its push, and the bell never counts it.친구 신청 (D3)A pending 친구 신청 is answered inside 알림 with the AnswerPair, the one exception to “request lists only” (Instagram does the same). The row keeps its place, the pair goes and the sentence says what happened (“한소희님과 친구가 됐어요”). Money, 가입 신청 and scores still open their pages: a decision with consequences is made where its facts are.Bell (D4)The bell on 홈 counts the unread rows, one per group, and never chat. Opening 알림 clears its badge, while each row keeps its dot until it is opened or the viewer leaves, so the 안 읽음 value lists what is still dotted (2 for the official, 3 for the member on these frames, the bell’s count when the page opened). It does not count 처리할 일, which asks a different question: a read row can still wait on the viewer. An urgent arrival counts: on the member frame a cancelled session is one unread row like the rest, with no tint and no band, and it is not a 처리할 일 row.Outstanding (owner, 2026-10-20)There is no 할 일 Module here (no separate list; an option in the alerts filter instead). What waits on the viewer is the filter’s third value, 처리할 일: the rows that ask the viewer to act while their request is open. For an official that is a 입금 확인 request, a 가입 신청, a 사유 인정 요청 and a 신고; for anyone, a pending 친구 신청 and a 참가비 입금 that is due. A heads-up that asks nothing (최소 인원이 부족해요, a cancellation) stays under 전체 only. The view keeps the same time sections, and each row does what it does under 전체: it opens its page or answers in place. A row leaves the view when its request is settled and keeps its place under 전체; reading never moves it (reading is not doing), so a read row can still wait and 처리할 일 is not the bell. Nothing outstanding is one compact empty state, 처리할 일이 없어요, with 전체 보기, as every filtered empty state on the page (읽지 않은 알림이 없어요 too): the button says where it goes. 홈 keeps its own 할 일.Push level (D5)A per-club level (전체, 공지만, 끔) and each family’s push switch live on 알림 설정, drawn on the forms board; the header’s gear is this page’s one door to it. A row has no 이런 알림 끄기: turning a family off is that page’s job, and the signal still lands here.RowThe visual (40): a face when a person did it (a payer, an applicant, a commenter, a friend); the club’s avatar for a club or an object event (a session, a notice, dues, a draw); a gray glyph disc for the system, trust and a rating. The trust row is a deduction and names its cause on line 2 (신뢰 점수가 4점 내려갔어요 | 무단 불참); a gain is a row of 신뢰 기록, never a notification. Line 1 is one 해요체 sentence, the actor first. A repeat folds into one row with the latest actor and 외 N that opens the object. Line 2: the club, then the one specific thing (a session reads as its day, never a name: a session named on another page is its place and its day). Unread is the dot alone: no tint, no bold, no chip.DeleteThe swipe is the one way to delete, and it ends in a Toast with 되돌리기 for 8 s, so there is no Dialog; the undo is the safety. A dismissed group returns on a new event. Deleting a row that waits on the viewer removes the alert, never the request: the 입금 확인 or 가입 신청 it announced stays open where it is answered, and on 홈.사유 인정 (batch E)Four rows. For a decider: 박지훈님이 사유 인정을 요청했어요 (the requester’s face and name; 처리할 일 while it waits; several in one club fold into 박지훈님 외 2명이 사유 인정을 요청했어요, as 친구 신청 do; it opens the member’s record at the request) and 박지훈님의 사유 인정 요청이 3일째 답을 기다려요 (the same deciders after 3 days, a row of its own because a repeat of the first would never push; it leaves 처리할 일 with the request). For the person: 사유 인정 요청이 인정됐어요 or 거절됐어요 (a quiet row that opens 내 신뢰 기록), sent only after the 10 minutes in which the one who answered can undo it, so a push is never retracted. The push line is worded apart from the row and names no one: 사유 인정 요청이 왔어요. No category and no note is in a row, a push, a signal or a log.RetentionA row is visible while it is within 30 days and not dismissed; the list ends with no line (§ 1.16): what bounds it is the 이전 알림 head’s own span, the last 30 days. An old row is never lost to a short expiry.StatesOfficial and member ideal · grouped and a request group open · a 친구 신청 and its answer · a swipe, the undo · all read, empty, filtered · loading, error, cold offline, stale · overflow · the filter Sheet, 처리할 일 and its empty state · English, 200%, dark. The offline strip sits under the header; a cold offline is never “no notifications”.

L3-14메시지

Conversations with members and hosts, at once; the requests waiting for an answer are one door row away.

메시지
메시지 요청
3
이서연
오늘 7시 코트 맞죠?
5분 전
토김
토요 정기 복식 단톡방
민준: 사진 올렸어요
12:30
박지훈
다음 주에도 같이 쳐요
어제
강총
강남 라켓클럽 운영진
총무: 이번 달 회비 안내드려요
어제
최유나
네 감사합니다!
9월 16일
정
정우진
라켓 어디서 사셨어요?
9월 15일
한소희
내일 비 온대요
9월 12일
일호
일요 아침 매치 단톡방
호스트: 코트 예약 완료
9월 10일
단톡방
9:41
Ideal The threads at once, newest first, groups included; one door row on top while requests wait; the FAB makes a group chat
메시지 요청
강도윤
10분 전안녕하세요, 같이 복식 치실래요?
수락
거절
윤
윤채원
2시간 전매치에서 뵀어요. 연락드려요
수락
거절
임하준
어제라켓 문의드려요
수락
거절
9:41
L3-15메시지 요청 The pushed list behind the door, no Tabs: answer in the row; a row tap opens the profile
메시지
아직 대화가 없어요클럽 멤버나 매치 호스트에게 먼저 메시지를 보내 보세요
단톡방
9:41
First-run A 1:1 conversation starts from a profile: no button; the FAB makes a group chat
메시지 요청
받은 요청이 없어요새 요청이 오면 여기에 보여요
9:41
L3-15요청 empty The last request answered: the list says so, and the inbox loses its door
메시지
단톡방
9:41
Loading One skeleton at the person pitch
메시지
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never an empty inbox
메시지
메시지 요청
99+
반김
반포 한강공원 주말 복식 테니스 클럽 운영진 단톡방
총무: 이번 주 토요일 정기 일정은 비 예보로 장소가 바뀔 수 있어요
5분 전
이서연
오늘 저녁 7시 반포 한강 테니스장 3번 코트에서 뵐게요, 라켓 가져오시는 것 잊지 마세요
12:30
박지훈
다음 주에도 같이 쳐요
어제
단톡방
9:41
Overflow Names wrap, the preview crops, the door’s count caps at 99+
메시지 · /messages
Route/messages, pushed, tab bar hidden. DmInboxScreen: the accepted threads at once. The requests are a list of their own behind the door row: /messages/requests (new: it was DmInboxScreen’s second pane).StackHeader 56 (back, 메시지) · while a request waits, the door row: a Task Cell 48 (메시지 요청 with its count Tag) · PersonRow 68 (a request row 116 with its pair) · FAB 단톡방 56 above the home inset (16 above it) · no CTA band. 메시지 요청: Header 56 (back, 메시지 요청) · 16 · request rows.ReadsuseDmThreadsByStatus(uid, accepted | pending): the inbox reads accepted, 메시지 요청 reads pending; useDmUnreadByThread for the dots; the door’s count is the pending length capped at 99; blocked 1:1 threads are filtered, groups never are.TapsThread row → /messages/[threadId] · the door row 메시지 요청 → the requests list · request row → the requester’s profile · 수락 and 거절 answer in the row (the thread opens only after 수락; the count on the door falls and the door goes with the last request) · the FAB 단톡방 → /messages/new-group.Spokenh1 메시지 (메시지 요청 on the pushed list). First stops: "뒤로", "메시지", then the door "메시지 요청, 확인할 항목 3개"; the FAB "단톡방 만들기". A thread: "이서연, 5분 전, 오늘 7시 코트 맞죠?, 읽지 않은 메시지 2개". A request: "강도윤, 10분 전, …" then "수락, 강도윤" and "거절, 강도윤".RulingsThe page levels (the owner, 2026-10-20): a detail page has no Tabs, so the inbox is the list at once and the requests, a set held apart, are one door row on top, present while one waits (as 멤버 관리’s 가입 신청); the requests are a pushed list under their own header. The inbox has no head and no filter: the dot is its only mark. Request rows answer in the row: two sm tonal Buttons under line 2 (the row grows by 48), a tap on the row opens the profile, a bare tap never answers. A thread shows its time at the trailing end and an unread dot in the marker slot. The first-run state has no button: a 1:1 conversation starts from a profile, and a group chat from the FAB. The cohesion pass (the owner, 2026-10-25; §1.18): making a group chat is the FAB, labelled with its noun and spoken as 단톡방 만들기, never a header +; 메시지 요청 answers between people with 수락 · 거절 (§1.19). Cold offline is the offline EmptyState, never an empty inbox.

L3-25멤버 관리

The club’s people for the officials, one list: the applications waiting first, then the roster by role and the guests worth inviting; one Choice filters it, and the FAB invites.

멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
게스트 명단
우선순위 순서와 가입 후보를 관리해요
가입 후보
오예린
평균 ★4.5 (3건)방문 4회
가입 제안 보내기
삭제
우선순위
1
송
송가은
★4.3방문 5회
고정됨
2
문서진
★4.0방문 3회
3
임하준
평가 없음방문 6회
한도 초과
게스트 초대
초대
9:41
844 FOLD
Ideal 총무: one list of people, what waits first, then the 게스트 명단 block on the rail; the Choice ▾ filters it and the FAB invites
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
정
정우진
B조
출석 주의
한소희
B조신뢰 67점
출석 주의
오예린
C조
송
송가은
C조
초대
9:41
멤버 opened 멤버 unfolds in place: its rows run on, and the guests follow the last of them
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
멤버 보기
전체
가입 신청
출석 주의
Filter The Choice ▾ opens three values; a tap selects and closes
멤버 관리강남 라켓클럽
총무1명
출석 주의
박지훈
A조신뢰 67점
출석 주의
멤버2명
정
정우진
B조
출석 주의
한소희
B조신뢰 67점
출석 주의
초대
9:41
출석 주의 The Choice on 출석 주의: the flagged people under their roles; the Choice takes the selected look
멤버 관리강남 라켓클럽
가입 신청2명
가입 신청
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
초대
9:41
가입 신청 The Choice on 가입 신청: the applicants alone, each answering in its row
멤버 관리강남 라켓클럽
가입 신청
가입 신청
새 가입 신청이 없어요
전체 보기
초대
9:41
가입 신청 empty Nothing waits: one empty kind and no button; the head’s Choice is the way back
멤버 관리강남 라켓클럽
대표1명
전체
김민준
신뢰 91점
총무2명
이서연
신뢰 84점
박지훈
신뢰 67점
출석 주의
경기이사1명
최유나
신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
One 조 Under two groups the 조 fact leaves
멤버 관리강남 라켓클럽
초대
9:41
Loading One skeleton at the person pitch
멤버 관리강남 라켓클럽
멤버를 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read says so and offers a retry
멤버 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never an empty roster
멤버 관리강남 라켓클럽
대표1명
전체
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
오프라인이에요
다시 시도
Stale The roster stays under the offline strip; the app disables the ⋯, 초대 and the FAB; the 가입 신청 queue is staff data, so it is not drawn offline
멤버 관리강남 라켓클럽
총무2명
전체
C
Christopher Alexander Montgomery-Smith
A조신뢰 84점
박지훈
A조
멤버128명
초대
9:41
Overflow Names wrap to two lines; 멤버 shows 128 and collapses
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
멤버 관리
클럽 단톡방 만들기
출석 현황
Header ⋯ The page’s rare commands: 단톡방 and 출석 현황
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
9:41
강남 테니스 클럽에 초대
초대 코드
3f9a1c7e
초대 링크
twomore.app/join-club?code=3f9a1c7e
공유
Sheet The FAB 초대 opens the club’s invite Sheet: the code, the link, 공유하기
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
멤버
박지훈
A조신뢰 67점
멤버 기록
역할 바꾸기
조 정하기
내보내기
Menu A row’s tap: the name row, the club record, two edits, then the destructive group
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
역할 바꾸기
총무
경기이사
멤버
Sheet 역할 바꾸기: one value; a tap goes on to the Dialog
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
9:41
박지훈님을 경기이사로 바꿀까요?경기이사는 일정과 대진을 관리할 수 있어요
닫기바꾸기
Dialog A permission change names the person and the role
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
조 정하기
자동
클럽 순위에 따라 정해져요
A조
직접 정해요
B조
직접 정해요
C조
직접 정해요
Sheet 조 정하기: auto by standings, or pinned by an admin
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
박지훈님을 클럽에서 내보낼까요?내보낸 멤버도 다시 가입을 신청할 수 있어요
닫기내보내기
Dialog 내보내기 is danger and names the person
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
강도윤님의 신청을 거절할까요?거절하면 신청자에게 알려 드려요
닫기거절
Dialog 거절 names the applicant; 승인 is one tap
멤버 관리강남 라켓클럽
가입 신청1명
전체
윤
윤채원
1시간 전 신청함께 3명
승인
거절
보낸 가입 제안1명
강도윤
답을 기다리고 있어요
제안 취소
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
Offer waiting A sent offer is its own group, 보낸 가입 제안, under 가입 신청 (which counts the people who asked): no 승인; the waiting Tag and one quiet 제안 취소
멤버 관리강남 라켓클럽
가입 신청1명
전체
윤
윤채원
1시간 전 신청함께 3명
승인
거절
보낸 가입 제안1명
강도윤
답을 기다리고 있어요
제안 취소
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
강도윤님께 보낸 가입 제안을 취소할까요?취소해도 다시 보낼 수 있어요
닫기제안 취소
Dialog 제안 취소 names the person and says the offer can be sent again
멤버 관리강남 라켓클럽
가입 신청1명
전체
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
강도윤님을 승인했어요
Toast 승인 is one tap: the row leaves and the applicant is told
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대함
초대
9:41
임하준님에게 초대를 보냈어요
844 FOLD
Toast 초대 is one tap: the guest is told, and the row’s button becomes a Tag
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
차단한 사용자예요
초대
9:41
844 FOLD
Blocked A guest the official blocked: one quiet line in place of 초대; unblocking stays in 설정's 차단 관리
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
게스트 명단
우선순위 순서와 가입 후보를 관리해요
가입 후보
오예린
평균 ★4.5 (3건)방문 4회차단을 해제하면 초대할 수 있어요
차단한 사용자
삭제
우선순위
1
송
송가은
★4.3방문 5회
고정됨
2
문서진
★4.0방문 3회
3
임하준
평가 없음방문 6회
한도 초과
게스트 초대
초대
9:41
844 FOLD
Blocked A 가입 후보 the official blocked: the Tag 차단한 사용자, the reason under the facts, only 삭제; no 가입 제안 보내기
Manage membersGangnam Racket Club
Join requests2
All
강도윤
Applied 10 min ago6 played together
Approve
Decline
윤
윤채원
Applied 1 hour ago3 played together
Approve
Decline
Owner1
김민준
Group ATrust 91
Admin2
이서연
Group ATrust 84
박지훈
Group ATrust 67
Attendance alert
Match director1
최유나
Group B manualTrust 84
Members38
Guests you could recommend1
임하준
Played together 8 times
Invite
Invite
9:41
844 FOLD
English Sentence case, role names from the locale
멤버 관리강남 라켓클럽
대표1명
전체
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
200% Names and facts wrap; the head keeps its Choice
멤버 관리강남 라켓클럽
가입 신청2명
전체
강도윤
10분 전 신청함께 6명
승인
거절
윤
윤채원
1시간 전 신청함께 3명
승인
거절
대표1명
김민준
A조신뢰 91점
총무2명
이서연
A조신뢰 84점
박지훈
A조신뢰 67점
출석 주의
경기이사1명
최유나
B조 (직접 지정)신뢰 84점
멤버38명
추천할 만한 게스트1명
임하준
함께 8회
초대
초대
9:41
Dark The roster in the dark palette
멤버 관리 · /clubs/[clubId]/members
Route/clubs/[clubId]/members, pushed from the 관리 sheet (the 멤버 pane ends in the same entry for officials). ClubMembersScreen. The officials’ page: a member never reaches it, and reads the roster as 클럽 홈’s 멤버 pane.StackHeader 64 (back, 멤버 관리, the club as subtitle; the ⋯) · 12 · the first group’s head 40, with the Choice 전체 ▾ at its right (가입 신청 while an application waits, else 대표) · 가입 신청 group: PersonRow 116 (the AnswerPair 승인 · 거절 under line 2, which reads 10분 전 신청 | 함께 6명) · 보낸 가입 제안 group (only while an offer waits, and only offers): the same row, the waiting Tag and one quiet 제안 취소 (the guest row’s 초대함 stays a fact about that row) · role groups 대표, 총무, 경기이사, 멤버 (expands): Section head 72, PersonRow 68 (64 with neither a 조 nor a trust score; a flagged row adds the Tag 출석 주의), no control · 추천할 만한 게스트: head 72 and PersonRow 68 with the sm Button 초대 · 24 · FAB 초대 56 above the home inset. The ⋯ → MenuSheet, two rows 48.ReadsuseClubMembersData: sections by ROLE_ORDER, memberGroupCount, showGroupTag (U-25), safePendingRequests with useProspectAttendanceSummary (the one decisive basis: 함께 N명, else 칭찬해 준 사람 N명, else 공개 일정 N회), recommendableGuestRows; the roster rows carry the effective 조 (manual ?? auto), the pin mark and the trust score (신뢰 84점, none before five recorded sessions); an official’s rows add 출석 주의, weighted absences of 3 or more from the club’s own attendance_records (useClubAttendanceSummary); useMemberKebabActions(clubId); NominateGuestModal for a guest’s 초대.TapsThe head’s Choice ▾ → the value Sheet 멤버 보기 (전체, 가입 신청, 출석 주의; a tap selects and closes): 가입 신청 keeps the first group alone, 출석 주의 keeps the flagged people under their roles · an applicant’s 승인 is one tap (a Toast, the row leaves, the applicant is told), 거절 asks a Dialog naming the applicant (§1.19, an admission) · an applicant’s row → 가입 심사 (the dossier) · a member’s row has no ⋯: its tap opens that member’s Sheet, the name row first (→ 공개 프로필), then 멤버 기록 (→ 멤버 기록), 역할 바꾸기 (→ value Sheet → Dialog), 조 정하기 (→ value Sheet), and 내보내기 (→ Dialog) in danger last · the viewer’s own row opens 공개 프로필 and no Sheet · a guest’s 초대 sends the invitation at once (a Toast; the button becomes the Tag 초대함), the row → 공개 프로필 · the FAB 초대 → the club’s invite Sheet (the code, the link and 공유하기, which opens the OS share sheet) · the header ⋯ → MenuSheet: 클럽 단톡방 만들기 → /messages/new-group with every member, 출석 현황 → 출석 현황.Spokenh1 멤버 관리 · h2 가입 신청, 대표, 총무, 경기이사, 멤버 (aria-expanded), 추천할 만한 게스트 · the head’s Choice reads its value, "전체". An applicant: "강도윤, 10분 전 신청, 함께 6명", then "승인" and "거절"; a row: "이서연, A조, 신뢰 84점", a flagged row "정우진, B조, 출석 주의"; it opens the Sheet "멤버" with the name row first. A guest: "임하준, 함께 8회", then "초대". The FAB: "초대".RulingsOne page, one list of one row type (§1.20): the club’s people. What waits leads the list as its first group, in the list’s own rows (§1.17; the owner, 2026-10-28: “Instead of a top section dedicated to to-do lists, let’s keep the same grammar and render the relevant people on the list”), so the page has no door row on top and no second page for the applicants; the group is absent when none waits. Each applicant answers in the row (§1.18): 승인 is one tap, 거절 asks first, and line 2 keeps the one decisive basis. 출석 주의 is the row’s Tag and a value of the Choice, the page’s one filter, in the first head whichever group that is; 출석 현황 (the club’s rates for every member) is a row of the header ⋯. A row has no ⋯: its tap is that member’s Sheet, with the name row first, the destructive group last and a Dialog per destructive action; a permission change confirms naming the person and the role. 추천할 만한 게스트 are people, so they are rows of the same list, last, with the group’s one verb as the row’s sm Button 초대; the invite is the FAB’s, as the club’s invite Sheet, and 클럽 단톡방 만들기 the header ⋯. People never cut: names wrap. The 조 segment leaves below two active groups. 멤버 stays folded until opened (38 rows). The score is the only trust fact on a list row (신뢰 84점, text and never a Tag; none before five recorded sessions); what an official may know of a member (the club-scoped record, 출석 주의, payments and lateness) is 멤버 기록, one tap away. The page has no member view, since a member never reaches it.

L3-11회비

The officials’ pages for the club’s own dues: the month, its rows (a 확인 대기 row confirmed in its own row, the 미납 rows reminded one by one or all at once), the balance line that opens the ledger, and the plan the month is made from. A member’s dues are 클럽 홈’s 회비 pane (the owner, 2026-10-21).

회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
844 FOLD
Ideal Each 확인 대기 row ends in 입금 확인, each 미납 row in 알림; no checkbox, no band
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
460,000원
19명 중 납부
15명
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납15명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
844 FOLD
Nothing to confirm Nothing to confirm: no 확인 대기 group, the reminder stays on the 미납 group
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
400,000원
19명 중 납부
13명
확인 대기2명
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납13명
이서연
오늘 입금 확인
되돌리기
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
844 FOLD
Just confirmed 입금 확인 moved 이서연 to 완납, where her row keeps 되돌리기; the tiles and the counts moved with her
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
570,000원
19명 중 납부
19명
완납19명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
Settled Nobody waits and nobody owes: no band
회비 관리강남 라켓클럽
9월 회비
회비 선택
이번 달 회비가 없어요회비를 만들면 멤버에게 알려 드려요
이번 달 회비 만들기
9:41
Empty month The plan is set, the month is not made: the head keeps its Choice, no tiles of zeros; the button is the one action
회비 관리강남 라켓클럽
회비 시작하기1/4
입금 계좌 등록
완료
회비 설정
첫 일정 만들기
멤버 초대
9:41
No plan yet Setup steps for the officials: the next one to do, the account already done
회비 관리강남 라켓클럽
회비 시작하기1/4
입금 계좌 등록
완료
회비 설정
첫 일정 만들기
멤버 초대
9:41
강남 테니스 클럽에 초대
초대 코드
3f9a1c7e
초대 링크
twomore.app/join-club?code=3f9a1c7e
공유
Sheet The step 멤버 초대 opens the club’s invite Sheet: the code, the link, 공유하기
회비 관리강남 라켓클럽
9월 회비
회비 선택
9:41
Loading One skeleton: the head keeps its Choice, two tiles, then the rows
회비 관리강남 라켓클럽
회비를 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read offers a retry; a write fails in a Dialog
회비 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Money is never stale as fresh: offline, no rows
회비 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Offline, warm copy Other members’ money is never drawn from a warm copy: offline the page is the offline state, as when cold; back online the rows return
회비 관리강남 라켓클럽
미납2명
모두에게 알림 보내기
C
Christopher Alexander Montgomery-Smith
일부 납부남은 금액 1,250,000원
알림 보내기
최유나
알림 보내기
9:41
Overflow Names wrap to two lines; amounts keep one line
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
입금을 확인하지 못했어요박지훈님의 회비는 아직 확인 대기예요. 다시 시도해 주세요
닫기다시 시도
Dialog A failed 입금 확인 names who; the row stays in 확인 대기
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
회비 선택
정기 회비
2026년 9월
2026년 8월
2026년 7월
2026년 6월
2026년 5월
2026년 4월
2026년 3월
한 번
총회 회식비
9월 30일까지
가을 대회 참가비
10월 15일까지
Sheet The Choice lists the recurring plan’s months, then each one-off by name and due date
회비 관리강남 라켓클럽
총회 회식비
회비 선택
받은 회비
310,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 15,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
844 FOLD
한 번 chosen A one-off chosen: the head names it; 확인 대기, 미납 and 완납 read as they do for a month
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
9월 회비
최유나
마지막 알림 9월 5일
입금 확인
회비 면제
Menu A 미납 row’s tap: the name row, 입금 확인, then the destructive group
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
9월 회비
윤
윤채원
9월 20일 입금 확인
메모 남기기
납부 취소
Menu A 완납 row’s tap: the name row, 메모 남기기, then 납부 취소
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
회비 관리
회비 설정
Header ⋯ The page’s rare command: 회비 설정
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
미납 4명에게 알림을 보낼까요?9월 회비를 내 달라고 알려 드려요
닫기알림 보내기
Dialog 모두에게 알림 보내기 counts who is reminded before the message goes
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 오늘
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
최유나님에게 알림을 보냈어요
Toast 알림 보내기 is one tap: the member is told, and the row’s line 2 reads today
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
최유나님의 9월 회비를 면제할까요?면제하면 최유나님은 9월 회비를 내지 않아도 돼요
닫기회비 면제
Dialog 회비 면제 is danger and names the person
회비 관리강남 라켓클럽
9월 회비
회비 선택
이번 달 회비가 없어요회비를 만들면 멤버에게 알려 드려요
9:41
이번 달 회비를 만들까요?42명에게 30,000원씩 회비를 알려 드려요
닫기만들기
Dialog Creating the month counts the people and the amount
회비 설정강남 라켓클럽
납부 주기
분기
금액
90,000원
납부 기한 (일)
분기 마지막 달
25
대상
전체 멤버
저장
9:41
L4-14회비 설정 The plan exists: 금액 ends in its pencil, 납부 기한 in its typed Stepper, 대상 is a value (no chevron)
회비 설정강남 라켓클럽
납부 주기
분기
금액
90,000원
납부 기한 (일)
분기 마지막 달
25
대상
전체 멤버
한 번 회비2
총회 회식비
9월 30일까지
25,000원
가을 대회 참가비
10월 15일까지
15,000원
저장
9:41
회비 설정, 한 번 회비 Under the plan’s rows the club’s one-offs, each a row into its own page
회비 설정강남 라켓클럽
납부 주기
매월
납부 기한 (일)
25
대상
전체 멤버
금액
0
원
저장
9:41
L4-14회비 설정, first The first plan asks: the rows, then the 금액 Field; the primary waits for an amount
회비 설정강남 라켓클럽
납부 주기
분기
금액
90,000원
납부 기한 (일)
분기 마지막 달
25
대상
전체 멤버
저장
9:41
납부 주기
매월
분기
6개월
매년
한 번
L4-14Sheet 납부 주기 is a Picker Cell into a value Sheet of five: 6개월, never 반기; there is no 일정마다
회비 설정강남 라켓클럽
납부 주기
한 번
납부 기한
9월 30일
대상
지금 19명에게 청구돼요
전체 멤버
이름
총회 회식비
6/40
금액
25,000
원
만들기
9:41
회비 설정, 한 번 A one-off: a name, an amount and a due date; 대상 says how many are charged now; the band makes it
회비 설정강남 라켓클럽
납부 주기
한 번
납부 기한
선택
대상
지금 19명에게 청구돼요
전체 멤버
이름
총회 회식비
6/40
금액
25,000
원
만들기
9:41
납부 기한
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
완료
납부 기한 The due date is the kit’s day Sheet, a calendar whose days before today are off
회비 설정강남 라켓클럽
납부 주기
한 번
납부 기한
9월 30일
대상
지금 19명에게 청구돼요
전체 멤버
이름
총회 회식비
6/40
금액
25,000
원
9:41
총회 회식비를 만들까요?지금 활동 중인 멤버 모두에게 25,000원씩 회비를 알려 드려요. 지금은 19명이에요
닫기만들기
Dialog Making the charge counts who is charged and how much
회비 설정강남 라켓클럽
납부 주기
한 번
이름
총회 회식비
금액
25,000원
납부 기한
9월 30일
대상
전체 멤버
저장
9:41
회비 설정, 만든 한 번 회비 Members were charged: the name stays editable, 금액, 납부 기한 and 대상 are locked
회비 설정강남 라켓클럽
납부 주기
한 번
이름
총회 회식비
금액
25,000원
납부 기한
9월 30일
대상
전체 멤버
저장
9:41
총회 회식비
청구 중단
Header ⋯ The page’s rare command: 청구 중단, in danger
회비 설정강남 라켓클럽
납부 주기
한 번
이름
총회 회식비
금액
25,000원
납부 기한
9월 30일
대상
전체 멤버
저장
9:41
총회 회식비 청구를 중단할까요?이미 만든 청구는 그대로 남아요
닫기중단
Dialog Stopping says the charges already made stay
회비 설정강남 라켓클럽
납부 주기
분기
금액
90,000원
납부 기한 (일)
분기 마지막 달
25
대상
전체 멤버
9:41
금액
90,000
원
완료
123
456
789
0⌫
L4-14금액 The pencil opens an Edit Sheet on the numeric keypad; 완료 waits for a change
DuesGangnam Racket Club
Sep dues
Select
Collected
370,000KRW
Paid
12/19
To confirm3
이서연
Reported Sep 17
Confirm
박지훈
Reported Sep 18
Confirm
한소희
Reported Sep 18
Confirm
Unpaid4
Send reminders to all
최유나
Last reminder Sep 5
Send reminder
정
정우진
Part paidRemaining 20,000 KRW
Send reminder
강도윤
Send reminder
임하준
Send reminder
Paid12
윤
윤채원
Confirmed Sep 20
오예린
Confirmed Sep 19
송
송가은
Confirmed Sep 17
Ledger
Balance 1,240,000 KRW
9:41
844 FOLD
English KRW in tabular figures; the row buttons read Confirm and Remind
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
200% The head and the tiles grow: the labels wrap by word, the figures keep one line; rows are floors
회비 관리강남 라켓클럽
9월 회비
회비 선택
받은 회비
370,000원
19명 중 납부
12명
확인 대기3명
이서연
9월 17일 입금했다고 알림
입금 확인
박지훈
9월 18일 입금했다고 알림
입금 확인
한소희
9월 18일 입금했다고 알림
입금 확인
미납4명
모두에게 알림 보내기
최유나
마지막 알림 9월 5일
알림 보내기
정
정우진
일부 납부남은 금액 20,000원
알림 보내기
강도윤
알림 보내기
임하준
알림 보내기
완납12명
윤
윤채원
9월 20일 입금 확인
오예린
9월 19일 입금 확인
송
송가은
9월 17일 입금 확인
장부
잔액 1,240,000원
9:41
844 FOLD
Dark The page in the dark palette
회비 관리 · /clubs/[clubId]/dues (officials)
Route/clubs/[clubId]/dues (a member’s own dues are the 회비 pane of 클럽 홈), pushed from the 관리 sheet. ClubDuesScreen renders ClubDuesPage, the officials’ roster by canManageDues. The page is titled 회비 관리 (the door’s name); the owner’s name for it, 클럽 회비·장부, is its job, and an unspaced middle dot between two nouns is a glued pair the code’s lint rejects.StackHeader 64 (back, 회비 관리, the club, the ⋯) · 12 · 9월 회비 head 40 (the month; the Choice 회비 선택 ▾ at its right) and the Strip, tiles face, 80 (받은 회비 370,000원, 19명 중 납부 12명) · 확인 대기 section: head and PersonRow 68, each ending in the sm Button 입금 확인 (no checkbox) · 미납 section: head 72 with the tonal sm Button 모두에게 알림 보내기 at its right, PersonRow 68 (64 without line 2) with the sm Button 알림 · 완납 (PersonRow 68, 64 without line 2; a row confirmed on this visit comes first and ends in the sm Button 되돌리기; the toggle 48 under 완납) · 24 · the Cell 장부 48 (the value 잔액 1,240,000원, the chevron). No CTA band.ReadsuseDuesPage: the plan’s period (usePlanPeriod, usePeriodReads), the sections (확인 대기, 미납, 완납), pendingByDuesId and the club’s balance for the 장부 Cell; useDuesWrites: useConfirmDuesPayment (one row, the button 입금 확인), useUnmarkDuesPaid (the 되돌리기 of a row confirmed on this visit; an older 완납 row undoes through its Sheet’s 납부 취소), useUpdateDuesStatus (waive), and the reminder (useRemindDues), for one member (a row’s 알림 보내기) or for every 미납 member (the head’s 모두에게 알림 보내기), logged by who and when for “마지막 알림”; the payer never confirms their own row (migration 00536). Needs, in one migration group: club_dues_plans (name, amount, cadence monthly | quarterly | semiannual | yearly | one_time | every_n_months | per_session, due rule, grace, proration, applies to a role or 조) and dues.plan_id with period_start and period_end, the rows generated at each period’s start; escrow (settlement_state held | released | refunded) is a later design on top of the existing payment hold. The ledger is 장부’s.TapsA 확인 대기 row’s 입금 확인 confirms that member at once: the row moves to 완납 with the line 오늘 입금 확인 and its own 되돌리기, and the tiles move with it; there is no Dialog and no Toast, because the undo is on the row (one Toast could hold only the last of several quick confirmations); the page has no checkbox, no Select mode, no 선택, no 전체 선택 and no CTA band, and the 확인 대기 head has no bulk command · 되돌리기 puts the row back in 확인 대기 (a failed write is a Dialog that names who) · 회비 선택 ▾ (the head’s Choice) → value Sheet of what the club charges: the recurring plan’s months, newest first, then each one-off by name and due date (decision 4, M4-5); a one-off chosen makes the head its name and the rows its members, the words unchanged · a 미납 row’s 알림 보내기 sends the reminder to that member at once → Toast "최유나님에게 알림을 보냈어요", and the row’s line 2 reads 마지막 알림 오늘 · the 미납 head’s 모두에게 알림 보내기 → Dialog "미납 4명에게 알림을 보낼까요?" → 알림 보내기 sends it to every 미납 member · a row’s own tap (not its button) opens that member’s Sheet, the name row first (→ 멤버 기록, where that member’s dues and fees are kept), then for a 미납 member 입금 확인 (the transfer arrived without a report), for a 완납 member 메모 남기기, then the destructive group (회비 면제, or 납부 취소), each with its Dialog · 완납 ends in N개 더 보기, which opens the rest in place · the Cell 장부 → 장부 · the header ⋯ → MenuSheet: 회비 설정 → the plan page (drawn below; owner review 51, library § 1.22 rule 0: the plan exists, so one list of value rows, label left and answer right: 납부 주기 ›, a Picker Cell into a value Sheet of five: 매월, 분기, 6개월, 매년, 한 번 (일정마다 is not built); 한 번 turns the page into the form of a new one-off (below) and leaves the recurring plan as it is; 금액 with its pencil, which opens an Edit Sheet on the numeric keypad whose 완료 fills the page’s form; 납부 기한 (일), a Cell with its typed Stepper (the day of the month, 1 to 28: tap the number to type it, the ends step it; § 1.22 rule 1, owner review 52), and 대상 (a value Cell: no chevron, the whole club is the only audience); the band’s 저장 writes the plan. A club’s first plan asks instead, rules 1 and 2: the same rows, then the 금액 Field, one group; the page also lists the club’s one-offs in a Section 한 번 회비, each a row into its own page, where the name is editable, 금액, 납부 기한 and 대상 are locked once members were charged, and the header ⋯ holds 청구 중단, whose Dialog says the charges already made stay), also reached from 클럽 설정 › 회비 › 회비 설정 (the forms board); a club with no plan meets the setup step 회비 정하기 instead, and the ⋯ is absent there; its step 멤버 초대 opens the club’s invite Sheet (the one home of the invite, § 1.18), not the DM’s 멤버 초대 form.Spokenh1 회비 관리 · h2 9월 회비, 확인 대기, 미납, 완납. First stops: "뒤로", "회비 관리", "더보기", the head’s Choice "회비 선택". A tile reads its label, then its value: "받은 회비 370,000원", "19명 중 납부 12명". A 확인 대기 row: "이서연, 9월 17일 입금했다고 알림", then its button "입금 확인" (named for its owner: "이서연 입금 확인"); a row confirmed on this visit: "이서연, 오늘 입금 확인", then "되돌리기". The 미납 head: "미납, 4명" then its button "모두에게 알림 보내기"; a 미납 row: "최유나, 마지막 알림 9월 5일", then its button "알림"; the row opens the Sheet "9월 회비" with the name row "최유나" first. The Cell: "장부, 잔액 1,240,000원, 이동".RulingsEvery action has one home (§1.18). A decision per person is answered on that person’s row (owner review 49, S3; the owner on 참석자 관리: “it might be best not to have a single CTA at the bottom ... in-line buttons at the end of the row”): a 확인 대기 row ends in the sm Button 입금 확인 and a 미납 row in the sm Button 알림, so the page has no checkbox, no Select mode and no CTA band, and its Header is always the normal Header. A confirmed row moves to 완납 and keeps its own 되돌리기, because a Toast holds only the last of several quick confirmations. The money pages have no bulk command, except that the 미납 head carries 모두에게 알림 보내기, the tonal sm Button (the owner, 2026-10-28: “We need to make it possible to alert each or all members that haven’t paid the fees directly on the list”), whose Dialog counts who is reminded; the row’s Sheet never repeats the reminder. A row’s own tap is the member’s Sheet (name row, the time-bound command, the destructive group last); the page’s rare command, 회비 설정, is the header ⋯, never a head command, and 지출 추가 is 장부’s own ⋯. The words are §1.19’s: 확인 대기 · 미납 · 완납, 알림. A failed write is a Dialog or a helper, never a Toast. A money screen never shows stale as fresh: other members’ money is a hidden read (a warm copy is never drawn offline), so offline the page is the offline state with no row, no tile and no write, and back online the rows return (du-hidden). The page follows one order (owner review 48, P7): the month’s tiles, 확인 대기, 미납, 완납, then the ledger line. Its one list is its members, three groups of one row type, so the ledger is not a section: a list of another kind leaves for a page of its own behind one Cell (§1.20), 장부 with the balance. The page levels (the owner, 2026-10-20): no Block below a tab root, so the month’s summary is a Section head, 9월 회비, with the Choice over the club’s charges, over two tiles, 받은 회비 and 19명 중 납부 (the owner’s check of 2026-10-19, “bring more visual emphasis to the summary because it is the most important”, is carried by the tiles’ figures); the 확인 대기 and 미납 counts are the section heads below, so no tile says them again. The club’s plan (the cadence, the amount, the due rule) is drawn once, on 회비 설정. A month with no dues keeps the head and its Choice and draws no tiles of zeros: one Empty state says so, and its one action creates the month. A club that has set no plan meets the setup steps (입금 계좌 등록하기, 회비 정하기, 첫 일정 만들기, 멤버 초대하기), a month the plan has not generated yet the button that generates it. 회비 관리 is the officials’ alone: a member’s dues are 클럽 홈’s 회비 pane (the owner, 2026-10-21), and a 회비 push or a 회비 door opens 클럽 홈 at 회비; whether a club shows its totals to members is a setting, and names go to officials only.

L3-46장부

The club’s ledger, income and spending, newest first by month: its own page, opened from 회비 관리’s Cell 장부.

장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
Ideal Where the club stands, then its entries by month, newest first; the amount ends each row
장부강남 라켓클럽
시작 잔액을 먼저 정해 주세요정한 날부터 입금과 지출이 쌓여요
시작 잔액 설정
9:41
Empty No entries yet: no tiles of zeros; it names the opening first, and its one button opens the ⋯’s opening Sheet
장부강남 라켓클럽
9월 장부
9:41
Loading Two skeleton tiles, then six Text rows at the row pitch
장부강남 라켓클럽
장부를 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read says so and offers one retry
장부강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Money is never stale as fresh: offline, no entries
장부강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Offline, warm copy The officials-only ledger is never drawn from a warm copy: offline the page is the offline state, as when cold; back online the entries return
장부강남 라켓클럽
9월
서울올림픽공원 국민체육진흥공단 테니스장 A구장 4면 대관료와 조명 사용료
9월 14일코트영수증
−1,250,000원
9월 회비 입금
9월 17일회비
+370,000원
9:41
Overflow A long entry wraps to two lines; the amount keeps one line
장부강남 라켓클럽
9월 장부
잔액
1,145,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
시작 잔액
9월 1일
+940,000원
잔액에 들어가지 않는 기록
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
With an opening The opening closes its month; entries before its day sit under one head and are not in the balance
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
장부
지출 추가
시작 잔액 설정
장부 내려받기
Header ⋯ The page’s rare commands: 지출 추가, 시작 잔액 설정 and 장부 내려받기
장부강남 라켓클럽
9월 장부
잔액
1,145,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
시작 잔액
9월 1일
+940,000원
잔액에 들어가지 않는 기록
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
장부
지출 추가
시작 잔액 고치기
장부 내려받기
시작 잔액 삭제
Header ⋯, with an opening Once the opening exists the row fixes it, and 시작 잔액 삭제 stands last in danger
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
지출 추가
항목
예: 코트 대관료
금액
0
원
분류
코트용품회식기타
날짜
오늘
영수증
추가
추가
지출 추가 A ledger entry: the item, the amount, a category, the day (오늘) and a receipt
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
날짜
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
완료
날짜 The day is the kit’s day Sheet, a calendar whose days after today are off
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
지출 추가
항목
예: 코트 대관료
금액
0
원
분류
코트용품회식기타
날짜
오늘
영수증
추가
지출 추가, 영수증 A picked photo is a thumbnail row (a stored receipt shows the photo glyph)
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
영수증
바꾸기
삭제
영수증, 사진 있음 The thumbnail’s tap: 바꾸기, then 삭제 in danger
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
시작 잔액
기준일 시작 때 잔액
0
원
기준일
9월 1일
저장
시작 잔액 정하기 The balance on a day: the day and the amount that day starts with
장부강남 라켓클럽
9월 장부
잔액
1,145,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
시작 잔액
9월 1일
+940,000원
잔액에 들어가지 않는 기록
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
시작 잔액
기준일 시작 때 잔액
940,000
원
기준일
9월 1일
저장
시작 잔액 고치기 The same Sheet filled; 저장 waits for a change
장부강남 라켓클럽
9월 장부
잔액
1,145,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
시작 잔액
9월 1일
+940,000원
잔액에 들어가지 않는 기록
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
시작 잔액을 고칠까요?고치면 잔액이 60,000원 늘어요
닫기고치기
Dialog A fix says by how much the balance moves
장부강남 라켓클럽
9월 장부
잔액
1,145,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
시작 잔액
9월 1일
+940,000원
잔액에 들어가지 않는 기록
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
이 시작 잔액을 삭제할까요?삭제하면 모든 기록이 잔액에 들어가고, 잔액이 95,000원 늘어요
닫기삭제
Dialog Removing the opening puts every entry back in the balance and says by how much
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
장부 내려받기
이번 달
올해
전체
장부 내려받기 A range, then the download starts: the browser’s file or the phone’s share sheet
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
코트 대관료
금액
−120,000원
날짜
9월 14일
분류
코트
영수증
수정
삭제
Sheet An expense’s tap: its facts, 영수증, 수정, then 삭제 in danger last
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
영수증
영수증 The receipt opens in a panel over the entry, from a fresh link; officials only
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
오프라인이에요
다시 시도
코트 대관료
금액
−120,000원
날짜
9월 14일
분류
코트
영수증
수정
삭제
Entry, offline Offline the facts stay; 영수증, 수정 and 삭제 are held, because the photo is fetched on demand
장부강남 라켓클럽
9월 장부
잔액
1,240,000원
이번 달 지출
165,000원
9월
9월 회비 입금
9월 17일회비
+370,000원
코트 대관료
9월 14일코트영수증
−120,000원
공 구입
9월 8일용품
−45,000원
8월
8월 회비 입금
8월 16일회비
+390,000원
코트 대관료
8월 13일코트영수증
−120,000원
회식비
8월 9일회식
−85,000원
9:41
코트 대관료 기록을 삭제할까요?삭제하면 잔액이 120,000원 늘어요
닫기삭제
Dialog 삭제 is danger and says what it does to the balance
장부 · /clubs/[clubId]/dues/ledger (officials)
Route/clubs/[clubId]/dues/ledger (proposed), pushed from 회비 관리’s Cell 장부. A new ClubLedgerScreen under the dues route; officials only, by canManageDues. No tab bar, no CTA band; one h1, 장부.StackHeader 64 (back, 장부, the club, the ⋯) · 12 · the 9월 장부 head 40 (no Choice, no count) and the Strip, tiles face, 80 (잔액 1,240,000원, 이번 달 지출 165,000원) · a Section head per month (72, no count) over its Text rows (68, the first and last trimming 12 into the heads’ own): the entry, then the day, the category and whether a receipt is attached, the amount at the end (income +, spending −) · 40. The next page loads as skeleton Text rows. The ⋯ → MenuSheet, one row 48.ReadsNeeds a ledger, in the dues migration group: an opening balance, dated income and expense entries with a category and a receipt, an aggregate read (the balance, the month’s spending), a retention record type, a CSV export. A confirmed 회비 is one income entry; an expense is an official’s entry (지출 추가). Entries page by month, newest first (infinite scroll); the balance counts every entry, not only the page loaded.TapsAn entry → its Sheet: 금액, 날짜, 분류, 영수증 (→ the shared photo viewer), then for an expense 수정 (→ the 지출 추가 Sheet, filled in; 영수증 opens the photo in a panel over the entry) and, in danger last, 삭제 (→ Dialog "코트 대관료 기록을 삭제할까요?"); an income entry comes from the confirmed dues and shows the facts alone · the header ⋯ → MenuSheet: 지출 추가 → the Sheet that adds an entry (항목, 금액, a 분류 of 코트, 용품, 회식 or 기타, 날짜 that is 오늘 until another day is picked and is never after today, and 영수증 that is 추가 until a photo is picked, then a thumbnail whose tap offers 바꾸기 and 삭제; 추가), 시작 잔액 설정 (once it exists 시작 잔액 고치기, and 시작 잔액 삭제 in danger last) → the Sheet with the day and the balance as that day starts, and a Dialog on a fix or a removal that says by how much the balance moves, and 장부 내려받기 → a value Sheet of 이번 달, 올해, 전체, a tap on which starts the download of the CSV (a download only, never an import) · back → 회비 관리.Spokenh1 장부 · h2 9월 장부 and a month. First stops: "뒤로", "장부", "더보기". A tile reads its label, then its value: "잔액 1,240,000원". An entry is one stop in reading order: "코트 대관료, 9월 14일, 코트, 영수증, −120,000원".RulingsThe ledger is a list of another kind and a long one, so it has a page of its own and 회비 관리 keeps one Cell with the balance (owner review 48, §1.20). The page’s list is its entries, one kind (the library’s Text row), by month, so the months are plain Section heads, as 참가비 내역’s are, and the two tiles above are the summary, not a list. The page is of the summary family, so its Strip stands first under its Section head, 9월 장부, as every summary page leads (library § 1.17; owner review 51). The amount is the one trailing element, income +, spending −. The head has no command: 지출 추가 is the header ⋯, the page’s rare command (§1.18). Without an opening the balance counts every entry, so the tiles do not change as the list pages. The opening balance (owner decision 5, M5-2, M5-3) is one line with a day, fixed or removed by the officials: with it the balance is the opening plus every entry dated on or after its day, and older entries stay in the feed under one head, 잔액에 들어가지 않는 기록, not counted. The opening Sheet has no hint line: its labels say the amount is the balance as that day starts (기준일 시작 때 잔액). The day of an expense is 오늘 until another is picked and never after today; a receipt is a photo for the officials alone. The download is called 장부 내려받기 because 내보내기 removes a member. An empty ledger draws no tiles of zeros; it names the opening first and carries one primary button, 시작 잔액 설정, which opens the same Sheet as the ⋯’s row (an empty page that asks for a balance offers the way to give it). Offline keeps the cached entries under the strip, read-only and without the ⋯, and a receipt photo is fetched on demand, so its row waits for the connection: a money screen never shows stale as fresh.

L3-16참가비 내역

A member’s session fees across clubs, newest first: what they paid, what they still owe and what is coming back.

참가비 내역
9월
강남 라켓클럽미납
9월 19일복식
10,000원
대치유수지체육공원확인 대기
9월 12일복식 매치
8,000원
송파 베이스라인
9월 5일혼합복식
12,000원
8월
강남 라켓클럽환불 대기
8월 29일복식
10,000원
강남 라켓클럽
8월 22일복식
면제
반포 한강 테니스장
8월 8일복식 매치
8,000원
7월
강남 라켓클럽
7월 25일복식
환불 확인됨
송파 베이스라인
7월 11일복식 대회
20,000원
9:41
Ideal Newest first, by month: the amount at the end of each row, a Tag only while the fee is not settled
참가비 내역
아직 낸 참가비가 없어요참가비가 있는 일정에 참석하면 여기에 보여요
9:41
Empty Nothing paid yet: one calm line and no button
참가비 내역
9:41
Loading Six skeleton Text rows at the row pitch
참가비 내역
9월
강남 라켓클럽미납
9월 19일복식
10,000원
대치유수지체육공원확인 대기
9월 12일복식 매치
8,000원
송파 베이스라인
9월 5일혼합복식
12,000원
8월
강남 라켓클럽환불 대기
8월 29일복식
10,000원
강남 라켓클럽
8월 22일복식
면제
반포 한강 테니스장
8월 8일복식 매치
8,000원
7월
강남 라켓클럽
7월 25일복식
환불 확인됨
송파 베이스라인
7월 11일복식 대회
20,000원
9:41
오프라인이에요
다시 시도
Offline, cached The strip under the header; the rows stay readable
참가비 내역
참가비 내역을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read says so and offers one retry: never “no fees”
참가비 내역
9월
강남 라켓클럽미납
9월 19일복식
10,000원
대치유수지체육공원확인 대기
9월 12일복식 매치
8,000원
송파 베이스라인
9월 5일혼합복식
12,000원
8월
강남 라켓클럽환불 대기
8월 29일복식
10,000원
강남 라켓클럽
8월 22일복식
면제
반포 한강 테니스장
8월 8일복식 매치
8,000원
7월
강남 라켓클럽
7월 25일복식
환불 확인됨
송파 베이스라인
7월 11일복식 대회
20,000원
9:41
200% Names wrap, the Tag stays beside line 1 and the amount keeps its line
Session fees
September
Gangnam Racket ClubUnpaid
Sep 19Doubles
10,000 KRW
Daechi ParkTo confirm
Sep 12Doubles Pickup
8,000 KRW
Songpa Baseline
Sep 5Mixed doubles
12,000 KRW
August
Gangnam Racket ClubRefund due
Aug 29Doubles
10,000 KRW
Gangnam Racket Club
Aug 22Doubles
Waived
Banpo Riverside
Aug 8Doubles Pickup
8,000 KRW
July
Gangnam Racket Club
Jul 25Doubles
Refund confirmed
Songpa Baseline
Jul 11Doubles Tournament
20,000 KRW
9:41
English KRW in tabular figures; the Tags shorten to Unpaid, To confirm and Refund due
참가비 내역 · /profile/fees (proposed)
Route/profile/fees (proposed: a member’s own page, because the fees run across clubs), pushed from the end Cell of the 클럽 홈 회비 pane, where a member’s dues are (the owner, 2026-10-21). A new MyFeesScreen. No tab bar, no CTA band; one h1.StackHeader 56 (back, 참가비 내역) · 12 · a Section head per month (40 the first, 72 after, no count) over its Text rows (68, the first and last trimming 12 into the heads’ own) · 40. Open Tags sit beside line 1; the amount is the one trailing element.ReadsuseMySessionPayments(userId): the viewer’s session_payments rows, one per session (amount, status, submittedAt, refundState; newest by created_at, at most 500), each joined with its session (useSessionsByIds: format, eventType, location and the day) and the club’s name (useClubsByIds); a club session names its club and a pickup its venue, the session’s location. Nothing else exists to read: no due time, no payment method, no receipt. The Tag derives from sessionPaymentGateState(fee, status, submittedAt) and refundState: reserved is 미납, submitted is 확인 대기 (the words of §1.19; the gate’s labels follow), a pending refund is 환불 대기; paid, waived and an acknowledged refund are settled and carry none.TapsA row → its 일정 상세, where 입금했다고 알리기 (for 미납) and 환불받았어요 (for 환불 대기) already live: this page asks for nothing · back → the 클럽 홈 회비 pane that opened it.Spokenh1 참가비 내역 · h2 a month. A row is one stop in reading order: "강남 라켓클럽, 미납, 9월 19일, 복식, 10,000원"; a waived row ends "면제".RulingsReview 46 (M28): dues and session fees are one wallet, so the 클럽 홈 회비 pane, where a member’s dues are (the owner, 2026-10-21), ends in this page. A Text row per session (the library’s): l1 the session’s place (the club; a pickup’s venue, because a pickup belongs to its host’s virtual club, which has no name to show), l2 the day | the type sessionTitle() writes (복식; 복식 매치 for a pickup), the amount at the end. A session named on another page is its place and its day, never a name. The one Tag follows line 1 through the line slot (library §6 Tag, Placement, home 2) and not the row’s end, so the trailing slot keeps its one element and the amounts stay in one column. A Tag only while the fee is not settled: 미납 (sessionPayment.pending, warning), 확인 대기 (neutral) and 환불 대기 (waiting, info: the refund waits on the host), the money words of §1.19 (the cohesion pass, the owner, 2026-10-25), the same as 회비 관리 and 참석자 관리 use. Paid is settled and silent; a waived fee and an acknowledged refund are settled too and say so where the amount would be (면제, 환불 확인됨), because an amount there would read as money paid. Months are plain Section heads, as 알림’s time sections are (they pin as a day header does), newest session first, the year only for another year; the order is the session’s day, not the created_at the query returns. No Strip and no total: the rows are the answer, and a sum would add what was paid to what is still owed. Offline keeps the cached rows under the strip; an empty list is one calm line and no button.

L3-27일정 관리

A club’s sessions, upcoming or past by the one Choice in its first head, with the one way to add another.

일정 관리강남 라켓클럽
클럽 일정
예정
9월 18일 (금)오늘
일정김총무
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
일정김총무
반포 한강 테니스장
입금 확인 3건
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
일정김총무
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
9월 19일 (토)내일
일정김총무
올림픽공원
09:00~11:00게스트 2명
복식NTRP 3.0–4.03~4번 코트
매치최유나
양재 시민의숲
14:00~16:00
단식여성NTRP 3.0–3.5
9월 20일 (일)모레
일정김총무
탄천 테니스장
08:00~10:00
복식NTRP 3.0–4.02번 코트
일정
9:41
844 FOLD
Ideal 예정: 모집 중 and 진행 중 together by day, the live session first in its day; the FAB is the one action; a row’s 입금 확인 N건 line is staff data, drawn only online
일정 관리강남 라켓클럽
올림픽공원 테니스장
예정
9월 18일 (금)오늘
09:00~11:00
복식NTRP 3.0–4.0
6/8
19:00~21:00
단식NTRP 3.0–3.5
게스트 2명
9월 19일 (토)내일
09:00~11:00
복식NTRP 3.0–4.0
3/8
16:00~18:00
혼합복식NTRP 3.5–4.0
5/8
일정
9:41
Same court One court: the head’s title, rows lead with time
일정 관리강남 라켓클럽
클럽 일정
예정
9월 18일 (금)오늘
일정김총무
대치유수지체육공원
진행 중
18:00~20:00
복식NTRP 3.0–4.02~3번 코트
일정김총무
반포 한강 테니스장
입금 확인 3건
20:00~22:00
복식NTRP 3.0–4.01~2번 코트
일정김총무
송파 올림픽 테니스장
1자리 남음
20:00~22:00
혼합복식NTRP 3.5–4.5
9월 19일 (토)내일
일정김총무
올림픽공원
09:00~11:00게스트 2명
복식NTRP 3.0–4.03~4번 코트
매치최유나
양재 시민의숲
14:00~16:00
단식여성NTRP 3.0–3.5
9월 20일 (일)모레
일정김총무
탄천 테니스장
08:00~10:00
복식NTRP 3.0–4.02번 코트
일정
9:41
일정 보기
예정
모집 중과 진행 중인 일정
지난 일정
끝난 일정
Sheet The head’s Choice ▾ opens two values, each saying what it holds
일정 관리강남 라켓클럽
클럽 일정
지난 일정
9월 17일 (목)어제
일정김총무
반포 한강 테니스장
20:00~22:008경기
복식1~2번 코트
매치최유나
양재 시민의숲
14:00~16:002경기
단식코트 1면
9월 15일 (화)3일 전
일정김총무
탄천 테니스장
08:00~10:006경기
복식2번 코트
일정
9:41
지난 일정 The Choice on 지난 일정: newest first; the games played are the deciding fact; the next page loads as skeleton Feed items
일정 관리강남 라켓클럽
클럽 일정
예정
예정된 일정이 없어요새 일정이 올라오면 여기에 보여요
일정
9:41
Empty The head keeps its Choice, the way to 지난 일정; the FAB is the action: no button
일정 관리강남 라켓클럽
클럽 일정
예정
일정
9:41
Loading The head, then one skeleton at the Feed item pitch (128)
일정 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
일정
9:41
Cold offline Nothing cached: offline, not “no sessions”
일정 관리 · /clubs/[clubId]/sessions
Route/clubs/[clubId]/sessions, pushed. ClubSessionsScreen: one list with one Choice, 예정 and 지난 일정.StackHeader 64 (back, 일정 관리, the club) · 12 · the first head 40 (클럽 일정, with the Choice ▾ at the right: 예정, or 지난 일정 once chosen) · Day header 34 (the first, under the head; 58 for the next) · Feed item 128 (74 for the same-court MediaRow) · FAB 56 above the home inset · no tab bar. The value Sheet: title row 48 and two radio Cells, 예정 and 지난 일정, each with its second line.ReadsuseClubSessions(clubId, [open, locked, in_progress]) for 예정, one list by day (a live session first in its day, then by time) and useCompletedClubSessions (paged, infinite) for 지난 일정; useDaySectionedSessionList with useClubSessionCardRow; the deciding fact comes from the session’s attention (입금 확인 N건, 게스트 N명); canManageSchedule gates the FAB.TapsRow → 일정 상세 (/sessions/[id]), where the tool pages of its attention (입금 확인 N건, 게스트 N명) are one gear away · the head’s Choice ▾ → the value Sheet (예정, 지난 일정; a tap selects and closes) · FAB → /create-session?clubId · pull to refresh · 지난 일정 loads the next page a screen before its end, as skeleton Feed items (never a spinner).Spokenh1 일정 관리 · h2 클럽 일정 (or the court’s name) and one per Day header · the Choice reads its value, "예정". A row: "일정, 김총무, 반포 한강 테니스장, 오후 8시부터 10시까지, 입금 확인 3건, 복식, NTRP 3.0부터 4.0, 1번부터 2번 코트".RulingsThe page levels (the owner, 2026-10-20): a detail page has no Tabs; its views are the one Choice in the first head, as 알림’s filter is. 예정 holds 모집 중 and 진행 중 together, by day, with a live session first in its day (진행 중 is a state of an upcoming session, not a place of its own); 지난 일정 holds the finished ones, and the Choice takes the selected look there. Review 46 (M18, proposed): the sessions of a club are the Feed item (library §5), as everywhere a session is listed: the overline names the kind (일정, 매치) and the host, the venue is the title, the time and what needs an official (입금 확인 N건 as a task in the warning tone; 게스트 N명 as plain text, a tally of people) are the first facts, format, level and courts the who row (the composition is the club’s own and is not repeated); a live row says 진행 중 and its round, a past row its games; no day prefix under a day header. The same-court exception: when every row shares a court it is named once, as the first head’s title, and the rows lead with the time (no thumb, 68); it stays a MediaRow, to be decided against a Feed item that repeats one map tile. IA-6: the officials’ create action is a FAB. The page is the officials’ alone (canManageSchedule gates its 관리 door), so it has no member view: a member reads the club’s 일정 in 클럽 홈’s 소식. The cohesion pass (the owner, 2026-10-25): the first head’s title names the list (클럽 일정), not the page, and a row opens 일정 상세. An empty list keeps the head, whose Choice is the way to the other view, and draws no Day header.F4 · Counts (M1 to M6)One read at parent scope (M1): get_session_manage_counts over the page’s session ids returns, per session, the fees to confirm and the games played. 입금 확인 N건 follows confirmation authority exactly (M2): whoever may confirm a payment for that session, the host or the club’s dues authority, sees the count; everyone else gets none, never 0; a completed or cancelled session has none. N경기 is the completed, counted matches (M3), a fact for anyone who may read the session. The session page’s 입금 확인 Notice follows the same authority (M4). The fee count is staff data (M5): it is not persisted and not drawn offline, so an offline row with a warm cache shows no 입금 확인 N건 at all; the games are a fact and may show from the cache. On the row (M6) 입금 확인 N건 is the Feed item’s state Tag in the task tone and wins over the 게스트 N명 tally (a row with both shows the Tag alone); a finished session shows N경기 as its fact; zero or none draws nothing.

L3-07출석 현황

Each member’s show-up rate since joining, with the flagged ones first, and a way into any member’s club record.

출석 현황강남 라켓클럽
출석
가입 후 출석률
87%
대상 멤버
42명
출석 주의3명
박지훈
불참 3.5
58%
정
정우진
불참 4
64%
한소희
불참 3
71%
멤버39명
이서연
96%
김민준
94%
최유나
91%
강도윤
88%
멤버 관리
9:41
844 FOLD
Ideal 총무: the flagged first, then everyone else; the door Cell goes back to 멤버 관리
출석 현황강남 라켓클럽
아직 출석 기록이 없어요일정이 끝나면 여기에 출석 기록이 쌓여요
9:41
Empty No records yet: the page fills as sessions finish
출석 현황강남 라켓클럽
출석
9:41
Loading One skeleton: the head, the tiles and person rows
출석 현황강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never an empty record
출석 현황강남 라켓클럽
운영진만 볼 수 있어요출석 현황은 클럽 운영에 쓰는 화면이에요
9:41
Member A wall that cannot be resolved: no button
출석 현황 · /clubs/[clubId]/attendance
Route/clubs/[clubId]/attendance, pushed from the 관리 sheet. ClubAttendanceScreen; officials only (canManageClub).StackHeader 64 · 12 · 출석 head 40 and the Strip, tiles face, 80 (가입 후 출석률, 대상 멤버) · Section head 72 (출석 주의, 3명) · PersonRow 68 on a flagged row (불참 3.5 on line 2), 64 on the rest, with the rate as the figure column (44 wide, right-aligned) · 24 · the door Cell 멤버 관리 48.ReadsuseClubAttendanceSummary(clubId): per member rate (pooled attended over total, the officials’ figure) and isFlagged, now the weighted absences of 3 or more from the club’s own attendance_records (a no-show or a cancel inside 12 hours weighs 1, a cancel 12 to 24 hours before 0.5; a free cancel and an excused record weigh nothing); the records themselves are 멤버 기록’s (useMemberStrikeRecords, useExcuseAttendance).TapsA row → 멤버 기록, that member’s record for this club: a flagged row first in the list, but any member’s record is one tap · the door Cell 멤버 관리 → 멤버 관리 (review 46, M28: the way back to the roster that leads here with its 출석 주의 door). Members see a permission wall.Spokenh1 출석 현황 · h2 출석 주의, 멤버. A row: "박지훈, 불참 3.5, 출석률 58퍼센트".RulingsFigure column: the rate right-aligned in one column, no Level tag (this is not a ranking by level). The 주의 Tag is gone: the head already says it. A permission wall has no button because the viewer cannot resolve it. Review 46 (M19): the Strip is the club’s own summary, so it keeps the tiles face (gray100, r12, rail to rail) with the two numbers the page does not say elsewhere; 주의 3 repeated the head under it and left. Review 46 (M6): the percentage is the officials’ word, so it stays here and nowhere a club-mate looks (the 기록 pane shows 최근 20회 중 참석 N회); the flag is weighted absences, not a count of strikes; the 불참 기록 Sheet became 멤버 기록, a page, because a record now carries its rule, its request and the money and lateness only an official sees. Review 46 (M28): the page was a dead end (a row opened nothing in the shipped app); every row now opens 멤버 기록 and the page ends with the door Cell that goes back to 멤버 관리. The cohesion pass (the owner, 2026-10-25): the summary family leads with a Section head over the Strip, as 멤버 기록 and 회비 관리 draw it.

L3-28신고 관리

Reports filed against members of the club, for the officials to read and resolve.

신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
Ideal 미해결 first; a row’s tap opens the report
신고 관리강남 라켓클럽
들어온 신고가 없어요이 클럽에 신고가 들어오면 여기에 보여요
9:41
Empty First-run: nothing has been reported
신고 관리강남 라켓클럽
9:41
Loading One skeleton at the person pitch
신고 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never “no reports”
신고 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Offline, cache hidden A warm cache is not shown: reports are staff data, shown only after this visit read them online, so the offline state stands
신고 관리강남 라켓클럽
미해결1건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 하고 심판 판정에 불만을 표시하면서 다른 멤버들에게도 큰 소리로 항의해서 경기 분위기가 매우 나빠졌어요. 이전에도 비슷한 일이 여러 번 있었어요”
9:41
Overflow A long reason clamps at two lines
신고 관리강남 라켓클럽
운영진만 볼 수 있어요신고 내역은 클럽 운영에 쓰는 화면이에요
9:41
Member Private to officials: a wall with no button

강남 라켓클럽

강남구NTRP 3.0–4.0멤버 42명
홈채팅기록멤버회비
9:41
강남 라켓클럽
운영
멤버 관리
2
일정 관리
3
회비 관리
3
출석 현황
신고 관리
2
설정
테니스장 관리
클럽 대항전
성장 분석
클럽 알림
클럽 설정
클럽 나가기
Entry The 관리 sheet on the club hub carries the count
신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
신고
박지훈
9월 17일 신고괴롭힘/욕설
사유
“경기 중에 계속 욕설을 해요”
기각확정
Sheet A row’s tap: the name row, the reason whole, and 기각 · 확정 in the footer
신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
신고
박지훈
9월 17일 신고괴롭힘/욕설
사유
“경기 중에 계속 욕설을 해요”
내용
게시글
보기
기각확정
Sheet, content A report about a post names it: 내용 under the reason holds the kind and its door 보기 ›; 기각 · 확정 still decide about the person
신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
신고
박지훈
9월 17일 신고괴롭힘/욕설
사유
“경기 중에 계속 욕설을 해요”
내용
삭제된 게시글
기각확정
Sheet, deleted The post is gone: 삭제된 게시글, static, with no door; nothing of it was kept
신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
신고
오예린
9월 9일 신고괴롭힘/욕설
확정됨
Sheet A resolved report: its outcome is the Tag, no footer
신고 관리강남 라켓클럽
미해결2건
박지훈
9월 17일 신고괴롭힘/욕설
“경기 중에 계속 욕설을 해요”
정
정우진
9월 14일 신고기타
해결됨2건
오예린
9월 9일 신고괴롭힘/욕설
확정됨
임하준
9월 2일 신고스팸/광고
기각됨
9:41
신고
박지훈
9월 17일 신고괴롭힘/욕설
사유
“경기 중에 계속 욕설을 해요”
기각확정
박지훈님의 신고를 확정할까요?확정하면 12개월 동안 신뢰 점수에서 10점이 빠져요
닫기확정
Dialog 확정 names the person and what it counts for; the scrim does not dismiss
신고 관리 · /clubs/[clubId]/reports
Route/clubs/[clubId]/reports. ClubReportsScreen; officials only (RLS-backed). Reached from the 관리 sheet and from 알림’s 신고 row (a 처리할 일).StackHeader 64 · 12 · Section head 40 (first) · PersonRow with its date and category on line 2 and the reporter’s words under it (two lines, then it clamps), no control · no CTA band, no FAB.ReadsuseClubReports(clubId) with useProfilesByIds for the reported member’s name; each row: the reported member, the date, the category (t().dm.report.category), the reason; the reporter’s identity is not read and the number of reporters is not counted; useResolveMemberReport records the outcome, 확정 or 기각.TapsA row has one tap: it opens the report’s Sheet, the reported person’s name row first (→ 공개 프로필), then the reason whole (never who filed it), and in its footer 기각 · 확정, two equal choices (a resolved report’s Sheet has no footer); 확정 asks a Dialog naming the person, the 12 months and the 10 points. The 관리 sheet’s 신고 관리 row carries a count Tag and keeps the page reachable at zero.Spokenh1 신고 관리 · h2 미해결, 해결됨. A row: "박지훈, 9월 17일 신고, 괴롭힘/욕설", which opens the Sheet "신고" with the name row first; a resolved row ends "확정됨" or "기각됨".RulingsIt is reached from the 관리 MenuSheet, where it carries a count Tag, and from the 신고 row in 알림. The cohesion pass (the owner, 2026-10-25; §1.18): a row has one tap and no resolve Button, so the Sheet gives the moderator the whole report before the outcome, and its footer is where 기각 · 확정 live. The words clamp to two lines; the Sheet has them whole. A member sees a permission wall with no button. Review 46 (M6): the official records an outcome, not just a resolution: a 확정 report takes 10 points off the person’s 신뢰 점수 for 12 months, a 기각 one counts for nothing; the resolved rows say which (확정됨, 기각됨). The reporter’s identity and the number of reporters are never shown, not even here.F4 · Content (P1 to P6)A report about club content also reaches the club’s officials (the owner, decision 12, 2026-11-10). It names its subject (P1): a post, a comment, a session or a chat message, and the server finds the club from the subject and checks the reported person is its author or host; a mismatch goes to the platform queue only, silently. Only an active member’s report reaches this queue (P2), so an outsider’s stays with the platform; the trust tier counts distinct unresolved reporters, which is the guard against a pile-on. The official sees the report and the content, then decides about the person, 기각 or 확정, and nothing else (P3): no hide and no delete from the Sheet, since officials already delete posts and manage sessions where those live. The Sheet’s 내용 row (rp-content) is the kind and its door 보기 ›: 게시글 opens the post, 댓글 the post it sits on, 일정 opens 일정 상세; 채팅 has no door, as the thread is not the official’s to open. No excerpt is stored (P4): a deleted subject reads 삭제된 게시글 (or 댓글, 일정), static, with no door (rp-content-deleted). Who filed it stays closed (P5): the new columns get explicit column grants and an official still cannot read the reporter. An official cannot decide a report about themselves (P6): the row is not shown to them and the server refuses it; when they are the only official the report waits for the platform queue. A report about a person alone (a profile report) has no 내용 row, as before.

L3-29테니스장 관리

The venues a club plays at, added through the shared finder and edited in place.

테니스장 관리강남 라켓클럽
테니스장송파구
올림픽공원 테니스장
코트 12면하드야외
우리 클럽 3~5번 코트영업 중4.3
테니스장서초구
반포 한강 테니스장
코트 8면클레이야외
우리 클럽 2번 코트영업 중4.1
테니스장송파구
탄천 테니스장
하드실내
영업 종료시간당 10,000원4.0
테니스장
9:41
Ideal 운영진: the club’s venues; the FAB adds one
테니스장 관리강남 라켓클럽
추가한 테니스장이 없어요자주 쓰는 테니스장을 추가하면 일정을 더 빨리 만들 수 있어요
테니스장
9:41
Empty First-run: the FAB is the action, so no button
테니스장 관리강남 라켓클럽
테니스장
9:41
Loading One skeleton at the Feed item pitch (128)
테니스장 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not “no venues”
테니스장 관리강남 라켓클럽
테니스장송파구
서울올림픽공원 국민체육진흥공단 테니스장 A구장
코트 12면하드야외
우리 클럽 3~5번 코트영업 중4.3
테니스장서초구
반포한강공원 잠원지구 시민 테니스장 야간 조명 코트
클레이야외
영업 중시간당 12,000원4.1
테니스장
9:41
Overflow A long place crops on one line
테니스장 관리강남 라켓클럽
운영진만 볼 수 있어요테니스장은 운영진만 관리할 수 있어요
9:41
Member No coloured action, no FAB: nothing can fix it here
올림픽
취소
올림픽공원 테니스장
송파구이미 추가했어요
송파 올림픽 테니스장
송파구코트 6면
올림픽 파크텔 코트
송파구코트 2면
찾는 곳이 없나요?
목록에 없는 테니스장 추가
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Takeover The shared finder; a picked venue shows its check
테니스장 관리 · /clubs/[clubId]/venues
Route/clubs/[clubId]/venues, pushed from the 관리 sheet. ClubVenuesScreen; officials (canManageClub).StackHeader 64 · 16 · Feed item 128, no control · 40, the page’s tail · FAB 56 above the home inset (16 above it).ReadsuseClubVenues(clubId), useCreateVenue / useUpdateVenue / useDeleteVenue; VenueSearchTakeover (commitMode immediate) with venueInputFromPick and useNaverAdoptCorrelation; parseClubVenueCourtCount validates 1~40.TapsRow → /venues/[id] (장소 상세), where the club’s commands for it are the header ⋯: 코트 수 수정 and 메모 수정 (an Edit Sheet each) and 삭제 (→ Dialog) · the FAB (테니스장 추가) → the search takeover · 목록에 없는 테니스장 추가 → /venue-contributions/new.Spokenh1 테니스장 관리. A row: "테니스장, 송파구, 올림픽공원 테니스장, 코트 12면, 하드, 야외, 우리 클럽 3~5번 코트, 영업 중, 평점 4.3". The FAB: "테니스장 추가".RulingsA Feed item has no ⋯ (§1.18), so a row opens 장소 상세 and the club’s commands for the venue live in that page’s header ⋯ (one Edit Sheet per field, × in the title, one 저장; delete asks a Dialog that says past sessions keep their place text; both are drawn with 장소 상세). A picked venue shows its check and adds nothing twice. Add is the one coloured action, and it is the FAB (a list creates with its FAB, not a CTA band). The list is bounded and ends in its tail, with no end line (§1.16) and no door: 장소 정보 제안 내역 is the viewer’s own list and the venue owner’s, not the club’s, so it opens from 설정’s 보낸 제안 and from the owner’s Notice on 장소 상세, never from here.

L3-48정기 일정

The days and times the club meets every week, every other week or every month, listed for the officials; a row opens its editor, where a meet is changed, and the FAB adds one.

정기 일정강남 라켓클럽
매주 화·목요일 19:00~21:00
올림픽공원 테니스장주중 연습
매주 토요일 09:00~12:00
반포 한강 테니스장주말 정모조 편성: A조
격주 일요일 08:00~10:00
탄천 테니스장
매월 첫째 주 일요일 18:00
월례 대회
정기 일정
9:41
Ideal 운영진: the club’s regular meets, a row opens its editor; the FAB adds one
정기 일정강남 라켓클럽
정기 일정이 없어요정기적으로 모이는 요일과 시간을 추가해 주세요
정기 일정
9:41
Empty First-run: the FAB is the action, so no button
정기 일정강남 라켓클럽
9:41
Loading One skeleton at the Text row pitch; the add button waits for the role
정기 일정강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not “no regular meets”
정기 일정강남 라켓클럽
정기 일정을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read offers a retry
정기 일정강남 라켓클럽
매주 월·화·수·목·금요일 19:00~익일 01:00
서울올림픽공원 국민체육진흥공단 테니스장 A구장평일 야간 연습 모임
매월 마지막 주 금요일 20:00~22:00
반포한강공원 잠원지구 시민 테니스장 야간 조명 코트
정기 일정
9:41
Overflow A long place crops on one line
정기 일정강남 라켓클럽
운영진만 볼 수 있어요정기 일정은 운영진만 관리할 수 있어요
9:41
Member No coloured action, no FAB: nothing can fix it here
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
저장
9:41
L4-22편집 The meet exists, so one list of value rows; the delete is its own caution group
정기 일정 만들기강남 라켓클럽
일시
반복
매주 토요일
시간
19:00~21:00
기본 정보
테니스장
없음
이름
없음
참석자
참석 구성
전원
만들기
9:41
L4-22만들기 A new meet starts from the app’s defaults: every row has a value, the venue and the name read 없음
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
9:41
반복
매주격주매월
요일
월화수목
금토일
완료
L4-22Sheet 반복 and 요일: Choice sets, several days for 매주 and 격주
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
9:41
반복
매주격주매월
몇째 주
첫째 주둘째 주셋째 주
넷째 주마지막 주
요일
월화수목금
토일
완료
L4-22Sheet 매월 adds 몇째 주 and takes one 요일
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
9:41
시간
시작09:00
종료12:00
07
08
09
10
11
40
50
00
10
20
종료 없음
완료
L4-22Sheet 시간: the start and the end on one wheel
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
9:41
시간
시작09:00
종료종료 없음
07
08
09
10
11
40
50
00
10
20
종료 없음
완료
L4-22Sheet 종료 없음: the end is optional, and the row then reads the start alone
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
9:41
시간
시작09:00
종료종료 없음
10
11
12
13
14
40
50
00
10
20
종료 없음
완료
L4-22Sheet 종료 없음 on the end tab: the check row is checked and the tab reads it
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
저장
9:41
조 선택
A조
B조
C조
L4-22Sheet 조 선택: the club’s 조 as one value; the chosen one is checked
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
저장
9:41
조 선택
만든 조가 없어요
조 만들기
L4-22Sheet No 조 made yet: the Sheet says so, and its one action opens 조
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
저장
9:41
이 정기 일정을 삭제할까요?매주 토요일 09:00~12:00
닫기삭제
L4-22Dialog 정기 일정 삭제 is danger and names the meet
정기 일정 수정강남 라켓클럽
일시
반복
매주 토요일
시간
09:00~12:00
기본 정보
테니스장
반포 한강 테니스장
이름
주말 정모
참석자
참석 구성
조 편성
조
A조
주의가 필요한 설정
정기 일정 삭제
저장
9:41
수정을 그만둘까요?바꾼 내용은 저장되지 않아요
계속 수정그만두기
L4-22Guard Leaving with changes asks, in the edit guard’s words
정기 일정 · /clubs/[clubId]/regular-meets (officials)
Route/clubs/[clubId]/regular-meets (proposed), pushed from 클럽 설정’s 활동 Cell 정기 일정. Today it is a section of ClubSettingsScreen (club-settings-screen.tsx:464, RegularMeetsSection); a page of its own makes the list a place, the way 테니스장 관리 is. Officials only (canManage).StackHeader 64 (back, 정기 일정, the club as subtitle) · Text row 68, the first and last trimming 12 · 40, the page’s tail · FAB 56 above the home inset (16 above it). No head, no tabs, no CTA band.ReadsuseClubRegularMeets(clubId), the active meets (isActive) in the order the hook returns; useClubGroups(clubId) resolves participation.groupId to the 조’s name (조 미지정 where it was deleted); describeRegularMeet(meet) writes line 1 (describeRecurrence, then formatTimeRange, 익일 for an overnight range); line 2 is venueLabel, label and, for a 조 meet, participationGroupLabel; canManage (useClubContext) gates the whole page.TapsA row → 정기 일정 수정 (the meet is in the route: /clubs/[clubId]/regular-meets/[meetId]) · the FAB 정기 일정 → the same page, new (정기 일정 만들기). Pull to refresh. There is no row menu: the ⋯ of regular-meets-section.tsx, and its EditDeleteActionModal (수정 · 삭제), are gone; both commands live on the editor (§1.18).Spokenh1 정기 일정. A row: "매주 토요일 09:00부터 12:00, 반포 한강 테니스장, 주말 정모, 조 편성 A조". The FAB: "정기 일정 추가".RulingsOne kind of list, the Text row (§1.20): a regular meet is a rule and a place, with no photo and no figure. The row has no ⋯ (§1.18): the app’s kebab sheet held only 수정 and 삭제, and a row that opens its editor needs neither, so the page has no menu and no Dialog of its own. A list creates with its FAB, whose label is the noun (정기 일정), so the app’s AddCard and its sentence description (sectionDescription) are gone (§1.16). 전원 stays implicit, as in the app: only a 조 meet says who it is for. The app renders the section read-only for a member (canManage false), and the page’s door is the officials’ 클럽 설정, so a member who reaches the route meets the wall. The empty state’s one action is the FAB.
정기 일정 수정 · /clubs/[clubId]/regular-meets/[meetId] (form)
Route/clubs/[clubId]/regular-meets/[meetId], and /clubs/[clubId]/regular-meets/new (proposed), pushed from 정기 일정. A page, not a Sheet: the time range is a wheel and the venue a search takeover, and a Sheet cannot open over a Sheet (forms: 일정 만들기’s 경기 규칙 is a page for the same reason). RecurrenceEditor today is a ModalPanel.StackHeader 64 (back, 정기 일정 수정 or 정기 일정 만들기, the club) · 12 · 일시, 기본 정보 and 참석자, each a Section head 40 (72 under a group) over one Cell group of edit Cells 48 · for an edit, 주의가 필요한 설정 and its destructive Cell 정기 일정 삭제 · CTA band 저장 (만들기 for a new meet), pinned.ReadsThe meet: rruleToRecurrenceSpec(rrule) gives 반복 and 요일 (and 몇째 주 for monthly), startTime and endTime give 시간, venueLabel, label and participation (all | group + groupId) give the rest; a new meet seeds weekly, Saturday, 19:00~21:00, 전원 (seedState). useClubGroups(clubId) lists the active 조 for 조 선택. Saved by useUpdateRegularMeet (edit) or useCreateRegularMeet (new, dtstart today), deleted by useDeleteRegularMeet. canSave needs at least one day, a valid start, and a valid end when one is given (the end is optional and saved as null; the row then reads the start alone).Taps반복 → the Edit Sheet 반복 (매주 · 격주 · 매월, then 요일 as a multi Choice set; 매월 adds 몇째 주 and 요일 takes one day) · 시간 → the time range Sheet (start and end on one wheel; 종료 없음 clears the end) · 장소 → the venue search takeover (§1.21, Where) · 이름 → an Edit Sheet · 참석 구성 → an Edit Sheet (전원 · 조 편성) · 조 → the value Sheet 조 선택, which with no 조 made offers 조 만들기 → 조 · 정기 일정 삭제 → Dialog "정기 일정을 삭제할까요?" · 저장 / 만들기 writes the meet and goes back to 정기 일정 · back with changes → the guard Dialog 수정을 그만둘까요?.Spokenh1 정기 일정 수정. A row: "반복, 매주 토요일, 편집". The Choice sets: 반복 "매주, 선택됨", 요일 "월요일, 선택 안 됨".RulingsLibrary § 1.22 rule 0: a form that edits answers that exist is one list of value rows, label left and answer right, the pencil opening the row’s editor. The answers all exist (an edit, or a creation begun from the app’s defaults, which is what the app seeds), so there is no Field on the page; what is typed (the venue, the name) is typed in the row’s editor. Rule 1: 요일 and 몇째 주 are Choice sets (two to seven short options), not a Cell per day; the editor has no count with a fixed unit, so there is no Stepper. Rule 2: three groups, one topic each (일시, 기본 정보, 참석자); 조 is a row of the 참석자 group that exists only under 조 편성. Words: the app’s 수정 is the house word for the page (정기 일정 수정; the board said 편집 until the app’s wording won, check:i18n-house-style) and 만들기 (the band’s verb for a new thing, § 1.19); the day chips read 월 … 일 under their 요일 legend. The delete is a Cell in the caution group, as 클럽 보관 is on 클럽 설정, and asks a Dialog (a destructive action that cannot be undone). The guard is the edit guard of every form (바꾼 내용은 저장되지 않아요).

L3-49조

The club’s skill groups, in the order they fill: each row opens its Sheet, 재편성 previews who moves, and the FAB adds one.

조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
조
9:41
Ideal 운영진: the 조 in fill order; a row opens its Sheet, 재편성 ends the list and the FAB adds
조강남 라켓클럽
아직 조가 없어요조를 추가하고 재편성을 실행해 보세요
조
9:41
Empty First-run: the FAB is the action, and 재편성 has nothing to move
조강남 라켓클럽
9:41
Loading One skeleton at the Text row pitch; the add button waits for the role
조강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not “no 조”
조강남 라켓클럽
조를 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read offers a retry
조강남 라켓클럽
운영진만 볼 수 있어요조는 운영진만 관리할 수 있어요
9:41
Member No coloured action, no FAB: nothing can fix it here
조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
9:41
조 수정
목표 인원 (명)
12
제한 없음
조 이름
A조
2/20
조 삭제
저장
Sheet A row’s tap: the count is the typed Stepper, 제한 없음 takes it away, the delete ends the Sheet
조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
9:41
조 추가
제한 없음
조 이름
예: A조
0/20
추가
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Sheet The FAB: a new 조 starts unbounded, 추가 waits for a name
조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
9:41
재편성 미리보기
승격
이서연
B조 → A조ELO 1,52312전
박지훈
C조 → B조ELO 1,4529전
강등
한소희
A조 → B조ELO 1,33115전
신규 배정
임하준
미배정 → C조ELO 1,2805전
미배정
정
정우진
C조 → 미배정ELO 1,1902전
고정됨
최유나
A조
고정됨
확정
Sheet 재편성: every move by kind with its evidence; nothing is written before 확정
조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
9:41
재편성 미리보기
변경될 배정이 없어요
고정됨
최유나
A조
고정됨
확정
Sheet Nobody moves: the Sheet says so and 확정 is off
조강남 라켓클럽
A조
현원 11명목표 12명
B조
현원 13명목표 12명
C조
현원 9명
재편성
조
9:41
A조를 삭제할까요?소속 멤버는 미배정이 돼요
닫기삭제
Dialog 조 삭제 is danger, names the 조 and says what happens to its members
조 · /clubs/[clubId]/groups (officials)
Route/clubs/[clubId]/groups (proposed), pushed from 클럽 설정’s 활동 Cell 조. Today it is a section of ClubSettingsScreen (club-settings-screen.tsx:466, ClubGroupsSection) with GroupEditor and RegroupPreview as ModalPanels; the page keeps all three as Sheets, so it is a list edited in Sheets and has no page below it. Officials only (canManage).StackHeader 64 (back, 조, the club) · Text row 68 (the name, then 현원 and 목표), the first trimming 12 · 32 · the tonal md Button 재편성 (36, rail to rail) · 40, the page’s tail · FAB 56 above the home inset (16 above it). Empty: the Empty state and the FAB, with no 재편성 (nothing to partition).ReadsuseClubGroups(clubId) sorted by sortOrder (sortActiveBySortOrder; the fill and promotion order) and useClubMembers(clubId): a 조’s roster is the active members whose effectiveGroupId (manual pin, else auto assignment) is the 조, which gives 현원; targetSize gives 목표 (none: unbounded). 재편성 reads useClubRatingRanks(clubId) and useClubProfiles(clubId) and runs computeRankPartition over the roster and the 조, so the preview and the list agree; useCreateClubGroup, useUpdateClubGroup, useDeleteClubGroup, useApplyGroupAssignments write.TapsA row → the Edit Sheet 조 수정 (조 이름, 목표 인원 with 제한 없음, 저장; 조 삭제 at its end → Dialog "A조를 삭제할까요?") · the FAB 조 → the Edit Sheet 조 추가 (추가 waits for a name) · 재편성 → the Sheet 재편성 미리보기: the moves by kind (승격, 강등, 신규 배정, 미배정) with their evidence, the pinned members dimmed under 고정됨, 확정 applies them all (useApplyGroupAssignments) and closes; with nothing to move the Sheet says 변경될 배정이 없어요 and 확정 is off · × closes without writing. A pinned member (a manual 조) is left out of the moves and listed dimmed.Spokenh1 조. A row: "A조, 현원 11명, 목표 12명". The Button: "재편성". The FAB: "조 추가". A move: "이서연, B조에서 A조로, ELO 1,523, 12전"; a drop: "정우진, C조에서 미배정으로, ELO 1,190, 2전"; a pinned member: "최유나, A조, 고정됨".RulingsA list edited in Sheets (named in leaves): every command is a Sheet or a Dialog over the list, so the page opens nothing. The page shows list rows (§ 1.20): a 조 is a Text row that opens its Sheet, and the rhythm canon’s row-text > button seam (32, mirroring cell > button) lets 재편성 end the list. § 1.18: the app’s kebab sheet (수정 · 삭제) is gone, a row’s tap is its Edit Sheet and the delete is that Sheet’s last Cell, in danger, asking a Dialog that says what happens to the members. § 1.22: a count with a fixed unit is the typed Stepper (목표 인원, 2 to 40) and 제한 없음 is a check row that takes it away; the name is the one Field, after the rows. 재편성 is the page’s second action and the only Button on it: it ends the list (the app’s own place) as the tonal md Button, since the FAB is the page’s one coloured action; it stays off the empty state. The preview is itself the confirmation (nothing is written before 확정), so no further Dialog follows it. The tier dot is not drawn (see the row note): a deviation from the app that the lead rules on. The app’s sentence under 재편성 (경기 미만인 멤버는 자동 배정에서 제외돼요) is a meta line (§ 1.16) and is not drawn.

L3-10클럽 대항전

The club’s challenges against other clubs: waiting, running and past, with the standing.

클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
844 FOLD
Ideal The header proposes; then 대기 중, 진행 중 and 지난 대항전, each by its own state
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
844 FOLD
Ideal, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
844 FOLD
Ideal, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
아직 대항전이 없어요다른 클럽에 대항전을 신청해 보세요
대항전 신청
9:41
Empty First-run: one empty kind; the action proposes, and the header holds the same door
클럽 대항전강남 라켓클럽
아직 대항전이 없어요다른 클럽에 대항전을 신청해 보세요
대항전 신청
9:41
Empty, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
아직 대항전이 없어요다른 클럽에 대항전을 신청해 보세요
대항전 신청
9:41
Empty, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
전적
9:41
Loading One skeleton: the head, the tiles, then Feed items; no action while the role loads
클럽 대항전강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never the empty state; a write is not drawn
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
9:41
Proposing side A proposal this club sent: nothing to accept, 신청 취소 under it, rail to rail as the pair is
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
9:41
Proposing side, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
9:41
Proposing side, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
Running The tally is 2-1 and the rule decides the lead (뒤지는 중 beside a tally in our favour); 취소 only while no tagged session has a completed match
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
Running, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
844 FOLD
Running, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
지난 대항전2건
대항전총 승수
vs 반포 한강 테니스
9.7~9.21D-3 결과 확정
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.1~9.15D-1 결과 확정
1-1 동점
9:41
Ended, not frozen After the end date the standing still reads live and the row says 결과 확정 D-n: the score-review window (7 days)
클럽 대항전강남 라켓클럽
지난 대항전2건
대항전총 승수
vs 반포 한강 테니스
9.7~9.21D-3 결과 확정
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.1~9.15D-1 결과 확정
1-1 동점
9:41
Ended, not frozen, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
지난 대항전2건
대항전총 승수
vs 반포 한강 테니스
9.7~9.21D-3 결과 확정
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.1~9.15D-1 결과 확정
1-1 동점
9:41
Ended, not frozen, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
지난 대항전6건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
대항전ELO 상승
vs 성수 로브
7.20~8.3
무 2-2
대항전총 승수
vs 판교 테니스 크루
7.1~7.15
경기 없이 끝났어요
대항전총 승수
vs 잠원 스핀
6.20~7.4
취소됨
9:41
Frozen 승, 패 and 무 from the match tally; 경기 없이 끝났어요 for none counted; 취소됨; an old 경기 수 row reads 출전 인원
클럽 대항전강남 라켓클럽
지난 대항전6건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
대항전ELO 상승
vs 성수 로브
7.20~8.3
무 2-2
대항전총 승수
vs 판교 테니스 크루
7.1~7.15
경기 없이 끝났어요
대항전총 승수
vs 잠원 스핀
6.20~7.4
취소됨
9:41
Frozen, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
지난 대항전6건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
대항전ELO 상승
vs 성수 로브
7.20~8.3
무 2-2
대항전총 승수
vs 판교 테니스 크루
7.1~7.15
경기 없이 끝났어요
대항전총 승수
vs 잠원 스핀
6.20~7.4
취소됨
9:41
844 FOLD
Frozen, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 수락할까요?9월 20일~10월 4일, 총 승수로 겨뤄요
닫기수락
Dialog 수락 names the opponent and the contest
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 수락할까요?9월 20일~10월 4일, 총 승수로 겨뤄요
닫기수락
Dialog, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 수락할까요?9월 20일~10월 4일, 총 승수로 겨뤄요
닫기수락
Dialog, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 거절할까요?거절하면 상대 클럽에 알려 드려요
닫기거절
Dialog 거절 is danger and names the opponent
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 거절할까요?거절하면 상대 클럽에 알려 드려요
닫기거절
Dialog, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
전적
승
3
패
1
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
진행 중2건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-6 종료
1-1 동점
지난 대항전4건
대항전총 승수
vs 용산 클레이 클럽
8.20~9.3
승 3-2
대항전출전 인원
vs 분당 더블스
8.1~8.15
패 1-3
9:41
송파 베이스라인의 대항전을 거절할까요?거절하면 상대 클럽에 알려 드려요
닫기거절
Dialog, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
마포 서브앤발리에 보낸 신청을 취소할까요?취소하면 상대 클럽에 알려 드려요
닫기신청 취소
Dialog, 신청 취소 신청 취소 is danger, names the club, and says the club is told
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
마포 서브앤발리에 보낸 신청을 취소할까요?취소하면 상대 클럽에 알려 드려요
닫기신청 취소
Dialog, 신청 취소, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
마포 서브앤발리에 보낸 신청을 취소할까요?취소하면 상대 클럽에 알려 드려요
닫기신청 취소
Dialog, 신청 취소, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
성수 로브와의 대항전을 취소할까요?취소하면 상대 클럽에 알려 드리고, 결과는 반영되지 않아요
닫기취소
Dialog, 취소 취소 asks while a running challenge has no result
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
성수 로브와의 대항전을 취소할까요?취소하면 상대 클럽에 알려 드리고, 결과는 반영되지 않아요
닫기취소
Dialog, 취소, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 마포 서브앤발리
9.25~10.9D-7 시작
신청했어요
신청 취소
진행 중1건
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
성수 로브와의 대항전을 취소할까요?취소하면 상대 클럽에 알려 드리고, 결과는 반영되지 않아요
닫기취소
Dialog, 취소, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
경기 결과가 있어서 취소할 수 없어요결과가 나온 대항전은 끝까지 진행돼요
확인
Refused A counted match arrived first: the server refuses, the Dialog sits over the page, which stays
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
경기 결과가 있어서 취소할 수 없어요결과가 나온 대항전은 끝까지 진행돼요
확인
Refused, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
진행 중3건
대항전총 승수
vs 반포 한강 테니스
9.14~9.28D-6 종료
2-1 앞서는 중
대항전ELO 상승
vs 잠실 스매시
9.10~9.24D-2 종료
2-1 뒤지는 중
대항전총 승수
vs 성수 로브
9.18~10.2
0-0 동점
취소
9:41
경기 결과가 있어서 취소할 수 없어요결과가 나온 대항전은 끝까지 진행돼요
확인
Refused, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
대항전 신청은 클럽 플랜에서 이용할 수 있어요
상대 클럽을 골라 대항전을 신청해요
Plan wall Below the plan, the header action opens the plan Sheet (no button: a plan page is not built); only proposing is walled
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
대항전 신청은 클럽 플랜에서 이용할 수 있어요
상대 클럽을 골라 대항전을 신청해요
Plan wall, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
대항전 신청은 클럽 플랜에서 이용할 수 있어요
상대 클럽을 골라 대항전을 신청해요
Plan wall, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
Below the plan The same club still reads and answers a proposal it received: the page is never walled
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
Below the plan, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
받은 신청
9.20~10.4D-2 시작
수락
거절
9:41
Below the plan, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
선택
시작일
선택
종료일
선택
방식
총 승수ELO 상승
보내기
9:41
L4-23Form, empty 상대 클럽, 방식 and 기간 start unset; 보내기 waits
대항전 신청강남 라켓클럽
상대 클럽
선택
시작일
선택
종료일
선택
방식
총 승수ELO 상승
보내기
9:41
Form, empty, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
선택
시작일
선택
종료일
선택
방식
총 승수ELO 상승
보내기
9:41
Form, empty, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
L4-23Form, filled The preview line says how long and by what; 보내기 is ready
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
Form, filled, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
Form, filled, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
9:41
종료일
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
완료
L4-23Form, 종료일 The days up to the start are off; the 90-day limit is said under the Calendar
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
9:41
종료일
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
완료
Form, 종료일, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
9:41
종료일
2026년 9월
일월화수목금토
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
완료
Form, 종료일, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
이 클럽과는 이미 대항전이 있어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
L4-23Refusal, same pair One open 대항전 per pair: the line is under 상대 클럽 and the form stays open
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
이 클럽과는 이미 대항전이 있어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
Refusal, same pair, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
이 클럽과는 이미 대항전이 있어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
844 FOLD
Refusal, same pair, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
12월 25일
기간은 90일까지 정할 수 있어요
방식
총 승수ELO 상승
보내기
9:41
L4-23Refusal, period A period over 90 days: the line is under 종료일
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
12월 25일
기간은 90일까지 정할 수 있어요
방식
총 승수ELO 상승
보내기
9:41
Refusal, period, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
12월 25일
기간은 90일까지 정할 수 있어요
방식
총 승수ELO 상승
보내기
9:41
Refusal, period, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
클럽 정보를 찾을 수 없어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
L4-23Refusal, club gone The opponent was archived or removed: the line is under 상대 클럽
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
클럽 정보를 찾을 수 없어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
Refusal, club gone, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
클럽 정보를 찾을 수 없어요
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내기
9:41
Refusal, club gone, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
오늘은 5건까지 신청할 수 있어요
보내기
9:41
L4-23Refusal, limit Five proposals a day: the helper sits under the band, danger
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
오늘은 5건까지 신청할 수 있어요
보내기
9:41
Refusal, limit, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
오늘은 5건까지 신청할 수 있어요
보내기
9:41
844 FOLD
Refusal, limit, 200% The same frame at 200% text: lines wrap, nothing is cut
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내는 중...보내기
9:41
L4-23Form, sending A spinner beside the progressive label
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내는 중...보내기
9:41
Form, sending, dark The same frame in the dark palette
대항전 신청강남 라켓클럽
상대 클럽
송파 베이스라인
시작일
9월 20일
종료일
10월 4일
방식
총 승수ELO 상승
14일 동안, 총 승수로 겨뤄요
보내는 중...보내기
9:41
Form, sending, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
9.20~10.4D-2 시작
신청했어요
신청 취소
대항전 신청을 보냈어요
9:41
L4-23Sent The form closes onto the page: the new row waits under 대기 중, a Toast says it was sent
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
9.20~10.4D-2 시작
신청했어요
신청 취소
대항전 신청을 보냈어요
9:41
Sent, dark The same frame in the dark palette
클럽 대항전강남 라켓클럽
대기 중1건
대항전총 승수
vs 송파 베이스라인
9.20~10.4D-2 시작
신청했어요
신청 취소
대항전 신청을 보냈어요
9:41
Sent, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 이름, 지역으로 검색
취소
클럽 찾기6곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
잠실 스매시
송파구NTRP 2.5–3.5
분당 더블스
분당구NTRP 3.0–4.0
서초 주말 테니스
서초구NTRP 2.5–3.0
마포 서브앤발리
마포구NTRP 3.0–4.0
9:41
L4-23Picker, discover A club takeover over the discover feed: the viewer’s own clubs are left out; a row picks and returns
클럽 이름, 지역으로 검색
취소
클럽 찾기6곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
잠실 스매시
송파구NTRP 2.5–3.5
분당 더블스
분당구NTRP 3.0–4.0
서초 주말 테니스
서초구NTRP 2.5–3.0
마포 서브앤발리
마포구NTRP 3.0–4.0
9:41
Picker, discover, dark The same frame in the dark palette
클럽 이름, 지역으로 검색
취소
클럽 찾기6곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
잠실 스매시
송파구NTRP 2.5–3.5
분당 더블스
분당구NTRP 3.0–4.0
서초 주말 테니스
서초구NTRP 2.5–3.0
마포 서브앤발리
마포구NTRP 3.0–4.0
9:41
Picker, discover, 200% The same frame at 200% text: lines wrap, nothing is cut
송파
취소
검색 결과2곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
L4-23Picker, searching Results narrow as it is typed
송파
취소
검색 결과2곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Picker, searching, dark The same frame in the dark palette
송파
취소
검색 결과2곳
송파 베이스라인
송파구NTRP 3.5–4.5
반포 한강 테니스
서초구NTRP 3.0–3.5
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Picker, searching, 200% The same frame at 200% text: lines wrap, nothing is cut
송파 라켓
취소
검색 결과가 없어요다른 이름이나 지역으로 다시 검색해 보세요
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
L4-23Picker, no result One line, no button: the field is the way on
송파 라켓
취소
검색 결과가 없어요다른 이름이나 지역으로 다시 검색해 보세요
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Picker, no result, dark The same frame in the dark palette
송파 라켓
취소
검색 결과가 없어요다른 이름이나 지역으로 다시 검색해 보세요
9:41
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
⇧ㅋㅌㅊㅍㅠㅜㅡ⌫
123스페이스완료
Picker, no result, 200% The same frame at 200% text: lines wrap, nothing is cut
클럽 대항전 · /clubs/[clubId]/challenges
Route/clubs/[clubId]/challenges, pushed from the 관리 sheet. ClubChallengesScreen.StackHeader 64 · 12 · 전적 head 40 and the Strip, tiles face, 80 (승, 패; the 진행 중 count is the head under it) · Section head 72 · Feed item 128 with both clubs’ logos; a 받은 신청 item carries the AnswerPair under it, rail to rail (176 with it) · 지난 대항전 ends in 2개 더 보기 48 · the header’s + proposes (batch C, C7; an official’s action, not drawn while the role loads or offline) · no CTA band.ReadsuseInterClubChallenges(clubId), useClubsByIds for both clubs; the state word is deriveChallengeDisplayStatus (derived from the dates, never the stored status); computeChallengeStats gives the tiles (승, 패); 대기 중 is proposed, 진행 중 is accepted or in progress, 지난 대항전 is the rest.TapsA 받은 신청 row (proposed, the viewer is the away side) carries the AnswerPair: 수락 → Dialog → useAcceptChallenge, 거절 → Dialog; the row’s own tap → the opponent’s 클럽 홈. Any other row → the opponent’s 클럽 홈 (review 46, M28: the club a row names is a row that opens it). 지난 대항전 ends in N개 더 보기, which opens the rest in place. The header’s + and the empty state’s 대항전 신청 → the proposal form (below the plan: the plan Sheet instead). 신청 취소 (a waiting proposal of ours) and 취소 (a running challenge with no counted match) sit under their row, rail to rail as the pair does, and each asks a Dialog.Spokenh1 클럽 대항전 · h2 대기 중, 진행 중, 지난 대항전. A row: "대항전, 총 승수, 반포 한강 테니스와 대결, 9월 14일부터 28일, 2 대 1로 앞서는 중".RulingsReview 46 (M22, proposed): a 대항전 is an event between two clubs, so its row is the Feed item (library §5): both logos as the thumbnail, "대항전 | the rule" as the overline, "vs the opponent" as the title, the period and the days left (within 7 days) as the first facts, and the standing as the who row (2-1로 앞서는 중; 승 3-2 as a win; 받은 신청 as a task). The one trailing score and the 승, 패 and 받은 신청 Tags became the who row, which takes the footer’s place: no posted time. It cannot match a session fully: there is no venue, time, format or level to list. Accepting commits the club to a contest, so it asks a Dialog naming the opponent, and 거절 asks one too. Review 46 (M3, proposed): the record of the past challenges, 승 and 패, is a true summary, so the Strip keeps the tiles face; 진행 중 2 repeated the head under it and left. Review 46 (M28): the page was a dead end, so a row opens the club it names and the empty state carries the door to where a challenge is proposed. The cohesion pass (the owner, 2026-10-25): the summary family leads with a Section head over the Strip (전적); a 받은 신청 row is an answer a row asks for, so it carries the AnswerPair 수락 · 거절 (§1.18, a request between clubs) and never a press that accepts, so every row’s tap now opens the club it names; 지난 대항전 shows its rows and N개 더 보기 in place (4건 was drawn with two rows and no way to the rest).Batch C: propose, withdraw, cancel, settleRulings C3 to C9. Proposing is the page’s one new write, and the plan is its only wall: any club still receives and answers (ch-plan-receive). The form is a page, three answers and a preview line: 상대 클럽 (a Picker Cell into the club takeover over the discover feed, the viewer’s own clubs left out), 방식 (a Choice set of the two rules a head-to-head can decide: 총 승수 and ELO 상승; 승률 and 경기 수 stay readable on old rows, 경기 수 relabelled 출전 인원), 시작일 and 종료일 (Calendar Sheets: nothing before today, an end after the start, at most 90 days). Each refusal is one line on the field it is about and the form stays open: the same pair already has an open 대항전, a period over 90 days, an opponent that is gone, and, under the band, five proposals a day. 신청 취소 and 취소 are rail-to-rail tonal Buttons under their row (a row has no ⋯ and carries no small Button of its own); the server refuses a 취소 once a counted match exists and the page says so in a Dialog over itself. A running row keeps no 취소 once it has a counted match.The three settle states (C4)Running: the standing is the match tally (2-1, C2) and the rule decides the lead, so 뒤지는 중 can sit beside a tally in our favour. Ended and not frozen: 결과 확정 D-n as the deciding fact (7 days after the end date, the score-review window). Frozen: 승, 패 or 무 with the tally; 경기 없이 끝났어요 when no match counted (0-0, no winner); 취소됨. The page keys on settled and counted matches, never on scores above zero.

L3-23앨범

The club’s approved photos, newest first, grouped by the upload they came with.

앨범강남 라켓클럽
9월 정모 사진6장
일정 보기
8월 정모 후기6장
9:41
Ideal Approved photos by upload: each head opens its 일정 상세 or 게시글; 3-up, 2pt gaps, edge to edge
앨범강남 라켓클럽
아직 올라온 사진이 없어요
9:41
Empty No approved photos: no button, uploads live elsewhere
앨범강남 라켓클럽
9:41
Loading Gray squares at the same pitch
앨범강남 라켓클럽
사진을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read offers a retry
앨범강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not an empty album
앨범 · /clubs/[clubId]/album
Route/clubs/[clubId]/album, pushed from the hub’s album banner. ClubAlbumScreen.StackHeader 64 · 12 · per upload a Section head (72; 40 for the first: the upload’s name, its count 6장 and the door 일정 상세 or 게시글, each the title of the page it opens) and its PhotoGrid: 3 columns, full-bleed, 2 gaps, square tiles of (390 − 4) / 3 = 128.7 (a computed media size, exempt from the 4pt grid). No tab bar, no CTA.ReadsuseClubMedia(clubId, { approvalStatus: "approved" }); albumGridColumns and albumTileSize(contentWidth, 2); RemoteImage with the alt text or caption as its label.TapsA group’s door 일정 상세 → 일정 상세, 게시글 → 게시글 (review 46, M28: where the photos came from; §1.19: a door reads the title of the page it opens) · a tile → the photo viewer (not built yet: tiles are display-only today). Pull to refresh.Spokenh1 앨범 · a list of photos, each "사진 3 / 12" or its caption.RulingsA 3-up PhotoGrid with 2pt gaps and nothing in the margin: the grid is a full-bleed surface. Uploads live elsewhere, so the empty state has no button. A preview grid ends in a +N tile; this page is the full grid and does not. Review 46 (M28): the page was a dead end, a grid whose tiles pressed nothing, so the photos group by the upload (the unit the 클럽 홈 Feed already shows as one 사진 item) and each group’s head is the visible row that opens its source.

L3-50앨범 관리

The club’s photos for the officials: the ones waiting for an answer first, then the public ones with the 대표 사진 marked, then the ones turned down; a row opens its Sheet and the FAB adds a photo.

앨범 관리강남 라켓클럽
승인 대기2장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
사진
9:41
844 FOLD
Ideal 운영진: what waits first, answered on its row; the public photos with the 대표 marked; the FAB adds one
앨범 관리강남 라켓클럽
아직 올린 사진이 없어요사진을 올리면 승인한 뒤에 앨범에 보여요
사진
9:41
Empty First-run: the FAB is the action, so no button
앨범 관리강남 라켓클럽
9:41
Loading One skeleton at the media row pitch; the add button waits for the role
앨범 관리강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not an empty album
앨범 관리강남 라켓클럽
사진을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read offers a retry
앨범 관리강남 라켓클럽
운영진만 볼 수 있어요사진은 운영진만 관리할 수 있어요
9:41
Member No coloured action, no FAB: nothing can fix it here
앨범 관리강남 라켓클럽
앨범은 클럽 플랜에서 이용할 수 있어요
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
9:41
No allowance The plan has no gallery: a Notice, the photos stay readable, no FAB
앨범 관리강남 라켓클럽
사진 한도에 도달했어요기존 사진을 보관하거나 클럽 플랜을 업그레이드해 주세요
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
9:41
Limit reached The gallery is full: the Notice says the two ways out, no FAB
앨범 관리강남 라켓클럽
승인 대기4장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
사진
9:41
844 FOLD
Uploading Photos are on their way, several at once: they join 승인 대기 and the FAB waits
앨범 관리강남 라켓클럽
승인 대기2장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
사진
9:41
사진 설정
대표 사진
순서 (번째)
2
종류
갤러리일정 앨범
공개 범위
공개멤버만
사진 설명
9월 정모 후기
9/160
대체 텍스트
사진을 보지 못하는 사람에게 읽어 줄 설명
0/240
보관
저장
Sheet A row’s tap: 대표 사진 and 순서 as rows, the two texts as Fields, 보관 last in danger
앨범 관리강남 라켓클럽
승인 대기2장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
9:41
사진 설정
대표 사진
대표 3/3
순서 (번째)
2
종류
갤러리일정 앨범
공개 범위
공개멤버만
사진 설명
9월 정모 후기
9/160
대체 텍스트
사진을 보지 못하는 사람에게 읽어 줄 설명
0/240
보관
저장
Sheet 대표 is full: 대표 사진 is locked and says 대표 3/3; the photo keeps its kind
앨범 관리강남 라켓클럽
승인 대기2장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
9:41
사진을 거절할까요?거절한 사진은 앨범에 보이지 않아요
닫기거절
Dialog 거절 is danger and says the photo leaves the album
앨범 관리강남 라켓클럽
승인 대기2장
9월 정모 단체 사진
갤러리멤버만
승인
거절
코트 전경
갤러리공개
승인
거절
공개 중3장
앨범 보기
클럽 대표 사진
공개
대표
9월 정모 후기
갤러리공개
송년회
일정 앨범멤버만
거절됨1장
흐릿한 사진
갤러리공개
승인
9:41
사진을 보관할까요?멤버에게 더 이상 보이지 않아요
닫기보관
Dialog 보관 is danger and says members stop seeing the photo
앨범 관리 · /clubs/[clubId]/album/manage (officials)
Route/clubs/[clubId]/album/manage (proposed), pushed from 클럽 설정’s 모집 프로필 task Cell 앨범 관리 (which carries the count of photos waiting). Today it is GallerySection inside ClubSettingsScreen (club-settings-screen.tsx:390); 앨범 (ClubAlbumScreen) stays the members’ viewing page and says "Uploads live elsewhere" because of this one. Officials only (canManage).StackHeader 64 (back, 앨범 관리, the club) · 12 · 승인 대기 head 40 and its media rows 80, each with the AnswerPair under it (rail to rail, 12 below the row, then 36; 16 between photos) · 공개 중 head 72 with the Door pill 앨범 보기 › at its right, media rows 80 · 거절됨 head 72, media rows 80 with the sm Button 승인 at the end · the FAB tail (56 + 16 + 16) · FAB 사진 56 above the home inset. A Notice 48+ (12 above and below) leads the page in the two states without a FAB.ReadsuseManageClubMedia(clubId), which is useClubMedia with includePending (every approval state; the album page reads approvalStatus "approved" alone), grouped by approvalStatus and, inside a group, by sortOrder; 순서 is the photo’s place among the 공개 중 photos only, and one step of the Stepper swaps sortOrder with the neighbour above or below (the app’s moveMediaUp and moveMediaDown); kind (gallery, featured, event_album) and visibility (public, members_only) are line 2; useFeatureGate().entitlements.clubGalleryMax gives canUploadMedia, galleryLimitIsZero (no allowance: galleryUnavailableOnPlan) and the reached limit (galleryLimitReached), and clubFeaturedMediaMax bounds 대표 사진; useUpdateClubMedia (approve, reject, caption, altText, kind, visibility, sortOrder), useUploadClubGalleryMedia (the FAB: the picker takes several photos, then the upload; the app answers with galleryUploadQueuedCount, 사진 N장을 업로드했어요), useArchiveClubMedia (보관).TapsA pending photo’s 승인 publishes it at once (approvalStatus approved, approvedAt now) and the row moves to 공개 중; 거절 → Dialog "사진을 거절할까요?" → approvalStatus rejected · a rejected photo’s 승인 publishes it · any other row’s tap → the photo Sheet 사진 설정 (대표 사진; 순서 for a 공개 중 photo; 종류 and 공개 범위; 사진 설명, 대체 텍스트, 저장; 보관 → Dialog) · the Door pill 앨범 보기 › → 앨범 · the FAB 사진 → the photo picker (several photos at once), and each upload joins 승인 대기 · pull to refresh. A failed write is a Dialog or a helper, never a Toast.Spokenh1 앨범 관리. A row: "9월 정모 단체 사진, 갤러리, 멤버만", then its buttons "승인" and "거절" (named for the photo: "9월 정모 단체 사진 승인"). The FAB: "사진 추가".RulingsPending photos lead (§ 1.20: what waits leads the list as its first group, in the list’s own rows), then 공개 중 and 거절됨: three groups of one row type, the media row. A photo that waits is answered on its row (§ 1.18; 클럽 대항전’s 받은 신청 and 멤버 관리’s 가입 신청 are the precedent), so the pair is 승인 · 거절 under the row and the tap on the row opens the Sheet, whose rare commands (대표 사진, 순서, the two texts, 보관) are not a row of buttons: the app’s expanded row, its four pills (저장, 대표 사진, 승인, 더보기) and its action sheet are replaced by the one Sheet (§ 1.18). Rule 2 of § 1.22 orders the Sheet as gallery-section.tsx has its parts: the rows first (대표 사진 as a check row, 순서 as a plain Stepper that moves the photo one place at a time, within 공개 중 only, so a 거절됨 photo’s Sheet has no 순서), then the Fields (the 종류 and 공개 범위 Choice sets, 사진 설명, 대체 텍스트), then 보관. Un-checking 대표 사진 sends the photo back to the 갤러리 kind. When 대표 is full (clubFeaturedMediaMax) the row is locked and its line 2 says 대표 3/3, as the app disables its 대표 Choice, and the photo keeps its kind. 앨범 보기 › is the Door pill of the 공개 중 head, the page a member reads those photos on (§ 1.19: a door reads the title of the page it opens); the head’s count is plain, because the usage lines (갤러리 3/12, 대표 1/3) are meta (§ 1.16) and speak only when reached. No allowance on the plan is a Notice, not a disabled AddCard: nothing the official does here changes it, so it asks for nothing; a reached limit asks for attention and says the two ways out. Neither state has a FAB. The profile-completeness Well of the app’s section belongs to 클럽 설정’s 프로필 완성도 Cell, not to this list.

L3-24복식 파트너 추천

Members who suit the viewer as a doubles partner, best fit first, each with the number and the fact behind it.

복식 파트너 추천강남 라켓클럽
추천 순서
이서연
최근 20회 중 19회 참석
86점
강도윤
신뢰 91점
80점
박지훈
같은 편 15경기 12승 3패
76점
최유나
나와 ELO 51점 차
76점
한소희
나와 ELO 71점 차
69점
9:41
Ideal Best fit first: the number with its unit and the strongest factor’s fact; a row opens its score
복식 파트너 추천강남 라켓클럽
추천 순서
이서연
최근 20회 중 19회 참석
86점
강도윤
신뢰 91점
80점
박지훈
같은 편 15경기 12승 3패
76점
최유나
나와 ELO 51점 차
76점
한소희
나와 ELO 71점 차
69점
9:41
추천 점수
이서연
총점
86점 / 100점
실력 차이
나 ELO 1,482이서연 1,52341점 차
36/40
함께 친 기록
같은 편 12경기 9승 3패 (75%)
23/30
신뢰
신뢰 84점
13/15
출석
최근 20회 중 19회 참석
14/15
합계36 + 23 + 13 + 14 = 86
Sheet A row’s score: 86점 / 100점, four factors with their points and facts, the sum
복식 파트너 추천강남 라켓클럽
추천 순서
이서연
최근 20회 중 19회 참석
86점
강도윤
신뢰 91점
80점
박지훈
같은 편 15경기 12승 3패
76점
최유나
나와 ELO 51점 차
76점
한소희
나와 ELO 71점 차
69점
9:41
추천 점수
강도윤
총점
80점 / 100점
실력 차이
나 ELO 1,482강도윤 1,45230점 차
37/40
함께 친 기록
같은 편 3경기 2승 1패 (67%)3경기라 30%만 반영했어요
17/30
신뢰
신뢰 91점
14/15
출석
최근 20회 중 16회 참석
12/15
합계37 + 17 + 14 + 12 = 80
Sheet, few matches Three together: the Cell says how much of the record counts
복식 파트너 추천강남 라켓클럽
추천 순서
이서연
최근 20회 중 19회 참석
86점
강도윤
신뢰 91점
80점
박지훈
같은 편 15경기 12승 3패
76점
최유나
나와 ELO 51점 차
76점
한소희
나와 ELO 71점 차
69점
9:41
추천 점수
최유나
총점
76점 / 100점
실력 차이
나 ELO 1,482최유나 1,43151점 차
35/40
함께 친 기록
함께 친 적이 없어요기본 15점
15/30
신뢰
신뢰 84점
13/15
출석
최근 20회 중 17회 참석
13/15
합계35 + 15 + 13 + 13 = 76
Sheet, none yet No match together: the baseline 15 points, said so
복식 파트너 추천강남 라켓클럽
추천 순서
이서연
최근 20회 중 19회 참석
86점
강도윤
신뢰 91점
80점
박지훈
같은 편 15경기 12승 3패
76점
최유나
나와 ELO 51점 차
76점
한소희
나와 ELO 71점 차
69점
9:41
추천 점수 안내
100점을 이렇게 나눠요
실력 차이
ELO가 나와 같으면 40점, 400점 벌어지면 0점이에요
40점
함께 친 기록
같은 편으로 이긴 비율 × 30점이에요. 10경기보다 적으면 15점 쪽으로 당겨서 반영해요.
30점
신뢰
신뢰 점수 ÷ 100 × 15점이에요
15점
출석
최근 20회 중 참석한 비율 × 15점이에요
15점
친목 경기와 부전승은 계산에서 빼요
추천 점수 안내 The “?” after 추천 순서: the four rules, a line each, and what is left out
복식 파트너 추천강남 라켓클럽
추천할 파트너가 없어요클럽에 멤버가 더 모이면 다시 확인해 보세요
9:41
Empty A one-member club: calm text, no button
복식 파트너 추천강남 라켓클럽
9:41
Loading One skeleton at the person pitch
복식 파트너 추천강남 라켓클럽
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never “no partners”
복식 파트너 추천 · /clubs/[clubId]/partners
Route/clubs/[clubId]/partners, pushed from 기록’s 최고의 파트너 head (복식 파트너 추천 ›; it left the 멤버 pane, review 46, M10 and M16) and the 대진 flow (personal matchmaking, not an admin tool). PartnerSuggesterScreen.StackHeader 64 · 12 · Section head 추천 순서 40 with the Info hint “?” (a 20 glyph in a 44 target, 4 after the title) · PersonRow 68 with the Level slot (24) and the figure column (44 wide, “86점”). No tab bar, no CTA. The Sheet 추천 점수 (the kit’s Score Sheet): the person row, the 총점 tile 80 (“86점 / 100점”), four two-line Cells 68 (label, points, fact) and the sum as a labelled Caption row. The Sheet 추천 점수 안내 (the kit’s Explainer Sheet): four two-line Cells and a Caption row.ReadsusePartnerCandidates(clubId, userElo, 20): profile, score, breakdown (eloProximity / chemistry / trust / attendance, each with its maximum) and partnerHistory. Chemistry is the viewer’s rows of player_partner_records (usePartnerRecords: doubles and mixed, every club, a draw counts to neither side) and attendance is the profile’s globalAttendanceRate read as the 0-to-1 fraction it is (both fixed 2026-10-19, owner review 46 lane F; before, chemistry read the opponent ledger and attendance was always 0). strongestPartnerFactor picks line 2: the factor with the most points against its own maximum, chemistry only with a shared match, ties in the weight order. skillLabelForTier for the band.TapsA row → its Sheet 추천 점수 (read-only; × closes) · the “?” after 추천 순서 → the Sheet 추천 점수 안내 · the Sheet’s person row → 공개 프로필 (where 나와의 전적 is).SamplesThe viewer is 김민준, doubles ELO 1,482. 이서연 1,523 (41점 차: 36), 9승 3패 as teammates (75%: 23), 신뢰 84점 (13), 최근 20회 중 19회 참석 (14) = 86. 강도윤 3 matches together (2승 1패, blended to 17), 박지훈 15 matches (12승 3패: 24), 최유나 and 한소희 none (15). The data is typed once and every point, total, strongest factor and fact is derived from it with the rule’s own arithmetic.Spokenh1 복식 파트너 추천. A row: "1위, 이서연, 86점, NTRP 3.5, 최근 20회 중 19회 참석" (the one fact is line 2). The Sheet: "추천 점수, 이서연, 총점 100점 만점에 86점", then each Cell "실력 차이, 40점 만점 중 36, 나 ELO 1,482, 이서연 1,523, 41점 차". The “?” is a button named “추천 점수 안내”.RulingsReview 46 (M24). A row shows its number with its unit (86점) and its fact, never an adjective: the 궁합 caption row and the adjective reasons are gone, and the head 추천 순서 says what the order is. Line 2 is the strongest factor’s fact by the rule above, so 이서연’s row says 최근 20회 중 19회 참석 (her 14/15 beats her 23/30) while 박지훈’s says 같은 편 15경기 12승 3패. A row opens a Sheet and does not expand in place (four two-line Cells per candidate would bury the ranked list): the person, the 총점, four Cells that each give their points and the fact behind them (실력 차이 36/40, 함께 친 기록 23/30, 신뢰 13/15, 출석 14/15) and the sum (36 + 23 + 13 + 14 = 86). A fact about a person’s conduct is a count and never a percentage (M6): 신뢰 reads the score (신뢰 84점) and 출석 reads 최근 20회 중 19회 참석, while the points still read the 0-to-1 fraction; the one percentage is the pair’s win rate, a rate of matches. A small sample says so on the Cell: 함께 친 적이 없어요 | 기본 15점 with no match together, N경기라 N0%만 반영했어요 for one to nine (chemistry blends toward 15 until ten decided matches). The “?” after 추천 순서 (the Info hint, library §7: a 20 glyph in tertiary in a 44 target, spoken 추천 점수 안내) opens the four rules, in place of the text action 점수 안내 › the head drew before the kit had the glyph; the ELO Block’s 티어 안내 › and 신뢰 기록’s 점수 안내 › keep their doors (the owner accepted those drawings). A Sheet never opens over a Sheet, so the score Sheet carries no door to the rules. The same score serves 기록’s 최고의 파트너: a pair that includes the viewer opens the other member’s score, because the score is a person against the viewer; a pair of two other members keeps its record Sheet, and making the score a pair’s needs a decision. A 최고의 파트너 callout needs five matches together; the score counts from the first match and says how much of it counts. A candidate whose attendance rate is not known yet (under five sessions) scores a neutral 8 of 15 for 출석, as chemistry’s no-match scores 15 of 30: 참석 기록이 없어요 | 기본 8점 (the lead’s call; the code scores 0 today).

L3-35참석자 관리

Everyone in the session on one page of PersonRows, sectioned by what the host must do: money to confirm (a button on each row), money owed (a reminder on each row), the confirmed, the waitlist, the applications; a member sees names and times.

참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
844 FOLD
Ideal Host: each 확인 대기 row ends in 입금 확인, each 미납 row in 알림; no checkbox, no band; the Tabs go to 참석 확인
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
844 FOLD
Nothing to confirm 확인 대기 is empty: its group is absent; the reminder stays on the 미납 rows and their head
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기2명
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정4명
이서연
오늘 입금 확인
되돌리기
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
844 FOLD
Just confirmed 입금 확인 moved 이서연 to 참석 확정, where her row keeps 되돌리기; the heads count two and four
참석자강남 라켓클럽9월 18일 (금)
참석 확정8명
김민준
호스트
이서연
박지훈
게스트
최유나
한소희
19:30~21:00
강도윤
정
정우진
20:00~21:30
송
송가은
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
9:41
844 FOLD
Member Names and times only: two sections, every row opens the profile
참석자강남 라켓클럽9월 18일 (금)
입금 안내
낼 금액
10,000원
오늘 20:00까지
D-day
은행
카카오뱅크
계좌번호
3333-01-1234567
예금주
박총무
참석 확정8명
김민준
호스트
이서연
박지훈
게스트
최유나
한소희
19:30~21:00
강도윤
정
정우진 (나)
20:00~21:30
송
송가은
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
입금했다고 알리기
9:41
844 FOLD
Payer Who owes sees where to pay first: what is owed and when, then the copy row
참석자강남 라켓클럽9월 18일 (금)
아직 참석자가 없어요참석을 확정한 멤버가 여기에 모여요
9:41
Empty No one yet: calm text, no button
참석자강남 라켓클럽9월 18일 (금)
9:41
Loading One skeleton at the person pitch
참석자강남 라켓클럽9월 18일 (금)
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never an empty roster
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
참석자
정
정우진
오늘 20:00까지
입금 확인
참가비 면제
내보내기
Menu A 미납 row’s tap: the name row, 입금 확인, then the destructive group
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
참석자
임하준
예비 1번
참석 확정으로 올리기
내보내기
Menu A 예비 row’s tap: the name row, 참석 확정으로 올리기, then 내보내기
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
참석자 관리
정산 나누기
Header ⋯ About the whole session, not one person: split the cost
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
정우진님을 이 일정에서 내보낼까요?참석이 취소되고, 낸 참가비는 돌려줘야 해요
닫기내보내기
Dialog 내보내기 names the person and the consequence
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인 대기3명
이서연
9월 18일 21:30 신청
입금 확인
박지훈
9월 18일 22:10 신청
게스트
입금 확인
한소희
9월 19일 07:40 신청
입금 확인
미납2명
모두에게 알림 보내기
정
정우진
오늘 20:00까지
알림 보내기
김민준 (나)
오늘 20:00까지
호스트
참석 확정3명
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
정우진님의 참가비를 면제할까요?면제하면 정우진님은 참가비를 내지 않아도 돼요
닫기참가비 면제
Dialog 참가비 면제 is danger and names the person
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
참석 확정8명
이서연
9월 18일 입금 확인
박지훈
9월 18일 입금 확인
게스트
한소희
9월 19일 입금 확인
정
정우진
9월 19일 입금 확인
김민준 (나)
참가비 면제
호스트
최유나
9월 17일 입금 확인
강도윤
9월 17일 입금 확인
송
송가은
참가비 면제
첫 참석
예비2명
임하준
예비 1번
윤
윤채원
예비 2번
신청1명
오예린
1시간 전 신청
승인
거절
취소됨1명
문서진
참가비 유지
9:41
844 FOLD
Nothing due Nothing waits and nobody owes, before the session or after it: all eight are in 참석 확정
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
환불 확인이 아직 남았어요참석자에게 환불한 뒤 확인을 받아 주세요
환불 대기2명
이서연
9월 18일 입금
박지훈
9월 18일 입금
환불 확인됨1명
한소희
9월 19일 확인
9:41
Refunds A cancelled paid session: regrouped, no CTA
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
환불할 참가비가 1건 있어요보낸 뒤 환불받았다는 확인을 받아 주세요
취소됨2명
문서진
환불 대기
최유나
참가비 유지
9:41
Refunds, live A live session with refunds to send: the Notice leads; the open refund has no button, the kept fee is one tap from the exception
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
환불할 참가비가 1건 있어요보낸 뒤 환불받았다는 확인을 받아 주세요
취소됨2명
문서진
환불 대기
최유나
참가비 유지
9:41
참석자
최유나
참가비 유지
환불 대기로 바꾸기
Menu A cancelled seat whose fee was kept: the name row, then the host’s exception
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
환불할 참가비가 1건 있어요보낸 뒤 환불받았다는 확인을 받아 주세요
취소됨2명
문서진
환불 대기
최유나
참가비 유지
9:41
최유나님의 참가비를 돌려줄까요?늦은 취소라 받은 참가비 10,000원이 환불 대기로 바뀌고, 최유나님께 알림이 가요
닫기환불 대기로 바꾸기
Dialog The exception names the person, the amount and who is told
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
환불할 참가비가 2건 있어요보낸 뒤 환불받았다는 확인을 받아 주세요
취소됨2명
문서진
환불 대기
최유나
환불 대기
9:41
Refund opened Both refunds are open: the Notice counts two, and the seat can no longer be taken again
참석자 관리강남 라켓클럽9월 18일 (금)
참석자참석 확인
정산
총 비용
120,000원
참석 인원
8명
1인당 금액
15,000원
1인당 금액
15,000
원
정산 내역 만들기
9:41
정산 No fixed fee: set an amount, then make the rows
참석자 관리 · /sessions/[sessionId]/participants
Route/sessions/[sessionId]/participants, pushed from the roster’s 전체 보기 or its door and, for the host and officials, from the 관리 sheet. ParticipantsScreen, now with the fees of /sessions/[sessionId]/payments (SessionPaymentsScreen is this page’s 확인 대기 rows and its 정산 states); the title is 참석자 관리 for the host and officials, 참석자 for everyone else.StackHost: Header 64 (back, 참석자 관리, the session’s club and day; ⋯) · Tabs 48 (참석자 | 참석 확인) · 24 · 확인 대기 (the first head, 40; PersonRow 68, each ending in the sm Button 입금 확인), 미납 (head 72 with the tonal sm Button 모두에게 알림 보내기; each row but the viewer’s own ends in the sm Button 알림), 참석 확정 (a row confirmed on this visit comes first and ends in the sm Button 되돌리기), 예비, 신청 (PersonRow 68, with the AnswerPair 116), 취소됨 (at most one Tag, no Level tag). No CTA band. Member: Header 64 · 12 · 참석 확정 and 예비 (no money). A payer: Header 64 · 12 · 입금 안내 head 40 over the Strip, tiles face, 80 (낼 금액 10,000원, 오늘 20:00까지) · 20 · the copy row (은행, 계좌번호 with its copy icon button, 예금주), then the people · band 입금했다고 알리기.ReadsuseLiveSessionData(sessionId, { includeManagementProfiles }) → rsvps split by status; useSessionPayments(sessionId) joined to them (no new table: rsvps and session_payments), 확인 대기 first; usePaymentActions (attest, mark paid, waive); the bulk confirm is a new RPC modelled on mark_dues_paid_bulk with the payer exclusion of 00536; useSessionCapabilities: canManageSession, canRemoveParticipant, canAdmitWaitlist; useSessionApplications for 신청. A person with no recorded session carries 첫 참석 on a host’s or an official’s list only.TapsA 확인 대기 row’s 입금 확인 confirms that person at once: the row moves to 참석 확정 with the line 오늘 입금 확인 and its own 되돌리기; there is no Dialog and no Toast (the undo is on the row, and a Toast holds only the last of several quick confirmations); the page has no checkbox, no Select mode, no 선택 and no CTA band, and the 확인 대기 head has no bulk command (홈’s 입금 확인 task and the roster’s 전체 보기 open the same page) · a 미납 row’s 알림 보내기 reminds that person at once → Toast "정우진님에게 알림을 보냈어요"; the 미납 head’s 모두에게 알림 보내기 reminds every 미납 person but the viewer · a 확인 대기, 미납, 참석 확정 or 예비 row has no ⋯: its tap opens that person’s Sheet, the name row first (→ 공개 프로필), then for a 미납 person 입금 확인 (the transfer arrived without a report), for a 예비 person 참석 확정으로 올리기, and the destructive group last (참가비 면제 and 내보내기, each with its Dialog; a 참석 확정 person’s Sheet holds 내보내기 alone) · 승인 and 거절 answer an application in its row (승인 one tap, 거절 asks a Dialog); the row’s own tap opens 공개 프로필 · the header ⋯ → 정산 나누기 (a session with no fixed fee) · the Tabs: 참석 확인 → 참석 확인.Spokenh1 참석자 관리 · h2 확인 대기, 미납, 참석 확정, 예비, 신청, 취소됨. A 확인 대기 row: "이서연, 9월 18일 21:30 신청", then its button "입금 확인" (named for its owner: "이서연 입금 확인"); a 미납 row "정우진, 오늘 20:00까지", then "알림", and its tap opens the Sheet "참석자" with the name row first; a row confirmed on this visit "이서연, 오늘 입금 확인", then "되돌리기"; a member’s row "한소희, 19:30부터 21:00까지".RulingsReview 46 (M25): participants and fees are one page, because the host acts on the same eight people in both. The sections follow what the host must do, money first; each row’s fee state is its fact and a person is a Tag only where the row differs from its list (호스트 > 게스트 > 친구 > 예비 > 첫 참석). Owner review 49 (S3; the owner: “for pages like these where we have to check and respond to each individual, it might be best not to have a single CTA at the bottom ... in-line buttons at the end of the row”): the host decides about each person, so each 확인 대기 row ends in 입금 확인 and each 미납 row in 알림, and IA ruling 11’s bulk confirm and ruling 12’s ticked set retire with the checkboxes and the band. A confirmed row moves to 참석 확정 and keeps its own 되돌리기. The money pages have no bulk command, except that the 미납 head carries 모두에게 알림 보내기, the same tonal sm Button as 회비 관리’s. The cohesion pass (the owner, 2026-10-25: "I find the top summary rows under 참석자 page to be quite ugly (the top two rows below the navigation tab, tracking the count and fee). We should streamline our actions here as well"): the page opens on its first Section head, 24 under the switcher (§1.5), with no line of counts and no 참가비 Cell, because the heads say the counts and the fee is 일정 상세’s (§1.18). No Select mode and no band (never a soft band with a 정산 대기 helper); 정산 완료 is no longer a band, because after the session nothing is left to press. A row has no ⋯: its tap is the person’s Sheet. The words are §1.19’s: 확인 대기 · 미납, 알림, an admission 승인 · 거절. The header ⋯ keeps only 정산 나누기: 참석 확인 is the switcher’s and the reminder is the 미납 rows’ own. A cancelled paid session regroups by refund state with no CTA. The lime Level tag is not drawn on these rows: it shows only on a Roster cell, the Podium, the identity Block and a ranking row where a level run starts (library § 6; the owner: “no loud components scattered everywhere”). A money list is never stale as fresh. Managers see money; a member sees names and times (a window that differs from the session’s hours is the one time shown); a payer sees the account the way a member sees it on 클럽 홈’s 회비 pane: the head 입금 안내, two tiles, the copy row, the band, with no head note. Review 46 (M6): 첫 참석 is the neutral Tag for someone with no recorded session, on a host’s or an official’s list only. 신청 repeats 호스트 관리’s rows for a session that approves its guests; that page can fold in here. Review 46 (M28): 참석자 관리 and 참석 확인 are used one after another, who has paid and who has come, so they share a switcher; it is the kit’s Tabs, the nearest part, with each page keeping its own title in the header, and a member sees neither the Tabs nor 참석 확인.Refunds (F2, cut 2)Owner decision 6. A paid player who cancels at least 24 hours before the start (the server’s clock decides, at the instant of the cancel) opens a refund; a later cancel keeps the fee. 취소됨 therefore holds three kinds of seat on a live session: a refund open (환불 대기, nothing to press: the payer’s 환불받았어요 closes it), a fee kept (참가비 유지, neutral words) and, once the payer confirmed, 환불 확인됨. The kept row is the exception’s door: its tap opens the person’s Sheet, whose one command is 환불 대기로 바꾸기, behind a Dialog that names the person and the amount and says the person is told; the session host or a fee officer may make it, never the payer. A player the host removes is refunded whatever the hour. The Notice 환불할 참가비가 N건 있어요 leads the page while any refund waits, on a live session as on a cancelled one (where it reads 환불 확인이 아직 남았어요). There is no host “refunded” button. The 72-hour reminder in 알림 reads 환불 확인이 아직 남았어요 and names the refund, not a cancelled event.

L3-36참석 확인

Players check themselves in from 일정 상세, so this page shows the host only the exceptions: who has not come, who is late, and a button on each row (and 모두 확인 on the group) that confirms the ones who have.

참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
도착11명
모두 확인
정
정우진
20:00 도착
도착 확인
윤
윤채원
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
오예린
19:34 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
9:41
844 FOLD
Ideal 20:25, all eleven have come: nobody to check, and 모두 확인 on the head is the quick way
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
도착2명
이서연
18:55 도착
김민준 (나)
18:52 도착
9:41
Before the start 18:58, open since 17:00: arrivals stamp in and nobody is overdue, so there is nothing to confirm yet
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람1명
임하준
19:00 시작10분 지남
도착
불참
도착4명
모두 확인
최유나
19:03 도착
도착 확인
강도윤
19:01 도착
도착 확인
이서연
18:55 도착
도착 확인
김민준 (나)
18:52 도착
도착 확인
9:41
10 minutes in 19:10: the first person who has not come asks in their row; the four who have wait for 도착 확인
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
9:41
844 FOLD
With exceptions 20:15: two have not come, one came 12 minutes late, one has left; the other nine wait for 도착 확인, or one 모두 확인
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착8명
모두 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
김민준 (나)
18:52 도착
도착 확인
확인됨1명
정
정우진
20:00 도착
되돌리기
9:41
844 FOLD
Just confirmed 도착 확인 moved 정우진 to 확인됨, where his row keeps 되돌리기; the heads count eight and one
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
확인됨9명
정
정우진
20:00 도착
되돌리기
강도윤
20:00 먼저 감
되돌리기
송
송가은
19:52 도착
되돌리기
박지훈
19:31 도착
되돌리기
한소희
19:28 도착
되돌리기
임하준
19:12 도착12분 늦음
되돌리기
최유나
19:03 도착
되돌리기
이서연
18:55 도착
되돌리기
9:41
참석 9명을 확인했어요
844 FOLD
모두 확인 After 모두 확인: the Toast says how many; all nine moved to 확인됨 and each keeps its own 되돌리기
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
9:41
참석 확인
임하준
19:12 도착12분 늦음
시간 바꾸기
불참으로 표시
Menu A row’s tap: the name row, 시간 바꾸기, and 불참으로 표시 in danger
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
9:41
임하준님의 참석 시간일정 19:00~21:30
19:00~21:00
간단히 고르기
정시30분 늦게
일찍 가야 해요시간 선택
도착
19:00
떠나는 시간
21:00
저장
Window 시간 바꾸기: the window on the session’s hours, the shortcuts and the exact hours; 대진 짜기 reads it
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
9:41
도착
17
18
19
20
21
40
50
00
10
20
완료
Time selector A Picker Cell opens the shared time wheel; 완료 commits
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
송
송가은
19:52 도착
도착 확인
박지훈
19:31 도착
도착 확인
한소희
19:28 도착
도착 확인
임하준
19:12 도착12분 늦음
도착 확인
최유나
19:03 도착
도착 확인
이서연
18:55 도착
도착 확인
9:41
오예린님을 불참으로 표시할까요?표시하면 신뢰 점수에서 4점이 빠져요
닫기불참 표시
불참 불참 names the person and what it costs; 불참 표시 commits
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 참석자가 없어요참석을 확정한 멤버가 있어야 참석을 확인할 수 있어요
9:41
Empty No confirmed RSVPs: nothing to check
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
9:41
Loading One skeleton at the person pitch
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, never an empty roster
참석 확인강남 라켓클럽9월 18일 (금)
호스트와 운영진만 볼 수 있어요참석 확인은 호스트와 클럽 운영진만 할 수 있어요
9:41
Not an official A wall that cannot be resolved: no button
Check-inGangnam Racket ClubFri, Sep 18
AttendeesCheck-in
To check2
Yerin Oh
19:30 start45min past
Arrived
Absent
CY
Chaewon Yoon
20:00 start15min past
Arrived
Absent
Arrived9
Confirm all
WJ
Woojin Jung
20:00 arrived
Confirm
Doyun Kang
20:00 left
Confirm
GS
Gaeun Song
19:52 arrived
Confirm
Jihoon Park
19:31 arrived
Confirm
Sohee Han
19:28 arrived
Confirm
Hajun Lim
19:12 arrived12min late
Confirm
Yuna Choi
19:03 arrived
Confirm
Seoyeon Lee
18:55 arrived
Confirm
9:41
844 FOLD
English The heads read To check and Arrived; the buttons read Confirm and Confirm all; times and minutes stay short
참석 확인강남 라켓클럽9월 18일 (금)
참석자참석 확인
확인할 사람2명
오예린
19:30 시작45분 지남
도착
불참
윤
윤채원
20:00 시작15분 지남
도착
불참
도착9명
모두 확인
정
정우진
20:00 도착
도착 확인
강도윤
20:00 먼저 감
도착 확인
9:41
844 FOLD
200% The pair stacks and names and lines wrap; the buttons keep their label whole
참석 확인 · /sessions/[sessionId]/attendance
Route/sessions/[sessionId]/attendance, pushed from the 관리 sheet (참석 확인, with a count Tag of the 확인할 사람 rows) and from 참석자 관리’s Tabs. SessionAttendanceScreen; the session’s host and the club’s officials (isSessionHost or canManageClub). Players do not come here: they check themselves in from 일정 상세.StackHeader 64 (back, 참석 확인, the session’s club and day) · Tabs 48 (참석자 | 참석 확인) · 12 · Section head 확인할 사람 with its count (the first head; not drawn while nobody is overdue) · per person a PersonRow 116 (line 2 their start and the minutes past it; the AnswerPair 도착 · 불참 in the row) · Section head 도착 with its count and the tonal sm Button 모두 확인 at its right (from the start; before it the arrivals only stamp in and there is nothing to confirm) · per person a PersonRow 68 (line 2 the stamp, then 늦음 from ten minutes, or the time they left) ending in the sm Button 도착 확인: the first eight rows, then N명 더 보기 60 for the rest · Section head 확인됨 with its count, once a row is confirmed · per person the same PersonRow ending in the sm Button 되돌리기. No CTA band. At 200% text the pair stacks, names and lines wrap, and the buttons keep their label whole.ReadsuseLiveSessionData → filterConfirmed(rsvps), each with its window and its two stamps (rsvps columns leaves_at, available_until_round, checked_in_at and checked_out_at, new beside the arrival the table already has; wall-clock is canonical and a round derives from the actual round start). A player’s 도착했어요 and 먼저 갈게요 on 일정 상세 write checked_in_at and checked_out_at with the server’s time; this page reads them and takes no typed arrival. Lateness is checked_in_at against the window’s start, in minutes, and shows as 늦음 from 10 minutes (the 신뢰 점수’s −1, library § Trust). 확인할 사람 are the 아직 whose start passed 10 minutes ago or more (the same 10 minutes that makes 늦음), most overdue first; 도착 runs newest event first. useSessionAttendance(sessionId) stays the audit trail after the session (the 00444 derivation); computeUnresolvedAttendanceCount narrowed to the 확인할 사람 rows is the 관리 sheet’s Tag. useConfirmAttendance, widened so the player and the host both write the window (00433’s allow-list and confirm_attendance): attended for the person whose 도착 확인 is pressed (or for the group, 모두 확인; 되돌리기 clears it), no_show for a 불참; a host’s 도착 writes checked_in_at as the person’s own start. The page opens at the start minus 2 hours (the session_starting_soon cron, 00385) and runs to the end.TapsThe Tabs: 참석자 → 참석자 관리 · a 확인할 사람 row’s 도착 stamps the person’s own start (not now), so they count as on time, and being the host’s own answer it confirms them: the row moves to 확인됨 with its 되돌리기; its 불참 asks a Dialog that names the person and the cost (신뢰 점수에서 4점), and 불참 표시 takes the person off both groups · a row’s tap opens that person’s Sheet: the name row first (→ 공개 프로필), 시간 바꾸기 (→ the window Sheet: the window on the session’s hours, the shortcuts, the shared time selector and 저장), then 불참으로 표시 in danger last (a 확인할 사람 row’s Sheet leaves 불참으로 표시 out: its pair holds that answer) · N명 더 보기 opens the rest of 도착 in place · a 도착 row’s 도착 확인 confirms that person at once: the row moves to 확인됨 with its own 되돌리기, and there is no Dialog and no Toast, because the undo is on the row · the 도착 head’s 모두 확인 confirms the whole group and ends in a Toast, 참석 9명을 확인했어요, each row keeping its own 되돌리기; a later stamp joins 도착 · 되돌리기 puts the row back in 도착 · players check in on 일정 상세 (도착했어요, 먼저 갈게요) and set their own window there; nothing on this page is typed.Spokenh1 참석 확인. h2 확인할 사람 and 도착, each with its count. A row that has not come: "오예린, 19:30 시작, 45분 지남", then "도착, 오예린" and "불참, 오예린". An arrived row: "임하준, 19:12 도착, 12분 늦음", then its button "도착 확인" (named for its owner: "임하준 도착 확인"); its tap opens the Sheet "참석 확인" with the name row first. The 도착 head: "도착, 9명", then its button "모두 확인". A confirmed row: "정우진, 20:00 도착", then "되돌리기". The Dialog: "오예린님을 불참으로 표시할까요?". The Toast is a status: "참석 9명을 확인했어요".RulesThe page is the host’s view of the exceptions. Players check themselves in, so a host who touches nothing has every stamp confirmed by one press of 모두 확인. Exception-first: a person on time is a quiet row in 도착; a person who has not come 10 minutes after their own start asks in 확인할 사람, and that group is not drawn when it is empty. Lateness is computed, never typed: the stamp against the person’s own start, and the host’s 도착 stamps that start, so it can never make anyone late. The page has no band: a decision per person is answered on that person’s row (owner review 49, S3; “We should confirm each one’s participation, not a large CTA at the bottom”). Each 도착 row ends in 도착 확인; the head’s quiet 모두 확인 confirms the group (it is not money, so it states no sum); neither shows before the start, and a row that asks never blocks the others. A confirmed row moves to 확인됨 and keeps its own 되돌리기. 불참 costs points, so it always asks (the Dialog names the person); 도착 does not. 도착 shows eight rows and folds the rest behind N명 더 보기. The heads count their groups; no Strip repeats them (§ 1.18), and who was late reads on their row. No ⋯ on a row or in the Header: a row’s tap is the person’s Sheet (§1.18). The window lives in the Sheet 시간 바꾸기 and 대진 짜기 reads it: a player plays only inside their window and, outside it, is benched without taking a fairness slot (the engine change follows this drawing: availabilityMap becomes {from, until}, a per-round forecast, fairness per available round). Members see a permission wall; the wall has no Tabs (it is not the host’s page).StatesIdeal (all eleven here) · before the start (stamps arriving, nothing to confirm yet) · ten minutes in (the first person who has not come) · with exceptions (two have not come, one came late, one left) · just confirmed (a row in 확인됨 with 되돌리기) · after 모두 확인 (the Toast) · a person’s Sheet, the window Sheet, the time selector, the 불참 Dialog · empty, loading, cold offline, a wall · English, 200%.

L3-37호스트 관리

The pickup host decides who may join, applicant by applicant, in the row.

호스트 관리올림픽공원9월 19일 (토)
신청 대기3명
한소희
10분 전 신청
승인
거절
강도윤
35분 전 신청
승인
거절
임하준
2시간 전 신청
승인
거절
9:41
Ideal Three applicants: answer in the row, no band
호스트 관리올림픽공원9월 19일 (토)
신청 대기1명
한소희
10분 전 신청
승인
거절
9:41
One applicant The row’s own 승인 is the action
호스트 관리올림픽공원9월 19일 (토)
신청자가 없어요매치에 신청한 사람이 여기에 보여요
9:41
Empty First-run: nothing to do until someone applies
호스트 관리올림픽공원9월 19일 (토)
9:41
Loading One skeleton at the person pitch
호스트 관리올림픽공원9월 19일 (토)
신청 목록을 불러오지 못했어요연결을 확인하고 다시 시도해 주세요
다시 시도
9:41
Error A failed read says so: never “no applicants”
호스트 관리올림픽공원9월 19일 (토)
오프라인이에요연결되면 자동으로 다시 불러와요
다시 시도
9:41
Cold offline Nothing cached: offline, not an empty list
호스트 관리올림픽공원9월 19일 (토)
호스트만 볼 수 있어요매치를 만든 호스트가 신청을 승인해요
9:41
Not the host Only the creator decides: a wall, no button
일정을 찾을 수 없어요삭제됐거나 주소가 바뀌었어요
경기 보기
돌아가기
9:41
Not found A session that is gone: 경기 보기, then 돌아가기
호스트 관리올림픽공원9월 19일 (토)
신청 대기2명
강도윤
35분 전 신청
승인
거절
임하준
2시간 전 신청
승인
거절
9:41
한소희님을 승인했어요
Toast 승인 is one tap: the row leaves, a seat and a push follow
호스트 관리올림픽공원9월 19일 (토)
신청 대기3명
한소희
10분 전 신청
승인
거절
강도윤
35분 전 신청
승인
거절
임하준
2시간 전 신청
승인
거절
9:41
한소희님의 신청을 거절할까요?거절하면 신청자에게 알려 드려요
닫기거절
Dialog 거절 is danger and names the applicant
호스트 관리 · /sessions/[sessionId]/host
Route/sessions/[sessionId]/host, pushed from the host’s 관리 sheet on a pickup and from the pending-applicants Notice on 일정 상세 (review 46, M28: the host is told on the page they look at, and the Notice opens this one). PickupHostDashboardScreen; only the person who created the pickup (createdBy === viewer).StackHeader 64 (back, 호스트 관리, the pickup’s venue and day) · 12 · Section head 40 (first) · request row 116 (name, when, the pair). No band.ReadsuseLiveSessionData; useSessionApplications(sessionId) filtered to pending; useProfilesByIds for the names; formatRelativeTime for line 2; useDecideGuestApplication (approved or rejected).TapsA row → the applicant’s 공개 프로필 · 승인 and 거절 answer in the row: 승인 is one tap (a Toast, the row leaves), 거절 asks a Dialog naming the person (§1.19, an admission).Spokenh1 호스트 관리 · h2 신청 대기. A row: "한소희, 10분 전 신청", then "승인, 한소희" and "거절, 한소희".RulingsRequest rows: the AnswerPair is two sm tonal Buttons under line 2 and a tap on the row opens the profile. The cohesion pass (the owner, 2026-10-25): the band 전체 승인 goes, because the rows’ AnswerPairs are the job and a band that repeats them is a second home for one action (§1.18); 승인 is one tap and 거절 asks a Dialog, as on 가입 신청 (§1.19). A failed read is an error, never "no applicants". A host who did not create the pickup meets a wall.
Spec (grounding, anatomy)

Page board for the first half of the list routes, composed from the shared flat v2 kit. Frames only; specs behind the toggle.

route · packages/features/clubs/src/club-list-screen.tsx · packages/features/activity/src/activity-screen.tsx · packages/features/home/src/notification-center-screen.tsx · packages/features/messaging/src/dm-inbox-screen.tsx grounded in 86 source file(s)
packages/features/clubs/src/club-list/club-feed-row.tsxpackages/features/clubs/src/club-list/club-row-model.tspackages/features/clubs/src/club-list/club-relation.tspackages/features/clubs/src/club-list/my-clubs-sections.tspackages/features/clubs/src/club-list/my-clubs-pane.tsxpackages/features/clubs/src/club-list/discover-pane.tsxpackages/features/clubs/src/club-list/club-filter.tspackages/features/clubs/src/club-list/club-create-fab.tsxpackages/features/clubs/src/shared/offer-waiting-tag.tsxpackages/features/clubs/src/club-members/guests/proposed-row.tsxpackages/features/clubs/src/club-list-screen.tsxpackages/features/activity/src/activity-screen.tsxpackages/features/activity/src/shared/filter-groups.tspackages/app/src/presentation/components/sessions/venue-finder.tsxpackages/app/src/presentation/components/sessions/directory-venue-card.tsxpackages/features/home/src/notification-center-screen.tsxpackages/features/home/src/notification-center/notification-row.tsxpackages/features/home/src/notification-center/use-notification-center.tspackages/features/messaging/src/dm-inbox-screen.tsxpackages/features/clubs/src/club-members-screen.tsxpackages/features/clubs/src/club-members/member-row.tsxpackages/features/clubs/src/club-members/members-list.tsxpackages/features/clubs/src/club-members/applicant-row.tsxpackages/features/clubs/src/club-members/guest-row.tsxpackages/features/clubs/src/shared/guest-picker-modal.tsxpackages/features/clubs/src/join-review-detail-screen.tsxpackages/features/clubs/src/club-dues-screen.tsxpackages/features/clubs/src/club-dues/page/dues-list.tsxpackages/features/clubs/src/club-detail/dues-pane/member-dues-view.tsxpackages/features/clubs/src/club-dues/page/dues-person-row.tsxpackages/features/clubs/src/club-detail/dues-pane/attest-sheet.tsxpackages/features/clubs/src/club-sessions-screen.tsxpackages/features/clubs/src/club-attendance-screen.tsxpackages/features/clubs/src/club-reports-screen.tsxpackages/features/clubs/src/club-venues-screen.tsxpackages/features/clubs/src/club-challenges-screen.tsxpackages/features/clubs/src/club-challenges/challenge-dialogs.tsxpackages/features/clubs/src/club-album-screen.tsxpackages/features/clubs/src/partner-suggester-screen.tsxpackages/features/sessions/src/participants-screen.tsxpackages/features/sessions/src/participants/participant-person-row.tsxpackages/features/sessions/src/session-attendance-screen.tsxpackages/features/sessions/src/pickup-host-dashboard-screen.tsxpackages/app/src/presentation/hooks/queries/use-session-payments.tspackages/app/src/domain/entities/session.entity.tspackages/app/src/domain/session-info-model/payment-gate.tspackages/features/clubs/src/club-regular-meets/regular-meets-page.tsxpackages/features/clubs/src/club-regular-meets/regular-meet-editor-page.tsxpackages/features/clubs/src/club-regular-meets/repeat-sheet.tsxpackages/features/clubs/src/club-regular-meets/time-sheet.tsxpackages/ui/src/sheet.tsxpackages/features/clubs/src/club-groups/group-sheet.tsxpackages/features/clubs/src/club-groups/regroup-sheet.tsxpackages/features/clubs/src/club-album-manage/club-album-manage-page.tsxpackages/features/clubs/src/club-album-manage/photo-item.tsxpackages/features/clubs/src/club-album-manage/photo-sheet.tsxpackages/features/clubs/src/settings/use-club-image-pickers.tspackages/features/clubs/src/shared/club-page-state.tspackages/features/clubs/src/club-manage-host/use-club-host.tspackages/features/clubs/src/shared/club-gate-view.tsxpackages/features/clubs/src/club-regular-meets/club-regular-meets-screen.tsxpackages/features/clubs/src/club-groups/club-groups-screen.tsxpackages/features/clubs/src/club-groups/groups-list.tsxpackages/features/clubs/src/club-album-manage/club-album-manage-screen.tsxpackages/features/clubs/src/club-album-manage/use-album-page.tspackages/features/clubs/src/club-album-manage/use-album-upload.tspackages/features/clubs/src/club-album-manage/use-album-writes.tspackages/features/clubs/src/club-album-manage/album-manage-model.tspackages/features/clubs/src/club-members/guest-roster-section.tsxpackages/features/clubs/src/club-members/guests/roster-lists.tsxpackages/features/clubs/src/club-members/guests/roster-model.tspackages/features/clubs/src/club-members/guests/use-guest-roster.tspackages/features/clubs/src/club-members/guests/use-guest-actions.tspackages/features/clubs/src/club-settings-screen.tsxpackages/app/src/presentation/utils/recurrence-format.tspackages/app/src/domain/rules/club-groups.rules.tspackages/app/src/domain/entities/club-group.entity.tspackages/app/src/presentation/hooks/queries/use-club-regular-meets.tspackages/app/src/presentation/hooks/queries/use-club-groups.tspackages/app/src/presentation/hooks/queries/use-club-media.tspackages/app/src/presentation/hooks/mutations/use-regular-meet-mutations.tspackages/app/src/presentation/hooks/mutations/use-club-group-mutations.tspackages/app/src/presentation/hooks/mutations/use-club-media-mutations.tspackages/features/clubs/src/settings/info-group.tsxpackages/features/clubs/src/settings/join-group.tsxpackages/app/src/presentation/hooks/use-share-club-invite.ts