octxxiii
연결 쀑 
← LAB
May 14, 2026

May 14, 2026

🕹 OHO-MATE

저장소: octxxiii/Oho-Mate

🕹 OHO-MATE

한국 서버에서 통하는 한국얎 — 게읎뚞 특화 C2C ì–žì–Ž 학습 플랫폌 Korean for Gamers. Real lessons. Real progress. Recorded forever.

React Vite Supabase Stripe OpenAI Agora


📖 개요 (Overview)

OHO-MATE는 한국 게임 서버에서 싀전 소통을 원하는 왞국읞 학습자와 검슝된 한국읞 튜터륌 맀칭하는 C2C ì–žì–Ž 학습 플랫폌입니닀.

  • 🎮 LoL, VALORANT, 마읞크래프튞 게임 컚텍슀튞 특화 수업
  • 🎙 읞앱 음성 통화 — Agora RTC êž°ë°˜, 플랫폌 읎탈 없음
  • 🀖 AI 학습 늬포튞 — GPT-4o-mini가 게임 맥띜 + 묞화 녾튾 포핚 분석
  • 💬 싀시간 채팅 — Supabase Realtime, 왞부 연띜처 공유 찚닚
  • ⭐ XP + 슀튞늭 시슀템 — 레벚업, 배지, 연속 학습 볎상

OHO-MATE is a Korean language tutoring marketplace purpose-built for gamers who want to communicate in Korean game servers. Every lesson is recorded as an AI report — Ʞ록되지 않는 것은 공부가 아니닀.


✹ 죌요 Ʞ능 (Features)

🎮 학습자 (Learner)

Ʞ능섀명
🔍 튜터 탐색ꎀ심사 태귞 / 읎늄 검색 / 평점·가격·수업수 정렬
💛 찜하Ʞ마음에 드는 튜터 위시늬슀튞 저장
📅 팚킀지 예앜수업 팚킀지 선택 → Stripe 결제 → 자동 채팅룞 생성
🎙 읞앱 음성 수업/lesson/:id — Agora RTC 음성 + 녾튾 + 닚얎 칩
🀖 AI 학습 늬포튞 v2게임 표현 · 묞화 녾튾 · 발음 팁 · 얎휘 마슀터늬 %
🃏 플래시칎드 & 퀎슈늬포튞에서 바로 플래시칎드 / 4지선닀 퀎슈 전환
💬 싀시간 채팅튜터와 읞앱 메시지 (왞부 연띜처 공유 자동 겜고)
⭐ XP & 레벚수업 완료·늬뷰·로귞읞 슀튞늭윌로 XP 적늜, LV1~10
📖 게임 닚얎장LoL/VALORANT/마읞크래프튞/K-POP/K-Drama 84개 표현
✍ 늬뷰 작성수업 완료 후 별점 + 윔멘튞 (Supabase 저장)
🕹 옚볎딩신규 가입 후 ꎀ심사·레벚 선택 2닚계 플로우

👚‍🏫 튜터 (Tutor)

Ʞ능섀명
📝 지원서 제출ApplyModal — 읎늄, Discord, ì–žì–Ž, 태귞, 소개
🏅 등꞉ 시슀템BRONZE / SILVER / GOLD 배지
📊 튜터 대시볎드수업 ꎀ늬, 수입 현황, 게임 닚얎장 가읎드
💰 정산 시슀템고정 KRW 페읎아웃 (환윚 싀시간 반영)

🛡 얎드믌 (Admin)

Ʞ능섀명
📈 수익 분석쎝 맀출, 플랫폌 읎익, 튜터 페읎아웃 — 월별 찚튞
✅ 튜터 심사지원서 목록, approve/reject 버튌
🀖 AI 늬포튞 큐생성 대Ʞ 쀑읞 늬포튞 몚니터링

🏗 아킀텍처 (Architecture)

                         ┌─────────────────────────────────┐
                         │         React SPA (Vite)        │
                         │  src/pages  src/components      │
                         │  src/context  src/lib           │
                         └────────────┬────────────────────┘
                                      │
              ┌───────────────────────┌───────────────────────┐
              │                       │                       │
    ┌─────────▌────────┐   ┌──────────▌──────────┐  ┌────────▌──────────┐
    │  Supabase (BaaS) │   │  Stripe Payments     │  │   Agora RTC       │
    │  - Auth (JWT)    │   │  - Checkout Session  │  │  - Voice Lessons  │
    │  - PostgreSQL    │   │  - Webhook → lessons │  │  - Token: Edge Fn │
    │  - Realtime Chat │   │  - auto chat room    │  │  - 50min timer    │
    │  - Edge Functions│   └─────────────────────┘  └───────────────────┘
    │    · stripe-webhook
    │    · agora-token
    │    · generate-report (GPT-4o-mini)
    │    · create-checkout
    │    · process-payout
    └──────────────────┘

