Skip to content

Instantly share code, notes, and snippets.

@stevekim0417
Last active February 12, 2026 05:14
Show Gist options
  • Select an option

  • Save stevekim0417/8bbd4394f835dd61602fa46c25731770 to your computer and use it in GitHub Desktop.

Select an option

Save stevekim0417/8bbd4394f835dd61602fa46c25731770 to your computer and use it in GitHub Desktop.
Cold Plunge Calculator MVP PRD

🧊 Cold Plunge Calculator β€” κΈ°λŠ₯ λͺ…μ„Έμ„œ

Product: coldplungecalculator.com
버전: 1.0


1. κΈ°λŠ₯ λͺ©λ‘

κΈ°λŠ₯ μš°μ„ μˆœμœ„ μ„€λͺ…
Protocol Calculator MVP ν•„μˆ˜ λͺ©μ λ³„ μ˜¨λ„/μ‹œκ°„ μΆ”μ²œ
Smart Timer MVP ν•„μˆ˜ μΉ΄μš΄νŠΈλ‹€μš΄ + μ•Œλ¦Ό
Weekly Goal Tracker MVP ν•„μˆ˜ μ£Ό 11λΆ„ λͺ©ν‘œ 좔적
Session Logger MVP ν•„μˆ˜ μ„Έμ…˜ 기둝 + 톡계
Breathing Guide MVP ν•„μˆ˜ Box Breathing κ°€μ΄λ“œ
Safety Tips MVP ν•„μˆ˜ μ•ˆμ „ κ°€μ΄λ“œ

2. κΈ°λŠ₯ 상세

2.1 Protocol Calculator

λͺ©μ : μ‚¬μš©μžμ˜ λͺ©ν‘œμ— λ§žλŠ” μ˜¨λ„/μ‹œκ°„ μΆ”μ²œ

μž…λ ₯

  • λͺ©ν‘œ 선택: Mental Boost / Recovery / Wake Up / Beginner
  • κ²½ν—˜ 레벨: First time / Few times / Regular
  • κ°€μš© μ˜¨λ„ (선택)

좜λ ₯

  • ꢌμž₯ μ˜¨λ„ λ²”μœ„
  • ꢌμž₯ μ‹œκ°„
  • μ£Όκ°„ λΉˆλ„
  • 과학적 κ·Όκ±° ν•œ 쀄

ν”„λ‘œν† μ½œ 데이터

λͺ©ν‘œ μ˜¨λ„ μ‹œκ°„ λΉˆλ„
🧠 Mental Boost 35-45Β°F (1.6-7Β°C) 1-3λΆ„ 2-3회/μ£Ό
πŸ’ͺ Recovery 50-59Β°F (10-15Β°C) 10-15λΆ„ μš΄λ™ 직후
β˜€οΈ Wake Up 45-55Β°F (7-13Β°C) 2-5λΆ„ 맀일 OK
🌱 Beginner 55-65Β°F (13-18Β°C) 2-5λΆ„ 2-3회/μ£Ό

