1. 아키텍처 원칙

  • 백엔드는 DDD + 헥사고날 구조다. 기능은 clover/apps/{fridge, auth, weather, ...} 바운디드 컨텍스트(스포크)로 나눈다.
  • 스포크끼리 직접 import하지 않는다. 외부 연동(OCR, 이미지 저장소, 날씨)은 포트/어댑터로 감싼다.
  • 외부 API는 실패를 전제로 설계한다. 날씨는 OpenWeather → Open-Meteo → 서울, 레시피는 Gemini → 준비된 레시피 순으로 폴백한다.

2. 하네스 — 코드 작성 후 필수 실행

린터 에러는 무시하지 않는다. 수정한 뒤에 완료로 본다.

영역명령
Flutter (fortune/)flutter analyze --fatal-infos · dart format --set-exit-if-changed .
Python (clover/)ruff check . --fix · ruff format . · mypy .
Next.js (lucky/)npm run lint · npx prettier --write .

3. 설계 문서

기능마다 설계(design)와 구현 계획(plan)을 먼저 쓰고 구현한다. 저장소 _docs/에 있다.

기능핵심 결정작성
식재료 카탈로그 둘러보기앱 시작하기가 동작하지 않던 문제 → 인증 없는 공개 카탈로그, 멱등 시드 스크립트8.2
위치 기반 날씨위젯 탭 시 위치 권한 요청, 한글 지명, /weather는 항상 200, lat/lon 한쪽만 오면 4228.1
영수증 → 재고OCR·이미지 리더 포트 분리, 사용자 확인 후 저장, DB 저장·알림은 범위 밖8.4
소셜 로그인 사전가입"로그인이 곧 가입"을 막음, provider 일치 필수, 우회 라우터 제거8.2