Skip to content

Getting started

Mash runs as one container with one volume. There is no external database and no config file. Everything is an environment variable.

  • Docker with the Compose plugin
  • A URL your phone can reach (even just your machine’s LAN address), because it gets baked into the QR codes
Terminal window
git clone https://github.com/jimmytimmons/mash.git && cd mash
cp .env.example .env
# Generate the two secrets and paste them into .env:
openssl rand -hex 32 # SESSION_SECRET
openssl rand -hex 32 # VOTE_SALT
docker compose up -d

Set at minimum PUBLIC_BASE_URL, ADMIN_EMAIL, ADMIN_PASSWORD, and the two secrets in .env. See Configuration for the full reference.

Open http://localhost:3000 and sign in at /login with the admin email and password you set.

  1. Create a recipe under Recipes: ingredients, measurements, method. A recipe is a template; nothing on it is ever public.
  2. Start a batch from the recipe. The batch copies the ingredients. Edit them to match what you actually made and Mash rescales the rest (how that works).
  3. Publish the batch. It gets a public page, a QR code, and a lot code like REAPER-2607-A.
  4. Print labels from the batch’s label sheet (Labels & printing).

Whoever scans the bottle sees the story and the ingredients, and can leave a thumbs up or down and a comment (which you moderate before it appears).

Pull the new image and recreate. The volume carries everything:

Terminal window
docker compose pull && docker compose up -d

Database migrations run automatically at boot. See Operations for backups.