Open source · Personal project
← Selected workrecipify: a verified document pipeline
recipify started from a real archive: about 1,900 files collected over many years by a professional kitchen, mostly in Icelandic. Word documents, PDFs laid out in two or three columns, scanned notebooks, photos, spreadsheets and many copies of the same files. It turns them into verified, structured recipes, publishes them as one offline HTML file that chefs can cook from, and holds back everything it can't check, with the reason.

- 1,916
- source files in the real archive
- 524
- recipes verified and published
- 100%
- test coverage, enforced in CI
The pipeline
- Inventory hashes every file, classifies it by content rather than extension, merges identical copies and triages recipes from books and reference material.
- Extraction runs locally and for free: poppler in content-stream order (cross-checked against its layout rendering), Word XML including text boxes, and spreadsheets block by block.
- Documents holding several recipes are split only in clear cases, and every decision, split or not, is stored with its reason. Deterministic rules then structure each recipe into components, ingredients and steps.
Why it can be trusted
- Nothing is rewritten: the structurer only decides what each source line is, never changes the text.
- Every published recipe is checked word for word against its source (recall and precision of 1.0), and two extractors must agree on reading order.
- Hard cases are named, not hidden: the report lists every document that isn't ready, and why.
Cheap to re-run, easy to trace
- Every artifact is keyed by the source's SHA-256 and the engine version, so re-runs skip finished work, renamed files keep their results and earlier results are never overwritten.
- recipify trace follows a published recipe back to the file it came from and re-checks every link on the way.
The viewer
- One HTML file with no external requests: it works offline, can be emailed, and stays readable without JavaScript.
- Built for cooking: scale from ½× to 4×, tick off ingredients and steps, search that ignores accents, and filters with live counts.
- recipify lock encrypts the page with AES-256-GCM for public hosting; the key travels in the link's #fragment, which browsers never send to the server.
Technologies
- Python
- pytest
- poppler
- python-docx
- GitHub Actions