Skip to content

legojeon/eatfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฝ๏ธ Eatfolio

Eatfolio Logo

AI ๊ธฐ๋ฐ˜ ์Šค๋งˆํŠธ ์‹๋‹จ ๊ด€๋ฆฌ ์„œ๋น„์Šค

Flutter FastAPI Python Firebase


๐Ÿ“ฑ ์„œ๋น„์Šค ์†Œ๊ฐœ

์˜ค๋Š˜ ๋จน์€ ์Œ์‹์„ ๊ฐ„๋‹จํžˆ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ๋‚˜์š”?
eatfolio๋Š” ์Œ์‹ ์‚ฌ์ง„ ํ•œ ์žฅ์œผ๋กœ ๋‚˜๋งŒ์˜ ์‹๋‹จ ๋‹ค์ด์–ด๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

  • ์‚ฌ์ง„์„ ์ฐ์–ด ์˜ฌ๋ฆฌ๋ฉด ์ž๋™์œผ๋กœ ํ”ผ๋“œ์— ์ €์žฅ ๐Ÿ“ธ
  • ๋‚ ์งœ๋ณ„๋กœ ๋‚ด๊ฐ€ ๋จน์€ ์Œ์‹๋“ค์„ ํ•œ๋ˆˆ์— ํ™•์ธ ๐Ÿ“…
  • AI๊ฐ€ ์˜์–‘์†Œ๋ฅผ ๋ถ„์„ํ•ด ์‹๋‹จ ๊ด€๋ฆฌ๊นŒ์ง€ ๋„์™€์ค๋‹ˆ๋‹ค ๐Ÿฅ—

eatfolio๋Š” ๋‹จ์ˆœํžˆ ๊ฑด๊ฐ• ๊ด€๋ฆฌ์šฉ ์•ฑ์ด ์•„๋‹ˆ๋ผ,
์Œ์‹์„ ํ†ตํ•ด ์ถ”์–ต์„ ๊ธฐ๋กํ•˜๊ณ  ๋‚˜๋งŒ์˜ ์ด์•ผ๊ธฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ํŠน์ง•

  • ์ด์ค‘ AI ๋ถ„์„ ์‹œ์Šคํ…œ: YOLOv3 + ResNet ๊ธฐ๋ฐ˜ ์Œ์‹ ๋ถ„์„ + Gemini API ํด๋ฐฑ
  • ์‹ค์‹œ๊ฐ„ ์˜์–‘ ๋ถ„์„: ์นผ๋กœ๋ฆฌ, ๋‹จ๋ฐฑ์งˆ, ์ง€๋ฐฉ ๋“ฑ ์ƒ์„ธ ์˜์–‘์„ฑ๋ถ„ ์ œ๊ณต
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ: Flutter ๊ธฐ๋ฐ˜ iOS/Android ์•ฑ
  • ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”: Firebase ๊ธฐ๋ฐ˜ ํด๋ผ์šฐ๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ์ฃผ๊ฐ„ ์‹๋‹จ ๋ถ„์„: AI ๊ธฐ๋ฐ˜ ๊ฐœ์ธ ๋งž์ถคํ˜• ํ”ผ๋“œ๋ฐฑ ๋ฐ ์ถ”์ฒœ

๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

