Built with passion for science and discovery
A free, single-file, browser-based toolkit for everyday molecular-biology bench work: dilutions and molarity, reagent and buffer recipes, plate layouts, common calculators, step-by-step protocols, gel simulation and a lab notebook. No installation, no account, no server, and no data ever leaves your machine.
Live tool: mbaffour.github.io/dilution-designer Blog post: mbaffour.github.io/dilution-designer/blog.html
| Module | What it does |
|---|---|
| Home hub | Launcher for everything below |
| Plate Planner | 96- and 384-well, multi-plate. Plasmid/induction and phage/MOI modes, master mix with overage, replicates, randomization, exclusions, bench-reality checks |
| Phage Planner | A saved library of lysates and their titers, then the volume for an infection — by MOI, total PFU or final PFU/mL — plus the dilution to make when that volume is too small to pipette |
| Reagent Prep | 243 verified recipes across 14 categories — media, buffers, antibiotics, miniprep P1/P2/P3 and Buffer PE, CTAB, gel and protein reagents, fixatives, stains and mountants — scaled to whatever volume you need, with sources |
| Dilution & Molarity | C1V1 across molar and mass units, serial dilutions, molarity ⇄ mass, and weigh-outs |
| Calculators | 16 bench calculators: ng ⇄ pmol, A260 quant, ligation ratios, primer Tm and resuspension, OD₆₀₀ → cells, phage titer, MOI, lysate → infection volume, % ⇄ molarity, RCF ⇄ RPM, doubling time, dye working dilution, PCR/qPCR master mix |
| Protocols | 31 protocols — miniprep, CTAB gDNA, transformation, plaque assay, gels, MIC, Gibson, immunofluorescence, H&E, live/dead and more — that rescale as you change the numbers |
| Microscopy & Dyes | 79 dyes and stains — what to use for what, at what concentration, and in which channel. Ex/Em maxima, filter-cube and laser matching, a panel builder that flags channel collisions and bleed-through, working-dilution volumes for your sample count, and step-by-step staining directions |
| Gel Simulator | Predict an agarose or SDS-PAGE run before you pour it: 16 vendor ladders plus your own, band-resolution warnings, and a best-percentage suggestion |
| Lab Notebook | Pull results from any module into a dated entry, add your own notes, export to Markdown, HTML, PDF, Word (.docx), CSV or JSON |
- Everything is local. Every calculation runs in your browser. Nothing is uploaded, so it is fine for unpublished work.
- It works offline. Visit once and it keeps working with no network — usable in a cold room, a BSL suite, or on a plane. It is a PWA, so you can install it like an app.
- The maths is checked. A self-test harness (
?selftest=1) asserts every formula — 126 assertions, anchored to published references rather than to the code's own output. - It is one file.
index.htmlplus a recipe library and a dye library. No build step, no dependencies, no CDN.
Open the live URL, or serve the folder locally:
python -m http.server 8000Then open http://localhost:8000. Opening index.html straight off disk mostly works, but browsers block local file:// data requests, so the recipe and dye libraries will not load — serve it instead.
- Pick Plasmid / Induction mode, choose 96- or 384-well
- Enter compound name, stock concentration, and culture volume per well
- Add conditions with + Add condition, then paint or replicate across wells
- Toggle controls (negative, blanks, positive) as needed
- Read off the per-well volumes and the master mix table
- Export Save (JSON), CSV, PNG, Print, or send it to the Notebook
- Pick Phage Infection mode
- Enter bacterial concentration (CFU/mL), phage titer (PFU/mL), and infection volume per well
- Use the Serial Dilution Planner to get from stock to working titer
- Add MOI conditions, paint, and check the MOI panel for per-well and total phage volumes
- + Add lysate — name, titer, volume on hand, propagating host and the date you titered it. If you only have a plate count, open Calculate titer from a plaque assay and it fills the titer in for you. Lysates are saved in your browser and survive reloads; Export / Import JSON moves them between machines, and Pull from plate copies the stocks off your current plate layout
- Pick a lysate on the left — or skip that and just type a titer
- Choose what you want to deliver: a target MOI (with the host density), a total number of PFU, or a final PFU/mL in the infection
- Set the volume per infection, how many infections, and whether the phage goes on top of the culture or comes out of the stated volume
- Read off the volume to pipette. If the neat volume is too small for your pipettes, it tells you which dilution to make, gives you the recipe (take X µL + Y µL diluent), and shows every rung of the ladder with its verdict so you can override the choice
- → Send to Plate Planner turns the selected lysate into a phage stock for a plate layout
The same solver is available as a calculator (Calculators → Phage lysate → infection volume) and the Plate Planner's phage-stock editor can load from and save to the same library.
Delivered MOI, final volume and PFU/mL are computed from the volume you will actually pipette, not from the neat-equivalent volume — those two differ whenever a dilution is involved.
- Start from what you are staining — the chips down the left filter the library by target (nucleus, membrane, mitochondria, actin, viability, cell wall, antibody label, brightfield, EM) and by sample type (live cells, fixed cells, bacteria, tissue, EM grid)
- Open a dye. The sheet gives you Ex/Em maxima on a wavelength axis, the filter cube and laser line it belongs on, how well that line actually excites it, and which other dyes in the library are too close to share a panel with
- What to use it for lists the assays that dye is good for, each with a concentration and an incubation time
- Working dilution takes your target concentration, sample count and volume per sample and gives you the exact volumes — and when the neat stock draw falls below what you can pipette, it builds the intermediate dilution ladder for you rather than telling you to take 0.1 µL
- Making the stock turns a vial mass into the volume of solvent to add
- Directions are tickable staining steps that rescale with the numbers above
- + Add to panel, then 🎛 Panel builder: pick your scope configuration and it assigns every dye to a channel and flags the three things that ruin a multi-colour experiment — two dyes in one channel, emission bleeding into the next collection band, and one dye lighting up on another's laser line
The working-dilution solver is also available on its own as Calculators → Fluorophore / stain working dilution, and + Add a dye stores your own reagents in the browser alongside the library.
The panel checks are modelled from published excitation and emission maxima and their band widths — the app does not ship full spectral curves. They catch the obvious clashes; they are not a substitute for real overlap integrals or for linear unmixing on your own instrument. Working concentrations are starting points from published protocols and must be titrated on your own sample.
Choose DNA (agarose) or protein (SDS-PAGE), set the percentage, pick a ladder, and enter your expected fragment sizes per lane. It tells you which bands will not resolve, which run off or stick in the well, and which gel percentage would separate everything.
The migration model is a planning aid, not a prediction: it approximates mobility as linear in log₁₀(size) over the gel's resolving range. Real migration also depends on buffer, voltage and conformation — supercoiled, nicked and linear plasmid of the same length run differently. Ladder band sizes are the manufacturers' published values; the image is drawn from those numbers.
Every module has a + Notebook button. It opens a picker so you choose exactly what to import — a plate image, a band table, a set of calculator results, a protocol with its tick state. Add free text in light markdown, then export.
- Undo / Redo: Ctrl+Z / Ctrl+Y, 30-step history
- Every control is reachable and operable by keyboard; dialogs trap focus and close on Escape
- All text meets WCAG AA contrast in all three themes (day, night, ambient), verified by a measured audit rather than by eye
- Gel images are canvas, so an equivalent band table is always rendered as real text for screen readers
- Respects
prefers-reduced-motion
Recipes carry their sources and licences, weighted toward open references (PubChem, OpenWetWare, protocols.io, Addgene, Barrick Lab) and manufacturers' free technical sheets. Molecular weights cite a PubChem CID. Factual numbers — molecular weights, band sizes, concentrations — are used freely; vendor prose and artwork are never copied.
This is a planning tool. Check anything that matters against your own protocol before you pipette it.
Any modern browser (Chrome 99+, Firefox 112+, Safari 15.4+). PNG export uses the Canvas API with roundRect; offline support uses a service worker.
Pull requests are welcome.
- Typefaces: DM Mono and Syne, loaded as a progressive enhancement only — local stacks sit behind them so the offline experience is unchanged
- Plate layout inspired by Biotek Gen5 plate reader software
MIT License — free to use, modify, and distribute.