Skip to content

A web application for tracking calories count for meals. Built with ASP.NET Core, React and Material UI

Notifications You must be signed in to change notification settings

pkirilin/food-diary

Repository files navigation

food-diary

food-diary

Introduction

food-diary is a web application for tracking calories count for meals eaten daily. It represents an interactive diary, which is able to record notes about products and their quantities and calculate calories for each note (or group of notes) recorded.

Main idea and goal

The diary is organized by dates. Each date contains notes that are grouped by meal types (breakfast, lunch, etc.). A note includes information about a product and its quantity. Products are categorized into categories. Each product has a name and a calorie cost per 100 g of the product's quantity recorded. Using this information, the application can calculate the calorie count of a single note or a group of notes (for a specific meal type or date).

This information can be extremely useful for people who want to keep track of the energy value of the meals they consume daily.

Quick start (docker-compose)

  1. Setup Google OAuth 2.0 client you will use for sign in

  2. Create a copy of .env.example file and save it as .env:

    cat .env.example >> .env
  3. Fill your credentials, then run:

    docker-compose up -d
  4. Navigate to https://localhost:8080

Development

  1. Start PostgreSQL database:

    docker run -p 5432:5432 --name postgres \
        -e POSTGRES_USER=postgres \
        -e POSTGRES_PASSWORD=postgres \
        -e POSTGRES_DB=FoodDiary \
        -d postgres:15.1-alpine

    Optional: PgAdmin can be started like this:

    docker run -p 5050:80 --name pgadmin -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
  2. Install .NET SDK 8.0.100 or higher

  3. Install Node.js 18.16.0 or higher

  4. Install yarn package manager

  5. Fill necessary secrets:

    dotnet user-secrets --project src/backend/src/FoodDiary.API set "Auth:AllowedEmails:0" "<your_email>"
    
    dotnet user-secrets --project src/backend/src/FoodDiary.API set "ConnectionStrings:Default" "<your_db_connection_string>"
    
    # Optional, used in recognize note by photo feature
    dotnet user-secrets --project src/backend/src/FoodDiary.API set "Integrations:OpenAI:ApiKey" "<your_OpenAI_api_key>"

    Allowed email should be compatible with Google Identity Provider

  6. Run migrations:

    dotnet run --project src/backend/src/FoodDiary.Migrator
  7. Start backend application:

    dotnet run --project src/backend/src/FoodDiary.API
  8. Start frontend application:

    cd src/frontend
    yarn start
  9. Navigate to https://localhost:8080

How to run frontend without backend

Go to frontend project directory:

cd src/frontend

Create local env config:

touch env.local

Fill env.local with this values:

VITE_APP_MSW_ENABLED=true
VITE_APP_FAKE_AUTH_ENABLED=true
VITE_APP_FAKE_AUTH_LOGIN_ON_INIT=true

Frontend environment variables

Name Type Description
VITE_APP_API_URL string Specifies a backend API base URL without a trim slash, e.g. https://localhost:8080
VITE_APP_AUTH_CHECK_INTERVAL number Specifies the auth status check interval in milliseconds to ensure that users with expired cookies will not be able to use the application without refreshing the page in the browser. Not used if VITE_APP_FAKE_AUTH_ENABLED is true
VITE_APP_DEMO_MODE_ENABLED boolean Enables demo mode. In demo mode, some features related to file system or external integrations are disabled
VITE_APP_FAKE_AUTH_ENABLED boolean Setups fake authentication flow without using a backend server and OAuth Identity provider. Used for local development
VITE_APP_FAKE_AUTH_LOGIN_ON_INIT boolean Defines whether the user is authenticated by default when using a fake authentication flow. Used for local development
VITE_APP_MSW_ENABLED boolean Enables mockServiceWorker to intercept and mock all API requests. Used for testing or local development purposes
VITE_APP_GOOGLE_ANALYTICS_ENABLED boolean Enables Google Analytics
VITE_APP_GOOGLE_ANALYTICS_MEASUREMENT_ID string Measurement (data stream) ID for Google Analytics
VITE_APP_MOCK_API_RESPONSE_DELAY number Sets delay (in milliseconds) before all mock API responses. Not used if VITE_APP_MSW_ENABLED is false

How to generate database migrations

dotnet ef migrations add <migration_name> \
    -s src/backend/src/FoodDiary.API \
    -p src/backend/src/FoodDiary.Infrastructure \
    -o Migrations

Copyright notes

Favicon

This favicon was generated using the following graphics from Twitter Twemoji:

About

A web application for tracking calories count for meals. Built with ASP.NET Core, React and Material UI

Topics

Resources

Stars

Watchers

Forks