핵심 섀계 원칙

원칙구현
Black-box 정산amount_usd(학생) vs payout_krw(튜터) — 마진윚 비공개, Edge Function에서만 계산
플랫폌 읎탈 방지Agora 읞앱 음성 + 연띜처 공유 DB 튞늬거 자동 겜고
AI 늬포튞 = Lock-in읞앱 음성 수업 시에만 늬포튞 생성, 왞부 통화 불가
데몚 몚드 폎백Supabase / Agora 믞섀정 시 전 Ʞ능 데몚 동작

🗂 프로젝튞 구조 (Project Structure)

Oho-Mate/
├── public/
│   ├── robots.txt
│   └── sitemap.xml
├── src/
│   ├── constants/index.js          # 색상(C), 폰튾(PX/KR), 태귞, 등꞉ 상수
│   ├── data/tutors.js              # 튜터 목업 데읎터
│   ├── context/
│   │   ├── UserContext.jsx         # Supabase Auth + 데몚 유저
│   │   ├── WishlistContext.jsx     # 찜 목록 (localStorage)
│   │   ├── XPContext.jsx           # XP + 레벚 + 배지 + XPToastPortal
│   │   └── NotificationContext.jsx # 읞앱 알늌
│   ├── lib/
│   │   ├── supabase.js             # Supabase 큎띌읎얞튞
│   │   ├── openai.js               # GPT-4o-mini 늬포튞 + 데몚 폎백
│   │   ├── chat.js                 # Realtime 채팅 (구독·전송·데몚 데읎터)
│   │   └── xp.js                  # XP 적늜·조회·슀튞늭·배지 핚수
│   ├── hooks/
│   │   └── useAgora.js             # Agora RTC CDN 로드 + 채널 조읞/늬람
│   ├── components/
│   │   ├── Nav.jsx                 # 반응형 넀비게읎션
│   │   ├── BottomNav.jsx           # 몚바음 하당 탭바
│   │   ├── Footer.jsx              # 푾터 (앜ꎀ·닚얎장 링크)
│   │   ├── VoiceRoom.jsx           # Agora 음성 UI (50분 타읎뚞, 찞가자)
│   │   ├── XPBar.jsx               # XP 진행 바 + LevelBadge
│   │   ├── Box / Btn / Chip / Stars / Modal / Toast / Avatar / ...
│   │   ├── CRT.jsx                 # 슀캔띌읞 였버레읎
│   │   ├── ErrorBoundary.jsx
│   │   └── ProtectedRoute.jsx
│   ├── pages/
│   │   ├── Home.jsx                # 게임 히얎로, 게임 포턞, AI 늬포튞 훅, 비교표
│   │   ├── TutorsList.jsx          # 검색·필터·정렬
│   │   ├── TutorDetail.jsx         # About/Schedule/Reviews 탭
│   │   ├── Booking.jsx             # Stripe 결제 3닚계
│   │   ├── Dashboard.jsx           # 수업현황/AI늬포튞/위시늬슀튞/XP로귞
│   │   ├── TutorDashboard.jsx      # 튜터 수업ꎀ늬 + 가읎드 탭
│   │   ├── Messages.jsx            # Supabase Realtime 채팅
│   │   ├── ReportDetail.jsx        # AI 늬포튞 상섞 + 플래시칎드 + 퀎슈
│   │   ├── LessonRoom.jsx          # 읞앱 음성 수업룞 (Agora + 녾튾 + 늬포튞)
│   │   ├── Vocab.jsx               # 한국얎 게임 닚얎장 84개
│   │   ├── Admin.jsx               # ꎀ늬자 팹널
│   │   ├── Terms.jsx               # 읎용앜ꎀ (한/영)
│   │   └── Privacy.jsx             # 개읞정볎처늬방칚 (한/영)
│   ├── modals/
│   │   ├── AuthModal.jsx           # 로귞읞/회원가입
│   │   ├── ApplyModal.jsx          # 튜터 지원서
│   │   └── OnboardingModal.jsx     # 신규 가입 옚볎딩
│   └── App.jsx                     # BrowserRouter + 몚든 띌우튞
├── supabase/
│   ├── config.toml
│   ├── migrations/
│   │   ├── 00001_initial.sql       # profiles, packages, lessons, reviews, ai_reports, notifications
│   │   └── 00002_chat_xp_games_badges.sql  # chat, xp_ledger, streaks, badges + triggers
│   └── functions/
│       ├── _shared/
│       │   ├── supabase-admin.ts
│       │   ├── cors.ts
│       │   └── exchange-rate.ts
│       ├── create-checkout/        # Stripe Checkout Session 생성
│       ├── stripe-webhook/         # 결제 완료 → lessons + chat room 자동 생성
│       ├── generate-report/        # GPT-4o-mini AI 학습 늬포튞 v2
│       ├── agora-token/            # Agora AccessToken2 (HMAC-SHA256, pure Deno)
│       └── process-payout/        # 튜터 정산 처늬
└── index.html                      # OG / Twitter Card / JSON-LD SEO

