How it works

Open at both ends

One register of beers that anyone can improve, and checkins you keep on a server you choose. A permanent beer id is all that ties the two together.

01 — The codex

What's in the bottle

One register, improved by everyone.
Breweries

Publish one JSON file with your own beers. First-hand, so it always wins.

brewery-feed
Curators

Transcribe beers in the scriptorium, until the brewery takes over.

submission-feed
Rubricator

A small daemon. Pulls both feeds, validates them against the spec, opens a pull request per brewery and merges it.

validate → pull request
The codex

A git repository. Every beer is a folder with a JSON file, and the folder's path is its id — for good.

register/breweries/nl/brouwerij-t-ij/beers/ipa/beer.json
so its id isnl/brouwerij-t-ij/ipa
CC BY-SAJSON SchemaPRs welcome
This site

A nightly snapshot of the register.

Shops and apps

Read index/beers.json. No API key, no scraping.

You

Wrong ABV? Fix it and send a pull request.

nl/brouwerij-t-ij/ipathe only thing both halves share
02 — Your checkins

Who drank what

Kept where you say.
You

Point the app at a server: your own, a friend's, or ours. The app looks up beers in the codex itself.

OAuth 2 + PKCE
Your server

Keeps your account and your key. Signs each checkin with it and publishes your feed. Anyone can run one.

server-api
A checkin
"type": "checkin",
"author": "did:key:z6Mk…",
"beer": "nl/brouwerij-t-ij/ipa",
"checked_in_at": "2026-08-20T19:02:00Z",
"note": "Still the one.",
"sig": "Ed25519…"

Signed, immutable, published in a plain JSON feed. The beer is just its codex id.

checkin-feed
Aggregators

Pull feeds from every server, check every signature, merge.

pull · verify · merge
Friends

Follow you from any server. Cheers back.

federated

Moving house? Export your key and point the app at another server — your checkins keep their ids.

Read the specs