eatfolio/
โ”œโ”€โ”€ ๐Ÿ“ฑ eatfolio/                 # Flutter ๋ชจ๋ฐ”์ผ ์•ฑ
โ”‚   โ”œโ”€โ”€ lib/                    # Dart ์†Œ์Šค ์ฝ”๋“œ (UI, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)
โ”‚   โ”œโ”€โ”€ android/                # Android ๋„ค์ดํ‹ฐ๋ธŒ ์„ค์ •
โ”‚   โ”œโ”€โ”€ ios/                    # iOS ๋„ค์ดํ‹ฐ๋ธŒ ์„ค์ •
โ”‚   โ”œโ”€โ”€ assets/                 # ์ด๋ฏธ์ง€, ํฐํŠธ, ์•„์ด์ฝ˜
โ”‚   โ”œโ”€โ”€ functions/              # Firebase Cloud Functions (Node.js 22, 2nd Gen)
โ”‚   โ”‚   โ”œโ”€โ”€ index.js            # Firestore ํŠธ๋ฆฌ๊ฑฐ, ํ†ต๊ณ„ ๊ณ„์‚ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ backfill.js         # ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ฐฑํ•„ ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ package.json        # Node.js ์˜์กด์„ฑ
โ”‚   โ””โ”€โ”€ pubspec.yaml            # Flutter ์˜์กด์„ฑ
โ”œโ”€โ”€ ๐Ÿ–ฅ๏ธ backend/                 # Python FastAPI ๋ฐฑ์—”๋“œ (AI ๋ถ„์„ ์„œ๋ฒ„)
โ”‚   โ”œโ”€โ”€ main.py                 # FastAPI ์„œ๋ฒ„ ๋ฉ”์ธ ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ prompts/                # AI ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ requirements.txt        # Python ์˜์กด์„ฑ
โ”‚   โ””โ”€โ”€ env.example            # ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜ˆ์‹œ
โ””โ”€โ”€ README.md                   # ํ”„๋กœ์ ํŠธ ์„ค๋ช…์„œ

์‹ค์ œ ํ™”๋ฉด ์˜ˆ์‹œ

์Šคํ”Œ๋ž˜์‹œ & ๋กœ๊ทธ์ธ
์•ฑ ์‹คํ–‰ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ๋ณด์ด๋Š” ํ™”๋ฉด์œผ๋กœ, LOGIN๊ณผ SIGN UP ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ๋˜๋Š” Google ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํšŒ์›๊ฐ€์ž…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ ๊ธฐ๋Šฅ๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
ํ™ˆ & ์‹์‚ฌ ๋“ฑ๋ก
์—…๋กœ๋“œ๋œ ์Œ์‹ ์‚ฌ์ง„๋“ค์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ์Œ์‹ ๊ธฐ๋ก์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Œ์‹ ์‚ฌ์ง„, ์ด๋ฆ„, ๋ฉ”๋ชจ, ๋ณ„์ , ์นดํ…Œ๊ณ ๋ฆฌ ๋“ฑ์„ ์ž…๋ ฅํ•ด ์‹์‚ฌ๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์บ˜๋ฆฐ๋” & ์‹์‚ฌ ์ƒ์„ธ
๋‚ ์งœ๋ณ„๋กœ ๊ธฐ๋กํ•œ ์‹๋‹จ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ์‹์‚ฌ๋ฅผ ํด๋ฆญํ•ด ์ƒ์„ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Œ์‹ ์‚ฌ์ง„, ์นดํ…Œ๊ณ ๋ฆฌ, ์‹œ๊ฐ„, ์œ„์น˜, ๋ณ„์ , ๋ฉ”๋ชจ ๋“ฑ์ด ํ‘œ์‹œ๋˜๋ฉฐ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜์–‘ ์ƒ์„ธ & ๋ฆฌํฌํŠธ
์นผ๋กœ๋ฆฌ, ํƒ„๋‹จ์ง€(ํƒ„์ˆ˜ํ™”๋ฌผ/๋‹จ๋ฐฑ์งˆ/์ง€๋ฐฉ), ๋‚˜ํŠธ๋ฅจ, ์นผ์Š˜ ๋“ฑ ์„ธ๋ถ€ ์˜์–‘ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๊ฐ„ ์‹๋‹จ ์ ์ˆ˜, ํ‰๊ท  ์„ญ์ทจ ์˜์–‘์†Œ, ๋ถ„์„ ๋ฐ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ์ž์‹ ์˜ ์‹์Šต๊ด€์„ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœํ•„
์ด ์„ญ์ทจ ์นผ๋กœ๋ฆฌ, ํ‰๊ท  ์นผ๋กœ๋ฆฌ, ๋‹จ๋ฐฑ์งˆ/ํƒ„์ˆ˜ํ™”๋ฌผ/์ง€๋ฐฉ ๋“ฑ ๋ˆ„์  ์˜์–‘ ์„ฑ๋ถ„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค– AI ๋ถ„์„ ์‹œ์Šคํ…œ

์ด์ค‘ AI ๋ถ„์„ ์•„ํ‚คํ…์ฒ˜