🛠 Ʞ술 슀택 (Tech Stack)

분류Ʞ술용도
FrontendReact 18 + Vite 5SPA 렌더링
RoutingReact Router v6큎띌읎얞튞 띌우팅
Auth & DBSupabase읞슝 · PostgreSQL · RLS
RealtimeSupabase Realtime싀시간 채팅 구독
Edge FunctionsDeno (Supabase Edge)결제·토큰·늬포튞·정산 서버늬슀
PaymentStripe Elements + Webhooks팚킀지 결제
VoiceAgora RTC (CDN 4.20.0)읞앱 음성 수업
AIOpenAI GPT-4o-mini학습 늬포튞 생성
StylingInline CSS픜셀아튞 디자읞 시슀템
StateReact Context + localStorage전역 상태
SEOOpen Graph · JSON-LD · sitemap검색엔진 최적화

🗄 DB 슀킀마 (핵심 테읎랔)

-- Migration 00001
profiles          -- 유저 프로필 (id, name, av, role, game_tags, level)
tutor_applications -- 튜터 지원서 (name, discord, lang, tags, intro, status)
packages          -- 수업 팚킀지 (name, lessons, price_usd, payout_krw)
lessons           -- 수업 (learner_id, tutor_id, status, amount_usd, payout_krw, exchange_rate, platform_profit)
reviews           -- 늬뷰 (lesson_id, learner_id, tutor_id, rating, text)
ai_reports        -- AI 늬포튞 (lesson_id, report_json[v2 schema])
notifications     -- 읞앱 알늌 (user_id, type, title, body, metadata)

-- Migration 00002
chat_rooms        -- 채팅룞 (participants uuid[], last_message, last_message_at)
chat_messages     -- 메시지 (room_id, user_id, content, type, metadata)
                  -- type: "text" | "system" | "warning"(연띜처 공유 감지)
xp_ledger         -- XP 획득 Ʞ록 (user_id, action, xp, label)
streaks           -- 연속 학습음 (user_id, current_streak, longest_streak, last_login)
game_profiles     -- 게임 프로필 (user_id, game_id, username, rank, server)
badges            -- 배지 정의 (10종 시드 데읎터)
user_badges       -- 획득 배지 (user_id, badge_id)

XP 행동 테읎랔

액션XP섀명
SESSION_COMPLETE+50수업 완료
REVIEW_WRITTEN+30늬뷰 작성
FLASHCARD_DONE+15플래시칎드 전첎 완료
QUIZ_PERFECT+25퀎슈 만점
DAILY_LOGIN+10맀음 첫 접속
STREAK_3+203음 연속
STREAK_7+1007음 연속
REPORT_READ+5늬포튞 엎람

🀖 AI 늬포튞 v2 슀킀마

interface ReportV2 {
  // Core
  date: string;
  tutor: string;
  topic: string;
  level: "입묞" | "쎈꞉" | "쀑꞉" | "고꞉";
  duration_min: number;

  // 게임 컚텍슀튞
  game_context: string;          // "ë¡€ 솔랭 í‹°ì–Ž 승꞉전 소통" 등
  highlight_moment: string;      // 수업 쀑 베슀튞 순간
  vocab_mastery_pct: number;     // 0~100 얎휘 읎핎도

  // 학습 분석
  vocabulary: { word, meaning, roman, example, game_usage }[];
  cultural_notes: { title, body }[];       // 묞화적 맥띜
  pronunciation_tips: { tip, example }[];  // 발음 교정 포읞튞
  good: string;           // 잘한 점
  improve: string;        // 개선점
  next_lesson: string;    // 닀음 수업 추천
  homework: string;       // 곌제
  overall_score: number;  // 1~10
}

🚀 시작하Ʞ (Getting Started)

1. 저장소 큎론

git clone https://github.com/octxxiii/Oho-Mate.git
cd Oho-Mate

2. 팚킀지 섀치

npm install

3. 환겜 변수 섀정

cp .env.example .env

.env 파음을 ì—Žì–Ž 아래 값듀을 채워죌섞요:

# Supabase (https://supabase.com)
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key

# Stripe (https://stripe.com)
VITE_STRIPE_PUBLIC_KEY=pk_test_...

# OpenAI (https://platform.openai.com)
VITE_OPENAI_API_KEY=sk-...

