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:
| System | What It Measures | How Earned | Who Benefits |
|---|---|---|---|
| ELO Rating (실력) | Skill level | Playing matches | Player (matchmaking, leaderboard) |
| Trust Tier (신뢰) | Reliability | Showing up, manner tags | Community (social proof) |
| Individual Plan (개인 구독) | Personal tools | Player pays | The player |
| Club Plan (클럽 구독) | Club tools | 총무 pays | All 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:
| Feature | Free | Notes |
|---|---|---|
| Create account + onboarding | Yes | ELO seeded from self-assessment |
| Join clubs (unlimited) | Yes | |
| RSVP to sessions | Yes | |
| Play matches + submit scores | Yes | |
| ELO rating + tier badge | Yes | Gender-adjusted display |
| Leaderboard (전체/남성/여성) | Yes | |
| Receive + give manner tags | Yes | |
| Trust tier progression | Yes | Earned, never paid |
| Basic stats (win rate, streak) | Yes | |
| Match history (recent) | Yes | Last 3 months |
| Push notifications | Yes | |
| Discovery (find clubs/번개) | Yes | |
| Club dashboard + 소식 | Yes |
Every 총무, with a free club:
| Feature | Free | Notes |
|---|---|---|
| Create 1 club (max 15 members) | Yes | |
| Create sessions (unlimited) | Yes | |
| Generate match pairings (basic rotation) | Yes | Social + random presets |
| Score entry + ELO calculation | Yes | |
| Basic attendance tracking | Yes | If enabled, no cooldown |
| Club leaderboard | Yes | |
| Announcements (소식) | Yes | |
| Manual dues tracking | Yes | Mark paid/unpaid |
| Club challenges | Yes | |
| Share invite link | Yes |
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 loop | Yes | Yes |
| ELO + tier + trust | Yes | Yes |
| Basic stats | Yes | Yes |
| Match history | 3 months | Unlimited |
| Head-to-head analysis | — | Yes |
| ELO trend graph | — | Yes |
| Form analysis | — | Yes |
| Shareable stat card | — | Yes |
| Personal dues history (all clubs) | Current club | All clubs + aggregate |
| Spending summary (monthly/annual) | — | Yes |
| Payment receipts export | — | Yes |
| Upcoming dues reminders | — | Yes |
| Ad-free | No | Yes |
| 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 | ||
| Members | 15 | 50 | Unlimited | Unlimited |
| Clubs managed | 1 | 1 | 3 | Unlimited |
| Session history | 3 months | Unlimited | Unlimited | Unlimited |
| Match pairings | Basic (social, random) | All presets | All presets | All + custom builder |
| Dues management | Manual | Manual + reminders | Auto (Toss Pay) | Auto + auto-transfer |
| Tournament | — | Single bracket | Multi + Swiss | Full (compass, group+KO) |
| Attendance tracking | Basic (opt-in) | Full | Full + cooldown | Full + GPS auto-checkin |
| Manner tag analytics | — | — | Dashboard | Dashboard + trend alerts |
| Member reports | — | — | Yes | Yes + notes |
| Session photos | 10/session | 30 | 50 | Unlimited |
| Custom branding | — | — | Color + banner | Full branding |
| Inter-club events | — | — | — | Yes |
| Season management | — | — | — | Yes |
| Export (Excel/PDF) | — | — | Yes | Yes |
| Priority support | Community | Email (48h) | Email (24h) | Chat (4h) |
| 총무 gets Player features | No | Yes | Yes | Yes |
| ALL members get Player features | No | No | Yes | Yes |
| Ad-free for all members | No | No | Yes | Yes |
2c. How Plans Stack
Individual plan travels across all clubs. Club plan applies within that club only.
| Scenario | Personal Analytics | Club Tools | Ad-Free |
|---|---|---|---|
| Free player, Free club | Basic | Basic | No |
| Free player, Basic club | Basic | Basic+ | No |
| Free player, Pro club | Full (club-wide unlock) | Pro | Yes |
| Free player, Club+ | Full (club-wide unlock) | Club+ | Yes |
| Player plan, Free club | Full (personal) | Basic | Yes |
| Player plan, Basic club | Full (personal) | Basic+ | Yes |
| Player plan, Pro club | Full (both) | Pro | Yes |
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
| Service | Fee | Available From |
|---|---|---|
| Auto dues (Toss Pay / KakaoPay) | 3% | Pro+ clubs |
| Pickup game entry fees | 3% | Pro+ clubs |
| Tournament entry fees | 3% | 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
| Tier | Badge | How Earned | Signals |
|---|---|---|---|
| 🌱 새싹 | (none) | Account created | New user |
| 🎾 활동 | Small | 5+ confirmed sessions | "Actually plays" |
| ⭐ 신뢰 | Prominent | 20+ sessions, 90%+ att, 10+ tags | "Reliable, well-liked" |
| 🏅 베테랑 | Gold | 50+ 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:
| Tag | Korean |
|---|---|
| 🤝 | 매너가 좋아요 |
| ⏰ | 시간 약속을 잘 지켜요 |
| 🎯 | 실력이 정확해요 |
| 💬 | 소통이 잘 돼요 |
| 🔥 | 열정적이에요 |
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:
| Filter | Options |
|---|---|
| ELO tier | Gold III+, Platinum+, etc. |
| Trust tier | 활동+, 신뢰+, etc. |
| Attendance rate | 80%+, 90%+, etc. |
| Gender | 남성, 여성, 전체 |
Shown on session card: 🎾 Gold+ · ⭐ 신뢰+ · 참석률 85%+ If player doesn't qualify: "참가 조건을 확인해 주세요" with specific unmet requirement.
7. Visibility Matrix
| Data | Self | Members | 총무 | Discovery | Recruitment |
|---|---|---|---|---|---|
| ELO + tier | Full (±RD) | Rating + tier | Full | Tier only | Tier + rating |
| Korean division | Yes | Yes | Yes | — | Yes |
| Trust badge | Yes | Yes | Yes | Yes | Yes |
| Manner tags | Yes | Yes | Yes | Top tag | Yes |
| Attendance rate | Yes | No | Yes | No | As filter* |
| No-show count | Yes | No | Yes | No | No |
| Reports | No | No | Yes | No | No |
| Subscription | Own plan | — | Club badge | Club badge | — |
| Match history | Yes | Shared matches | Yes | No | No |
| Advanced stats | If unlocked** | If Pro+ club | Yes | No | No |
*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회 ← privateClub Member View
[Avatar] 김민수
Gold II · 1,380
🏅 베테랑 멤버
🤝 ×30 ⏰ ×22 🎯 ×18Discovery View
[Avatar] 김민수
Gold II
🏅 베테랑
🤝 ×30Club 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 courts10. Structural Verification (Replaces Honor System)
| Problem | Structural Solution |
|---|---|
| Skill sandbagging | ELO K=40/48 convergence + strike system |
| No-shows | Attendance tracking + RSVP cooldown + recruitment filters |
| Score disputes | Mutual confirmation (both teams verify) |
| Bad manners | Report → 총무 → silent tier demotion |
| Fake accounts | Trust tiers (signal, not gate) |
| Club hopping | Global trust tier + manner tags follow across clubs |
| Pay-to-win | Trust is earned (free). Subscription is tools (paid). Never mixed. |
11. Revenue Model
| Stream | Pricing | Trigger |
|---|---|---|
| Player subscription | ₩4,900/mo | Personal analytics, blurred graph upsell |
| Basic club | ₩8,900/mo | Club hits 15 members |
| Pro club | ₩18,900/mo | Wants auto dues, member-wide unlock |
| Club+ | ₩37,900/mo | Multi-club 총무 |
| Transaction fee | 3% per payment | Every 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