A comprehensive full-stack calorie tracking application with Flask backend, React frontend, and AI-powered features
Project description
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.
โจ 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:
- Python 3.7+: Download from python.org
- Node.js 16+: Download from nodejs.org
- MongoDB: Download from mongodb.com
Environment Configuration
-
Copy the environment template and configure your settings:
cp .env.copy .env
-
Edit the
.envfile 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
-
Clone the repository:
git clone <repository-url> cd CalorIA
-
Install Python dependencies:
pip install -r CalorIA/backend/requirements.txt
-
Install Node.js dependencies:
cd CalorIA/frontend npm install cd ../..
-
Install the CLI tool:
pip install -e .
-
Start MongoDB (if running locally):
mongod
-
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 servercaloria 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 servercaloria frontend --port 3000
--port: Port for development server (default: 3000)
-
caloria build- Build the React frontend for productioncaloria build --output-dir build
--output-dir: Output directory for build (default: build)
-
caloria seed- Seed the database with sample datacaloria seed -
caloria unseed- Remove all system-generated sample data from the databasecaloria unseed --confirm
--confirm: Confirm deletion without prompting
-
caloria research-ingredients- Research and add missing ingredients using AIcaloria 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 AIcaloria 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
-
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
-
Production build:
caloria build caloria backend --host 0.0.0.0 --port 4032
-
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
-
Build and run the entire application:
docker-compose up --build
-
Run in detached mode:
docker-compose up -d --build
-
Stop the application:
docker-compose down -
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-datavolume
๐งช 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:
- Get an API key from OpenAI
- Add to your
.envfile:AI_PROVIDER=openai OPENAI_API_KEY=your_api_key_here OPENAI_MODEL=gpt-4
For Ollama:
- Install Ollama from ollama.ai
- Pull a model:
ollama pull llama2 - Add to your
.envfile: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
- Query parameters:
- 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
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and test them
- Commit your changes:
git commit -m 'Add feature' - Push to the branch:
git push origin feature-name - Submit a pull request
Screenshots
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file caloria-1.0.0.tar.gz.
File metadata
- Download URL: caloria-1.0.0.tar.gz
- Upload date:
- Size: 88.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84bd7d5f92e419141706b65c2590593f32a86f2e76af1d0ff6a0af486f359b5d
|
|
| MD5 |
378bd96dac416021f12eb1b0cfca68dd
|
|
| BLAKE2b-256 |
5226d6352997b9a01da77a24cfde8b6d341065492ba0fbde48ed759586744a78
|
File details
Details for the file caloria-1.0.0-py3-none-any.whl.
File metadata
- Download URL: caloria-1.0.0-py3-none-any.whl
- Upload date:
- Size: 116.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5a5e6c930faef65b9c61cbb707786d1917a5a31f0c692b543fba454060d35b0
|
|
| MD5 |
2a86f26114f7e070ee8de7ddd2e0cf1a
|
|
| BLAKE2b-256 |
8212c2b6e08ebf4c5e549cecacf70cd0f61a773eb9de901f7a8a12702d28010d
|