Skip to content

🍽️ Revolutionize Your Lunch Break with LunchHunt!

Tired of Ctrl+F for food? Let LunchHunt do the searching β€” so you can do the eating.


πŸš€ What Is LunchHunt?

LunchHunt is a Python-powered food concierge that automatically checks local canteen menus, finds your favorite meals, and sends you Gotify push notifications when they appear.

Now available as:

  • 🐍 Command-line/Script mode β€” for traditional Python users
  • 🌐 Web UI mode β€” a new, intuitive dashboard built with Plotly Dash

πŸ“˜ Documentation

πŸ“– Full docs available on GitLab Pages


🧭 Choose Your Setup

You can now use LunchHunt in two ways:


🐍 Option 1 β€” Run LunchHunt via Python

1️⃣ Clone & Setup

git clone https://github.com/trholy/lunchhunt.git
cd lunchhunt
pip install .

2️⃣ Configure Your Cravings

Edit example_2.py and define your favorite foods:

# Example configuration
favorite_foods = ["Eierkuchen", "Milchreis", "Hefeklâße"]

3️⃣ Run a Gotify Server

Use Docker to spin up a local Gotify server for notifications: πŸ‘‰ Gotify Installation Guide

4️⃣ Run LunchHunt

python example_2.py

πŸ’¬ Receive instant push notifications with location details!


🧩 Docker Compose Deployment

version: '3.8'

services:
  lunchhunt:
    build: .
    container_name: lunchhunt
    ports:
      - "8050:8050"
    environment:
      - TZ=Europe/Berlin
      - PUID=1000
      - PGID=1000
    volumes:
      - ./settings:/home/lunchhunt/app/settings
    restart: unless-stopped

  gotify:
    image: gotify/server
    container_name: gotify
    ports:
      - 8080:80
    environment:
      - GOTIFY_DEFAULTUSER_PASS=admin
      - GOTIFY_DEFAULTUSER_NAME=admin
      - TZ="Europe/Berlin"
    volumes:
      - "./data:/app/data"

Then run:

docker compose up --build -d

Access the UI at πŸ‘‰ http://localhost:8050


🧭 LunchHunt Web UI Overview

πŸ’‘ Purpose

The LunchHuntApp is a web-based configuration interface (built with Plotly Dash) that helps you:

  • Configure food preferences & canteens
  • Schedule daily notification jobs
  • Manage multiple profiles
  • Integrate seamlessly with Gotify
  • Create & delete cron jobs visually

πŸ’‘ Benefits for Busy Devs

βœ… Save Time – No more Ctrl+F through menus

βœ… Reduce Stress – LunchHunt does the searching

βœ… Boost Productivity – Focus on code, not canteens


πŸ“‚ Project Structure

lunchhunt
β”œβ”€β”€ .dockerignore
β”œβ”€β”€ .gitignore
β”œβ”€β”€ .gitlab-ci.yml
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
β”œβ”€β”€ THIRD_PARTY_LICENSES.txt
β”œβ”€β”€ assets
β”‚   └── style.css
β”œβ”€β”€ data
β”‚   └── .gitkeep
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ docker-entrypoint.sh
β”œβ”€β”€ documentation
β”‚   β”œβ”€β”€ examples
β”‚   β”‚   β”œβ”€β”€ example_1.md
β”‚   β”‚   └── example_2.md
β”‚   β”œβ”€β”€ notify
β”‚   β”‚   └── notifier.md
β”‚   β”œβ”€β”€ scrap
β”‚   β”‚   └── scraper.md
β”‚   β”œβ”€β”€ utils
β”‚   β”‚   └── util_functions.md
β”‚   └── web
β”‚       └── webUI.md
β”œβ”€β”€ example_usage
β”‚   β”œβ”€β”€ example_1.py
β”‚   └── example_2.py
β”œβ”€β”€ img
β”‚   └── scroll_meme.png
β”œβ”€β”€ mkdocs.yml
β”œβ”€β”€ pyproject.toml
β”œβ”€β”€ run.py
β”œβ”€β”€ settings
β”‚   └── settings.json
β”œβ”€β”€ setup.py
└── src
    └── lunchhunt
        β”œβ”€β”€ __init__.py
        β”œβ”€β”€ notify
        β”‚   β”œβ”€β”€ __init__.py
        β”‚   └── notifier.py
        β”œβ”€β”€ scrap
        β”‚   β”œβ”€β”€ __init__.py
        β”‚   └── scraper.py
        β”œβ”€β”€ utils
        β”‚   β”œβ”€β”€ __init__.py
        β”‚   └── util_functions.py
        └── web
            β”œβ”€β”€ __init__.py
            └── webUI.py

🀝 Contribute & Share

πŸ’¬ Contributions are welcome! Fork it or share LunchHunt with colleagues who deserve better lunch breaks.