μΌμΌ osu! 맡 μΆμ² μΉ μλΉμ€ (Work in Progress)
- μ¬μ©μ PP κΈ°λ° λμ΄λ μ‘°μ
- λμ΄λλ³ μ°¨λ± μΆμ² (Easy, Normal, Hard)
- λΉνΈλ§΅ νν°λ§ (μ°¨ν ꡬν)
- λμ΄λλ³ 3κ° λΉνΈλ§΅ μ 곡
- S λν¬ μ΄μ λ¬μ± μ ν΄λ¦¬μ΄
- μμΈ μ 보 νμ (λμ΄λ, BPM, κΈΈμ΄, μμ PP λ±)
- μΌμΌ/μ£Όκ° λμ κ³Όμ λ¬μ±λ₯
- μ°μ λ¬μ± μ€νΈλ¦
- PP μ±μ₯ κ·Έλν
- λμ΄λλ³ ν΄λ¦¬μ΄ νν©
λ‘κ·ΈμΈ μμ΄ μλΉμ€μ κΈ°λ₯μ 미리볼 μ μλ λ°λͺ¨ νμ΄μ§λ₯Ό μ 곡ν©λλ€
- λμ κ³Όμ μμ€ν 미리보기
- λμ보λ λ° ν΅κ³ νλ©΄ 체ν
λμ΄λ λ²μλ λ€μ μ ν 곡μμ μ¬μ©νμ¬ κ³μ°λ©λλ€
difficulty_range = stable_top_play_stars + offset Β± margin
- μ¬μ(EASY): -1.0
- 보ν΅(NORMAL): -0.25
- μ΄λ €μ(HARD): +0.45
λͺ¨λ λμ΄λμ λν΄ Β±0.25μ marginμ΄ μ μ©λ©λλ€
difficulty_range = stable_top_play_stars - 1.0 Β± 0.25
difficulty_range = stable_top_play_stars - 0.25 Β± 0.25
difficulty_range = stable_top_play_stars + 0.6 Β± 0.25
stable_top_play_stars
κ° 4.0μΈ κ²½μ°(μ¦ μμ μ μΌλ‘ ν΄λ¦¬μ΄ν μ΅κ³ μ±κ³Ό κΈ°λ‘μ΄ 4.0β
μΈ κ²½μ°):
- Easy: 2.75β ~3.25β
- Normal: 3.5β ~4.0β
- Hard: 4.05β ~4.55β
-
μ μ μ μμ κΈ°λ‘ λΆμ
- μμ 10κ° κΈ°λ‘ μ€ μ νλ 95% μ΄μμΈ μμ 3κ° κΈ°λ‘ μ λ³
- 95% μ΄μ μ νλ κΈ°μ€: μ΄μ€κΈμμ μμ μ μ€λ ₯ μΈ‘μ μ μν μ΅μ κΈ°μ€
- λͺ¨λλ³ λμ΄λ 보μ μ μ©
- DT/NC: μλ λμ΄λ Γ 1.4 (μ: 4.5β β 6.3β )
- HR: μλ λμ΄λ Γ 1.05 (μ: 4.5β β 4.7β )
- κ°μ₯ λμ λμ΄λλ₯Ό κΈ°μ€κ°μΌλ‘ μ¬μ©
-
λμ΄λλ³ λ§΅ μΆμ² λ²μ μμ) κΈ°μ€κ°μ΄ 6β μΈ κ²½μ°:
- EASY: 5.0β ~ 5.5β (κΈ°μ€κ° -1.0 Β±0.25)
- NORMAL: 5.75β ~ 6.25β (κΈ°μ€κ° -0.25 Β±0.25)
- HARD: 6.2β ~ 6.7β (κΈ°μ€κ° +0.45 Β±0.25)
-
맡 νν°λ§
- κ³μ°λ λμ΄λ λ²μ λ΄μ ranked λΉνΈλ§΅ κ²μ
- κΈΈμ΄ 30μ΄ ~ 5λΆ μ ν
- 무μμ μ νμΌλ‘ λ€μμ± ν보
λ¨κ³λ³ κ³ μ λμ΄λ λ²μ μ μ©:
-
μ λ¬Έ (0-300pp)
- EASY: 2.0β ~ 2.3β
- NORMAL: 2.3β ~ 2.6β
- HARD: 2.6β ~ 2.9β
-
μ΄κΈ (301-600pp)
- EASY: 2.5β ~ 2.8β
- NORMAL: 2.8β ~ 3.1β
- HARD: 3.1β ~ 3.4β
-
μ€κΈ μ§μ (601-1000pp)
- EASY: 3.0β ~ 3.3β
- NORMAL: 3.3β ~ 3.6β
- HARD: 3.6β ~ 4.0β
- ν μ€νΈμ© JWT ν ν° μμ± μ½λ μΆκ°
- ν μ€νΈμ© 맡 μΆμ² μλν¬μΈνΈ μΆκ°
- Sλν¬ κΈ°λ° μ€λ ₯ νλ¨
- Sλν¬ λ³΄μ μ¬λΆλ‘ μ΄λ³΄μ νλ¨
- νμ¬ λμ μ€μΈ λμ΄λ κΈ°μ€μΌλ‘ μΆμ²
- μ) Sλν¬κ° μλ μ μ μ μ΅κ·Ό Aλν¬ κΈ°λ‘μ΄ 2.5β
λΌλ©΄:
- EASY: 2.3β ~ 2.5β (νμ¬ λμ΄λλ³΄λ€ μ½κ° μ½κ²)
- NORMAL: 2.5β ~ 2.7β (νμ¬ λμ μ€μΈ λμ΄λ)
- HARD: 2.7β ~ 2.9β (μ½κ° λ μ΄λ €μ΄ λμ μ©)
- SvelteKit
- TailwindCSS
- TypeScript
- Chart.js
- MongoDB
- mongoose
- osu! OAuth
- JWT μΈμ¦
POST /auth/signin: osu! OAuth λ‘κ·ΈμΈ
POST /auth/signout: λ‘κ·Έμμ
GET /auth/callback: OAuth μ½λ°± μ²λ¦¬
GET /api/user: μ¬μ©μ μ 보 λ° ν΅κ³ μ‘°ν
PUT /api/user: μ¬μ©μ μ€μ μ
λ°μ΄νΈ
GET /api/user/stats: λμ κ³Όμ ν΅κ³ μ‘°ν (λμ΄λλ³ μλ£μ¨)
GET /api/user/history: λμ κ³Όμ μμΈ μ΄λ ₯ μ‘°ν
GET /api/user/pp-history: PP λ³ν μ΄λ ₯ μ‘°ν
GET /api/user/dashboard: λμ보λ μμ½ ν΅κ³ μ‘°ν (μ£Όκ°/μΌκ° μλ£, PP μ±μ₯)
GET /api/challenges: μ€λμ λμ κ³Όμ μ‘°ν/μμ±
POST /api/challenges: λμ κ³Όμ μν μ
λ°μ΄νΈ
POST /api/challenges/complete: λμ κ³Όμ μλ£ μ²λ¦¬ (μ€μ½μ΄ κ²μ¦)
POST /api/challenges/feedback: λΉνΈλ§΅ νΌλλ°± μ μΆ
POST /api/challenges/setting-goal: λͺ©ν μ€μ (κ°λ° μ€)
- μ μ₯μ ν΄λ‘ λ° μμ‘΄μ± μ€μΉ
git clone https://github.com/root39293/dailypp.git
cd dailypp
npm install
- νκ²½λ³μ μ€μ (.env)
VITE_MONGODB_URI="mongodb_uri"
OSU_CLIENT_ID="your_osu_client_id"
OSU_CLIENT_SECRET="your_osu_client_secret"
PUBLIC_BASE_URL="your_vercel_url"
- κ°λ° μλ² μ€ν
npm run dev
MIT License