Side-by-side or overlay PDF diff driven by one engine that reads each file into a structured model — text, vector geometry, images, form fields, annotations — and compares the models. Moves show as moves, edits show only where they happened, and any PDF type works without picking a mode.
Open a STEP / STP part and it measures itself — volume, thinnest wall, draft and undercut checks on load, plus hole detection with a BOM. Measure, section, export STL. Rust + WASM B-rep kernel, runs in your browser.
A fermentation recipe online is usually one person’s write-up. It might be good. It might be copied from another site that copied it from a third. The Fermentation Atlas is built differently. Every ferment in it, from yogurt to fish sauce, is a single record made the same way: find the sources, write the record, check it, then draw it.
This post walks through those four steps, using lahpet, Myanmar’s fermented tea leaf, as the example.
1. Find the sources
The research started with a simple goal: every documented ferment, however small the difference. Regional variants, family recipes and ferments known only from old texts each get their own entry, with a line saying exactly how they differ.
AI research assistants do the searching and reading, in many languages. They look for sources in this order of preference:
Specifications and standards: protected-origin rules (PDO, PGI), Codex and national standards.
Tested recipes: food-safety agencies and university extension services.
Research: peer-reviewed studies, theses and archives.
Encyclopedias are used only as an outline. They are never the only source for a number on a full page.
2. Write the record
Each ferment is one file. Lahpet’s is lahpet.yaml. It holds the names (including လက်ဖက် in Burmese), the region and people, the ingredients, the microbes, and then the steps.
Every number in a step is stored the same way. Here is the pit step’s time:
duration: text: At least 20 days and up to a year or more, depending on demand ev: sourced unit: h min: 480 max: 8760 src: [thar2016, kham2024]
Each field has a job:
text keeps the number in the source’s own words. “At least” and “up to” stay in, because they change what the number means.
min and max are the range parsed from that text, so ferments can be compared. Durations are stored in hours, with fixed conversions: 1 day is 24 hours, 1 month is 730, and 1 year is 8,760.
ev is the evidence label you see on the page: Measured, Set, Reported or Typical.
src points to the sources listed at the bottom of the record.
A change within one step is stored as a start and an end. A pH that falls from 6.6 to 4.2 is one value with an end, never a range of 4.2–6.6. A salt value also records what it’s a percent of, such as “of cabbage weight” or “of the brine”.
Microbes are split into three lists: the ones doing the fermenting, the ones that are also present, and hazards. Pathogens such as Listeria or Clostridium always go under hazards, never under fermenters.
3. Check it
The rules for writing a record are strict:
Every number must appear in the source cited for it.
If only a study’s abstract was read, the citation says “(abstract)”, and every number taken from it must be in that abstract.
Nothing is cited that wasn’t opened: no DOI, URL, title or author from memory.
If a number comes from a nearby product, such as a sister cheese or a lab version made with pasteurised milk, the text says so.
Any value that sets a safety limit, such as the starting pH or the salt for fish, needs a food-safety authority or a peer-reviewed safety study as its source.
Then the checks run:
A validator reads every record. It checks units and ranges, and that each temperature, salt and pH number appears in the text stored with it.
Every DOI, PubMed Central id and link is looked up to confirm that it exists and matches the citation.
Samples of values are checked by hand against their sources. Research is done in waves, and each wave is audited before it is published.
Which entries get a page
Not every ferment has enough published detail for a full page. An entry gets its own page when it’s curated, or when it clears a page bar:
at least three steps of its own, with numbers on at least two of them,
a sourced time on one step, and a sourced temperature, salt or pH on another,
two or more sources, with a primary source behind at least one of its own numbers.
An entry that doesn’t clear the bar isn’t hidden. It appears in full as a row on its kind and region pages, with the numbers it has and their sources. If a real search finds no source for a number, the number is left out, not stretched or guessed. The entry gets its page once its sources give enough.
4. Draw it
Each step in a record also says what to draw. Lahpet’s pit step includes these fields:
caption: Weighted with no air, the leaf sours and turns from green to golden-greenchange: compactscene_vessel: pit
change is the one visible thing that happens in the step. It comes from a closed list of 20, such as:
cut: shredding cabbage, cutting curd
diffuse: salt moving into the food
gas: bubbles rising
grow: a mould or rind spreading
compact: a weight pressing down
age: slow change over time
A closed list keeps every scene readable and comparable. Each step shows one change, never five at once. scene_vessel picks the main object from a fixed set, from a jar or crock to a pit, cave, gourd or banana-leaf parcel. caption names the change in one plain line.
The scene is then drawn from the record. The vessel, the contents and their colours, the change, the step’s numbers and a lens showing the microbes all come from the data. The lens draws microbe shapes, not counts, and says so. The lines have a hand-drawn look, and each scene is seeded from its record, so it is drawn the same way every time.
Lahpet's pit step, drawn from the record above: change "compact", vessel "pit", 30 °C and pH 4.35–7.11.
Two checks run on the drawings:
An automatic audit renders every drawable step. It looks for labels that overlap or fall off the frame, contents a vessel can’t hold, and microbe names that don’t read as names.
A contact sheet puts many scenes on one page, so a person can review them by eye and catch what the audit can’t.
Each page also gets a poster: a still image of the step with the most visible change, for sharing links.
Still growing
The research continues in waves, starting with the ferments people look up most. Each wave is audited before it is published, and entries move from hub rows to full pages as their sources allow. If you find a value that doesn’t match its source, the method page says how to report it.
The atlas describes how ferments are made. It is not a food-safety guide. For home preserving, follow a tested recipe from a food-safety authority.