This is a working apothecary, not a finished pharmacopoeia. Most of what’s on the bench right now is unlabelled, and some of it will spoil.
If the idea is new to you, it’s a digital garden with the labels changed. That note explains what those are and why I went with an apothecary instead.
The useful thing about an apothecary is that a failed batch is a normal outcome. Nobody expects every distillation to come out clean. You write down what you put in, what came out, and what you’d change, and then the next batch is better. A note saying “this went wrong and here’s why” is worth more six months later than a tidy shelf with nothing behind it.
I keep several things steeping at once on purpose. It’s how I avoid stalling on any one of them. So expect a reagent from embedded systems sitting next to one from Rust sitting next to something about databases, with no through-line.
What’s on the bench
Reagent
Raw and unprocessed. Something caught my attention and I wrote it down before I understood it. Most notes start here, and plenty never leave.
Tincture
Steeping. Half worked out and actively changing. What you’re reading may have been rewritten since I wrote it, and the rewriting is usually the interesting part.
Elixir
Stable, repeatable, trusted. The things that survived being tested. Fewer of these, and they take much longer than I expect.
Failed batch
Kept on purpose and labelled with what went wrong. Not embarrassing. This is the actual record of the work.
How something gets to the shelf
%%{init: {'theme':'base','themeVariables':{ 'background':'#1a1512', 'primaryColor':'#241d19','primaryTextColor':'#f4e8cc','primaryBorderColor':'#e8a33d', 'lineColor':'#a89680','textColor':'#f4e8cc','edgeLabelBackground':'#241d19'}, 'flowchart':{'padding':16,'nodeSpacing':50,'rankSpacing':60,'useMaxWidth':true}}}%% flowchart LR A([Curiosity]):::spark --> B[Gather<br/>reagent]:::raw B --> C[Steep into<br/>tincture]:::work C --> D{Holds up?}:::check D -->|yes| E[Elixir<br/>on the shelf]:::win D -->|no| F[Failed batch<br/>labelled why]:::fail F -.reformulate.-> C classDef spark fill:#4a3410,stroke:#f0b551,stroke-width:2px,color:#fdf2da classDef raw fill:#33291f,stroke:#d79b45,stroke-width:2px,color:#f7e9cd classDef work fill:#12333a,stroke:#4fd6cf,stroke-width:2px,color:#dcf6f4 classDef check fill:#3d2a12,stroke:#ffb84d,stroke-width:2px,color:#ffe6b8 classDef win fill:#1c3d16,stroke:#7ed957,stroke-width:2px,color:#e0f7d4 classDef fail fill:#3d1620,stroke:#ff5f7e,stroke-width:2px,color:#ffd6de
The dotted line back from a failed batch is the honest part. Most things go around it more than once before anything reaches the shelf.
Finding your way
Use the search, or the graph over in the corner. What’s connected to what tends to be more useful than any index I’d write by hand. Backlinks at the bottom of each note show you what else calls for that ingredient.