Eatfolio๋Š” 2๋‹จ๊ณ„ AI ๋ถ„์„ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋†’์€ ์ •ํ™•๋„์˜ ์Œ์‹ ๋ถ„์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

flowchart LR
    U[User] --> I[Food Image]

    subgraph P["Eatfolio AI ๋ถ„์„ ์‹œ์Šคํ…œ (2๋‹จ๊ณ„)"]
      direction TB

      subgraph M1["1์ฐจ AI ๋ชจ๋ธ (์šฐ์„  ์‚ฌ์šฉ)"]
        Y["YOLOv3<br/>๊ฐ์ฒด ํƒ์ง€ยท๋ถ„๋ฅ˜"]
        R["ResNet<br/>portion ์ถ”์ •ยท์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ"]
        Y --> R
      end

      subgraph F["2์ฐจ AI ๋ชจ๋ธ (ํด๋ฐฑ)"]
        G["Google Gemini 2.5 Flash<br/>1์ฐจ ์‹คํŒจ ์‹œ ์‚ฌ์šฉ"]
      end

      I --> S{"1์ฐจ ๋ถ„์„ ์„ฑ๊ณต?"}
      S -->|Yes| Y
      S -->|No| G
    end

    R --> O[๋ถ„์„ ๊ฒฐ๊ณผ]
    G --> O
Loading

1์ฐจ AI ๋ชจ๋ธ (์šฐ์„  ์‚ฌ์šฉ)

  • YOLOv3: ์Œ์‹ ๊ฐ์ฒด ํƒ์ง€ ๋ฐ ๋ถ„๋ฅ˜
  • ResNet: ์–‘(portion) ์ถ”์ • ๋ฐ ์นผ๋กœ๋ฆฌ ๊ณ„์‚ฐ

2์ฐจ AI ๋ชจ๋ธ (ํด๋ฐฑ)

  • Google Gemini 2.5 Flash: 1์ฐจ ๋ชจ๋ธ ์‹คํŒจ ์‹œ ์‚ฌ์šฉ

์‹ค์ œ AI ๋ถ„์„ ์˜ˆ์‹œ

๐Ÿฃ ์ƒˆ์šฐ์ดˆ๋ฐฅ ๋ถ„์„ (AI ๋ชจ๋ธ ๋ถ„์„ ์„ฑ๊ณต)

๋ถ„์„ ์ƒํ™ฉ: YOLOv3 ์„ฑ๊ณต์ ์œผ๋กœ "์ƒˆ์šฐ์ดˆ๋ฐฅ" ๋ถ„๋ฅ˜ + ResNet์œผ๋กœ ์–‘ ์ถ”์ •

์ƒˆ์šฐ์ดˆ๋ฐฅ AI ๋ถ„์„ ๊ฒฐ๊ณผ **AI ๋ถ„์„ ๊ฒฐ๊ณผ**:
{
  "analyze": true,
  "predicted_food_name": "์ƒˆ์šฐ์ดˆ๋ฐฅ",
  "nutrition_info": {
    "carbohydrate": 69.54,    // ํƒ„์ˆ˜ํ™”๋ฌผ (g)
    "sugars": 2.99,          // ๋‹น๋ฅ˜ (g)
    "fat": 1.21,             // ์ง€๋ฐฉ (g)
    "protein": 22.74,        // ๋‹จ๋ฐฑ์งˆ (g)
    "calcium": 73.39,        // ์นผ์Š˜ (mg)
    "phosphorus": 341.13,    // ์ธ (mg)
    "sodium": 1396.75,       // ๋‚˜ํŠธ๋ฅจ (mg)
    "potassium": 372.75,     // ์นผ๋ฅจ (mg)
    "magnesium": 2.6,        // ๋งˆ๊ทธ๋„ค์Š˜ (mg)
    "iron": 2.62,            // ์ฒ  (mg)
    "zinc": 2.17,            // ์•„์—ฐ (mg)
    "cholesterol": 138.33,   // ์ฝœ๋ ˆ์Šคํ…Œ๋กค (mg)
    "trans_fat": 0.0         // ํŠธ๋žœ์Šค์ง€๋ฐฉ (g)
  },
  "calories": 395.54,        // ์นผ๋กœ๋ฆฌ (kcal)
  "weight_g": 250,           // ๋ฌด๊ฒŒ (g)
  "food_category": "์ผ์‹",    // ์Œ์‹ ์นดํ…Œ๊ณ ๋ฆฌ
  "food_name": "์ดˆ๋ฐฅ",       // ์Œ์‹๋ช…
  "meal_time": "dinner"      // ์‹์‚ฌ ์‹œ๊ฐ„
}

