Skip to content

TwoMore Platform Architecture — Features, Trust, Subscriptions ​

Status: Reference — Final Draft Date: 2026-04-04 Source of truth for: feature gating, subscription plans, trust system, revenue model Related: rating-system-summary.md · attendance-and-reviews.mdCode: subscription.entity.ts (plans, pricing, helpers)


Guiding Principle ​

Four independent systems, one unified experience:

SystemWhat It MeasuresHow EarnedWho Benefits
ELO Rating (실력)Skill levelPlaying matchesPlayer (matchmaking, leaderboard)
Trust Tier (신뢰)ReliabilityShowing up, manner tagsCommunity (social proof)
Individual Plan (개인 구독)Personal toolsPlayer paysThe player
Club Plan (클럽 구독)Club tools총무 paysAll club members

Never merge them. A free 새싹 with high ELO is valid. A paying 베테랑 with low ELO is valid. Mixing trust with payment creates pay-to-win perception.


1. The Core Loop — Always Free ​

Every player, from day one, with zero payment:

FeatureFreeNotes
Create account + onboardingYesELO seeded from self-assessment
Join clubs (unlimited)Yes
RSVP to sessionsYes
Play matches + submit scoresYes
ELO rating + tier badgeYesGender-adjusted display
Leaderboard (전체/남성/여성)Yes
Receive + give manner tagsYes
Trust tier progressionYesEarned, never paid
Basic stats (win rate, streak)Yes
Match history (recent)YesLast 3 months
Push notificationsYes
Discovery (find clubs/번개)Yes
Club dashboard + 소식Yes

Every 총무, with a free club:

FeatureFreeNotes
Create 1 club (max 15 members)Yes
Create sessions (unlimited)Yes
Generate match pairings (basic rotation)YesSocial + random presets
Score entry + ELO calculationYes
Basic attendance trackingYesIf enabled, no cooldown
Club leaderboardYes
Announcements (소식)Yes
Manual dues trackingYesMark paid/unpaid
Club challengesYes
Share invite linkYes

Why free: The core loop (join, RSVP, play, score, improve) must have zero friction. Paywalling any of these kills retention. TeamSnap, Spond, and Heja validate this.


2. Subscription Plans ​

2a. Individual Plans (Player Pays) ​

무료 (Free)플레이어 (Player)
Price₩0₩4,900/mo · ₩49,000/yr
Core loopYesYes
ELO + tier + trustYesYes
Basic statsYesYes
Match history3 monthsUnlimited
Head-to-head analysis—Yes
ELO trend graph—Yes
Form analysis—Yes
Shareable stat card—Yes
Personal dues history (all clubs)Current clubAll clubs + aggregate
Spending summary (monthly/annual)—Yes
Payment receipts export—Yes
Upcoming dues reminders—Yes
Ad-freeNoYes
Discovery boost—Slight

2b. Club Plans (총무 Pays, Club Benefits) ​

무료베이직프로클럽+
Price₩0₩8,900/mo₩18,900/mo₩37,900/mo
₩89,000/yr₩189,000/yr₩379,000/yr
Members1550UnlimitedUnlimited
Clubs managed113Unlimited
Session history3 monthsUnlimitedUnlimitedUnlimited
Match pairingsBasic (social, random)All presetsAll presetsAll + custom builder
Dues managementManualManual + remindersAuto (Toss Pay)Auto + auto-transfer
Tournament—Single bracketMulti + SwissFull (compass, group+KO)
Attendance trackingBasic (opt-in)FullFull + cooldownFull + GPS auto-checkin
Manner tag analytics——DashboardDashboard + trend alerts
Member reports——YesYes + notes
Session photos10/session3050Unlimited
Custom branding——Color + bannerFull branding
Inter-club events———Yes
Season management———Yes
Export (Excel/PDF)——YesYes
Priority supportCommunityEmail (48h)Email (24h)Chat (4h)
총무 gets Player featuresNoYesYesYes
ALL members get Player featuresNoNoYesYes
Ad-free for all membersNoNoYesYes

2c. How Plans Stack ​

Individual plan travels across all clubs. Club plan applies within that club only.

ScenarioPersonal AnalyticsClub ToolsAd-Free
Free player, Free clubBasicBasicNo
Free player, Basic clubBasicBasic+No
Free player, Pro clubFull (club-wide unlock)ProYes
Free player, Club+Full (club-wide unlock)Club+Yes
Player plan, Free clubFull (personal)BasicYes
Player plan, Basic clubFull (personal)Basic+Yes
Player plan, Pro clubFull (both)ProYes

