● Active cycling FastAPI · Jinja2 · HTMX · SQLite

CPET PlatformCPET 플랫폼

Multi-source CPET analysis platform — handles COSMED, FIT, ZWO, lactate CSV, and INSCYD PDF through a structured intake model with protocol context tagging, dual analysis pipelines, and a cohort analytics dashboard. 멀티소스 CPET 분석 플랫폼 — COSMED, FIT, ZWO, 젖산 CSV, INSCYD PDF를 프로토콜 컨텍스트 태깅이 있는 구조화 인테이크로 처리하고, 이중 분석 파이프라인과 코호트 분석 대시보드를 제공합니다.

Overview개요

CPET Platform is built on FastAPI, Jinja2, and HTMX with two SQLite layers — a central platform database and per-workspace analysis databases. Five source types (COSMED Excel, FIT, ZWO, lactate CSV, INSCYD PDF) flow through a structured intake model with protocol context tagging. Two parallel analysis paths produce durable artifacts: workspace analysis tables, published HTML reports, and subject-linked metric snapshots.

CPET Platform은 FastAPI, Jinja2, HTMX 위에 두 개의 SQLite 레이어로 구축됩니다 — 중앙 플랫폼 DB와 워크스페이스별 분석 DB. 다섯 가지 소스 타입(COSMED Excel, FIT, ZWO, 젖산 CSV, INSCYD PDF)이 프로토콜 컨텍스트 태깅을 포함한 구조화 인테이크로 처리됩니다. 두 병렬 분석 경로가 워크스페이스 분석 테이블, 발행 HTML 리포트, 피험자 연결 metric snapshot을 생성합니다.

FastAPI Jinja2 HTMX SQLite (×2) COSMED Pipeline INSCYD PDF Parser Bun Channel

Problem문제

Three structural gaps prevented researchers from working with CPET data efficiently across subjects and sessions.

세 가지 구조적 문제가 피험자 및 세션 간 CPET 데이터 효율적 분석을 방해했습니다.

🗃️
Test data stayed isolated by source and session검사 데이터가 소스별·세션별로 고립돼 있었다

COSMED exports, FIT files, ZWO plans, and INSCYD PDFs lived in separate tools with no shared model. Connecting a subject's lab test to their training context meant re-assembling context from scratch every time.

COSMED 내보내기, FIT 파일, ZWO 계획, INSCYD PDF가 각각 다른 도구에 저장됐고 공유 모델이 없었습니다. 피험자의 랩 테스트와 훈련 컨텍스트를 연결하려면 매번 처음부터 다시 조립해야 했습니다.

📊
No cohort-level view of readiness or trends코호트 수준에서 준비도나 추세를 볼 방법이 없었다

Each report answered one subject's question. There was no way to read across the cohort — who had usable current-state data, who had enough longitudinal history to interpret trends.

각 리포트는 한 피험자의 질문에만 답했습니다. 코호트 전체를 읽는 방법이 없었습니다 — 현재 상태 데이터가 충분한 피험자, 변화 추세 해석이 가능한 피험자를 파악할 수 없었습니다.

🔬
INSCYD results lived outside the platform data modelINSCYD 결과가 플랫폼 데이터 모델 밖에 존재했다

INSCYD PDFs — VLamax, FatMax, body composition, training zone tables — had no path into the same workspace and feature-set model used for COSMED data. Interpretation had to be done manually, disconnected from the cohort.

INSCYD PDF의 VLamax, FatMax, 체성분, 훈련 구역 표가 COSMED 데이터에 사용되는 워크스페이스·feature set 모델로 편입되는 경로가 없었습니다.


Approach접근법

🔬
Multi-source intake with protocol context, dual analysis paths, and a cohort analytics layer프로토콜 컨텍스트를 갖춘 멀티소스 인테이크, 이중 분석 경로, 코호트 분석 레이어

File submissions carry protocol context (test purpose, target outputs, block intents) and are routed to either the COSMED pipeline or the INSCYD standalone flow. Both paths produce durable artifacts: workspace analysis tables, published HTML reports, and subject-linked metric snapshots. A cohort analytics dashboard aggregates readiness KPIs, a protected notes catalog serves research reference material, and a manage screen exposes snapshot and feature-set explorers for QA and experiment preparation.

파일 제출은 프로토콜 컨텍스트(검사 목적, 목표 출력값, 블럭 의도)를 담고 COSMED 파이프라인 또는 INSCYD 독립 흐름으로 라우팅됩니다. 두 경로 모두 영속 아티팩트를 생성합니다. 코호트 분석 대시보드가 준비도 KPI를 집계하고, 보호된 노트 카탈로그가 연구 참고 자료를 제공합니다.


Features기능

