All apps · 0 apps
Pantrix
Docker app from 007Darkmatter5's Repository
Overview
Readme
View on GitHubPantrix
A self-hosted kitchen planner: recipes, what's in the fridge and pantry, meal plans, and a shopping list that writes itself from the three.
- Recipes and ingredients. Recipes scale by servings. An ingredient line can accept substitutes ("penne or elbow pasta"), and an ingredient can record the exact product you usually buy.
- Inventory. What you have in the refrigerator, freezer and pantry, with expiry dates and a "keep at least" amount per ingredient.
- Meal plans. Put a recipe, a single ingredient (a packaged meal), or "eating out" on each day, and close out days as you finish planning them.
- A live shopping list. Always current: what upcoming meals need, plus anything below its minimum, less what's in inventory. Add your own items too.
- Stores and aisles. Record which aisle each item is in at each store you use, and the list sorts into walking order for the store you're in. Each item can link to its page on the store's website.
Accounts and kitchens
Pantrix is behind a username and password. The first time you open a fresh install it asks you to create an account, and that account is the admin.
- Each account has its own kitchen. Recipes, ingredients, inventory, meal plans, shopping lists and stores all belong to a kitchen, and nobody outside it can see them.
- Sharing a kitchen. A kitchen's owner finds a join code on the Kitchen page. Anyone with an account who enters it joins that kitchen and can see and change everything in it. They can go back to their own kitchen at any time, and the owner can remove them or change the code.
- Sign-ups. Anyone who can reach the sign-in page can create an account until the admin switches that off on the Admin page. Do so once everyone has an account, especially if Pantrix is reachable from the internet. The admin can see who has an account, but not into their kitchens.
Upgrading from a version without kitchens keeps everything: the existing data becomes the first account's kitchen.
Unraid
Install Pantrix from Community Applications, or add the template by hand from
007darkmatter5/unraid-templates.
The template maps two folders. Back them up together:
| Container path | Default on Unraid | Holds |
|---|---|---|
/data |
/mnt/user/appdata/pantrix/data |
The database, pantrix.db |
/keys |
/mnt/user/appdata/pantrix/keys |
The keys that encrypt sign-in cookies |
To reach Pantrix from outside your network, put it behind a reverse proxy that handles HTTPS and set
Behind a reverse proxy to true.
Docker
docker run -d --name pantrix \
-p 8080:8080 \
-v /path/to/data:/data \
-v /path/to/keys:/keys \
-e PUID=1000 -e PGID=1000 \
ghcr.io/007darkmatter5/pantrix:production
Then open http://<host>:8080 and create your account.
| Tag | Built from | For |
|---|---|---|
production, latest, <version> |
main |
Everyday use |
beta, <version>-beta |
beta |
Trying changes before they reach main |
| Variable | Default | Meaning |
|---|---|---|
PUID / PGID |
1654 |
The user and group Pantrix runs as and that own /data and /keys (Unraid: 99 / 100) |
ASPNETCORE_FORWARDEDHEADERS_ENABLED |
false |
Set to true behind a reverse proxy that handles HTTPS |
/healthz answers without signing in, for health checks.
Aisle lookups (optional)
Every store works with aisles you type in. For stores that show aisles on their website, Pantrix can also look them up, by driving a real Chrome browser that you run next to it. Store sites turn away plain programs, so a real browser on your own network is the only thing they serve. The Stores page lists which chains are known to work; H-E-B is the one tested so far, and Sam's Club is manual because its website doesn't show aisles at all.
Lookups happen only when someone presses Look up, one page at a time. If a site asks for a human check, Pantrix says so and you complete it in the browser yourself; it doesn't try to get past it. Automated use may be against a store's terms, and a site can change or block it at any time, so treat this as a convenience, not a guarantee.
The browser is a second, optional container, Pantrix Browser: a Chromium with a screen you can open from another computer, set up so that Pantrix can drive it. On Unraid, install it from Community Applications next to Pantrix. The two must share a Docker network of their own, so that only Pantrix can reach the port that controls the browser:
docker network create pantrix
On Unraid, then set Network Type to pantrix on both containers. With Compose:
services:
pantrix-browser:
image: ghcr.io/007darkmatter5/pantrix-browser:latest
container_name: pantrix-browser
restart: unless-stopped
shm_size: "1gb"
environment:
PUID: "99"
PGID: "100"
# A sign-in for the browser's screen. Set both: the screen includes a terminal, and the browser may be
# signed in to your store accounts.
CUSTOM_USER: "choose-a-username"
PASSWORD: "choose-a-password"
ports:
- "3011:3001" # the browser's screen (https). The control port, 9223, is deliberately not published.
networks:
- pantrix
volumes:
- /mnt/user/appdata/pantrix-browser:/config
networks:
pantrix:
external: true
- Open
https://<host>:3011(accept the self-signed certificate), go to each store's website in that browser, and choose your store location. - In Pantrix, on the Admin page, enter
http://pantrix-browser:9223as the browser address and press Test. - Give a store the Browser lookup method (H-E-B gets it automatically). Look up then appears on the Stores page and in the ingredient dialog. For a store Pantrix doesn't know, Check website on the Stores page finds out whether its site shows aisles.
Signing in to store accounts
You can sign in to a store's website in that browser, and it stays signed in: the session lives in the browser's own
profile (/config), so lookups then run as you, with your account's store already selected. Pantrix never sees or
stores the password, and doesn't fill in sign-in forms.
A signed-in browser is worth protecting. Whoever can control it can act as you on those sites, which may include placing an order. That is why the control port above isn't published to your network and the browser's screen has its own sign-in. Automated use is also then tied to your account, not just your internet address.
Address lookup
When you look up a store's address, what you typed is sent to OpenStreetMap's Nominatim service, and to Photon if that finds nothing. Nothing else leaves your server.
Development
Requires the .NET 10 SDK.
dotnet run --project src/Pantrix # http://localhost:5057
dotnet test
dotnet ef migrations add <Name> --project src/Pantrix
The database is created on first run (src/Pantrix/pantrix.db) and migrations apply on startup. Point the app at a
throwaway database with ConnectionStrings__Pantrix="Data Source=<path>".
Day-to-day work happens on beta; merging beta into main releases to Production. Every push to either branch
runs the tests, builds the image for amd64 and arm64, starts it the ways it is deployed, and only then publishes it.
License
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/007darkmatter5/pantrix:productionRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Shell
bash- Privileged
- false
Template configuration
Port for the Pantrix web interface.
- Target
- 8080
- Default
- 5057
- Value
- 5057
The database (pantrix.db).
- Target
- /data
- Default
- /mnt/user/appdata/pantrix/data
- Value
- /mnt/user/appdata/pantrix/data
Encryption keys for sign-ins. Back these up with the data.
- Target
- /keys
- Default
- /mnt/user/appdata/pantrix/keys
- Value
- /mnt/user/appdata/pantrix/keys
User ID Pantrix runs as. It owns the data and keys folders.
- Default
- 99
- Value
- 99
Group ID Pantrix runs as.
- Default
- 100
- Value
- 100
Set to true when a reverse proxy (SWAG, Nginx Proxy Manager, Traefik) handles HTTPS in front of Pantrix.
- Target
- ASPNETCORE_FORWARDEDHEADERS_ENABLED
- Default
- false
- Value
- false