웹 공유 페이지 · /s /m /p /lb /join-club
The ruleSame as the in-app preview: the thing and its counts, never a person. On the open web nothing about people shows at all, and the street address, map, free text and the invite code stay out. Every link has one action.The cardThe share card is the page’s own Block drawn as an image: a full-bleed ink field #15181A (a card is not themed), the Block’s three rows scaled ×3.43 to 1200 × 630 (A the eyebrow 44/60·600 white α0.8 with the lockup 44 high at its trailing end, in the door’s place, since a card is not pressed; B the one figure 140/150·700 in ball, its unit 52·600 white; C one line 52/72·500 white α0.85; 72 of padding; all text inside the centred 1200 × 600 frame Kakao crops to). Drawn here at 350 wide with the Block’s own type roles at 1x, so what you see is the in-app Block without its door. No photo, map tile, face, emoji or progress ring, and one ball item. Only facts that cannot go stale are on the image: Facebook re-scrapes after 24 hours and Kakao caches without a stated limit, so a live count or status belongs on the page and, as a send-time snapshot, in the Kakao description. A place crops with an ellipsis; a person’s name wraps and is never cut. The Block’s accessible name is the image’s alt. The lockup slot holds the lockup the app draws today (the mark and the DABUSI wordmark; the kit’s lockup draws the mark’s slot until it is filed).Cards, by link/s the 홈 day Block, stranger edition: A club | day, B the start time, C venue | level; a cancelled session puts the Tag 취소됨 beside the lockup and B says 취소된 일정. /m the match Block without its teams: A day | venue (the place crops, so it goes last), B the score, C club | format; 검토 중 beside the lockup keeps the score, 기록 제외 replaces the numerals. /p the 기록 ELO Block, the person’s: A 복식 ELO | name (the eyebrow names the figure; the name goes last so a long one wraps, never cuts), B the rating, C NTRP | the as-of date; no 30-day line (live data), no session count, no 신뢰 점수 (the page’s rows hold it). /lb the season Block: A club | 클럽 순위, B the member count and 명, C region in words | 활동 멤버 (never a slug). /join-club the club-identity Block: A 클럽 초대 and the lockup, the club’s mark with its name (two lines, never cut), C region | level | members; no code, no ball figure.Kakao feedEvery link is sent as a feed: the card at Kakao’s 2:1 crop (15 px of ink trimmed top and bottom of 630; Kakao accepts 1:1, 2:1 and 4:3 and crops anything else), a title of up to 2 lines, a description of 2 lines, and one button of 8 characters or fewer that names the page it opens (일정 보기, 결과 보기, 프로필 보기, 순위표 보기, 가입하기; §1.19). The send-time seat count may live in the description, never on the image. Drawn at 300 wide with the Block’s roles at 1x; in KakaoTalk the bubble is about 272 wide and the card’s type renders at 10 / 32 / 11.8. Version the image URL (?v=) and send a real feed before launch.StackA server page (the metadata, the card and the status) over a client island that draws the page in the browser, in Korean only: the lockup slot 28, 24, the card as the hero (350 × 184, r16, with an alt), 24, h1 24/32·700, 8, one line of the club and the district, 24, the live facts as Cells (status as a Tag, seats left, fee, approval mode, level, deadline: for the page, never the image), 32, the one ball link lg 52. /lb leads with the club’s row (mark, name, region, level, members) in place of the h1. /join-club is the app screen on a public path: header, the club’s row (the MediaRow, as 클럽 가입하기), two Cells, CTA band; the full state adds the Notice 정원이 다 찼어요 under the row, 8 below it, and draws no band.Fields, /sShows: venue name (a linked venue only; otherwise the district), the district, the club (a pickup has none), day and start–end time, format and style, level band, seats as a count with the spots left, the recruitment state as one derived Tag beside the seats (6/8 reads 마감 임박; never hand-set), the deadline, the fee and the approval mode. A cancelled or finished session shows only 일시 and its state (취소됨 or 종료), no seats or terms. Never: street address and map (the app, after sign-in), host name, 신뢰 점수 or face, roster, the host’s free text.Fields, /mShows: venue (linked only), club, day, format and the score, neutral with no winner emphasis. The link card and the link’s description read the finish in Seoul time (one image for every viewer); the page’s 날짜 row reads the visitor’s own day, as the app does. For a device in Korea the two agree; outside Korea the card says Seoul time by design. Under review: the Tag 검토 중; not counted: the Tag 기록 제외 and no numerals. Never: team names, faces, ELO changes, set scores, the word 분쟁.Fields, /pShows: the display name (a nickname, never the legal name; it wraps), the doubles ELO labelled as such, the NTRP derived from it, the 신뢰 점수 as 84점 (none before five recorded sessions; a stranger sees the score only), the as-of date. No photo and no initials monogram: the one page whose subject is a person shows the name alone (a face never reaches an anonymous viewer). Never: total sessions, win rate, attendance, region, club.Fields, /lbShows: the club’s name, region and district in words (mapped from the slug), the active member count, the level band and the join method, and the logo or the mono initial (a club logo is not a face). Never: member names, ranks, ELO, win rates, an admin’s name, the description.Fields, /join-clubShows: the club’s name and mark, region and district, the level band, the member count, the join method (바로 가입, 승인 후 가입 or 초대 전용) and the monthly dues. A full club shows the Notice and no band. Never: the invite code on the image, in the meta tags or in the page text (a bearer secret on a forwardable image; it stays in the URL), the admin, members, the description. A wrong, an expired and an archived code read the same, 초대 링크를 열 수 없어요, so the page is no way to test codes; the reader is rate-limited.Taps앱에서 열기: twomore://{kind}/{id}; with the app installed the universal link never reaches the page. 로그인하기 (a signed-out /join-club): /login with the code and returnTo kept (the join follows on the page it returns to). A signed-in non-member on /s applies in the app (참석 신청하기). The club’s row opens its 클럽 홈. No store link and no universal-link logic are built: the door is the app’s scheme alone until the stores list the app (EXT-8) and the domain is live (EXT-13). /join-club for a signed-out visitor (jn-*) is owed (W12).SpokenThe title is the h1 (/lb has none: the club’s row leads, as drawn); the card’s alt is the Block’s rows read aloud, composed by the app from the same lines as the image (the figure spoken: 6대 4, 42명; the state Tag last unless the sentence says it); the link reads “앱에서 열기”; the page has exactly one main landmark and lang ko.NeedsFor the lead, nothing is built: get_public_share_preview gains the fee, approval mode, pickup flag, venue district and the match’s venue, format and day, and returns a linked venue name only; a new anonymous, minimal, rate-limited reader for the invite (the whole clubs row never leaves); /join-club becomes a server shell with generateMetadata and an opengraph-image; per-route robots noindex on /s /m /p /lb /join-club; og:image width and height; and today’s cards lose the 분쟁 word, the session count and the raw tier key on /p (the person’s trust reads as the 신뢰 점수), and the raw region slug on /lb.Open decisionsD1 the card is the Block, full-bleed ink with the lockup in the door’s place (recommended), against a white card with the Block inset (what the earlier frames drew: a card inside a card). D2 no live count on the image (recommended; the option is a 6/8 ring on /s, accepting a stale image). D3 the fee shows on the page, not the image (recommended), or hides until sign-in. D4 dues and join method show on the invite page (recommended), or name, region and member count only. D5 /lb stays a public club teaser (recommended), or folds into the club’s public view and stops being shared. D6 the host on the signed-in preview, as in 공유 링크. D7 names in share text: out of the /lb message, a sender’s choice on /m. D8 a revocable token in place of the raw user id in /p/{userId}: later, or before launch.