[{"data":1,"prerenderedAt":437},["ShallowReactive",2],{"blog-weekly-grades":3,"blog-related-weekly-grades":159},{"id":4,"title":5,"author":6,"body":7,"category":144,"date":145,"description":146,"draft":147,"extension":148,"featured":147,"image":149,"imageAlt":149,"meta":150,"navigation":151,"ogImage":149,"path":152,"seo":153,"stem":154,"tags":155,"updated":149,"__hash__":158},"blog\u002Fblog\u002Fweekly-grades.md","The term report is too late to be useful","team",{"type":8,"value":9,"toc":129},"minimark",[10,14,17,20,25,28,31],[11,12,13],"p",{},"A parent asks how their child is doing. For most of the term, the school's honest answer is that\nthey will find out in December.",[11,15,16],{},"That is not a school being evasive. It is the shape of the term report. Marks are collected across\nthree months and published once, at the end, when the term is over and nothing about it can be\nchanged. By the time a parent reads that their son stopped keeping up in Maths, the weeks in which\nsomebody could have sat down with him have already gone.",[11,18,19],{},"Schools know this, which is why so many run something alongside it: a book that goes home on Fridays,\na WhatsApp group, a \"continuous assessment\" sheet that never quite becomes anything. Weekly grades\nare that habit, built properly.",[21,22,24],"h2",{"id":23},"what-it-is","What it is",[11,26,27],{},"A mark per pupil, per subject, per academic week. Recorded as the week goes, published to families a\nweek at a time, and optionally carried onto the term report card so the weekly record is not a\nparallel system that ends in a drawer.",[11,29,30],{},"A teacher opens the week, sees their class down the page and the subjects across it, and fills in\nwhat they have. A head teacher publishes the week when it is done. Families see the week, and the\nterm so far as a mark book, subjects down and weeks across.",[32,33,38,42,47,50,58,61,65,68,71,74],"screenshot",{"alt":34,"height":35,"src":36,"width":37},"The Weekly marks tab of the Grades workspace, showing week 7 of First Term for JSS 1A Biology: a column of marks out of 10 down the class register, with one pupil's box left empty and another's recorded as a nought",1698,"\u002Fdocs\u002Fweekly-grades\u002Fweekly-marks.png",1832,[21,39,41],{"id":40},"the-four-decisions-that-took-longer-than-the-code","The four decisions that took longer than the code",[43,44,46],"h3",{"id":45},"a-missing-mark-is-not-a-zero","A missing mark is not a zero",[11,48,49],{},"This is the one that matters most and is easiest to get wrong.",[11,51,52,53,57],{},"No mark means no row. It sits outside every average, and the average is over the marks that exist. A\nrecorded ",[54,55,56],"code",{},"0"," is a different thing entirely, and it counts. Clearing a box deletes the row rather than\nstoring a nothing that later reads as a nought.",[11,59,60],{},"A child who was absent on Thursday has not scored nothing. A subject that was not taught this week\nhas not scored nothing either. Any system that quietly turns \"no mark\" into a zero will show a\ndiligent child's average falling through a term in which nothing at all went wrong.",[43,62,64],{"id":63},"the-week-is-the-unit-of-publication","The week is the unit of publication",[11,66,67],{},"Not the mark, and not the subject.",[11,69,70],{},"A teacher can mark all week without a family seeing anything, and nothing becomes visible until the\nschool publishes that week. There is no half-published week, no subject that leaks ahead of the\nothers, and no mark that a parent sees before the school meant them to.",[11,72,73],{},"This also means a family-facing screen never has to ask whether a particular mark is ready. It asks\nwhich weeks were published and reads those.",[32,75,79,83,86,89,93,96,99,103,106,109,112,116,119,122,126],{"alt":76,"height":77,"src":78,"width":37},"The Publish tab of the Grades workspace for week 8 of Third Term, 08 to 14 June 2026, with a Publish all 2 classes button. A summary reads 0 complete, 2 part-marked, 4 nothing in, above a note that publishing sends each class's week to its own families, that a class with nothing marked is skipped rather than sent empty and that a class already published is left alone. Below, each class is listed with how many marks are in, its state, and which subjects nobody has marked: JSS 1A at 17 of 66 and JSS 2A at 4 of 22 are ticked and badged Partly entered, while JSS 3A and SS 1A read Nothing entered and are not.",1756,"\u002Fdocs\u002Fweekly-grades\u002Fpublish-week.png",[43,80,82],{"id":81},"a-week-that-has-not-begun-cannot-be-marked","A week that has not begun cannot be marked",[11,84,85],{},"The academic calendar already knows which weeks a term has, because it derives them from the term\ndates and the school's own week. Weekly grades ask it, rather than introducing a second idea of what\nweek 4 is.",[11,87,88],{},"So a week that has not started refuses marks, and says which situation it is in. A week that has not\nbegun resolves itself on Monday. A locked week needs an administrator. Those are different problems\nand they get different sentences.",[43,90,92],{"id":91},"subjects-are-graded-weekly-until-you-say-otherwise","Subjects are graded weekly until you say otherwise",[11,94,95],{},"Rather than the other way round.",[11,97,98],{},"A school that has to opt each subject in ends up with three of them marked, because opting in is a\njob somebody has to remember to finish. A school that wants to exclude a subject knows which one it\nis and can say so in a moment.",[21,100,102],{"id":101},"why-we-do-not-send-these-on-whatsapp","Why we do not send these on WhatsApp",[11,104,105],{},"We are asked this, and the answer is a real constraint rather than a preference.",[11,107,108],{},"The platform sends WhatsApp through one business phone number, which is capped at 250\nbusiness-initiated conversations a day across every school on 1410SMS. One school publishing one week\nto its families exceeds that on its own, and the schools that would lose their fee reminders and\nabsence alerts that day would be the other ones.",[11,110,111],{},"So weekly grades go out by email, in the app, and as a push notification, and we say why rather than\noffering a WhatsApp toggle that silently drops most of what it is given.",[21,113,115],{"id":114},"who-can-do-what","Who can do what",[11,117,118],{},"Recording is a teacher's job and follows the same rule the rest of grading does: a teacher may mark a\nclass that is one of their homerooms, or a subject they teach. Publishing and locking are separate\npermissions, because collecting marks and telling four hundred families are different acts.",[11,120,121],{},"On the phone, locking asks for confirmation and unlocking does not. That asymmetry is deliberate: a\nlock stops the teacher who has just spotted a wrong mark, and the person doing it should know that\nbefore they tap. Unlocking only hands that back. On the web the one act that confirms is publishing,\nwhich is the one that leaves the building.",[21,123,125],{"id":124},"starting","Starting",[11,127,128],{},"Turn it on for the subjects you actually want it for, tell your teachers which day the week closes,\nand publish the first week yourself before delegating it. The habit is the hard part. The software\nis now the easy part.",{"title":130,"searchDepth":131,"depth":131,"links":132},"",3,[133,135,141,142,143],{"id":23,"depth":134,"text":24},2,{"id":40,"depth":134,"text":41,"children":136},[137,138,139,140],{"id":45,"depth":131,"text":46},{"id":63,"depth":131,"text":64},{"id":81,"depth":131,"text":82},{"id":91,"depth":131,"text":92},{"id":101,"depth":134,"text":102},{"id":114,"depth":134,"text":115},{"id":124,"depth":134,"text":125},"Guides","2026-08-16","A term report tells a parent in December what the school knew in September. Weekly grades are the other rhythm, a mark per subject per week, published a week at a time.",false,"md",null,{},true,"\u002Fblog\u002Fweekly-grades",{"title":5,"description":146},"blog\u002Fweekly-grades",[156,157],"grades","product","0QhqbwuZTYWcYZZt3YepUdkyAa1l991jn4eGVub9wbA",[160,324],{"id":161,"title":162,"author":6,"body":163,"category":314,"date":145,"description":315,"draft":147,"extension":148,"featured":147,"image":149,"imageAlt":149,"meta":316,"navigation":151,"ogImage":149,"path":317,"seo":318,"stem":319,"tags":320,"updated":149,"__hash__":323},"blog\u002Fblog\u002Fexams-workspace.md","Nobody should draw an exam timetable in pencil",{"type":8,"value":164,"toc":308},[165,168,171,175,178],[11,166,167],{},"The exam timetable is drawn on paper, in pencil, by one person, in a week that nobody else wants.",[11,169,170],{},"Then a teacher goes on leave, one paper moves to the Thursday, and the whole grid needs checking\nagain by eye. Usually it is not checked, because checking it means reading forty rows against each\nother twice. So a class sits two papers at once in the third week, and everybody finds out in the\nhall.",[21,172,174],{"id":173},"a-series-checked-before-it-goes-out","A series, checked before it goes out",[11,176,177],{},"An exam series in 1410SMS is a set of sittings: a class, a subject, a date, a time, a room, an\ninvigilator. Building one is ordinary data entry. What makes it worth having is what happens next.",[32,179,183,190,196],{"alt":180,"height":181,"src":182,"width":37},"The Exams page with four tabs across the top, Exam Series, Builder, Reports and Settings, with Builder selected. To the right of the tabs an exam picker reads First Term Examination 2026\u002F2027, followed by a draft badge and the label Terminal Examination. Below, the series heading gives its term, session and dates beside a Publish and notify button; then a panel headed Worth checking before you publish, listing three amber Check findings and reading 0 to fix, 3 to consider; then the Generate the timetable panel, open at step one of four, Who is sitting.",1416,"\u002Fdocs\u002Fexams-workspace\u002Fworkspace.png",[11,184,185,189],{},[186,187,188],"strong",{},"One action checks the whole series."," It reports every clash it can find, including the two that\nmatter most: the same class sitting two papers at once, and the same invigilator in two halls at\nonce. Clash detection runs on the weekly timetable engine's own logic rather than a second\nimplementation of it, so the two cannot drift apart and start disagreeing about what a conflict is.",[11,191,192,195],{},[186,193,194],{},"Publishing runs the same check and refuses on errors",", with the findings on the response rather\nthan a shrug and a support ticket. You cannot publish a broken series by accident.",[32,197,201,205,208,220,224,227,234,238,241,248],{"alt":198,"height":199,"src":200,"width":37},"A panel headed 'This timetable cannot be published yet' at the top of an exam page for First Term Examination, First Term 2026\u002F2027, dated 22 to 24 July 2026. It lists eleven findings, with '1 to fix, 10 to consider' on the right. The first carries a red Fix badge and reads that JSS 1A's Computer Science paper is on 2026-07-24, a day the school calendar says it is closed. Below it, amber Check badges list seven subjects JSS 1A takes that have no paper in the exam, and three papers with no invigilator.",936,"\u002Fdocs\u002Fexam-validation\u002Ffindings.png",[21,202,204],{"id":203},"publishing-is-its-own-permission","Publishing is its own permission",[11,206,207],{},"Building a draft and telling four hundred families are not the same act, so they are not the same\npermission. A member of staff can be given the series to build and not the button that sends it.",[11,209,210,211,214,215,219],{},"This pairs with the rule that makes drafts usable at all: ",[186,212,213],{},"a draft announces nothing."," Move papers\naround in a draft as much as you like and the world stays quiet. Move or drop a paper ",[216,217,218],"em",{},"after","\npublication and that class's families are told, because they have already written the old date in a\ndiary.",[21,221,223],{"id":222},"several-papers-move-together","Several papers move together",[11,225,226],{},"A cascade is the normal case. The Chemistry paper moves, so the Physics paper has to move to make\nroom, so the room booking changes.",[11,228,229,230,233],{},"Moving them one at a time through a clash checker means passing through arrangements that are not\nvalid and being told so at each step, which teaches you to ignore the checker. So a bulk move takes\nthe whole proposal and checks it against the series ",[186,231,232],{},"as it would be",", not as it is.",[21,235,237],{"id":236},"a-whole-series-can-be-generated","A whole series can be generated",[11,239,240],{},"If you would rather not place forty papers by hand, the workspace will do it, using the same\nconstruction core the weekly timetable generator uses.",[11,242,243,244,247],{},"You describe the shape you want, under ",[186,245,246],{},"Settings → Examinations",", rather than tuning six numeric\nweights: balanced, spread out, finished quickly, or mornings first. That distinction is most of the\nreason the feature is usable, because a scheduler that asks a bursar to balance six weights is a\nscheduler that gets used once. The weights are still there, behind a Custom option, for the school\nin fifty that wants them.",[32,249,254,258,261,264,268,284,287,291,294,301,305],{"alt":250,"height":251,"src":252,"width":253},"Step three of the generation wizard, What is in the way, with the four steps shown as pills reading Who is sitting, Which days, What is in the way and How to weigh it. Under a line saying what the engine needs in place, checked against this exam and the classes named above, a Re-check button sits on the right. The verdict reads Ready, with 1 thing worth knowing, above an amber note that JSS 1B has no pupils on its roll so no room can be checked against its size, and Back and Next buttons below.",542,"\u002Fdocs\u002Fexam-timetable-generation\u002Fgenerate.png",1754,[21,255,257],{"id":256},"a-paper-can-be-the-online-test-that-is-that-paper","A paper can be the online test that is that paper",[11,259,260],{},"If a subject is examined on the computer-based testing module, the sitting can be linked to that\ntest. The sitting then owns the test's window and its class list, so there is one thing to keep\ncorrect rather than two that must be kept in step.",[11,262,263],{},"On the phone that paper carries an \"Online\" tag, ahead of the room, which is still shown beside it.",[21,265,267],{"id":266},"four-documents-all-of-them-printable-from-a-phone","Four documents, all of them printable from a phone",[269,270,271,275,278,281],"ul",{},[272,273,274],"li",{},"A class's papers, for the noticeboard and the parents.",[272,276,277],{},"An invigilator's list, so they know their duties.",[272,279,280],{},"A room's day, for whoever is running that hall.",[272,282,283],{},"The attendance roster a paper is registered on.",[11,285,286],{},"All four print from the mobile app as well as the web, which is not a box-ticking exercise. An\ninvigilator wants their roster on the way into the hall, not at a desk twenty minutes earlier, and\nthat is the whole reason it is on a phone.",[21,288,290],{"id":289},"one-naming-decision","One naming decision",[11,292,293],{},"Internally the object is a \"diet\", which is what examination boards call a round of exams.",[11,295,296,297,300],{},"Every screen a school reads calls it an ",[186,298,299],{},"exam series",", because \"diet\" is a word that costs a bursar\nthirty seconds and teaches them nothing. The technical term survives in our code and nowhere a\ncustomer looks.",[21,302,304],{"id":303},"what-stayed-on-the-web","What stayed on the web",[11,306,307],{},"Generation, the module's settings, linking a CBT test, and cloning a series or building it a class at\na time are web-only, deliberately. They are the parts done sitting down, once, with a spreadsheet\nopen. Everything done standing up, in a corridor, in the week of the exams, is on the phone.",{"title":130,"searchDepth":131,"depth":131,"links":309},[310,311,312,313],{"id":173,"depth":134,"text":174},{"id":203,"depth":134,"text":204},{"id":222,"depth":134,"text":223},{"id":236,"depth":134,"text":237},"Operations","One person draws the exam grid, one paper moves, and the whole thing needs checking again by eye. Usually it is not. Here is the workspace that replaced the pencil.",{},"\u002Fblog\u002Fexams-workspace",{"title":162,"description":315},"blog\u002Fexams-workspace",[321,322,157],"exams","timetable","jFxF93HEcP_aRPykpnno8RN7mJtKB84r5Q-_-kMGy9o",{"id":325,"title":326,"author":6,"body":327,"category":144,"date":145,"description":428,"draft":147,"extension":148,"featured":147,"image":149,"imageAlt":149,"meta":429,"navigation":151,"ogImage":149,"path":430,"seo":431,"stem":432,"tags":433,"updated":149,"__hash__":436},"blog\u002Fblog\u002Fright-to-left-text.md","The bug that printed confident nonsense",{"type":8,"value":328,"toc":421},[329,332,335,339,342,345,348,352,355,361,367,373,376,380,383,386,393,397,402,405,409,412],[11,330,331],{},"A school sent us a report card and asked why the Arabic subject names came out as nonsense.",[11,333,334],{},"They were not nonsense. They were confident, well-spaced, correctly-kerned Latin letters, printed\nneatly in the place where Arabic should have been. That distinction is the whole story, because it is\nwhat made the problem hard to see from our end. It did not look like a rendering failure. It looked\nlike a school that had typed something wrong.",[21,336,338],{"id":337},"why-a-pdf-does-this","Why a PDF does this",[11,340,341],{},"The fonts built into the PDF standard are WinAnsi-encoded. They cover Latin and not much else.",[11,343,344],{},"Hand one of them Arabic and it does not draw a box, and it does not refuse. It takes each byte, maps\nit to whatever Latin glyph sits at that position in its own encoding, and draws that, at full\nquality. The output is a finished-looking document that nobody at the school can read.",[11,346,347],{},"A missing-glyph box would have been a better outcome. A row of boxes is obviously broken and gets\nreported on the first day. Plausible-looking Latin gets filed, and the school assumes the fault is\ntheirs.",[21,349,351],{"id":350},"three-separate-problems","Three separate problems",[11,353,354],{},"Getting Arabic onto the page needs three things, and skipping any one of them still produces a wrong\ndocument rather than an obviously broken one.",[11,356,357,360],{},[186,358,359],{},"A font that has the glyphs."," Without an embedded face that actually contains Arabic, you are back\nto the Latin substitution above.",[11,362,363,366],{},[186,364,365],{},"Shaping."," Arabic letters change form depending on what sits either side of them: initial, medial,\nfinal, isolated. Draw the isolated forms in sequence and you get disconnected letters. A reader can\ndecode it, in the way you can decode a word with the letters spaced out, and nobody would accept it\non a document their child brings home.",[11,368,369,372],{},[186,370,371],{},"Bidirectional ordering."," The shaper does not do this, which is the part most often missed. A line\nthat mixes Arabic with a pupil's Latin name or a numeric mark has to have its runs put in the right\norder first, and then the glyphs inside each run ordered by the shaper. Get it wrong and the mark\nends up on the wrong side of the subject it belongs to.",[11,374,375],{},"So the order is: work out the run order, then let the shaper order what is inside each run.",[21,377,379],{"id":378},"where-we-put-the-fix","Where we put the fix",[11,381,382],{},"At the single point where the platform creates a PDF document, not in each renderer.",[11,384,385],{},"A renderer that has to opt in to correct text is a renderer somebody eventually forgets, and the one\nthey forget is the certificate. Patching the one place a document is created means every PDF that\nlibrary draws got this at once: invoices, receipts, the family's own copies of both, the exam\ntimetable and our own subscription receipt.",[11,387,388,389,392],{},"Four of our documents render through headless Chromium rather than the PDF library, and they needed\nthe other half of the same problem solved: an inlined Arabic face, and ",[54,390,391],{},"unicode-bidi: plaintext"," on\nthe elements that hold a school's own words. Those are the ones whose direction we cannot know in\nadvance, because they are whatever the school typed.",[21,394,396],{"id":395},"the-bar-for-shipping-it","The bar for shipping it",[11,398,399],{},[186,400,401],{},"A school with no Arabic gets byte-identical documents to the ones it got before.",[11,403,404],{},"That was the condition. A change to the text engine underneath every document the platform produces\nis exactly the sort of thing that shifts a margin by a point, re-wraps a line on someone's invoice,\nand turns into a fortnight of reports from schools who have nothing to do with Arabic.",[21,406,408],{"id":407},"if-your-school-teaches-arabic","If your school teaches Arabic",[11,410,411],{},"Nothing to switch on. Type Arabic into subject names, teacher remarks, class names or the head\nteacher's comment and it prints properly, mixed with Latin and with numbers on the same line.",[32,413,418],{"alt":414,"height":415,"src":416,"width":417},"A rendered report card PDF for Fatima Abdullahi of JSS 1A, First Term 2026\u002F2027. Four of her six subjects are named in Arabic and two in English, and the Arabic names sit right-aligned in the same column as Computer Science and English Language, each row carrying the same total, grade and remark. Both remark panels below are written in Arabic and set right to left: the teacher's runs across two lines and contains the numeral 91 and the Latin words Computer Science inside the Arabic sentence, each placed in reading order rather than at the end of the line.",2339,"\u002Fblog\u002Fright-to-left-text\u002Freport-card.png",1656,[11,419,420],{},"It pairs with the Hijri calendar option, which lets a school read and enter dates in the Umm al-Qura\ncalendar, the Gregorian one, or both, without changing a single stored date. Both are the same idea:\na school should be able to run in the language and the calendar it actually uses, and neither should\nrequire a separate version of the product.",{"title":130,"searchDepth":131,"depth":131,"links":422},[423,424,425,426,427],{"id":337,"depth":134,"text":338},{"id":350,"depth":134,"text":351},{"id":378,"depth":134,"text":379},{"id":395,"depth":134,"text":396},{"id":407,"depth":134,"text":408},"A school asked why the Arabic on its report cards was gibberish. It was not gibberish, and that is what made it hard to spot. What it takes to print Arabic properly in a PDF.",{},"\u002Fblog\u002Fright-to-left-text",{"title":326,"description":428},"blog\u002Fright-to-left-text",[434,435,157],"report-cards","internationalisation","hhNFq4YguQCpT35AUSKtoYrKGXURJ6UNf3aOCq1DCXY",1787681163401]