YOLOv3 ๊ฐ์ฒด ํƒ์ง€ ๊ฒฐ๊ณผ:

  • ํด๋ž˜์Šค 1: 00000000 - ๋ณด๋ผ์ƒ‰ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค
  • ํด๋ž˜์Šค 2: 01016004 - ๋…น์ƒ‰ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค

ResNet ์–‘ ์ถ”์ • ๊ฒฐ๊ณผ:

  • ์˜ˆ์ธก: Q4 (ํ™•๋ฅ : 0.6451)
  • ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: 0.004์ดˆ

๐ŸŸ ์ฐธ์น˜ํšŒ ๋ถ„์„ (Gemini API ํด๋ฐฑ)

๋ถ„์„ ์ƒํ™ฉ: YOLOv3๊ฐ€ "00000000"์œผ๋กœ ์ธ์‹ ์‹คํŒจ โ†’ Gemini API๋กœ ํด๋ฐฑ

์ฐธ์น˜ํšŒ AI ๋ถ„์„ ๊ฒฐ๊ณผ **AI ๋ถ„์„ ๊ฒฐ๊ณผ**:
{
  "analyze": true,
  "predicted_food_name": "์ฐธ์น˜ํšŒ",
  "nutrition_info": {
    "carbohydrate": 0.1,      // ํƒ„์ˆ˜ํ™”๋ฌผ (g)
    "sugars": 0.0,           // ๋‹น๋ฅ˜ (g)
    "fat": 12.0,             // ์ง€๋ฐฉ (g)
    "protein": 48.0,         // ๋‹จ๋ฐฑ์งˆ (g)
    "calcium": 30.0,         // ์นผ์Š˜ (mg)
    "phosphorus": 500.0,     // ์ธ (mg)
    "sodium": 90.0,          // ๋‚˜ํŠธ๋ฅจ (mg)
    "potassium": 700.0,      // ์นผ๋ฅจ (mg)
    "magnesium": 50.0,       // ๋งˆ๊ทธ๋„ค์Š˜ (mg)
    "iron": 2.5,             // ์ฒ  (mg)
    "zinc": 0.8,             // ์•„์—ฐ (mg)
    "cholesterol": 75.0,     // ์ฝœ๋ ˆ์Šคํ…Œ๋กค (mg)
    "trans_fat": 0.0         // ํŠธ๋žœ์Šค์ง€๋ฐฉ (g)
  },
  "calories": 220.0,         // ์นผ๋กœ๋ฆฌ (kcal)
  "weight_g": 200.0          // ๋ฌด๊ฒŒ (g)
}

๐Ÿš€ ๊ธฐ์ˆ  ์Šคํƒ

Frontend (Flutter)

  • Flutter 3.16+: ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ
  • Dart: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
  • Provider/Riverpod: ์ƒํƒœ ๊ด€๋ฆฌ
  • HTTP: ๋ฐฑ์—”๋“œ API ํ†ต์‹ 

Backend (FastAPI)

  • FastAPI: ๊ณ ์„ฑ๋Šฅ Python ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • Uvicorn: ASGI ์„œ๋ฒ„
  • Pydantic: ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  • Firebase Admin SDK: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

AI/ML

  • YOLOv3: ์‹ค์‹œ๊ฐ„ ๊ฐ์ฒด ํƒ์ง€ ๋ฐ ๋ถ„๋ฅ˜
  • ResNet: ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ฐ ์–‘ ์ถ”์ •
  • Google Gemini API: ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์Œ์‹ ๋ถ„์„
  • CUDA: GPU ๊ฐ€์† ์ฒ˜๋ฆฌ

