Skip to content
DragjonPublic

About

Paper 1 questions from O-Level and school prelims, as a feed to practise again and again. Offline, no account, no ads.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

PaperZero

Paper 1 (multiple choice) questions from O-Level and school prelims, in Biology, Chemistry and Physics, to practise again and again. A sibling of Oscanner, with the same philosophy: offline, no account, no ads, no tracking. (The one thing that goes online is science memes in the feeds, off unless you turn them on.)

  • Doomscroll: a science's questions as an endless feed, one to a screen, swiped up for the next, as reels are. Tap A to D to try one and see at once if you're right; double-tap to like; share a question (its picture, not its answer) to a friend.
  • Like and comment: heart a question to find it again; leave yourself comments on it (a hint, a mistake you made, a formula). Comments are private: they stay on your phone and no one else sees them. Home shows what you've liked and commented on.
  • Topics: each question is tagged with the chapters it covers (the BPGHS notes' chapters); tap a tag for a feed of only that topic.
  • Papers: each O-Level year and school prelim, done as Practise (each answer marked at once, with the working where there is some) or Exam (the whole paper in an hour, marked at the end).
  • Timed sets: 40 questions of a science from across its papers, in an hour, like a Paper 1.
  • Mistakes: a question you get wrong comes back until you get it right twice running.
  • Stats: time studied (this week, day by day), your streak, how often you're right, and that by science and by topic, weakest topics first.

Each science has its own colours: Biology green, Chemistry violet, Physics blue. Olaf, in chalk, studies at his desk.

Settings: theme (light, dark, as the phone) and background (warm, gray, or black for OLED); each science's colours or the app's orange; the accent from your wallpaper; text size; dark question pictures (white on black in the dark theme); the clock in exams; Olaf at start; and resetting your progress, or your likes and comments.

Memes (off by default): science memes now and then between a feed's questions, rarely, sometimes or often, never on a beat. They come from science subreddits (each science's own and science at large) through meme-api.com, and from Lemmy's Science Memes community, thousands of posts, its all-time best a page at a time; NSFW and spoiler posts are skipped. This is why the app asks for the internet permission; nothing else uses it.

The website

web/ is PaperZero for the browser, for iPhone and computers: the same feed, papers, timed sets, mistakes, stats, settings and memes, with progress kept in the browser. It's a static site (Vite + React); once opened it works offline, and on iPhone, Share then Add to Home Screen keeps it like an app. Search engines are asked to keep out (robots.txt, noindex).

cd web
npm install
npm run dev        # http://localhost:5173, the pack served from ../content/pack
npm run build      # web/dist: the site, with the pack copied in
npx wrangler pages deploy dist --project-name paperzero

The pack is copied into the build, never into git; the built site does hold it, so share its address with care.

The questions

The questions themselves are not in this repository: the papers belong to SEAB/Cambridge, the schools and their publishers. They're a private content pack (content/pack, git-ignored) that tools/extract builds from PDFs, and release builds bundle. A build without it has no papers.

tools/extract, in order:

Step What it does
inventory.py BACKUP finds every Paper 1 and its answer key → work/manifest.json
words.py BACKUP renders pages and reads their words (the PDF's text, or OCR)
margins.py BACKUP adds question numbers OCR missed or ran into a word
crop.py cuts each question out (the same rules as Oscanner's Split into questions), leaving off the page's foot; content/manual_cuts.json (private) has starts set by eye where OCR missed a number
keywords.py BACKUP renders and reads every answer key
grid_key.py BACKUP reads O-Level Biology's key, a grid of answers a year
answers.py BACKUP finds the answers, checking a second, sharper reading of each O-Level key against the first; content/manual_keys.json (private) has ones read by eye
review_keys.py BACKUP --brief checks each answer found is in its key as number then letter
topics.py BACKUP tags each question with its topics, by the words it shares with each chapter's notes
unwrite.py HAND_ONNX --score finds a student's writing on scanned questions, to look over by eye; content/review.json (private) lists the ones left out
pack.py writes the pack: an index, each paper's answers and topics, gray WebP pictures

farm.py runs the slow steps (OCR) on a machine with many cores, each process on two threads; --upright turns and splits papers scanned two pages to a sheet.

License

GPL-3.0, as Oscanner. The questions in release builds are not covered by it: they remain their owners'.

About

Paper 1 questions from O-Level and school prelims, as a feed to practise again and again. Offline, no account, no ads.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages