KKC Labs/포트폴리오/GYMKC

AI 트레이너를,
인터넷 없이도.

세트마다 다음 무게·휴식을 정해주는 AI 헬스 트레이너. 실시간 처방은 순수 로컬 엔진으로 오프라인 100%, AI는 그 위에 코칭을 얹습니다.

유형자체 프로덕트 · Play 비공개 테스트
역할기획 · 디자인 · 개발 · 인프라 · AI
사이트gymkc.org →
스택
React 19순수 TS 엔진CapacitorCF D1AI
GYMKC 화면

GYMKC 홈 · 데모 데이터 화면

// the brief

기록하는 앱은 많다. 정해주는 앱이 없을 뿐.

헬스 앱은 넘치지만 대부분 '기록'만 합니다. 정작 세트 중에 "다음은 몇 kg으로?"를 정해주는 앱은 드물죠. 게다가 AI 앱은 인터넷이 끊기면 무용지물인데, 헬스장은 지하·구석이라 신호가 약합니다.

운동하는 그 순간에 작동하지 않는 코치는 의미가 없습니다. 그래서 목표를 하나로 잡았어요. 인터넷이 없어도, 서버가 죽어도, 다음 세트를 정확히 정해주는 트레이너.

// approach

실시간 결정은 AI가 아니라, 엔진이 한다.

휴식 시간·다음 세트 무게·횟수 같은 실시간 처방을 LLM이 아니라 순수 TypeScript 로컬 엔진으로 만들었습니다. 인터넷도 서버도 없이 폰 안에서 100% 돕니다. AI(Claude·Gemini)는 그 위에 코칭·분석·대화를 얹는 보조 역할이고요.

엔진이 처방의 정본, AI는 코칭 보조. 이 원칙을 처음부터 끝까지 지켰습니다. 운동 중 결정에는 LLM이 한 번도 끼어들지 않습니다.

// key decisions

믿을 수 있는 코치를 만든 세 가지.

01

실시간 처방 = 로컬 엔진 (오프라인 100%)

다음 세트 무게·휴식·프로그레션을 순수 TS 엔진이 계산합니다. 인터넷이 끊겨도, 서버가 죽어도 운동은 안 멈춰요. 처방 로직은 130개 넘는 유닛 테스트로 고정해, 앱이 바뀌어도 결정이 흔들리지 않게 했습니다.

02

AI는 코칭 보조 (비용까지 설계)

챗·세션 분석·주간 리포트는 AI가 맡습니다. 비용은 구독 정액으로 고정하고 한도 초과분만 저렴한 모델로 폴백해서, 사용자가 늘어도 원가가 터지지 않게 설계했어요. 무료 사용자의 한계비용은 사실상 0.

03

진짜 네이티브 (Capacitor + Health Connect)

웹 PWA를 안드로이드 네이티브로 감싸 삼성헬스에 운동 기록을 쓰고, 백그라운드 휴식 알림을 보냅니다. 웹만으론 못 하는 걸 네이티브 브리지로 이었습니다.

실시간 조절도 세밀합니다. 휴식이 길어지면 다음 세트를 자동으로 줄이고, 컨디션이 나쁜 날은 볼륨을 낮춥니다. 드롭세트·디로드 같은 특수 세트는 강도 지표에서 정확히 걸러내 다음 처방이 오염되지 않게 했고요. 전부 엔진이, 오프라인에서.

// offline-first

'오프라인 우선'은 구호가 아니라 설계다.

운동 기록·타이머·세트 처방이 전부 폰 안(로컬 DB + 엔진)에서 돕니다. 서버(Cloudflare D1)는 여러 기기 동기화 대상일 뿐이에요. 그래서 동시 접속이 1만 명이어도 '운동하는 순간'의 서버 부하는 0입니다. 부하가 걸리는 건 동기화와 AI 잡뿐이고, 그건 큐로 분리했습니다.

로컬 TS 엔진Dexie 오프라인outbox 동기화다기기 LWW지문·패스키 로그인

// result

지금도 굴러가는, 상용 준비된 앱.

Google Play 비공개 테스트로 운영 중이고 구독 모델입니다. 갤럭시 S25 실기기로 반복 검증하며, 헤드리스 E2E와 130개 넘는 유닛 테스트로 잠복 버그까지 잡아냈어요. 슈퍼세트·플레이트 계산기·회복 히트맵 같은 기능이 계속 붙고 있습니다.

100%
오프라인 처방 (인터넷 불필요)
130+
엔진 처방 유닛 테스트
2
로컬 엔진 + AI 코칭 구조
← 이전QUICKCUT

// 이런 걸 만들어 드립니다.

비슷한 프로젝트 문의 → 다른 프로젝트 보기