01. 한 줄로 보는 차곡노트
차곡노트
반려동물 미용 매장이 예약 · 고객 · 미용 기록을 관리하고, 보호자에게 서명된 링크로 미용 알림장을 보내는 멀티테넌트 플랫폼
- Python 3.13
- FastAPI
- SQLAlchemy 2 · Alembic
- PostgreSQL
- Flutter
- Next.js 16
- MinIO · S3
- Caddy
- Docker Compose
↓ 스크롤 또는 ← → 키로 넘기기
02. 설계 원칙 - AI가 대량으로 짜도 구조가 무너지지 않게
혼자서 10일 동안 커밋 399개를 만들었고, 그중 389개를 AI 코딩 어시스턴트와 함께 썼습니다. 속도보다 경계를 먼저 고정했습니다 — 설계 문서, 구현 계획, 참조 브랜치 검증, 그리고 기계가 검사하는 계약.
근거: backend/.importlinter — 계약 6종 (비공개 저장소) · _docs/decisions/002-hub-port-assembly.md
03. 멀티테넌시 - 매 요청마다 소속을 다시 확인
한 DB를 여러 매장이 함께 씁니다. 가드 하나만 빠뜨려도 다른 매장 데이터가 새기 때문에, 확인을 라우터 가드로 옮기고 누락은 구조 테스트가 잡게 했습니다.
근거: backend/core/shop_guard.py (비공개 저장소) · backend/tests/route_inspection.py
04. 알림장 서명 링크 - 로그인 없이, 새지 않게
보호자는 앱을 깔지 않습니다. 링크 하나로 미용 기록을 보여 주되, DB가 유출되거나 접속 기록이 남거나 추측 공격을 받아도 열리지 않게 설계했습니다.
근거: _docs/decisions/008-report.md (비공개 저장소) · backend/apps/visit/domain/services/report_token.py
05. 사진 · 영상은 서버를 거치지 않는다
긴 변 3000px 사진과 최대 200MB 영상을 올려야 했습니다. 서버는 짧게 유효한 업로드 출입증만 발급하고, 앱이 저장소에 직접 올리게 했습니다.

근거: docs/superpowers/specs/2026-09-24-record-media-design.md (비공개 저장소)
06. 고객 검색 - 번호 뒷자리 · 이름 · 초성을 한 칸에서
미용실 사장님은 검색창 하나에 전화 뒷자리도, 보호자 이름도, 반려동물 이름도, 초성(ㄱㅁㅈ)도 칩니다. 검색용 한 줄을 따로 만들어 색인을 걸었습니다.

근거: docs/superpowers/specs/2026-09-22-customer-pet-design.md (비공개 저장소)