The Pro club unlock is the key upsell: "프로로 업그레이드하면 모든 멤버가 개인 통계, 회비 내역, 광고 제거를 무료로 이용해요."

Player plan still valuable when:

  • Player is in Free/Basic clubs (no club-wide unlock)
  • Player wants features across ALL clubs (Pro unlock is per-club)
  • Player is not in any club yet (solo discovery mode)

2d. Upgrade Paths ​

Individual:    무료 ──→ 플레이어
                            │
                            ▼ (becomes 총무)
Club:       무료 ──→ 베이직 ──→ 프로 ──→ 클럽+
  • Mid-cycle upgrade: prorated billing (pay difference for remaining days)
  • Downgrade: takes effect at next billing cycle. Data preserved, access limited.
  • 총무 gets Player features: any club plan (Basic+) bundles Player features for the subscribing 총무
  • 30-day free trial: all paid plans include trial (TRIAL_DURATION_DAYS = 30)
  • Graceful degradation: on downgrade, data beyond free limits is hidden, not deleted

2e. Transactional Revenue ​

ServiceFeeAvailable From
Auto dues (Toss Pay / KakaoPay)3%Pro+ clubs
Pickup game entry fees3%Pro+ clubs
Tournament entry fees3%Pro+ clubs

Transaction fee is 3% of processed amount. Our cost is 2.2% (Toss Payments), margin is 0.8%.


3. Trust Tiers — Social Proof, Not Access Control ​

4 Tiers ​

TierBadgeHow EarnedSignals
🌱 새싹(none)Account createdNew user
🎾 활동Small5+ confirmed sessions"Actually plays"
⭐ 신뢰Prominent20+ sessions, 90%+ att, 10+ tags"Reliable, well-liked"
🏅 베테랑Gold50+ sessions, 6+ months, 20+ tags"Club pillar"

What Tiers Do ​

  • Profile badge: visible to club members + discovery
  • Recruitment filter (optional): hosts CAN set minimum tier, default is "전체"
  • Discovery ranking: higher tiers appear slightly higher in search
  • 총무 dashboard: tier shown alongside attendance

What Tiers Do NOT Do ​

  • Block joining clubs
  • Block RSVPing (unless host explicitly filters)
  • Block any core feature
  • Interact with subscription in any way

Progression Algorithm ​

Hidden (VRChat model). Players see their tier and a vague hint ("신뢰 등급까지 조금 더!"), never exact numbers. Prevents gaming.

Inputs: sessions confirmed, attendance rate, manner tags, account age, mutual confirmations, 총무 endorsement. Negative signals: no-show strikes, member reports (both silent).

Demotion: silent. Privileges disappear, no notification. Triggered by 3+ no-shows or 3+ unique reports.


4. Manner Tags — Praise-Only ​

Post-session, players tap positive tags for others they played with:

TagKorean
🤝매너가 좋아요
⏰시간 약속을 잘 지켜요
🎯실력이 정확해요
💬소통이 잘 돼요
🔥열정적이에요

No negative feedback UI. Bad behavior goes through: Report → 총무 → silent demotion. Praise is public, penalties are private (당근 model).

Display: 🤝 ×24 ⏰ ×18 🎯 ×15 — counts only, not who tagged.


5. Attendance — Club Opt-In ​

OFF by default. 총무 enables per club.

  • Not RSVPing = no impact. People have lives.
  • RSVPing then not showing = the problem this solves.

Cancellation tiers: 24h+ = free, 12-24h = 0.5 strike, <12h/no-show = 1.0 strike. Consequences (rolling 20 sessions): nudge → cooldown → 총무 flag. Never auto-expel. Visibility: private to self + 총무. Never shown to other members.


6. Recruitment Filters ​

Hosts can set optional minimums on sessions:

FilterOptions
ELO tierGold III+, Platinum+, etc.
Trust tier활동+, 신뢰+, etc.
Attendance rate80%+, 90%+, etc.
Gender남성, 여성, 전체

Shown on session card: 🎾 Gold+ · ⭐ 신뢰+ · 참석률 85%+ If player doesn't qualify: "참가 조건을 확인해 주세요" with specific unmet requirement.


7. Visibility Matrix ​

DataSelfMembers총무DiscoveryRecruitment
ELO + tierFull (±RD)Rating + tierFullTier onlyTier + rating
Korean divisionYesYesYes—Yes
Trust badgeYesYesYesYesYes
Manner tagsYesYesYesTop tagYes
Attendance rateYesNoYesNoAs filter*
No-show countYesNoYesNoNo
ReportsNoNoYesNoNo
SubscriptionOwn plan—Club badgeClub badge—
Match historyYesShared matchesYesNoNo
Advanced statsIf unlocked**If Pro+ clubYesNoNo

