md/design.md 기반으로 생성된 PinPick 초기 구현입니다.
backend/: Node.js + TypeScript + Express + MongoDB + Redisflutter_app/: Flutter + Riverpod + go_router 클라이언트md/design.md: 원본 설계 문서
- MongoDB 컬렉션
users: 이메일, 보유 카드(my_cards, 최대 3개)cards: 카드 마스터 + 비정형 혜택 텍스트
- Redis 키
user:{user_id}:strategy:{YYYY-MM}- TTL: 40일
- API
GET /api/strategy/monthly?userId=<id>GET /api/cards?company=...&keyword=...POST /api/cardsGET /api/users/:userId/cardsPOST /api/users/:userId/cards/:cardIdDELETE /api/users/:userId/cards/:cardId
- 카드 추가/삭제 시 해당 월 전략 캐시 무효화(
DEL) 처리
cd backend
cp .env.example .env
npm install
npm run devSearchCardScreen: 카드사 선택 + 카드명 검색 + 수동 입력 필드CardDetailScreen: 카드 혜택 확인 + 로그인 분기 + 내 카드 등록MainDashboardScreen: 등록 카드 가로 리스트 + 월간 전략 위젯LoginScreen: 데모 로그인
cd flutter_app
flutter pub get
flutter run --dart-define=API_BASE_URL=http://localhost:4000백엔드 .env 예시:
PORT=4000
MONGODB_URI=mongodb://localhost:27017/pinpick
REDIS_URI=redis://localhost:6379
AI_PROVIDER_BASE_URL=https://api.openai.com/v1
AI_PROVIDER_API_KEY=
AI_PROVIDER_MODEL=gpt-4o-miniAI_PROVIDER_API_KEY가 비어 있으면 백엔드에서 규칙 기반 fallback 전략 문구를 생성합니다.
설계서 검증 항목을 반영한 단위 테스트가 포함되어 있습니다.
cd backend
npm test