DEV Community

Tim
Tim

Posted on

AlreadyCovered: a sub-plan packet that's ready before you need it, built on Gemma

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

AlreadyCovered. It's for teachers who already keep their own lesson files (worksheets, notes, whatever) and have a weekly timetable. The problem it solves: when you wake up sick, you shouldn't have to rebuild tomorrow's lessons from scratch while you're unwell.

You upload the files you already have. The app drafts substitute-facing instructions for each lesson block, but only from your own files. It never makes anything up. If it can't find or confirm something, it tells you honestly instead of guessing. You review it, approve what's correct, and export a real PDF plus a ZIP of the approved worksheets. Nothing gets sent anywhere automatically. You download it and share it yourself.

It saves the one thing a sick teacher has none of: the time and focus to sit down and write clear instructions for someone else while feeling terrible.

Demo

Live app: https://alreadycovered.vercel.app
Video: https://youtu.be/hj-DSnZkU8M

Code

GitHub logo winsznx / alreadycovered

A substitute-teaching pack that's ready before a teacher needs a sick day.

AlreadyCovered

A substitute-teaching pack that's ready before a teacher needs a sick day.

AlreadyCovered keeps a source-linked substitute packet current from the lesson files a teacher already has. When an absence happens, the teacher reviews what the app already prepared, fixes anything that's missing, and exports a real, printable PDF and a ZIP of the actual worksheets - instead of reconstructing tomorrow's lessons from scratch while unwell.

Live: alreadycovered.vercel.app

Status: technical beta. The core loop below is real and runnable today It has not been validated with real practising teachers or a large document corpus - see internal/VALIDATION.md for exactly what was and wasn't tested, with real run evidence. This is not a market-validated product.

Who this is for

An individual primary/elementary teacher who keeps lesson files (PDF, DOCX TXT, or Markdown) and has a recurring weekly timetable. It is not built for school administrators, multi-teacher coordination, or any workflow…

MIT licensed.

How I Built It

The AI part runs on Gemma, an open-weight model from Google, through Ollama, running locally, so no third-party API call ever touches a teacher's files.

The rest of it: a Fastify + TypeScript backend, Postgres (every table scoped per user, so one teacher never sees another's data), a React + Vite frontend. The backend runs in Docker on a VPS, the frontend's on Vercel.

The part I actually care about most isn't the AI call itself. It's the retrieval step before it. The model is only ever shown excerpts from the teacher's own indexed files for that specific lesson's subject, and it can only cite source IDs it was actually given. Anything it cites outside that set gets stripped before the teacher ever sees it. That's what "grounded" means here in practice, not just in the marketing copy.

Why Does Open Innovation Matter?

Because this product only works if a teacher can trust it with files about their class, their students' work, and the days they're not there to supervise. A closed API means that trust depends on someone else's servers and someone else's logging policy, with no way to check. Running an open-weight model myself means I can actually say, and mean, that nothing leaves the stack I control, and anyone can read the code and check that for themselves.

It also means the honest failure mode is different. Closed APIs tend to always answer something, confidently, even when they shouldn't. An open model I run myself, I can wire up to say "I don't know" and actually mean it. That's the whole design of this app: missing material shows up as "needs attention," not as a confident-sounding guess.

The Lazy Payoff

The app front-loads the boring work (reading your files, matching them to the right lesson, drafting the instructions) before you need it, not after. So on the actual sick day, instead of starting from a blank page, you're just reviewing and clicking "approve." That's the whole point: less to do on the day you're least able to do it.

Prize Categories

Best Use of Gemma: the lesson-draft generation runs entirely on Gemma through Ollama, local inference, no other model or AI API in the stack.

Top comments (0)