Attendance in most schools is marked one day at a time, and for good reason — a class register is meant to be a daily habit, not a monthly chore. But daily habits break. A teacher is out sick for a week, a school's internet goes down during exam season, or a section only just moved onto the platform after years of keeping a paper register. In all of these cases, the same problem shows up: a month's worth of attendance already exists somewhere — on paper, in a notebook, in a teacher's memory — and someone has to get it into the system, one tap at a time, one day at a time. We built a way to close that gap in one sitting instead of thirty.
The month that was already written down
Nepali schools, especially those that have used paper registers for years before adopting any software, tend to have a very specific version of this problem. The register is not missing — it is sitting in a drawer, filled in by hand, day by day, exactly the way it always has been. The gap is not information, it is transcription. Someone still has to sit down and re-type thirty-one columns of present, late, and absent marks for every student in the section, and that work rarely happens, because there is never a good day for it. It gets postponed, and the platform's attendance record stays thinner than the paper one ever was.
The daily grid was never going to fix that, because it was built for a different job — marking today, quickly, while the class is in front of you. Catching up a month needed its own path, one that assumed the data already existed somewhere and just needed a way in.
Two ways in, one destination
A class teacher can now fill a whole month of attendance for their own section in one go, and they can do it either of two ways, depending on what's easier for them that day.
- Download a CSV or Excel template that comes pre-filled with the section's actual roster and a column for every day of the month, fill it in offline — on a laptop in the staff room, no connection required — and upload it back.
- Photograph the school's existing paper attendance register, the same physical page with student rows and day-of-month columns most schools already keep, and let the system read it.
Neither path asks the school to change how it already does attendance. The spreadsheet route suits a teacher who is comfortable working in a table and wants to type quickly without a live connection. The photo route suits the more common case: the record already exists on paper, and re-typing it was always the actual barrier. Both are means to the same end, and a teacher can pick whichever one matches the day.
The same safety step, either way
Whichever path a teacher takes, nothing is saved directly. Both routes land on the same screen first: an editable preview grid, students down one side and days across the top, showing exactly what is about to be recorded before any of it becomes the official record.
That preview step is where most of the actual engineering effort went, because reading a spreadsheet or a handwritten page reliably is only half the problem — knowing what to do when something isn't clear is the harder half. A few rules govern that screen, and they are deliberately conservative:
- A blank cell is left blank. It is not treated as an absence, because a blank mark on a register usually means the day wasn't recorded, not that the student was away.
- Text the system doesn't recognize as a valid status is flagged on that specific cell rather than silently guessed at — a smudge, an abbreviation, or a mark that isn't clearly P, L, or A stays visible as a question, not a quiet assumption.
- Any row the system cannot confidently match to a real student in the roster is greyed out and excluded automatically, rather than attached to the wrong child.
- Any AI-read row that was matched by a fuzzy, rather than exact, match to a student's name is marked with a "please verify" flag, so the teacher's eye goes straight to the rows most worth a second look.
The teacher can change any cell on that grid before committing it. Nothing about this step is a rubber stamp — it is a genuine review, and the system is built to make the parts that need attention easy to find rather than easy to miss.
The tool's job is to get a month of attendance in front of a teacher accurately enough to review quickly. Deciding what actually happened on any given day stays with the teacher, every time.
— PDP Shikshya product notes
Why access stays narrow
Bulk attendance import is only available to a teacher for the section where they are the actual assigned class teacher — not any class they teach a subject in, not any class in their department, just the one section they are formally responsible for. That is narrower than it needs to be from a pure convenience standpoint, and that narrowness is intentional. Attendance feeds into a student's academic record, and a monthly bulk edit touches far more rows at once than a single day's tally ever could. Scoping the permission tightly to the person who owns that section day-to-day keeps the blast radius of any mistake, human or AI-assisted, exactly where it already sits under the existing system: with the class teacher, and nowhere wider.
What the overview page adds up once the month is in
Once a month is filled in — whether cell by cell over thirty-one days, or reviewed and committed in one sitting — the Class Attendance overview turns it into something a teacher can actually read at a glance. The whole section appears as a single matrix: one row per student, one column per day, with present, late, and absent marks shown in color. Running counts for each of the three totals sit alongside every student's row, along with an attendance percentage that updates as the month goes on. A daily class-wide total sits along the bottom, so a teacher can see not just how one student is doing over the month, but how the whole section is doing on any single day.
None of that is new in what it shows — teachers have always been able to reconstruct these numbers by hand. What changes is that it now exists the moment the data does, instead of only at report-card time, when a teacher has time to compute it.
The wider shift this sits inside
This work is a small, specific example of something happening more broadly in schools right now. Education systems in a number of countries are actively exploring where AI can responsibly take on administrative load — attendance, scheduling, the general paperwork that surrounds teaching but isn't the teaching itself — with the shared goal of giving teachers back time they currently spend on transcription rather than instruction. That exploration comes with an equally active, and healthy, conversation about oversight: record-keeping that affects a real student's academic history is not a place where anyone wants software making silent decisions, however good the underlying model is at reading handwriting or filling a spreadsheet.
We built this feature inside that conversation, not outside of it. The interesting engineering problem was never getting a model to read a register page — models are reasonably good at that already. The interesting problem was designing what happens after the read, so that uncertainty produces a visible flag rather than an invisible guess.
What we deliberately left out
There is no path in this feature that saves attendance without a human looking at the preview grid first. There is no confidence threshold high enough that a fuzzy student match skips the verify flag. There is no version of this where a blank cell becomes an absence because the system decided that was the likely intent. Each of those would have made the feature marginally faster and meaningfully less trustworthy, and attendance is exactly the kind of record where that trade isn't worth making.
The goal was narrow and practical: let a school bring its existing paper habits onto the platform without a month of manual re-typing standing in the way, and do it in a way that a class teacher can trust the moment they see the preview grid. Everything else — the judgment about what actually happened in class on any given day — stays exactly where it already was.

