심박 앱에는 서로 다른 방향으로 당기는 두 책임이 있습니다. 기록을 충분히 남겨야 유용하지만, 개인 건강 데이터를 일반 분석 데이터처럼 다루면 안 됩니다. MonoPump는 이 균형에서 로컬 우선을 선택합니다.

측정 알고리즘이 주목받기 쉽지만, 결과 화면이 사라진 뒤 제품이 믿을 만한지는 데이터 층이 결정합니다.
기록은 의도적으로 작게 유지한다
한 번의 심박 기록이 의료 차트처럼 커질 필요는 없습니다. MonoPump는 날짜, BPM, 사용자, 선택적 상황, 품질, 신뢰도, 측정 시간, 출처, 메모 정도만 저장합니다.
This diagram could not be rendered. Its source is still available below.
View diagram source
erDiagram
USER ||--o{ HEART_RATE_RECORD : owns
USER {
uuid id
string name
string avatar
}
HEART_RATE_RECORD {
uuid id
date measuredAt
int bpm
double qualityScore
double confidenceScore
string context
string source
}
절제는 의도된 설계입니다. 경험을 개선하지 않고 사용자가 요구하지 않은 필드는 쉽게 모을 수 있다는 이유만으로 모으지 않습니다.
로컬 저장은 제품 경계를 바꾼다
MonoPump는 Application Support 아래 JSON 파일에 기록을 저장하고, 원자적 쓰기와 iOS 파일 보호를 사용합니다. UserDefaults는 가벼운 설정과 마이그레이션 호환에 남겨 둡니다.
This diagram could not be rendered. Its source is still available below.
View diagram source
flowchart LR
A[측정 결과] --> B[HeartRateViewModel]
B --> C[JSON 인코딩]
C --> D[원자적 쓰기]
D --> E[Application Support]
E --> F[iOS file protection]
기본 흐름에 계정, 서버, 동기화 한도, 네트워크 권한이 필요 없다는 뜻입니다.
추세는 진단이 아니라 설명이어야 한다
분석 층은 일부러 겸손합니다. 평균, 중앙값, 최소, 최대, 최근 윈도우 비교, 활성 일수, 품질 요약을 계산합니다. HRV, 스트레스, 수면 품질, 질병 위험, 치료 조언은 추론하지 않습니다.
This diagram could not be rendered. Its source is still available below.
View diagram source
flowchart TD
R[저장된 BPM 기록] --> S[날짜순 정렬]
S --> A[평균과 중앙값]
S --> M[최소와 최대]
S --> W[최근과 이전 윈도우 비교]
S --> Q[품질 요약]
A --> O[설명적 인사이트]
M --> O
W --> O
Q --> O
소비자 카메라 앱은 패턴을 알아차리도록 도울 수 있지만 의사처럼 행동해서는 안 됩니다. 적게 모으고, 로컬에 저장하고, 조심스럽게 설명하고, 사용자가 원할 때 내보낸다. 이것이 MonoPump의 기준입니다.