01
INSCYD PDF to Linked Interpretation ReportINSCYD PDF에서 연결 해석 리포트까지

The dedicated INSCYD flow parses VLamax, VO2max, FatMax, body composition, and training zones from the PDF, optionally fuses a FIT file and ZWO plan, and publishes an interpretation report linked into the platform's subject and snapshot model.

전용 INSCYD 흐름이 PDF에서 VLamax, VO2max, FatMax, 체성분, 훈련 구역을 파싱하고, 선택적으로 FIT 파일과 ZWO 계획을 결합하며, 피험자·snapshot 모델에 연결된 해석 리포트를 발행합니다.

02
Cohort Analytics Dashboard with Subject Drill-in피험자 드릴-인을 갖춘 코호트 분석 대시보드

The analytics view aggregates cohort readiness KPIs (subjects with usable current-state data, subjects with enough longitudinal history), VO2max and FatMax metric coverage, anonymized cohort distribution, and per-subject positioning widgets with current state and trend panels.

분석 뷰가 코호트 준비도 KPI, VO2max·FatMax 지표 커버리지, 익명화된 코호트 분포, 현재 상태·추세 패널을 갖춘 피험자별 positioning widget을 집계합니다.

03
Protocol-Aware Structured Upload프로토콜 인식 구조화 업로드

Each submission captures the clinical question alongside raw files: test purpose (FatMax, threshold, VO2max, FTP check, or mixed), target output metrics, and per-block intents for interval sessions. Protocol context drives report emphasis and is preserved for reruns.

각 제출은 원본 파일과 함께 임상 질문을 저장합니다: 검사 목적(FatMax, 역치, VO2max, FTP 확인, 복합), 목표 출력 지표, 인터벌 세션의 블럭별 의도. 프로토콜 컨텍스트가 리포트 강조점을 결정합니다.

04
Research Notes, Snapshot Explorers, Duplicate Detection연구 노트, Snapshot 탐색기, 중복 탐지

Protected markdown notes serve clinical reference material inside the platform. The manage screen exposes snapshot and feature-set explorers with CSV/JSON export and comparison views. Duplicate clusters surface fingerprint-matched submissions for review before pipeline runs.

보호된 마크다운 노트가 플랫폼 내에서 임상 참고 자료를 제공합니다. 관리 화면은 CSV/JSON 내보내기·비교 뷰를 갖춘 snapshot·feature set 탐색기를 노출하고, 중복 클러스터는 파이프라인 실행 전 지문 매칭된 제출물을 표시합니다.


Architecture아키텍처

COSMED / FIT ZWO / Lactate INSCYD PDF FastAPI + Jinja2 + HTMX Bun Channel Webhook COSMED Pipeline INSCYD Pipeline Reports + Dashboard
Client클라이언트 Server서버 Pipeline / Service파이프라인 / 서비스 External Source외부 소스

Metrics메트릭

Input Types입력 타입
5
COSMED Excel, FIT, ZWO, lactate CSV, INSCYD PDFCOSMED Excel, FIT, ZWO, 젖산 CSV, INSCYD PDF
Analysis Paths분석 경로
2
COSMED metabolic pipeline and INSCYD standalone flowCOSMED 대사 파이프라인과 INSCYD 독립 흐름 병렬 운영
SQLite LayersSQLite 레이어
2
Central platform DB plus per-workspace analysis DB중앙 플랫폼 DB와 워크스페이스별 analysis DB
Analytics Surfaces분석 표면
4
Cohort dashboard, subject drill-in, profile trends, manage explorers코호트 대시보드, 피험자 드릴-인, 프로필 추세, 관리 탐색기

Before / After

BeforeAfter
Five source types processed in separate tools with no shared subject model다섯 가지 소스 타입을 공유 피험자 모델 없이 각기 다른 도구로 처리 Single structured intake flow for all five source types including INSCYD PDFINSCYD PDF 포함 다섯 가지 소스 타입 전체를 위한 단일 구조화 인테이크 흐름
Report generation answered one question per session, no path to aggregation리포트 생성이 세션별로 단 하나의 질문에만 답하며 집계로 이어지는 경로가 없었다 Cohort analytics dashboard shows subjects with current state, repeat-measurement readiness, and VO2max/FatMax distribution코호트 분석 대시보드가 현재 상태 데이터 보유 피험자, 반복 측정 준비도, VO2max·FatMax 분포를 표시
INSCYD PDFs, research notes, and cohort validation lived outside the platformINSCYD PDF, 연구 노트, 코호트 검증이 플랫폼 밖 별도 장소에 흩어져 있었다 Integrated platform: INSCYD flow, protected research notes catalog, snapshot and feature-set explorers통합 플랫폼: INSCYD 흐름, 보호된 연구 노트 카탈로그, snapshot·feature set 탐색기