Skip to content

Owner review 41 — the club follows 홈's grammar; non-members see the same page; partners and nemeses woven (2026-10-16) ​

Status: Active · Date: 2026-10-16

Answers:

  • "I like the blocks and keep the trend line."
  • "Clubs should follow the same grammar as home, having all club related feeds aggregated under a single feed list, including all sessions."
  • "And no more onboarding missions in the club tab. Non members see the same club page, but just the home tab, publicly available photos and session feeds."
  • "I do hope that we can have not just best partners but also worst enemies. That means h2h results in singles and doubles are tracked as well as your best partners. How can we weave them together?"

Boards:

  • flat-v2-hub: § 클럽 홈 and § 기록.
  • flat-v2-detail: § 선수별 전적. § 클럽 미리보기 is removed.
  • flat-v2-flows: flow 2, the browse path.

Library: §1.14 (per page; added in review 41); §5 Feed item (where each kind lives; the club filter); PersonRow context people.

Settled ​

  • Blocks: every Block stays at three rows (review 40), approved.
  • Trend line: the ELO Block keeps its 30-day line, and the tier bar stays out.

클럽 홈 under 홈's grammar ​

One Feed, sessions included. The club's 홈 pane is now its 소식, a single Feed in the same Feed item as 홈. It holds:

  • the club's sessions (일정, 대회, …), with your state on the ones you are in;
  • 결과;
  • 공지, 자유, 경기후기, 소개 and 사진.

A pinned notice comes first as 고정 공지; then everything runs newest first. The filter matches 홈's (전체 · 일정 · 결과 · 게시글) and then offers the board's categories. Filtered to 일정, the Feed lists the sessions soonest first.

What leaves:

  • The 일정 pane. The Tabs are 홈 · 채팅 · 순위 · 멤버 · 회비; officials still manage sessions in 관리 › 일정 관리.
  • The 다음 일정 Module.
  • The onboarding missions (시작 미션). A new member lands on the same Feed.

The FAB creates. A member gets 글쓰기. An official gets 만들기, which asks 일정 만들기 or 글쓰기, because the 일정 pane that carried their 일정 FAB is gone.

A non-member sees the same page ​

The separate 클럽 미리보기 page retires; a non-member opens /clubs/[clubId] itself:

  • Lead: the band (the public photos) and the hero ("마포구 | 멤버 28명 | 월 2회").
  • No Tabs: there is one pane.
  • Feed: only the public sessions and the public photos, with no names (counts, never names; the overline drops the host). A session opens 번개 미리보기, where they can apply as a guest.
  • The join action, pinned. Its wording follows the join policy:
    • open: 가입하기;
    • approval: 가입 신청하기, which opens one Sheet with an optional intro;
    • invite only: 초대 코드로 가입하기;
    • pending: disabled, with its reason;
    • rejected: 다시 신청하기.
  • The dues sit in the helper ("월 회비 30,000원").

The flows board's browse path now ends on this page.

Partners and nemeses, woven ​

The model: one person, two records. Everyone you have played has up to two records with you:

  • 같은 편: as your partner, doubles only.
  • 상대: as your opponent, in singles or doubles.

Three places show it:

  1. 기록, the Module 파트너와 천적:
    • 최고의 파트너 | 복식: the three you win most with.
    • 천적 | 단식과 복식: the three you lose most to.
    • Each: a face, your win rate and the record (a nemesis says its format: "단식 2승 6패").
    • Minimum: five matches each, so a 1-0 never tops a list.
    • The door: 선수별 전적 ›. From 1.5× each trio becomes rows.
  2. 선수별 전적 (was 상대 전적; /records/analysis/rivals): everyone, both records per person ("같은 편 9승 5패 | 상대 3승 2패", the matches played as the figure).
    • Callouts: 최고의 파트너, 라이벌, 천적 and 최다 대결.
    • The format Choice (전체 · 단식 · 복식) leads the page. Under 단식 the partner record and its callout leave.
  3. The definitions:
    • 최고의 파트너: the best win rate together, at least five matches.
    • 라이벌: the most matches among records within 40–60%.
    • 천적: the lowest win rate against, at least five matches.
    • 최다 대결: the most matches against.
    • Draws are left out of every rate.

Data owed:

  • No singles/doubles split. player_matchups (one row per opponent per club: matches, wins, losses, last played) has no format column, so singles and doubles cannot be told apart yet.
  • Partners exist only on the phone. They are computed client-side (computePartnerStats).
  • Proposal: add format to player_matchups, and add a partner aggregate beside it (player, partner, club, wins, losses, last played). The same match trigger writes both.

Changes ​

  • Hub board:
    • the club: five panes, one Feed, HubPgClubPins with 만들기 and the join band, and a non-member group (open, approval, invite, pending, rejected, the apply Sheet);
    • the officer's 만들기 Sheet;
    • 기록's HubRecPeople.
  • Kit: the PersonRow context people (with, against).
  • Detail board: 선수별 전적 rebuilt; 클럽 미리보기 removed.
  • Flows: the browse path ends on the non-member club page.
  • Docs: the IA doc, the board contract and the library.
  • Checked: the board verifier passes every board, and the flows board finds every tap.

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