Solo Product · Plan to Ship

Algofit

알고리즘 학습 앱을 기획·디자인부터 모바일/웹 클라이언트, 동기화 서버, 학습 콘텐츠까지 1인으로 제품화. Flutter 모바일 + React PC 웹 + 자체호스팅 경량 동기화 서버(Node·Hono·SQLite), 기획·ADR 문서 주도 개발.

FlutterReact + ViteTypeScriptNode.js (Hono)SQLiteProduct Docs·ADR
GitHub Org 보기

핵심 기술 구현

크로스플랫폼 클라이언트, 오프라인 우선 동기화, 문서 주도 개발 — 1인 제품화의 핵심 과제 해결

크로스플랫폼 클라이언트

Flutter 모바일(iOS/Android)과 React PC 웹을 함께 개발. PC 웹은 긴 Blank·코딩 문제 등 데스크톱 경험을 검증하는 레퍼런스 UI 역할.

게스트 진행 동기화 서버

Node + Hono + SQLite 자체호스팅 경량 서버. 진행 데이터를 opaque JSON으로 취급하고 last-write-wins(updatedAt)로만 갱신 판단 — 서버가 스키마를 몰라도 클라이언트가 자유롭게 진화.

위협 모델에 맞춘 최소 인증

token = HMAC-SHA256(SYNC_SECRET, guestId) 소유 증명. "게스트 진행은 민감 데이터가 아니다"라는 위협 모델을 문서에 명시하고, 그에 맞는 최소한의 방어만 설계.

충돌 처리 프로토콜

PUT 시 서버에 더 최신본이 있으면 409 stale + 현재본을 응답, 클라이언트가 채택. 단순한 규칙으로 멀티 디바이스 동기화 충돌을 예측 가능하게 처리.

문서 주도 제품 개발

기획·MVP 스코프·ADR·디자인 에셋을 별도 docs 저장소로 관리. MVP Must 범위를 정의하고 완료 — 학습 문항 콘텐츠(pick 50 + blank 30)까지 직접 제작.

테스트·타입 안전

서버는 테스트 + typecheck 스크립트를 기본 제공. 클라이언트-서버 계약(409 stale, 인증 실패 등)을 상태 코드 단위로 명세.

아키텍처 하이라이트

01

4-레포 제품 구조

algofit-mobile(Flutter) / algofit-web(React) / algofit-server(Node) / algofit-docs(기획·ADR·디자인). 클라이언트·서버·문서를 독립 저장소로 분리해 각자의 릴리스 리듬 유지.

mobile · web · server · docs
02

Opaque 동기화 프로토콜

서버는 guestId당 진행 JSON 1건을 불투명하게 저장. 스키마 검증·병합을 하지 않아 서버는 극도로 단순해지고, 진행 데이터 구조 변경이 서버 배포와 완전 분리.

PUT {updatedAt, data} → 200 | 409 stale
03

오프라인 우선 + 선택적 동기화

게스트 진행은 로컬 저장(localStorage/로컬 DB)이 기본, 서버 동기화는 설정 주입 시에만 활성화. 서버 없이도 완전히 동작하는 오프라인 우선 설계.

local-first · sync only if VITE_SYNC_* provided
3
Clients + Server
80
Questions (직접 제작)
MVP
Must 범위 완료
LWW
Sync Protocol

기술적 의사결정

DECISION 01

왜 last-write-wins인가

단일 사용자의 학습 진행 데이터는 동시 편집 충돌이 드묾. CRDT·필드 병합 같은 복잡한 동기화 대신 updatedAt 비교 + 409 채택 규칙으로 단순성과 예측 가능성을 선택.

DECISION 02

왜 서버가 데이터를 모르게 하는가

진행 데이터 스키마는 제품 초기에 자주 바뀜. 서버가 opaque하게 저장하면 클라이언트 스키마 진화가 서버 배포와 분리되고, 서버 코드는 저장/조회/버전 비교만 남음.

DECISION 03

왜 HMAC 소유 증명 "만" 인가

민감 데이터가 아닌 게스트 진행에 로그인 체계는 과잉. "무작위 guestId 덮어쓰기 방지" 수준의 위협 모델을 명시하고 HMAC 소유 증명으로 충분하다고 판단 — 요구가 커지면 인증을 얹는 확장 경로도 문서화.