AI κΈ°λ° μμμ 보 λΆμ λ° κ°μΈ λ§μΆ€ μμ κ΄λ¦¬ μλΉμ€
DecodEatλ μ νμ μμμ±λΆνλ₯Ό 촬μνλ©΄ AIκ° μλμΌλ‘ λΆμνμ¬ μμμ 보λ₯Ό μκ°ννκ³ , κ°μΈμκ² λ§λ 건κ°ν μ νμ μΆμ²ν΄μ£Όλ μΉ μλΉμ€μ λλ€.
- μ ν μμμ±λΆν μ¬μ§ μ λ‘λ
- AI κΈ°λ° μλ μμμ 보 μΆμΆ λ° λΆμ
- λλκ·Έ μ€ λλ‘ λ° ν΄λ¦½λ³΄λ μ§μ
- μμμλ³ μκ°μ μ°¨νΈ μ 곡 (Chart.js)
- κΆμ₯ μμ·¨λ λλΉ λΉκ΅ λΆμ
- μΈλΆ μμμ μ 보 νμ
- μ¬μ©μ νλ κΈ°λ° μ ν μΆμ²
- μμμ κΈ°λ° μ μ¬ μ ν μΆμ²
- μ’μμ κΈ°λ₯μΌλ‘ κ΄μ¬ μ ν κ΄λ¦¬
- μ£Όμ μμμλ³ μμΈ μ 보 μ 곡
- κΆμ₯ μμ·¨λ λ° ν¨λ₯ μλ΄
- OAuth2 κΈ°λ° μΉ΄μΉ΄μ€ μμ λ‘κ·ΈμΈ
- μλ ν ν° κ°±μ λ° μΈμ¦ κ΄λ¦¬
- κ°μΈμ 보 κ΄λ¦¬
- λΆμ μ΄λ ₯ μ‘°ν
- μ’μμν μ ν λͺ©λ‘
- κ΄λ¦¬μ ν¨λ (μ κ³ κ΄λ¦¬)
- React 19.1 - μ΅μ React λ²μ
- TypeScript - νμ μμ μ±
- Vite - λΉ λ₯Έ λΉλ λꡬ
- React Router 7.7 - ν΄λΌμ΄μΈνΈ μ¬μ΄λ λΌμ°ν
- Zustand 5.0 - κ°λ²Όμ΄ μ μ μν κ΄λ¦¬
- TanStack React Query 5.85 - μλ² μν κ΄λ¦¬ λ° μΊμ±
- Tailwind CSS 4.1 - μ νΈλ¦¬ν° μ°μ CSS
- Pretendard - νκΈ ν°νΈ
- Axios 1.11 - HTTP ν΄λΌμ΄μΈνΈ
- OAuth2 - μΉ΄μΉ΄μ€ μμ λ‘κ·ΈμΈ
- JWT - ν ν° κΈ°λ° μΈμ¦
- React Hook Form 7.62 - νΌ μν κ΄λ¦¬
- Zod 4.1 - μ€ν€λ§ κΈ°λ° λ°μ΄ν° κ²μ¦
- Chart.js 4.5 - μ°¨νΈ λΌμ΄λΈλ¬λ¦¬
- react-chartjs-2 - React λνΌ
- Lucide React 0.526 - μμ΄μ½ μ»΄ν¬λνΈ
- ESLint - μ½λ νμ§ κ΄λ¦¬
- Prettier - μ½λ ν¬λ§€ν
- Node.js 18 μ΄μ
- pnpm (κΆμ₯)
# μμ‘΄μ± μ€μΉ
pnpm install
# κ°λ° μλ² μ€ν
pnpm dev
# νλ‘λμ
λΉλ
pnpm build
# λΉλ 미리보기
pnpm preview
# λ¦°νΈ κ²μ¬
pnpm lintνλ‘μ νΈ λ£¨νΈμ .env νμΌμ μμ±νκ³ λ€μ νκ²½ λ³μλ₯Ό μ€μ νμΈμ:
VITE_API_BASE_URL=your_api_base_url
VITE_KAKAO_CLIENT_ID=your_kakao_client_id
VITE_KAKAO_REDIRECT_URI=your_redirect_urisrc/
βββ apis/ # API ν΅μ λ μ΄μ΄
β βββ axios.ts # Axios μΈμ€ν΄μ€ + μΈν°μ
ν°
β βββ auth.ts # μΈμ¦ API
β βββ product.ts # μ ν API
β βββ productList.ts # μ ν λͺ©λ‘ API
β βββ productDetail.ts # μ ν μμΈ API
β βββ enroll.ts # μ ν λ±λ‘ API
β βββ like.ts # μ’μμ API
β βββ analysis.ts # λΆμ API
β βββ report.ts # μ κ³ API
β βββ adminReports.ts # κ΄λ¦¬μ μ κ³ API
β
βββ components/ # μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈ
β βββ detail/ # μμΈ νμ΄μ§
β β βββ NutritionChart.tsx
β β βββ DetailedNutrients.tsx
β β βββ RecommendedProducts.tsx
β β βββ PieChart.tsx
β β βββ NutritionEditForm.tsx
β βββ search/ # κ²μ
β β βββ ProductGrid.tsx
β β βββ SearchBanner.tsx
β β βββ SearchProductGrid.tsx
β β βββ ProductGridSkeleton.tsx
β βββ home/ # ν
β β βββ UserBehaviorRecommendation.tsx
β βββ myPage/ # λ§μ΄νμ΄μ§
β β βββ PersonalInfo.tsx
β β βββ AnalysisResults.tsx
β β βββ LikedProducts.tsx
β β βββ Settings.tsx
β βββ admin/ # κ΄λ¦¬μ
β β βββ AdminReports.tsx
β β βββ AdminReportDetail.tsx
β βββ enroll/ # λ±λ‘
β β βββ UploadSlot.tsx
β βββ gnb/ # λ€λΉκ²μ΄μ
β β βββ TopGNB.tsx
β βββ ui/ # κ³΅ν΅ UI
β βββ Modal.tsx
β βββ MessageModal.tsx
β βββ Pagination.tsx
β βββ FilterBox.tsx
β βββ Skeleton.tsx
β
βββ pages/ # νμ΄μ§ μ»΄ν¬λνΈ
β βββ HomePage.tsx # ν
β βββ DetailPage.tsx # μ ν μμΈ
β βββ EnrollPage.tsx # μ ν λ±λ‘
β βββ SearchPage.tsx # κ²μ
β βββ MyPage.tsx # λ§μ΄νμ΄μ§
β βββ LoginPage.tsx # λ‘κ·ΈμΈ
β βββ OnboardingPage.tsx # μ¨λ³΄λ©
β βββ SupportPage.tsx # κ³ κ° μ§μ
β βββ NutritionEncyclopediaPage.tsx # μμμ λ°±κ³Όμ¬μ
β βββ ErrorPage.tsx # μλ¬
β
βββ hooks/ # 컀μ€ν
ν
β βββ useAuth.ts # μΈμ¦
β βββ useEnroll.ts # μ ν λ±λ‘
β βββ useLike.ts # μ’μμ
β βββ useProduct.ts # μ ν κ²μ
β βββ useProductList.ts # μ ν λͺ©λ‘
β βββ useProductDetail.ts # μ ν μμΈ
β βββ useAnalysis.ts # λΆμ
β βββ useReport.ts # μ κ³
β βββ useAdminReports.ts # κ΄λ¦¬μ μ κ³
β βββ useAdminReportDetail.ts
β βββ useSearch.ts # κ²μ
β βββ useMessageModal.ts # λͺ¨λ¬
β
βββ store/ # Zustand μν κ΄λ¦¬
β βββ useAuthStore.ts # μΈμ¦ μν
β βββ useStore.ts # μ μ μν
β
βββ types/ # TypeScript νμ
μ μ
β βββ auth.ts
β βββ product.ts
β βββ productList.ts
β βββ productDetail.ts
β βββ nutrition.ts
β βββ analysis.ts
β βββ enroll.ts
β βββ like.ts
β βββ report.ts
β βββ common.ts
β
βββ utils/ # μ νΈλ¦¬ν° ν¨μ
β βββ image.ts # μ΄λ―Έμ§ μμΆ
β βββ nutritionUtils.ts # μμμ 보 κ³μ°
β βββ chartUtils.ts # μ°¨νΈ λ°μ΄ν° λ³ν
β
βββ constants/ # μμ
β βββ nutrition.ts # μμμ λ§€ν
β βββ nutritionEncyclopedia.ts # λ°±κ³Όμ¬μ λ°μ΄ν°
β βββ product.ts # μ ν μμ
β
βββ config/ # μ€μ
β βββ menuConfig.ts # λ©λ΄ μ€μ
β
βββ layout/ # λ μ΄μμ μ»΄ν¬λνΈ
β βββ RootLayout.tsx # λ©μΈ λ μ΄μμ
β βββ AuthLayout.tsx # μΈμ¦ λ μ΄μμ
β
βββ routes/ # λΌμ°ν
β βββ router.tsx # λΌμ°ν° μ€μ
β
βββ assets/ # μ μ νμΌ
β βββ icon/ # μμ΄μ½
β βββ img/ # μ΄λ―Έμ§
β βββ logo/ # λ‘κ³
β
βββ App.tsx # μ± λ£¨νΈ
βββ main.tsx # μ± μ§μ
μ
βββ index.css # κΈλ‘λ² μ€νμΌ
| μν | μ΄λ¦ | GitHub |
|---|---|---|
| Frontend Developer | μ μ§ | @Yujin1219 |
| Frontend Developer | μ μμ (λ°λ) | @wantkdd |
- main: νλ‘λμ λ°°ν¬ λΈλμΉ
- feature: κΈ°λ₯ κ°λ° λΈλμΉ
feature/μ΄λ¦-κΈ°λ₯μ λͺ©#μ΄μλ²νΈ
μμ: feature/wantkdd-login#1
- λͺ¨λ μμ
μ
mainμμ μ΅μ μ½λ pull - κ°μΈ μμ
μ
featureλΈλμΉμμ μ§ν - μμ μλ£ ν PR μμ±
- νμ 1λͺ μ 리뷰 λ° approve νμ
- Approve ν
mainμ merge
| Prefix | μ€λͺ |
|---|---|
start |
μ νλ‘μ νΈ μμ |
feat |
μλ‘μ΄ κΈ°λ₯ μΆκ° |
fix |
λ²κ·Έ μμ |
design |
UI/CSS λ³κ²½ |
refactor |
μ½λ 리ν©ν λ§ |
settings |
μ€μ νμΌ λ³κ²½ |
comment |
μ£Όμ μΆκ°/λ³κ²½ |
dependency |
μμ‘΄μ±/νλ¬κ·ΈμΈ μΆκ° |
docs |
λ¬Έμ μμ |
merge |
λΈλμΉ λ³ν© |
deploy |
λ°°ν¬ |
rename |
νμΌ/ν΄λλͺ μμ |
remove |
νμΌ μμ |
revert |
μ΄μ λ²μ μΌλ‘ λ‘€λ°± |
feat: μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ κΈ°λ₯ ꡬν #12
fix: μ ν μμΈ νμ΄μ§ λ‘λ© μ€λ₯ μμ #34
design: λ§μ΄νμ΄μ§ λ°μν μ€νμΌ μ μ© #56
μ΄ νλ‘μ νΈλ κ°μΈ νλ‘μ νΈμ΄λ©°, λͺ¨λ κΆλ¦¬λ κ°λ°νμκ² μμ΅λλ€.
- λ°°ν¬ νλ«νΌ: Netlify
- λ°°ν¬ URL: [μΆν μ λ°μ΄νΈ]
βοΈ Made with β€οΈ by DecodEat Team