UX

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🎯 What's your goal?                   β”‚
β”‚                                         β”‚
β”‚  [🧠 Mental Boost]  [πŸ’ͺ Recovery]       β”‚
β”‚  [β˜€οΈ Wake Up]       [🌱 Beginner]       β”‚
β”‚                                         β”‚
β”‚  πŸ“Š Experience level?                   β”‚
β”‚  [First time] [Few times] [Regular]     β”‚
β”‚                                         β”‚
β”‚  🌑️ Temperature? (optional)            β”‚
β”‚  [___Β°F] or [Don't know]                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

           ↓ κ²°κ³Ό ↓

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ“Š Your Protocol                       β”‚
β”‚                                         β”‚
β”‚  🌑️ Temperature: 50-59Β°F (10-15Β°C)     β”‚
β”‚  ⏱️ Duration: 2-5 minutes               β”‚
β”‚  πŸ“… Frequency: 2-3x per week            β”‚
β”‚  🎯 Weekly Goal: 11 min total           β”‚
β”‚                                         β”‚
β”‚  πŸ’‘ "2-5뢄이면 μΆ©λΆ„, 더 였래 = 더 쒋은  β”‚
β”‚      게 μ•„λ‹˜"                           β”‚
β”‚                                         β”‚
β”‚  [ πŸš€ Start Timer ]                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.2 Smart Timer

λͺ©μ : ν”„λ‘œν† μ½œ 연동 μΉ΄μš΄νŠΈλ‹€μš΄ 타이머

κΈ°λŠ₯

  • μΉ΄μš΄νŠΈλ‹€μš΄ (ν”„λ‘œν† μ½œμ—μ„œ μžλ™ μ„€μ • λ˜λŠ” μˆ˜λ™)
  • 30μ΄ˆλ§ˆλ‹€ μ°¨μž„ μ•Œλ¦Ό
  • λ§ˆμ§€λ§‰ 10초 μΉ΄μš΄νŠΈλ‹€μš΄
  • μ˜¨λ„ μž…λ ₯ (μ„Έμ…˜ 기둝용)
  • 호흑 κ°€μ΄λ“œ μ˜€λ²„λ ˆμ΄ (ν† κΈ€)
  • +30초 μ—°μž₯ λ²„νŠΌ
  • μ™„λ£Œ μ‹œ μ„Έμ…˜ μ €μž₯ ν™”λ©΄μœΌλ‘œ 이동

μ‚¬μš΄λ“œ

이벀트 λ™μž‘
μ‹œμž‘ μ†Œλ¦¬ + 진동
30μ΄ˆλ§ˆλ‹€ λΆ€λ“œλŸ¬μš΄ μ°¨μž„
λ§ˆμ§€λ§‰ 10초 μΉ΄μš΄νŠΈλ‹€μš΄ λΉ„ν”„
μ™„λ£Œ μΆ•ν•˜ μ‚¬μš΄λ“œ + 진동

UX

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                         β”‚
β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚           β”‚             β”‚               β”‚
β”‚           β”‚    2:34     β”‚  ← 큰 숫자    β”‚
β”‚           β”‚   ───────   β”‚  ← ν”„λ‘œκ·Έλ ˆμŠ€ β”‚
β”‚           β”‚  🌑️ 52Β°F   β”‚  ← μ˜¨λ„ ν‘œμ‹œ  β”‚
β”‚           β”‚             β”‚               β”‚
β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                                         β”‚
β”‚  πŸ”” Next chime in 26s                   β”‚
β”‚                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ 🌬️ Breathe: IN... (4s)          β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                         β”‚
β”‚  [ +30s ]              [ End & Save ]   β”‚
β”‚                                         β”‚
β”‚  ν„°μΉ˜ μ˜μ—­: μ΅œμ†Œ 48px (젖은 손 κ³ λ €)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.3 Weekly Goal Tracker

λͺ©μ : SΓΈberg ν”„λ‘œν† μ½œ μ£Ό 11λΆ„ λͺ©ν‘œ 좔적

κΈ°λŠ₯

  • 이번 μ£Ό 총 μ‹œκ°„ / 11λΆ„ ν”„λ‘œκ·Έλ ˆμŠ€ λ°”
  • 일별 μ„Έμ…˜ ν‘œμ‹œ (μ™„λ£Œ ● / λ―Έμ™„λ£Œ β—‹)
  • 슀트릭 μΉ΄μš΄ν„° (연속 일수)
  • λͺ©ν‘œ μ»€μŠ€ν„°λ§ˆμ΄μ§• (κΈ°λ³Έ 11λΆ„)
  • λ§€μ£Ό μ›”μš”μΌ μžλ™ 리셋

UX

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🎯 This Week                           β”‚
β”‚                                         β”‚
β”‚  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘  7:30 / 11:00  β”‚
β”‚                                         β”‚
β”‚  Mon  Tue  Wed  Thu  Fri  Sat  Sun     β”‚
β”‚   ●    ●    β—‹    β—‹    β—‹    β—‹    β—‹      β”‚
β”‚  3:00 4:30                              β”‚
β”‚                                         β”‚
β”‚  πŸ”₯ 2 day streak                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.4 Session Logger

λͺ©μ : μ„Έμ…˜ 기둝 및 톡계

μ„Έμ…˜ μ™„λ£Œ ν›„ 기둝 ν•­λͺ©

  • λ‚ μ§œ/μ‹œκ°„ (μžλ™)
  • 체λ₯˜ μ‹œκ°„ (μžλ™)
  • 수온 (μž…λ ₯)
  • κΈ°λΆ„ (1-5 이λͺ¨μ§€)
  • λ©”λͺ¨ (선택)

톡계

  • 총 μ„Έμ…˜ 수
  • 총 μ‹œκ°„
  • 평균 μ˜¨λ„
  • 졜μž₯ μ„Έμ…˜
  • ν˜„μž¬ 슀트릭
  • μ£Όκ°„ 차트

μ €μž₯

  • localStorage (둜그인 없이)

UX β€” μ„Έμ…˜ μ™„λ£Œ ν›„

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸŽ‰ Session Complete!                   β”‚
β”‚                                         β”‚
β”‚  ⏱️ 3:24  @  🌑️ 52Β°F                   β”‚
β”‚                                         β”‚
β”‚  How do you feel?                       β”‚
β”‚  [😫] [😐] [πŸ™‚] [😊] [🀩]               β”‚
β”‚                                         β”‚
β”‚  πŸ“ Quick note (optional)               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                                  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                         β”‚
β”‚  [ Save ]  [ Discard ]                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

UX β€” νžˆμŠ€ν† λ¦¬

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ“Š Your History                        β”‚
β”‚                                         β”‚
β”‚  Total: 47 sessions | Best: 5:12        β”‚
β”‚  Avg temp: 52Β°F | πŸ”₯ 12 day streak      β”‚
β”‚                                         β”‚
β”‚  [μ£Όκ°„ λ°” 차트]                          β”‚
β”‚                                         β”‚
β”‚  Today, 7:32 AM                         β”‚
β”‚  β”œβ”€ 3:24 @ 48Β°F  πŸ™‚                     β”‚
β”‚  └─ "Felt energized!"                   β”‚
β”‚                                         β”‚
β”‚  Yesterday, 6:45 AM                     β”‚
β”‚  └─ 4:10 @ 52Β°F  😊                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.5 Breathing Guide

λͺ©μ : λ¬Ό μ•ˆμ—μ„œ μ•ˆμ „ν•œ 호흑 κ°€μ΄λ“œ

호흑 νŒ¨ν„΄

νŒ¨ν„΄ μ„€λͺ… λ¬Ό μ•ˆμ—μ„œ
Box (4-4-4-4) λ“€μˆ¨4s-μ°ΈκΈ°4s-λ‚ μˆ¨4s-μ°ΈκΈ°4s βœ… μ•ˆμ „
4-7-8 λ“€μˆ¨4s-μ°ΈκΈ°7s-λ‚ μˆ¨8s βœ… μ•ˆμ „
Wim Hof 과호흑 + 숨참기 ⚠️ λ¬Ό λ°–μ—μ„œλ§Œ

κΈ°λŠ₯

  • 타이머와 톡합 (μ˜€λ²„λ ˆμ΄)
  • μ‹œκ°μ  호흑 κ°€μ΄λ“œ (μ• λ‹ˆλ©”μ΄μ…˜)
  • 단계별 ν…μŠ€νŠΈ μ•ˆλ‚΄
  • νŒ¨ν„΄ λ³€κ²½ κ°€λŠ₯
  • 끄기/켜기 ν† κΈ€

UX

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🌬️ Box Breathing                       β”‚
β”‚                                         β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚         β”‚               β”‚               β”‚
β”‚         β”‚   BREATHE IN  β”‚               β”‚
β”‚         β”‚      4s       β”‚               β”‚
β”‚         β”‚    β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘   β”‚               β”‚
β”‚         β”‚               β”‚               β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                                         β”‚
β”‚  In 4s β†’ Hold 4s β†’ Out 4s β†’ Hold 4s    β”‚
β”‚                                         β”‚
β”‚  [ Pause ]  [ Change Pattern ]          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.6 Safety Tips

λͺ©μ : μ•ˆμ „ κ°€μ΄λ“œ 제곡

ν•„μˆ˜ λ‚΄μš©

주제 팁
μ†λ°œ 톡증 손은 λ¬Ό 밖에, λ°œμ€ ν’€ 슈즈 착용
호흑 Wim HofλŠ” λ¬Ό λ°–μ—μ„œλ§Œ!
초보자 2-3λΆ„ max, λΆˆνŽΈν•˜λ©΄ λ°”λ‘œ λ‚˜μ™€
μ‹œκ°„ 2-5뢄이면 μΆ©λΆ„, 더 였래 β‰  더 μ’‹μŒ
체온 회볡 μžμ—°μŠ€λŸ½κ²Œ 회볡, 뜨거운 μƒ€μ›Œ ❌

Warning Signs (μ¦‰μ‹œ 쀑단)

  • 🚨 톡증 (Pain)
  • 🚨 μ €λ¦Ό (Numbness)
  • 🚨 λ–¨λ¦Ό λ©ˆμΆ”μ§€ μ•ŠμŒ
  • 🚨 ν˜Όλž€ (Confusion)

μœ„μΉ˜

  • /guide νŽ˜μ΄μ§€
  • 타이머 μ‹œμž‘ μ „ κ²½κ³  (첫 μ‚¬μš©μž)
  • λ©΄μ±…μ‘°ν•­ ν‘Έν„°

3. νŽ˜μ΄μ§€ ꡬ쑰

/                  β†’ Protocol Calculator (ν™ˆ)
/timer             β†’ Smart Timer
/history           β†’ Session Logger + 톡계
/guide             β†’ Temperature Guide + Safety Tips

4. λ””μžμΈ κ°€μ΄λ“œ

4.1 원칙

  • λͺ¨λ°”일 퍼슀트 β€” μš•μ‘° μ˜†μ—μ„œ μ‚¬μš©
  • ν•œ 손 μ‘°μž‘ β€” ν„°μΉ˜ μ˜μ—­ 48px 이상
  • κ³ λŒ€λΉ„ β€” 밝은 ν™˜κ²½μ—μ„œλ„ 가독성
  • λΉ λ₯Έ λ‘œλ”© β€” LCP < 2.5초

4.2 컬러

Primary:    #00D4FF (Ice Blue)
Secondary:  #0A1628 (Deep Blue)
Accent:     #10B981 (Mint)
Warning:    #F59E0B (Orange)
Background: #111827 (Dark)

4.3 νƒ€μ΄ν¬κ·Έλž˜ν”Ό

  • 타이머 숫자: 큰 μ‚¬μ΄μ¦ˆ, λ³Όλ“œ
  • λ³Έλ¬Έ: 16px 이상 (λͺ¨λ°”일 가독성)

5. 기술 μŠ€νƒ

Framework: Vite + React 18
Language: TypeScript
Styling: Tailwind CSS + shadcn/ui
Animation: Framer Motion
Audio: Howler.js (Web Audio API)
Storage: localStorage (λΈŒλΌμš°μ € μ €μž₯, 둜그인 λΆˆν•„μš”)
Hosting: Cloudflare Pages

5.1 μ™œ 이 μŠ€νƒ?

선택 이유
Vite + React λΉŒλ“œ 빠름, λ²ˆλ“€ μž‘μŒ, 정적 μ‚¬μ΄νŠΈμ— 졜적
Cloudflare Pages 무료, κΈ€λ‘œλ²Œ CDN, μ„œλ²„ λΉ„μš© $0
localStorage λ°±μ—”λ“œ 없이 μ„Έμ…˜ 기둝 μ €μž₯
Tailwind + shadcn λΉ λ₯Έ UI 개발, μΌκ΄€λœ λ””μžμΈ

5.2 배포

# λΉŒλ“œ
npm run build

# Cloudflare Pages μ—°κ²°
# - GitHub repo μ—°κ²°
# - Build command: npm run build
# - Output directory: dist

5.3 폴더 ꡬ쑰

src/
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ Calculator/      # Protocol Calculator
β”‚   β”œβ”€β”€ Timer/           # Smart Timer
β”‚   β”œβ”€β”€ Tracker/         # Weekly Goal Tracker
β”‚   β”œβ”€β”€ Logger/          # Session Logger
β”‚   β”œβ”€β”€ Breathing/       # Breathing Guide
β”‚   └── ui/              # shadcn μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ hooks/
β”‚   β”œβ”€β”€ useTimer.ts
β”‚   β”œβ”€β”€ useStorage.ts
β”‚   └── useAudio.ts
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ protocols.ts     # ν”„λ‘œν† μ½œ 데이터
β”‚   └── storage.ts       # localStorage μœ ν‹Έ
β”œβ”€β”€ pages/
β”‚   β”œβ”€β”€ index.tsx        # / (Calculator)
β”‚   β”œβ”€β”€ timer.tsx        # /timer
β”‚   β”œβ”€β”€ history.tsx      # /history
β”‚   └── guide.tsx        # /guide
└── styles/
    └── globals.css

6. λ©΄μ±…μ‘°ν•­

λͺ¨λ“  νŽ˜μ΄μ§€ 푸터에 ν‘œμ‹œ:

⚠️ This tool provides general wellness guidance only. It is not medical advice. Cold water immersion carries risks. Consult a healthcare professional before starting. Listen to your body and prioritize safety.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment