Skip to content

A comprehensive full-stack calorie tracking application with Flask backend, React frontend, and AI-powered features

License

Notifications You must be signed in to change notification settings

jhd3197/CalorIA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CalorIA 🍎

A comprehensive full-stack calorie tracking application built with Flask backend, React frontend, MongoDB database, and a custom CLI for easy management. The application is fully containerized with Docker for seamless deployment.

image

✨ Features

  • πŸ—οΈ Full-Stack Architecture: Flask REST API backend with React frontend
  • πŸ—„οΈ MongoDB Database: NoSQL database for flexible data storage
  • ⚑ Custom CLI Tool: Command-line interface for managing the application
  • 🐳 Docker Support: Fully containerized with docker-compose
  • πŸ‘€ User Management: User registration and profile management
  • 🍽️ Meal Tracking: Log and track daily meals and nutrition
  • ❀️ Health Monitoring: Track weight and water intake
  • πŸ’» Modern UI: Responsive React frontend with component-based architecture
  • πŸ”— REST API: Comprehensive API endpoints for all features
  • 🌱 Database Seeding: Built-in script for populating test data
  • πŸ§ͺ AI-Powered Research: Intelligent ingredient and recipe discovery using OpenAI or Ollama
  • πŸ“ Letter-Based Research: Systematic research organized by alphabet for comprehensive coverage

πŸ“ Project Structure

CalorIA/
β”œβ”€β”€ CalorIA/
β”‚   β”œβ”€β”€ __init__.py              # Python package initialization
β”‚   β”œβ”€β”€ cli.py                   # Custom CLI commands
β”‚   β”œβ”€β”€ types.py                 # Type definitions
β”‚   β”œβ”€β”€ research/                # AI-powered research system
β”‚   β”‚   β”œβ”€β”€ __init__.py         # Research package initialization
β”‚   β”‚   β”œβ”€β”€ tools.py            # Base research classes and utilities
β”‚   β”‚   β”œβ”€β”€ ingredients.py      # Ingredient research functionality
β”‚   β”‚   └── recipes.py          # Recipe research functionality
β”‚   β”œβ”€β”€ backend/                 # Flask backend application
β”‚   β”‚   β”œβ”€β”€ app.py              # Main Flask application
β”‚   β”‚   β”œβ”€β”€ requirements.txt     # Python dependencies
β”‚   β”‚   └── package-lock.json
β”‚   β”œβ”€β”€ frontend/               # React frontend application
β”‚   β”‚   β”œβ”€β”€ src/                # React source code
β”‚   β”‚   β”œβ”€β”€ public/             # Public assets
β”‚   β”‚   β”œβ”€β”€ package.json        # Node.js dependencies
β”‚   β”‚   └── build/              # Production build (generated)
β”‚   └── mixins/                 # Shared modules and routes
β”‚       β”œβ”€β”€ modules/            # Business logic modules
β”‚       β”‚   β”œβ”€β”€ activities.py   # Activity tracking functionality
β”‚       β”‚   β”œβ”€β”€ ingredients.py  # Ingredient management
β”‚       β”‚   β”œβ”€β”€ meals.py        # Meal tracking and management
β”‚       β”‚   β”œβ”€β”€ recipes.py      # Recipe management
β”‚       β”‚   β”œβ”€β”€ users.py        # User management
β”‚       β”‚   β”œβ”€β”€ water.py        # Water intake tracking
β”‚       β”‚   └── weight.py       # Weight tracking
β”‚       β”œβ”€β”€ routes/             # API route handlers
β”‚       β”‚   β”œβ”€β”€ __init__.py
β”‚       β”‚   β”œβ”€β”€ activity_routes.py # Activity endpoints
β”‚       β”‚   β”œβ”€β”€ auth_routes.py     # Authentication endpoints
β”‚       β”‚   β”œβ”€β”€ dashboard_routes.py # Dashboard data endpoints
β”‚       β”‚   β”œβ”€β”€ health_routes.py   # Health monitoring endpoints
β”‚       β”‚   β”œβ”€β”€ ingredient_routes.py # Ingredient CRUD endpoints
β”‚       β”‚   β”œβ”€β”€ meal_routes.py     # Meal tracking endpoints
β”‚       β”‚   β”œβ”€β”€ recipe_routes.py   # Recipe management endpoints
β”‚       β”‚   β”œβ”€β”€ user_routes.py     # User management endpoints
β”‚       β”‚   β”œβ”€β”€ water_routes.py    # Water intake endpoints
β”‚       β”‚   └── weight_routes.py   # Weight tracking endpoints
β”‚       β”œβ”€β”€ jwt_utils.py         # JWT utilities
β”‚       β”œβ”€β”€ mongo.py            # MongoDB connection utilities
β”‚       └── tools.py            # General utilities
β”œβ”€β”€ docker-compose.yml          # Docker composition configuration
β”œβ”€β”€ Dockerfile                  # Docker image configuration
β”œβ”€β”€ setup.py                    # Python package setup
β”œβ”€β”€ .env.copy                   # Environment variables template
└── README.md                   # This file

πŸš€ Local Development Setup

Prerequisites

Before running the application locally, ensure you have the following installed:

Environment Configuration

  1. Copy the environment template and configure your settings:

    cp .env.copy .env
  2. Edit the .env file with your configuration:

    MONGODB_URI=mongodb://localhost:27017/caloria
    FLASK_DEBUG=1
    SECRET_KEY=your-secret-key-here
    
    # AI Research Configuration (optional)
    AI_PROVIDER=openai  # or 'ollama'
    OPENAI_API_KEY=your_openai_api_key_here
    OPENAI_MODEL=gpt-4
    OLLAMA_BASE_URL=http://localhost:11434
    OLLAMA_MODEL=llama2
    

Installation Steps

  1. Clone the repository:

    git clone <repository-url>
    cd CalorIA
  2. Install Python dependencies:

    pip install -r CalorIA/backend/requirements.txt
  3. Install Node.js dependencies:

    cd CalorIA/frontend
    npm install
    cd ../..
  4. Install the CLI tool:

    pip install -e .
  5. Start MongoDB (if running locally):

    mongod
  6. Seed the database (optional):

    caloria seed

πŸ’» CLI Usage

The caloria CLI provides several commands to manage the application:

Available Commands

  • caloria backend - Start the Flask backend server

    caloria backend --host 127.0.0.1 --port 4032 --debug
    • --host: Host to bind to (default: 127.0.0.1)
    • --port: Port to bind to (default: 4032)
    • --debug: Run in debug mode
  • caloria frontend - Start the React development server

    caloria frontend --port 3000
    • --port: Port for development server (default: 3000)
  • caloria build - Build the React frontend for production

    caloria build --output-dir build
    • --output-dir: Output directory for build (default: build)
  • caloria seed - Seed the database with sample data

    caloria seed
  • caloria unseed - Remove all system-generated sample data from the database

    caloria unseed --confirm
    • --confirm: Confirm deletion without prompting
  • caloria research-ingredients - Research and add missing ingredients using AI

    caloria research-ingredients --category Vegetables --letters A,B,C --max-ingredients 10
    • --category: Specific category to research (Vegetables, Proteins, Fruits, etc.)
    • --letters: Comma-separated letters to research (e.g., "A,B,C")
    • --max-ingredients: Maximum number of ingredients to add
    • --dry-run: Show what would be added without actually adding
  • caloria research-recipes - Research and add missing recipes using AI

    caloria research-recipes --category breakfast --letters A,B,C --max-recipes 5
    • --category: Specific category to research (breakfast, lunch, dinner, etc.)
    • --letters: Comma-separated letters to research (e.g., "A,B,C")
    • --max-recipes: Maximum number of recipes to add
    • --dry-run: Show what would be added without actually adding

Example Usage

  1. Start the full application (recommended for development):

    # Terminal 1: Start the backend (includes building frontend)
    caloria backend --debug
    
    # Terminal 2: Start the frontend dev server (for hot reloading)
    caloria frontend
  2. Production build:

    caloria build
    caloria backend --host 0.0.0.0 --port 4032
  3. AI Research Examples:

    # Research vegetables starting with A, B, C
    caloria research-ingredients --category Vegetables --letters A,B,C --max-ingredients 15
    
    # Research breakfast recipes (dry run)
    caloria research-recipes --category breakfast --dry-run
    
    # Research proteins systematically
    caloria research-ingredients --category Proteins --max-ingredients 20

🐳 Docker Usage

Quick Start with Docker

  1. Build and run the entire application:

    docker-compose up --build
  2. Run in detached mode:

    docker-compose up -d --build
  3. Stop the application:

    docker-compose down
  4. View logs:

    docker-compose logs -f

Docker Services

The docker-compose configuration includes:

  • app: The main CalorIA application (Flask + React)
    • Exposed on port 4032
    • Automatically builds frontend and runs backend
  • mongo: MongoDB database
    • Exposed on port 27017
    • Data persisted in mongo-data volume

πŸ§ͺ AI-Powered Research

CalorIA includes an intelligent AI-powered research system that can discover and add missing ingredients and recipes to your database. The system supports both OpenAI and Ollama as AI providers.

Research Features

  • Letter-Based Research: Systematically research ingredients/recipes by alphabet for comprehensive coverage
  • Category-Specific: Research specific categories like Vegetables, Proteins, Fruits, etc.
  • Duplicate Prevention: Automatically checks for existing items before adding
  • Dry Run Mode: Test research without modifying the database
  • Batch Processing: Process multiple items efficiently with progress tracking

