The learner and the barrier

Satchel is designed for a secondary-school student who can download work at school but has no reliable internet at home. They may share a phone with family or need larger text and an untimed activity. This is our design scenario, not a report from a student trial.

ITU estimated that 2.2 billion people remained offline in 2025, with 96% in low- and middle-income countries (ITU, November 2025). Satchel addresses one part of that barrier: a teacher can send a practice set that keeps working after the connection ends.

What it does

The teacher writes questions in plain text, tries them in a student preview, and downloads one HTML file. It can travel by message, Bluetooth or USB and open in a browser without an account or app installation. A print option produces a worksheet and a separate answer key.

Number a question, mark the right choice with *, or write Answer: for a short typed answer. Add a hint and explanation if useful. The editor reports missing or conflicting answer keys and blocks export until they are fixed, so a broken question cannot silently disappear from the set.

Inside the file, the student gets:

  • One question at a time, large answer targets and no timer.
  • Keyboard controls, labelled inputs and announced feedback.
  • Optional hints, followed by the right answer and an explanation after checking.
  • A chance to practise the questions they missed.
  • Larger text and high contrast without losing an unfinished answer.
  • Saved progress when the browser permits local storage. Reopening the same file in the same browser offers Continue at question…, including the draft answer. Start again clears the previous attempt for someone sharing the device.
  • Read-aloud when a local English voice is installed.
  • A readable question list with expandable answers when JavaScript is disabled.

Typed answers accept case and spacing differences, plus equivalent fractions, decimals and percentages such as 1/2, .5 and 50%. Teachers can list additional accepted wording. The checker preserves decimal place value and negative signs; it does not treat 5 as .5.

Learning value

Practice testing received a high utility rating in a review of ten learning techniques (Dunlosky et al., 2013). Satchel supports that activity with questions and feedback that remain available offline. We have not tested learning outcomes with students or claimed a measured improvement in grades.

How it works

The teacher page uses React, TypeScript and Vite. A plain JavaScript player runs both the preview and the downloaded file. The file embeds the questions, styles and player, plus a static question list for use without scripts. The two downloaded files in our browser tests are about 27–29 KB; size depends on the questions.

Question text is escaped in the file and inserted as text in the player. The editor processes it locally, with no analytics or upload service. Its Content Security Policy blocks fetch and similar connections. The offline player's policy permits its inline code and styles, and the player makes no network requests.

What we improved and checked

The October 24 update fixes decimal grading, answer loss when opening hints or changing reading settings, and conflicting teacher answer keys. It also adds saved-session continuation and clearer handling of unavailable storage. These fixes address mistakes that could otherwise give a learner incorrect feedback or erase their work.

The production build passes 32 unit tests and 5 Chrome browser tests. We checked parsing, numeric equivalents and near misses, preserved drafts and focus, corrupt or blocked storage, restart behaviour, HTML escaping, and sample file size below 60 KB.

In the browser tests, we downloaded an actual file, opened it with the network off, answered a question, selected an unfinished answer, closed the page and reopened it. The saved answer and question position returned. We then completed the set and retried the missed question. Another test opened a downloaded file with JavaScript disabled and revealed its answers.

Axe reported no accessibility violations in the tested editor and player states. Keyboard checks passed, and the 375px view had no horizontal overflow with larger text and high contrast. We inspected phone and desktop screenshots. The player also passes an ES5 syntax check; that does not establish support for every old browser.

Limits

The app supports one correct choice or a short typed answer, without uploaded images, audio or symbolic maths. Number comparison is limited to JavaScript's safe numeric range; larger values require matching written answers. Satchel does not supply a device or the initial file transfer. There is no class dashboard.

Progress stays in the browser and is not a secure assessment record. Local-file storage varies by browser; private browsing, clearing storage, moving a file or switching browsers may prevent continuation. If saving fails during practice, the player tells the learner to keep the file open to finish. Earlier version 1 files keep their original behaviour.

We tested current Chrome and the no-JavaScript fallback. Physical old phones and screen-reader software remain untested. Read-aloud requires a local English voice.

Try it

  • Live demo: starts with fractions, with science and English examples available.
  • Captioned walkthrough: 1 minute 3 seconds, recorded from the October 22 version. The narration is synthetic; newer resume and validation features are in the live app.
  • Source and test instructions: MIT licensed. Run npm install, then npm run dev; run all checks with npm run check.

Credits and AI disclosure

Development started during AccessED Hacks on October 22, 2026, without pre-existing application code. Claude (Anthropic) generated the initial code, tests and documentation. Codex (OpenAI) assisted with the October 24 fixes, resume feature, tests and text revision.

The editor uses React, Vite and TypeScript; tests use Vitest, Testing Library, Playwright and axe-core. The offline player has no library dependencies. Video narration was generated locally with Qwen3-TTS. Example questions are general knowledge written for Satchel; no learner records were used. The access statistics and learning-method evidence are linked above.

Built With

Share this project:

Updates

Submission history