# Agora (https://console.agora.io)
# Edge Function 환겜변수 — Supabase Dashboard > Functions > Secrets
# AGORA_APP_ID=your-app-id
# AGORA_APP_CERTIFICATE=your-certificate (없윌멎 no-auth 몚드)

# Stripe (Edge Function용)
# STRIPE_SECRET_KEY=sk_live_...
# STRIPE_WEBHOOK_SECRET=whsec_...

⚠ 몚든 환겜 변수 없읎도 데몚 몚드로 전 Ʞ능 싀행 가능합니닀.

  • Supabase 믞섀정 → 데몚 로귞읞 + 로컬 슀토늬지
  • OpenAI 믞섀정 → 샘플 AI 늬포튞 반환
  • Agora 믞섀정 → no-auth 몚드 (토큰 없읎 채널 접속)

4. Supabase 로컬 싀행 (선택)

# Supabase CLI 필요
supabase start
supabase db reset  # 마읎귞레읎션 00001 + 00002 적용

5. 개발 서버 싀행

npm run dev

람띌우저에서 http://localhost:5173 ì—Žêž°


🌐 Edge Functions 배포

# 전첎 핚수 배포
supabase functions deploy

# 개별 핚수
supabase functions deploy stripe-webhook
supabase functions deploy agora-token
supabase functions deploy generate-report
supabase functions deploy create-checkout
supabase functions deploy process-payout

# 환겜 변수 섀정
supabase secrets set STRIPE_SECRET_KEY=sk_live_...
supabase secrets set STRIPE_WEBHOOK_SECRET=whsec_...
supabase secrets set AGORA_APP_ID=...
supabase secrets set AGORA_APP_CERTIFICATE=...
supabase secrets set OPENAI_API_KEY=sk-...

Stripe Webhook 엔드포읞튞

POST https://<project>.supabase.co/functions/v1/stripe-webhook

읎벀튞:
  - checkout.session.completed  → lessons 생성 + chat_room 자동 생성
  - payment_intent.succeeded    → 폎백 (checkout 믞처늬 시)

🗺 슀프늰튞 로드맵

✅ Sprint 1 — Core Platform (완료)

  • Agora RTC 읞앱 음성 수업 (/lesson/:id)
  • AI 늬포튞 v2 (게임 컚텍슀튞 + 묞화 녾튾 + 발음 팁)
  • 플래시칎드 + 퀎슈 몚드 (늬포튞 상섞)
  • Supabase Realtime 채팅 (연띜처 공유 찚닚 튞늬거)
  • XP + 슀튞늭 + 배지 시슀템
  • Stripe 결제 후 자동 채팅룞 생성
  • 한국얎 게임 닚얎장 (84개 표현, 5개 탭)
  • ꎀ늬자 팹널 (수익 분석 + 튜터 심사)
  • 읎용앜ꎀ + 개읞정볎처늬방칚 (한/영)
  • SEO (OG tags, JSON-LD, robots.txt, sitemap.xml)

🔜 Sprint 2 — Growth

  • Stripe Subscription (월간 묎제한 팚킀지)
  • 수업 전날 읎메음 / 푞시 알늌
  • 튜터 비디였 자Ʞ소개 (Supabase Storage)
  • 게임 계정 연동 (LoL API, VALORANT API)
  • 늬포튞 PDF 닀욎로드
  • 몚바음 앱 (React Native)

🔮 Sprint 3 — Scale

  • AI 튜터 추천 (학습 Ʞ록 êž°ë°˜)
  • 귞룹 레슚 (3~5명)
  • 컀뮀니티 플드 (학습 읞슝·게임 ì§€)
  • 닀국얎 지원 (EN / JA / ZH)
  • 튜터 수익 대시볎드 고도화

🔒 볎안 & 플랫폌 볎혞

위협대응
연띜처 공유 우회DB 튞늬거 flag_contact_info — Discord/KakaoTalk/읎메음 팹턮 감지 시 type: "warning" 메시지
왞부 음성통화 유도Agora 읞앱 음성 + AI 늬포튞륌 읞앱 수업 전용윌로 제한
정산 ꞈ액 ë…žì¶œpayout_krw / platform_profit 칌럌은 Edge Function + Admin만 ì ‘ê·Œ
JWT 위조몚든 Edge Function에 Supabase JWT 검슝 (verify_jwt = true)
Stripe 위조 요청HMAC 서명 검슝 (stripe.webhooks.constructEventAsync)

📄 띌읎선슀 (License)

MIT © 2025 OHO-MATE


<div align="center"> <b>🕹 Ʞ록되지 않는 것은 공부가 아니닀</b><br/> <sub>Every lesson. Every word. Every level up — tracked forever.</sub><br/><br/> <sub>Made with ❀ for Korean learners worldwide</sub> </div>