Tired of Ctrl+F for food?
Let LunchHunt do the searching — so you can do the eating.
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
📖 Full docs available on GitLab Pages
You can now use LunchHunt in two ways:
git clone https://github.com/trholy/lunchhunt.git
cd lunchhunt
pip install .Edit example_2.py and define your favorite foods:
# Example configuration
favorite_foods = ["Eierkuchen", "Milchreis", "Hefeklöße"]Use Docker to spin up a local Gotify server for notifications: 👉 Gotify Installation Guide
python example_2.py💬 Receive instant push notifications with location details!
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 -dAccess the UI at 👉 http://localhost:8050
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
✅ Save Time – No more Ctrl+F through menus
✅ Reduce Stress – LunchHunt does the searching
✅ Boost Productivity – Focus on code, not canteens
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
💬 Contributions are welcome! Fork it or share LunchHunt with colleagues who deserve better lunch breaks.
