A static web app for English-language teachers. Paste a text, highlight a
passage, and Ascham picks the vocabulary worth teaching, attaches the exact
sentence each word came from, estimates a level (always written ~B2: an
estimate, not a CEFR measurement) and exports an Anki CSV.
What the app promises about your text and your privacy is in
PROMISES.md.
The current version, whether it is released yet, and what it changes are in
CHANGELOG.md; what is free and what is Pro is in PROMISES.md.
Requires Node.js (no packages to install).
node scripts/serve.mjsThen open http://localhost:8000/. ES modules do not load from file://.
bash scripts/build.sh assembles the deployable site in dist/ (a copy, not
a transform) with dist/SHA256SUMS.
Every promise in PROMISES.md names the check that enforces it. All of them
run locally, from this repository, with the tools in DEPENDENCIES.md.
bash scripts/gates.sh # every gate below, browser test in Chrome
bash scripts/gates.sh --release # the same, browser test in Chrome and Firefoxgates.sh runs these in order and stops at the first failure:
bash scripts/test.sh: everynode --testsuite intests/. It also fails if the number of cases differs fromtests/EXPECTED, so a suite that silently stops loading is caught.bash scripts/check.sh: the static rules oversrc/andpublic/, each named (N1, C1, …) and cited inPROMISES.md: no network API, no URL, no navigation, no HTML sink, storage through one module with two keys, the exact Content Security Policy in every page and inpublic/_headers, and the rest.bash scripts/check-mutations.sh: breaks each rule once, in a scratch copy, and confirms the check that owns it notices. A check that cannot fail proves nothing.bash scripts/build.sh: copies the site intodist/, proves that every file is its source unchanged (apart from one path rewrite in the HTML), and writesdist/SHA256SUMS.bash scripts/check.sh dist: the same static rules over what ships.node --experimental-websocket scripts/browser-test.mjs chrome(allfor both): a full session in headless Chrome (and Firefox ESR), recording every request, then checking that each one stayed on the origin and that no browser storage holds the text. It prints, downloads and reads the files back; it needs Google Chrome or Chromium, Firefox ESR andpdftotext. It runs/usr/bin/google-chromeand/usr/bin/firefox-esrunlessCHROME_BINorFIREFOX_BINnames another binary. On Debian, Chromium's binary is/usr/lib/chromium/chromium./usr/bin/chromiumis a wrapper that loads the system's browser extensions, and their requests fail the origin check.
bash scripts/verify-live.sh https://ascham.app checks the live site
against a build: see VERIFY.md. Checks only a person can do are in
MANUAL-CHECKS.md.
Open source under the GNU AGPL, version 3: anyone can read, build, verify and
change the code, and share changes under the same licence. The terms are in
LICENSE (AGPL-3.0-only); the name is covered by TRADEMARKS.md, and
third-party notices are in NOTICE.
Ascham is independent and not affiliated with any school, publisher or institution.
Enquiries: hello@ascham.app. Security reports: see SECURITY.md.