An adaptive, browser-based trainer that teaches the visual and naming vocabulary of medicinal chemistry — rings, functional groups, amino acids, nomenclature, molecular properties, reactivity, and structural liabilities — to someone coming from biology or biophysics rather than synthetic chemistry.
It is a single self-contained HTML file (no server, no build step to use it): open
dist/medchem_flashcards.html in any browser. Every structure is drawn live from SMILES,
progress is stored locally, and the question mix adapts to what you still need.
- Adaptive scheduling. A Leitner spaced-repetition scheme, weighted by per-skill mastery, serves whatever you're weakest at while still reviewing what you've learned.
- Skill dashboard. Eight skills, each with a level (0–5) and progress bar; a "Customize" panel lets you switch skills off.
- Lesson cards. Short, illustrated intro cards appear once before a topic's first question (and are re-readable by clicking a skill in the dashboard).
- Question types include: ring name ↔ structure and ring anatomy; functional-group name ↔ structure and "spot the group" on real drugs; the 20 amino acids; nomenclature rules (heteroatom prefixes, ring-size suffixes, ortho/meta/para); property comparisons (logP, TPSA, H-bond donors/acceptors); reactivity, acid/base, and bioisosteres; hybridization and H-bond role; and structural alerts / liabilities (reactive metabolites, Michael acceptors, PAINS, etc.).
All chemistry content is validated with RDKit (SMILES parsing, formula, substructure matches) and with the SmilesDrawer renderer before it ships.
build.py # inlines library + data -> dist/medchem_flashcards.html
src/
app_src.html # the engine (HTML/CSS/JS template with __LIB__/__ENTITIES__ markers)
sd.min.js # vendored SmilesDrawer (structure rendering)
entities.js # rings, functional groups, amino acids
propmols.js # molecules for the property-comparison questions
stereomols.js # legacy molecule set (kept for build compatibility)
highlightq.js # "spot the group" questions (RDKit-highlighted SVGs)
hbqhyb.js # hybridization + H-bond-role questions (RDKit-highlighted SVGs)
alertq.js # structural-alert / liability questions (RDKit-highlighted SVGs)
scripts/ # data generators (provenance; see note below)
genalerts.py genhyb.py genprops.py genreal.py genaa.py
drugs.csv # curated real-drug library (from MoleculeNet BBBP)
dist/
medchem_flashcards.html # the built, ready-to-use single file
The committed dist/medchem_flashcards.html is ready to use as-is. To rebuild it from the
sources in src/:
python3 build.pyThis inlines sd.min.js and the *.js data files into app_src.html and writes the
single-file output to dist/.
The src/*.js data files are committed artifacts. They were produced by the scripts in
scripts/ using RDKit (pip install rdkit), which render the highlighted-atom SVGs and
emit the question data. The scripts read/write flat filenames, so run them from a working
directory that contains their inputs (e.g. drugs.csv) and copy the resulting *.js
files into src/. They are included here for provenance, not as a turnkey pipeline.
- Structure rendering: SmilesDrawer.
- Chemistry validation: RDKit.
drugs.csvderives from the MoleculeNet BBBP dataset.