*Filter only: host sets threshold, system filters silently. Host never sees actual %. **Unlocked via: Player plan, or membership in Pro+ club.


8. Profile Card ​

Self-View ​

[Avatar]  김민수
Gold II · 1,380 (±65)
신인부 ~ 오픈부 · NTRP 3.0-3.5

🏅 베테랑 멤버

🤝 ×30  ⏰ ×22  🎯 ×18  💬 ×12  🔥 ×8

참석률 94% · 연속 12회          ← private

Club Member View ​

[Avatar]  김민수
Gold II · 1,380
🏅 베테랑 멤버
🤝 ×30  ⏰ ×22  🎯 ×18

Discovery View ​

[Avatar]  김민수
Gold II
🏅 베테랑
🤝 ×30

Club Card ​

테니스 친목 모임  ⭐ Pro
32명 · 매주 토요일 · 서울 강남

9. User Journeys ​

Player Journey ​

Week 1 (Free, 새싹)
  Download → Onboarding (신인부 선택) → ELO 950 (Silver II)
  Join club → RSVP Saturday → Play 3 matches → ELO 978
  Get tags: 🤝×2 ⏰×1
  Profile: Silver II · 978 · (no badge)

Month 1 (Free, 활동)
  5+ sessions → 🎾 활동 badge appears
  ELO 1,045 · Tags: 🤝×8 ⏰×5 🎯×3
  Joins second club → cross-pool confidence +0.05
  Taps blurred head-to-head graph → Player plan upsell

Month 3 (Free player in Pro club)
  총무 upgraded to Pro → all members get Player features
  Full analytics, dues history, ad-free — without paying
  20+ sessions, 94% attendance, 15 tags → ⭐ 신뢰 badge
  ELO 1,230 (Gold III)

Month 6 (베테랑)
  50+ sessions, 6 months, 30+ tags → 🏅 베테랑
  Featured in discovery
  ELO 1,380 (Gold II, approaching 오픈부)

총무 Journey ​

Week 1 (Free)
  Create club → Invite 12 members → Saturday session
  Match pairings (social rotation) → Scores entered
  ELO leaderboard appears → "이거 편하다"

Month 1 (Free → Basic)
  Club grows to 14 → approaching 15 limit
  Upgrades to Basic (₩8,900/mo)
  → 50 members, all presets, dues reminders
  → Gets Player features (personal analytics, ad-free)

Month 3 (Basic → Pro)
  Club at 40 members → wants auto dues
  Upgrades to Pro (₩18,900/mo)
  → Auto dues (Toss Pay), tournament hosting
  → All members get Player features (club-wide unlock)
  → 총무 dashboard: attendance + manner analytics

Month 6 (Pro → Club+)
  Starts 2nd club (weekday group)
  Upgrades to Club+ (₩37,900/mo)
  → 3+ clubs, inter-club events, season management
  → GPS auto-checkin for outdoor courts

10. Structural Verification (Replaces Honor System) ​

ProblemStructural Solution
Skill sandbaggingELO K=40/48 convergence + strike system
No-showsAttendance tracking + RSVP cooldown + recruitment filters
Score disputesMutual confirmation (both teams verify)
Bad mannersReport → 총무 → silent tier demotion
Fake accountsTrust tiers (signal, not gate)
Club hoppingGlobal trust tier + manner tags follow across clubs
Pay-to-winTrust is earned (free). Subscription is tools (paid). Never mixed.

11. Revenue Model ​

StreamPricingTrigger
Player subscription₩4,900/moPersonal analytics, blurred graph upsell
Basic club₩8,900/moClub hits 15 members
Pro club₩18,900/moWants auto dues, member-wide unlock
Club+₩37,900/moMulti-club 총무
Transaction fee3% per paymentEvery auto-dues/entry processed

Revenue math example:

  • Pro club with 40 members paying ₩30,000/mo dues
  • Subscription: ₩18,900/mo
  • Transaction: 40 × ₩30,000 × 3% = ₩36,000/mo
  • Total per club: ₩54,900/mo

References ​

  • TeamSnap: org-pays model, free for single teams
  • Spond: free for all, 2.5% payment processing fees
  • Playtomic: dual model (club SaaS + player premium), trust separate from payment
  • Airbnb: Superhost badge (automated, silent loss)
  • 당근마켓: praise-only manner temperature
  • VRChat: hidden progression trust tiers
  • Stack Overflow: reputation unlocks privileges
  • Korean market: ₩4,900-9,900/mo sweet spot for individual subscriptions
  • subscription.entity.ts: canonical plan definitions

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