Infrastructure

  • Firebase Firestore: ์‹ค์‹œ๊ฐ„ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • Firebase Authentication: ์‚ฌ์šฉ์ž ์ธ์ฆ
  • Docker: ์ปจํ…Œ์ด๋„ˆํ™”
  • GitHub Actions: CI/CD

๐Ÿ“ฑ ์ฃผ์š” ๊ธฐ๋Šฅ

1. AI ์Œ์‹ ์ธ์‹

  • ์‚ฌ์ง„ ์ดฌ์˜: ์Œ์‹ ์‚ฌ์ง„์„ ์ดฌ์˜ํ•˜์—ฌ ์—…๋กœ๋“œ
  • ์ž๋™ ๋ถ„์„: AI๊ฐ€ ์Œ์‹ ์ข…๋ฅ˜์™€ ์–‘์„ ์ž๋™ ์ธ์‹
  • ์˜์–‘ ์ •๋ณด: ์ƒ์„ธํ•œ ์˜์–‘์„ฑ๋ถ„ ๋ฐ ์นผ๋กœ๋ฆฌ ์ œ๊ณต

2. ์‹๋‹จ ๊ด€๋ฆฌ

  • ์ผ์ผ ๊ธฐ๋ก: ๋งค์ผ์˜ ์‹์‚ฌ ๊ธฐ๋ก ๊ด€๋ฆฌ
  • ์ฃผ๊ฐ„ ๋ถ„์„: 7์ผ๊ฐ„์˜ ์‹๋‹จ ํŒจํ„ด ๋ถ„์„
  • ๋ชฉํ‘œ ์„ค์ •: ๊ฐœ์ธ ๋งž์ถคํ˜• ์˜์–‘ ๋ชฉํ‘œ ์„ค์ •

3. AI ํ”ผ๋“œ๋ฐฑ

  • ๊ฐœ์ธ ๋งž์ถค ์กฐ์–ธ: AI ๊ธฐ๋ฐ˜ ์‹๋‹จ ๊ฐœ์„  ์ œ์•ˆ
  • ์ถ”์ฒœ ์‹์‚ฌ: ๊ท ํ˜• ์žกํžŒ ์‹๋‹จ ๊ตฌ์„ฑ ์ถ”์ฒœ
  • ์˜์–‘ ์ ์ˆ˜: ์ข…ํ•ฉ์ ์ธ ์˜์–‘ ๊ท ํ˜• ์ ์ˆ˜

4. ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”

  • ํด๋ผ์šฐ๋“œ ์ €์žฅ: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ž๋™ ๋™๊ธฐํ™”
  • ๋ณด์•ˆ: Firebase ๋ณด์•ˆ ๊ทœ์น™์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

๐Ÿ”ฌ AI Hub ๋ฐ์ดํ„ฐ์…‹ ์ฐธ๊ณ 

๋ณธ ํ”„๋กœ์ ํŠธ์˜ AI ๋ชจ๋ธ์€ AI Hub์˜ ์Œ์‹ ์ด๋ฏธ์ง€ ๋ฐ ์˜์–‘์ •๋ณด ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์…‹์„ ์ฐธ๊ณ ํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฐ์ดํ„ฐ์…‹ ํŠน์ง•:

  • ํ•œ๊ตญ์ธ ๋‹ค๋นˆ๋„ ์„ญ์ทจ ์™ธ์‹๋ฉ”๋‰ด์™€ ํ•œ์‹๋ฉ”๋‰ด 400์ข…
  • 84.5๋งŒ์žฅ์˜ ๊ณ ํ’ˆ์งˆ ์ด๋ฏธ์ง€ (500๋งŒ ํ™”์†Œ ์ด์ƒ)
  • ์นผ๋กœ๋ฆฌ, ์—ผ๋ถ„, ๋‹น๋„ ๋“ฑ ์ƒ์„ธ ์˜์–‘์„ฑ๋ถ„
  • 100๊ฑด ์ด์ƒ์˜ ์ •๋ฐ€ ์–ด๋…ธํ…Œ์ด์…˜

About

A Flutter-based meal logging app that lets you snap photos of your food, add notes, and revisit past meals. Simple, visual food tracking made easy.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors