https://github.com/doerfli/reeper
Recipe management web application - parse recipes from image using AI based OCR
https://github.com/doerfli/reeper
actiontext aws-s3 docker hacktoberfest mistral-ai ocr openai recipe-app ruby-on-rails self-hosted
Last synced: 3 months ago
JSON representation
Recipe management web application - parse recipes from image using AI based OCR
- Host: GitHub
- URL: https://github.com/doerfli/reeper
- Owner: doerfli
- License: mit
- Created: 2020-07-18T11:55:46.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2026-02-16T19:15:13.000Z (4 months ago)
- Last Synced: 2026-02-17T01:49:56.429Z (4 months ago)
- Topics: actiontext, aws-s3, docker, hacktoberfest, mistral-ai, ocr, openai, recipe-app, ruby-on-rails, self-hosted
- Language: Ruby
- Homepage:
- Size: 2.58 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Reeper
This repository contains a self-hosted recipe web application implemented in Ruby On Rails.
Runtime docker images are available.
## Requirements
- Ruby 3.4+
- PostgreSQL
- ImageMagick
- Redis (required for Sidekiq background jobs)
- Recommended: Redis 6+
- Start locally: `docker run --rm -p 6379:6379 redis:6`
## Features
- Recipe management with images and OCR text recognition
- **AI-powered recipe extraction with two methods:**
- **Mistral + OpenAI**: Image → Mistral OCR (markdown) → OpenAI parsing (structured recipe)
- **OpenAI Direct**: Image → OpenAI (structured recipe)
- AI-powered OCR text cleanup using GPT-4 Mini
- Multiple recipes detection from single image
- Tagging and search functionality
- Auth0 authentication
- AWS S3 file storage
- Responsive UI with Tailwind CSS
## Preparation for development
### DB Setup
```
rake db:create
rake db:migrate
```
Restore dump
```
pg_restore -d reeper_development -h db -Upostgres file.dump
```
### AWS credentials
Create `.env.local` file with AWS credentials
```bash
# .env.local
AWS_ACCESS_KEY_ID=AAAAAAA
AWS_SECRET_ACCESS_KEY=BBBBB
```
### OpenAI API Key (for AI recipe extraction and OCR cleanup)
For the AI-powered recipe extraction and OCR cleanup features, configure your OpenAI API key:
**Development:**
```bash
# Option 1: Environment variable (recommended)
export OPENAI_API_KEY=your_openai_api_key_here
# Option 2: Rails credentials
EDITOR="code --wait" rails credentials:edit
# Add: openai_api_key: your_openai_api_key_here
```
**Production/Dokku:**
```bash
dokku config:set your-app-name OPENAI_API_KEY=your_actual_openai_api_key_here
# Optional: Override cleanup prompts per language
dokku config:set your-app-name OPENAI_CLEANUP_PROMPT_EN="Your custom English prompt..."
dokku config:set your-app-name OPENAI_CLEANUP_PROMPT_DE="Your custom German prompt..."
```
**Optional Configuration:**
- `OPENAI_CLEANUP_PROMPT_EN`: Override the default English cleanup prompt
- `OPENAI_CLEANUP_PROMPT_DE`: Override the default German cleanup prompt
- `OPENAI_PROMPT_OCR_ID`: Override the default OpenAI prompt ID for direct OCR (default: `pmpt_694514e453388194a1e4c121407ef02204bec5d20e21b070`)
- `OPENAI_PROMPT_OCR_VERSION`: Override the default OpenAI prompt version for direct OCR (default: `2`)
- `OPENAI_MARKDOWN_PROMPT_ID`: Override the default OpenAI prompt ID for markdown parsing (default: `pmpt_696554b87ef88190bbc1156b6c5fe84f0050d5451e60ae6c`)
- `OPENAI_MARKDOWN_PROMPT_VERSION`: Override the default OpenAI prompt version for markdown parsing (default: `2`)
### Mistral AI API Key (for two-phase OCR)
For the Mistral + OpenAI two-phase recipe extraction, configure your Mistral AI API key:
**Development:**
```bash
export MISTRAL_API_KEY=your_mistral_api_key_here
```
**Production/Dokku:**
```bash
dokku config:set your-app-name MISTRAL_API_KEY=your_actual_mistral_api_key_here
```
**Note:** The Mistral API key is only required if you plan to use the "Mistral + OpenAI" recognition method. The "OpenAI Direct" method only requires the OpenAI API key.
## Start development server
Start dev-server, css build, js build
```
bin/dev
yarn build:css --watch
yarn build --watch
```
## Start production via docker
Use provided `docker-compose.prod.yml` file for startup of postgres db and container for the rails app. Don't forget to set the following environment variables:
**Required:**
- `AWS_ACCESS_KEY_ID`: AWS access key
- `AWS_SECRET_ACCESS_KEY`: AWS secret key
- `OPENAI_API_KEY`: OpenAI API key for AI recipe extraction
- Database passwords
**Optional:**
- `MISTRAL_API_KEY`: Mistral AI API key (only needed for "Mistral + OpenAI" method)
- `S3_BUCKET_NAME`: Override S3 bucket name (default: _reeper_)
- `S3_BUCKET_REGION`: Override S3 region (default: _eu-central-1_)
- `OPENAI_PROMPT_OCR_ID`: Custom OpenAI prompt ID for direct OCR
- `OPENAI_PROMPT_OCR_VERSION`: Custom OpenAI prompt version
- `OPENAI_MARKDOWN_PROMPT_ID`: Custom OpenAI prompt ID for markdown parsing
- `OPENAI_MARKDOWN_PROMPT_VERSION`: Custom OpenAI prompt version