ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
An interactive practice tool for microbiology students learning to calculate dehydrated media masses for a given volume of solution.
Translation pending
EducationJavaScript · CSSGitHub @CalebHendrenOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A simple practice problem generator for media preparation in microbiology
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A self-contained web app that drills microbiology students on the math behind preparing dehydrated culture media. Students see a randomized problem, get three attempts to enter the correct mass in grams, and on either success or failure are shown a full step-by-step ratio-and-proportion solution.
Built for Preliminary Microbiology lab instruction. Drop it on GitHub Pages and share the link — no server, no build step, no dependencies.
Once deployed, the app lives at: https://calebhendren.github.io/mediacalc/
x g / V mL = gPerL g / 1 L, the unit conversion, the cross-multiplication, and the final 2-decimal-place answer.role="math" and a plain-English aria-label so screen readers describe the math instead of trying to parse the visual fraction layout.prefers-reduced-motion respected.The student's input is parsed as a number and compared to the true answer with a tolerance of ±0.02 g (configurable). This is loose enough to accept either round-half-up or round-half-down at the 2-decimal place, but tight enough that random guesses fail.
For example, for 1635 mL of MSA the exact answer is 181.485 g. Any of the following is accepted:
.
├── index.html # Markup only — no inline CSS or JS
├── css/
│ └── styles.css # All styles
├── js/
│ ├── config.js # Media list and tunable constants — edit this
│ ├── utils.js # Formatting and random helpers
│ ├── question.js # Random question generation
│ ├── solution.js # Worked-solution HTML builder
│ ├── calculator.js # On-screen calculator widget
│ └── app.js # Entry point — wires everything together
└── README.md
The JS is loaded as native ES modules (<script type="module">), which every browser shipped in the last several years supports. There is still no package.json, no bundler, no build step.
Everything you might want to change lives in a single file: js/config.js.
export const MEDIA = [
{ name: 'nutrient agar', gPerL: 23 },
{ name: 'tryptic soy agar', gPerL: 40 },
{ name: 'citrate agar', gPerL: 24 },
{ name: 'MacConkey agar', gPerL: 50 },
{ name: 'mannitol salt agar', gPerL: 111 }
];
name is rendered directly in the problem text. Use the spelling and capitalization you want students to see (the app capitalizes the first letter at the start of a sentence).gPerL is grams of dehydrated powder per 1 L of finished medium.These default values reflect common Difco/BD formulations; verify against your own manufacturer's label before using in the actual lab.
| Constant | Default | What it controls |
|---|---|---|
COMMON_VOLUMES_ML | [100, 150, 200, 250, 300, 400, 500, 600, 750, 1000, 1500, 2000] | The "clean" classroom volumes used 75% of the time. |
COMMON_VOLUME_PROBABILITY | 0.75 | Probability (0–1) of picking from COMMON_VOLUMES_ML instead of the random range. |
RANDOM_MIN_ML / RANDOM_MAX_ML / RANDOM_STEP_ML | 100 / 2000 / 5 | Random-volume range and step size in mL. |
ANSWER_TOLERANCE_G | 0.02 | Maximum allowed error in grams when grading a student's answer. |
ATTEMPTS_PER_QUESTION | 3 | Number of guesses before the solution is revealed. The pip indicator scales to match. |
No other file needs to change. The footer count, attempts pip count, and grading tolerance all derive from these values at runtime.
Because the app uses ES modules, opening index.html directly via file:// will be blocked by the browser's module CORS rules. Run it through a local static server instead:
# Python 3
python3 -m http.server 8000
# Node (with npx, no install needed)
npx serve .
Then visit http://localhost:8000.
main branch and the / (root) folder.https://calebhendren.github.io/<repo-name>/.GitHub Pages serves the files over HTTPS, so the ES modules load with no extra configuration. No build step or GitHub Actions required.
Tested on current versions of Chrome, Safari, Firefox, and Edge, on both desktop and mobile. The app uses no build tooling and no transpilation; it relies on ES2017+ features and native ES modules, which every browser released since 2018 supports.
This app is intended for use in higher-education courses and aims to meet WCAG 2.1 Level AA.
<label> associations, validation messages are surfaced via an ARIA live region, and equation blocks expose plain-English descriptions for screen readers.If you find an accessibility issue, please open an issue on the repository.
MIT. Use it, modify it, share it with your students.