61 lines
2.2 KiB
Markdown
61 lines
2.2 KiB
Markdown
# Calorie AI
|
|
|
|
Native Android and Dockerized web calorie tracker with uploaded meal images and admin-configurable AI models.
|
|
|
|
## Features
|
|
|
|
- Add meals by description, portion estimate, and uploaded image.
|
|
- Analyze meals through OpenAI-compatible chat completions.
|
|
- Uses a vision model for food image calorie and portion estimates.
|
|
- Uses a tasking model to normalize calories, protein, carbs, fat, fruit servings, vegetable servings, food groups, and notes.
|
|
- Stores daily meal entries locally on Android or in browser local storage.
|
|
- Shows daily totals plus charts for macros, 7-day calories, and fruit/vegetable intake.
|
|
- Admin settings control API base URL, API key, vision model, and tasking model. The two model fields can contain the same model name.
|
|
|
|
## Android Build
|
|
|
|
Open this folder in Android Studio and run the `app` configuration, or build with Gradle if available:
|
|
|
|
```bash
|
|
gradle :app:assembleDebug
|
|
```
|
|
|
|
Forgejo Actions builds the debug APK on every push to `main` and uploads it as the `calorie-ai-debug-apk` artifact.
|
|
|
|
Tagged versions also build an installable APK named `calorie-ai-vX.Y.Z.apk` through the Android Release workflow.
|
|
|
|
## Web Frontend
|
|
|
|
The web frontend lives in `web/`. It serves an authenticated browser UI and a tiny Node proxy at `/api/chat` so OpenAI-compatible endpoints are called server-side instead of directly from the browser.
|
|
|
|
Run it with Docker:
|
|
|
|
```bash
|
|
cd web
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Then open:
|
|
|
|
```text
|
|
http://127.0.0.1:8095
|
|
```
|
|
|
|
The Docker web server creates credentials on first boot in `web/data/auth.json` if `CALORIE_AI_WEB_PASSWORD` and `CALORIE_AI_SESSION_SECRET` are not supplied. To pin credentials, copy `web/.env.example` to `web/.env` and set strong values before starting Docker Compose.
|
|
|
|
## AI Endpoint
|
|
|
|
The app expects an OpenAI-compatible endpoint at:
|
|
|
|
```text
|
|
{API base URL}/chat/completions
|
|
```
|
|
|
|
Example base URLs:
|
|
|
|
- `https://api.openai.com/v1`
|
|
- An emulator host-loopback URL ending in `:11434/v1` for a local OpenAI-compatible service
|
|
|
|
Default admin PIN is `admin`. Change it in the Admin AI Settings panel after first launch.
|
|
|
|
The web frontend stores AI settings in browser local storage after web login. The web login is separate from the Android admin PIN.
|