Owner review 39 — three 소식 kinds, your sessions in 일정; 기록, 프로필 and 클럽 홈 composed (2026-10-16)
Status: Superseded in part — 클럽 홈 became one Feed (no 다음 일정, no 일정 pane) and 최고의 파트너 became 파트너와 천적 in review 41 · Date: 2026-10-16
Answers:
- "Why can't 일정 include sessions you've joined? All sessions that relevant to you (joined, upcoming in 번개 in your interested courts/areas and upcoming in clubs you've joined or participating as guests) should be included on 일정. Let's streamline the kinds and decide on what belong to where so that we can aggregate the relevant items correctly into each kind."
- "And let's start working on the rest of the pages in the hub."
Board: flat-v2-hub § 홈 ("Filtered: 일정", the 소식 kinds spec), § 기록, § 프로필, § 클럽 홈. Library: §1.14 (per page; added in review 39), §5 Feed item (Kinds, Where each kind lives, Order).
Your sessions are in 일정
Agreed; review 38's "일정 shows only what you could still join" is reversed. A session you join stays in 소식, and its deciding fact becomes your state: "내일 09:00 | 참석". 참석 and 호스트 are in successText; 예비 n번 and 입금 전 are in warnText, because each still asks something of you.
The 일정 filter runs by when the session happens, soonest first. A schedule ordered by posted time would put next month's session above tomorrow's. 전체, 결과 and 게시글 keep the posted-time order. The next session also stays in the Block; the overlap is accepted.
The kinds, streamlined to three
The data model was traced first: what writes each kind and what has no writer. Each kind now gathers by one rule.
| Kind | Labels (the overline) | Gathers |
|---|---|---|
| 일정 | the session's event_type: 일정, 번개, 대회, 리그, 대항전 | Every upcoming session that concerns you: the ones you are in (member, guest or 번개), your clubs' sessions, sessions of a club you are a standing guest of that are open to guests, and open 번개 at your saved courts or in your play regions (within your level band when set) |
| 결과 | 경기 결과 | One item per session from your 일정 when its record closes |
| 게시글 | 공지, 자유, 경기후기, 소개 (the board categories); 사진 (album) | Your clubs' posts and album uploads |
The filter is 전체 · 일정 · 결과 · 게시글. That is four values instead of five. 번개 is a session, so it is a label inside 일정 rather than a kind of its own.
Where the data model changed the kinds:
- 번개 is a session. A 번개 is a
sessionsrow hosted by the host's own pickup club (event_type = 'pickup', migration 00657), so it belongs in 일정. - 대회 is a session with a bracket. In the app, a 대회 is a session that carries a tournament (
event_type = 'tournament'). The district association's tournament drawn earlier ("송파구청장배") has no data source: nothing ingests external tournaments. It is removed. - 교류전 is removed. No model joins two clubs in one session.
inter_club_challengesis a stat contest over a date range, and the app's label forinterclubis 대항전. A 대항전 is just a session one club labels. - The board's own category labels are used: 자유, 경기후기 and 소개 (
club_posts.category), not 게시글 and 후기. - The automatic session posts never show (session_created, series and updated): the 일정 item stands for the session.
- Club events are not drawn.
club_eventsis wired to the registry but has no screen; it is flagged for a decision.
Where each kind lives:
| Kind | 홈 | 클럽 홈 | 경기 | 기록 |
|---|---|---|---|---|
| 일정 | the Block (your next game); 소식 | 다음 일정 (three, this club); the 일정 pane | 예정 (yours only, by day); 번개 찾기 (every 번개) | none |
| 결과 | 소식 | 소식 (this club) | none | your matches, its Feed |
| 게시글 | 소식 | 소식 (this club) | none | none |
경기 › 예정 narrows to your own sessions. Review 27 had it list your sessions plus your clubs' unanswered ones; those now live in 소식's 일정. This is open to veto.
Not yet in code:
- No single query for your guest sessions.
useMyParticipatingSessionsalready covers sessions you joined as a guest. Sessions of a club you are a standing guest of need a query, as does a per-session result summary (n경기, 최다승). - 번개 by interest is filtered on the client today.
기록, composed
- Lead: the ELO Block, complete. It holds the rating, its 30-day line (a sparkline at the right of the figure, under it from 1.5×), the tier bar and "최근 30일 +94 | 마스터까지 518점". The trend chart section is gone.
- Modules:
- 전적: the Strip (총 경기, 승률, 연승) and the 12-week activity grid, with the door 분석 ›.
- 랭킹: you between the player above and the player below. The scope (클럽 · 친구 · 지역 · 전국) is the Module's Choice, and 전체 보기 opens 리더보드.
- 최고의 파트너: three faces side by side with the win rate.
- Feed: 경기 기록, your matches newest first (ResultRow), with the filter in its head.
- What moved:
- The page-level scope Tabs: they changed only the ranking, so the scope moved into that Module.
- Personal bests, win rate by format, 상대 전적 and 연습 기록 are behind 분석 ›.
- 내 성적표 공유 is 기록's header icon.
프로필, composed
- Lead: the identity Block, a statement with no press.
- Modules:
- 신뢰: the head names the tier, 등급 안내 › opens the explainer, and the note names the most-given manner tag. Under it, a Strip: 출석률, 연속 참석, 매너 태그.
- 친구: the avatar row.
- 업적: three badges side by side.
- No Feed.
- What left: the match Strip and 최근 경기 (they are 기록's), the 받은 매너 태그 rows (folded into 신뢰), and the end group (moved to 기록).
- The public profile on the detail board keeps the match summary for other viewers. It is redrawn to this composition when the detail pages are done.
클럽 홈's 홈 pane, composed
- Lead: the MediaBand (the club's album) and the hero.
- Panes: the six Tabs.
- Module 다음 일정: this club's next sessions as Feed items, three at most. The source is the host, and your own carry 참석.
- Feed 소식: this club's 결과 and 게시글 in the same Feed item as 홈.
- A pinned notice comes first, labelled 고정 공지.
- Inside the club the source is the author, and a post with no photo shows the author's face. A club tile would repeat on every row.
- The filter is by label (전체 · 공지 · 자유 · 경기후기 · 소개 · 사진 · 경기 결과; 운영진 for officers), a value Sheet.
- Reactions and the post's commands are on a long press.
- The 사진 Shelf is removed: the MediaBand is the album.
The grammar gains five lines (library §1.14, added in review 39)
- A Feed of one kind uses its own row; mixed kinds use the Feed item.
- A scope that changes one question belongs to that Module, not to page Tabs.
- Two neighbouring Modules never share a form, and side-by-side forms reflow to rows from 1.5×.
- The Lead absorbs its own detail.
- A page holds only what is its own.
Checked:
- 200% and dark frames are drawn for 기록 and 프로필.
- The board verifier passes every board.
- The flows board finds every tap.