AI Providers

OpenAI (Default)

  • Requires API key
  • Supports GPT-3.5-turbo and GPT-4 models
  • Higher quality responses
  • Requires internet connection

Ollama (Local)

  • Runs locally on your machine
  • Supports various open-source models (Llama, Mistral, etc.)
  • No API costs
  • Works offline

Research Categories

Ingredients:

  • Vegetables, Fruits, Proteins, Grains & Starches
  • Dairy, Oils & Fats, Nuts & Seeds
  • Condiments & Sauces, Sweeteners, Spices
  • Beverages, Supplements, Baking & Flours

Recipes:

  • Breakfast, Lunch, Dinner, Snacks
  • Desserts, Beverages, Appetizers
  • Soups, Salads, Main Courses, Side Dishes

Usage Examples

# Research vegetables starting with specific letters
caloria research-ingredients --category Vegetables --letters A,B,C,D,E

# Research breakfast recipes (systematic approach)
caloria research-recipes --category breakfast --max-recipes 10

# Dry run to see what would be added
caloria research-ingredients --category Proteins --dry-run

# Research with custom limits
caloria research-recipes --category dinner --max-recipes 5 --letters M,N,O

Setting Up AI Providers

For OpenAI:

  1. Get an API key from OpenAI
  2. Add to your .env file:
    AI_PROVIDER=openai
    OPENAI_API_KEY=your_api_key_here
    OPENAI_MODEL=gpt-4
    

For Ollama:

  1. Install Ollama from ollama.ai
  2. Pull a model: ollama pull llama2
  3. Add to your .env file:
    AI_PROVIDER=ollama
    OLLAMA_BASE_URL=http://localhost:11434
    OLLAMA_MODEL=llama2
    

🌐 API Endpoints

The CalorIA REST API provides the following endpoint categories:

Authentication

  • POST /api/auth/login - User login
  • POST /api/auth/register - User registration
  • POST /api/auth/logout - User logout

User Management

  • GET /api/user/<user_id> - Get user information
  • POST /api/user - Create new user
  • PUT /api/user/<user_id> - Update user information
  • DELETE /api/user/<user_id> - Delete user

Ingredients

  • GET /api/ingredients - Get all ingredients (with pagination and search)
    • Query parameters: page, limit, search, is_system
  • GET /api/ingredients/<ingredient_id> - Get specific ingredient
  • POST /api/ingredients - Create new ingredient
  • PUT /api/ingredients/<ingredient_id> - Update ingredient
  • DELETE /api/ingredients/<ingredient_id> - Delete ingredient

Recipes

  • GET /api/recipes - Get all recipes (with pagination and search)
  • GET /api/recipes/<recipe_id> - Get specific recipe
  • POST /api/recipes - Create new recipe
  • PUT /api/recipes/<recipe_id> - Update recipe
  • DELETE /api/recipes/<recipe_id> - Delete recipe

Meal Tracking

  • GET /api/meals/<user_id> - Get user's meals
  • POST /api/meals - Log a new meal
  • PUT /api/meals/<meal_id> - Update meal information
  • DELETE /api/meals/<meal_id> - Delete meal

Health Monitoring

  • GET /api/health/<user_id> - Get health status
  • POST /api/health - Update health metrics

Weight Tracking

  • GET /api/weight/<user_id> - Get weight history
  • POST /api/weight - Log weight entry
  • PUT /api/weight/<entry_id> - Update weight entry
  • DELETE /api/weight/<entry_id> - Delete weight entry

Water Intake

  • GET /api/water/<user_id> - Get water intake history
  • POST /api/water - Log water intake
  • PUT /api/water/<entry_id> - Update water entry
  • DELETE /api/water/<entry_id> - Delete water entry

Dashboard

  • GET /api/dashboard/<user_id> - Get user dashboard data

Development

Project Architecture

  • Backend: Flask application with Blueprint-based routing
  • Frontend: React application with component-based architecture
  • Database: MongoDB with PyMongo driver
  • CLI: Click-based command-line interface
  • Containerization: Docker with multi-stage builds

Key Technologies

  • Backend: Flask, PyMongo, Click
  • Frontend: React, Node.js, npm
  • Database: MongoDB
  • DevOps: Docker, docker-compose
  • Python: 3.7+ compatible

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make your changes and test them
  4. Commit your changes: git commit -m 'Add feature'
  5. Push to the branch: git push origin feature-name
  6. Submit a pull request

Screenshots

Screenshot 2025-08-30 033434 Screenshot 2025-08-30 033509 image

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A comprehensive full-stack calorie tracking application with Flask backend, React frontend, and AI-powered features

Topics

Resources

License

Stars

Watchers

Forks