[{"data":1,"prerenderedAt":518},["ShallowReactive",2],{"blog-exams-workspace":3,"blog-related-exams-workspace":182},{"id":4,"title":5,"author":6,"body":7,"category":166,"date":167,"description":168,"draft":169,"extension":170,"featured":169,"image":171,"imageAlt":171,"meta":172,"navigation":173,"ogImage":171,"path":174,"seo":175,"stem":176,"tags":177,"updated":171,"__hash__":181},"blog\u002Fblog\u002Fexams-workspace.md","Nobody should draw an exam timetable in pencil","team",{"type":8,"value":9,"toc":157},"minimark",[10,14,17,22,25],[11,12,13],"p",{},"The exam timetable is drawn on paper, in pencil, by one person, in a week that nobody else wants.",[11,15,16],{},"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.",[18,19,21],"h2",{"id":20},"a-series-checked-before-it-goes-out","A series, checked before it goes out",[11,23,24],{},"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.",[26,27,32,39,45],"screenshot",{"alt":28,"height":29,"src":30,"width":31},"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",1832,[11,33,34,38],{},[35,36,37],"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,40,41,44],{},[35,42,43],{},"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.",[26,46,50,54,57,69,73,76,83,87,90,97],{"alt":47,"height":48,"src":49,"width":31},"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",[18,51,53],{"id":52},"publishing-is-its-own-permission","Publishing is its own permission",[11,55,56],{},"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,58,59,60,63,64,68],{},"This pairs with the rule that makes drafts usable at all: ",[35,61,62],{},"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 ",[65,66,67],"em",{},"after","\npublication and that class's families are told, because they have already written the old date in a\ndiary.",[18,70,72],{"id":71},"several-papers-move-together","Several papers move together",[11,74,75],{},"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,77,78,79,82],{},"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 ",[35,80,81],{},"as it would be",", not as it is.",[18,84,86],{"id":85},"a-whole-series-can-be-generated","A whole series can be generated",[11,88,89],{},"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,91,92,93,96],{},"You describe the shape you want, under ",[35,94,95],{},"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.",[26,98,103,107,110,113,117,133,136,140,143,150,154],{"alt":99,"height":100,"src":101,"width":102},"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,[18,104,106],{"id":105},"a-paper-can-be-the-online-test-that-is-that-paper","A paper can be the online test that is that paper",[11,108,109],{},"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,111,112],{},"On the phone that paper carries an \"Online\" tag, ahead of the room, which is still shown beside it.",[18,114,116],{"id":115},"four-documents-all-of-them-printable-from-a-phone","Four documents, all of them printable from a phone",[118,119,120,124,127,130],"ul",{},[121,122,123],"li",{},"A class's papers, for the noticeboard and the parents.",[121,125,126],{},"An invigilator's list, so they know their duties.",[121,128,129],{},"A room's day, for whoever is running that hall.",[121,131,132],{},"The attendance roster a paper is registered on.",[11,134,135],{},"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.",[18,137,139],{"id":138},"one-naming-decision","One naming decision",[11,141,142],{},"Internally the object is a \"diet\", which is what examination boards call a round of exams.",[11,144,145,146,149],{},"Every screen a school reads calls it an ",[35,147,148],{},"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.",[18,151,153],{"id":152},"what-stayed-on-the-web","What stayed on the web",[11,155,156],{},"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":158,"searchDepth":159,"depth":159,"links":160},"",3,[161,163,164,165],{"id":20,"depth":162,"text":21},2,{"id":52,"depth":162,"text":53},{"id":71,"depth":162,"text":72},{"id":85,"depth":162,"text":86},"Operations","2026-08-16","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.",false,"md",null,{},true,"\u002Fblog\u002Fexams-workspace",{"title":5,"description":168},"blog\u002Fexams-workspace",[178,179,180],"exams","timetable","product","jFxF93HEcP_aRPykpnno8RN7mJtKB84r5Q-_-kMGy9o",[183,404],{"id":184,"title":185,"author":6,"body":186,"category":395,"date":396,"description":397,"draft":169,"extension":170,"featured":173,"image":171,"imageAlt":171,"meta":398,"navigation":173,"ogImage":171,"path":399,"seo":400,"stem":401,"tags":402,"updated":171,"__hash__":403},"blog\u002Fblog\u002Fbuild-your-school-week.md","Build your school week without the wall chart",{"type":8,"value":187,"toc":387},[188,191,194,201,209,213,216,219,225,231,237,240,244,251,259,262,273,276,280,287,296,299,302,306,309,316,324,327,333,337,340,366,369,373,378],[11,189,190],{},"Most schools we work with build the timetable the same way. One person, a wall chart or a\nspreadsheet, and the better part of a fortnight. Everything else waits on it, because until it is\nfinished nobody knows who is free when, which room is spoken for, or whether the new maths teacher\nhas been given five lessons or fifteen.",[11,192,193],{},"Then the first week of term arrives and two teachers turn up to the same room.",[11,195,196,197,200],{},"The clash is never the interesting part. The interesting part is that it was findable. A person\nholding two hundred lessons in their head cannot find it; a computer holding the same two hundred\nlessons finds it instantly and refuses to make it in the first place. That is most of what the new\n",[35,198,199],{},"Timetable"," workspace does.",[26,202,206],{"alt":203,"height":204,"src":205,"width":31},"The Timetable workspace on its Overview tab, showing JSS 1A's published week. Periods run down the left from Period 1 at 08:00 to Period 8 ending 15:05, with Break at 09:30 and Lunch at 12:05 drawn as bands across all five days. Each lesson names its subject, teacher and room, such as Physics with Chidi Okafor in Science Laboratory 1, and several are marked DOUBLE and span two rows.",1524,"\u002Fblog\u002Fweekly-timetable\u002Fweek.png",[11,207,208],{},"One class, one week. Doubles span the periods they actually run across, breaks sit where the school\nstops, and every lesson says who is teaching it and where.",[18,210,212],{"id":211},"you-describe-the-school-not-the-grid","You describe the school, not the grid",[11,214,215],{},"The old way of putting a timetable into software was to type a finished timetable into software. You\ndid the hard part on paper and the computer stored it.",[11,217,218],{},"Here you describe your school instead, and there are only three things to describe.",[11,220,221,224],{},[35,222,223],{},"The shape of your day."," A bell schedule: the periods, their times, and which of them are teaching\nperiods and which are breaks. Most schools need exactly one. A school whose junior and senior\nsections run different days can have several.",[11,226,227,230],{},[35,228,229],{},"The rooms."," Each with a kind: classroom, laboratory, hall, library, sports. The kind is not a\nlabel. A subject can require a laboratory, and the timetable will then only put it in one. Every\nclass also has a home room, which is where it sits unless a lesson says otherwise, so an ordinary\nlesson never has to name a room at all and a school that has never filled in a room still gets room\nclash detection.",[11,232,233,236],{},[35,234,235],{},"What each class needs."," Periods a week per subject, how many of those should be doubles, the most\nit should have in any one day, whether it needs a particular kind of room, and who takes it. Leave\nthe teacher blank and the timetable will use whoever teaches that subject and is free.",[11,238,239],{},"That last tab keeps a running count of what you have asked for against how many periods the week\nactually holds, and tells you plainly when you have asked for more than there is. It is a small\nthing that removes a specific and very common afternoon: the one where a week refuses to come out\nand nobody can work out why, because the answer is that it never could.",[18,241,243],{"id":242},"then-it-builds-it","Then it builds it",[11,245,246,247,250],{},"The ",[35,248,249],{},"Generate"," tab checks the school over before it offers to build anything at all.",[26,252,256],{"alt":253,"height":254,"src":255,"width":31},"The Generate tab. A Before generating card reports Ready. Nothing is standing in the way, with a Re-check button beside it. Below, the Generate card asks what to build, how hard to try, which subjects to keep in the morning and a note for the run, above a full-width Generate button.",1194,"\u002Fblog\u002Fweekly-timetable\u002Fgenerate.png",[11,257,258],{},"It says what is standing in the way before it starts, not after. Warnings do not stop a run.\nBlockers do, and each one names what to fix.",[11,260,261],{},"A class with no bell schedule, a subject nobody is down to teach, a class asking for more periods\nthan its week holds, more practicals than your laboratories can seat. These are the things that\nwould otherwise surface as a half-built week and a shrug.",[11,263,264,265,268,269,272],{},"Two ways to run it. ",[35,266,267],{},"Build a whole new week"," in a fresh draft, or ",[35,270,271],{},"fill"," the one you already\nhave, which keeps every lesson you have placed exactly where it is and only puts something in the\nempty periods. The second is what you want after moving a few lessons by hand and deciding you were\nright.",[11,274,275],{},"A run never touches your published week. It produces a draft.",[18,277,279],{"id":278},"and-you-move-what-you-disagree-with","And you move what you disagree with",[11,281,282,283,286],{},"No generator knows that Mrs Adeyemi does not teach double periods after lunch, or that the Friday\nassembly runs long. The ",[35,284,285],{},"Builder"," is a class's week with a palette beside it of what is still to\nplace, by mouse or by keyboard.",[26,288,293],{"alt":289,"height":290,"src":291,"width":292},"The Builder tab for JSS 1A. A To place panel down the left lists each subject with how many of its periods are placed, all reading 4 of 4. Beside it the week runs Period 1 to Period 8 down the side and Monday to Friday across the top, with Break and Lunch as full-width bands, and every cell naming its subject, teacher and room.",1674,"\u002Fblog\u002Fweekly-timetable\u002Fbuilder.png",2232,[11,294,295],{},"The count beside each subject is what is left to place. Every change saves as you make it, and Undo\nsteps back through what you have done.",[11,297,298],{},"A clash is drawn in the cell it happens in, as it happens. Not in a validation report on another\nscreen, and not at publish time when you have forgotten what you were doing.",[11,300,301],{},"There is one rule worth knowing because it looks like a bug the first time you meet it. The same\nteacher can be in two places at the same time if it is the same subject: that is a merged lesson,\ntwo forms sitting a practical together, and it is one lesson rather than two. Anything else is a\nclash.",[18,303,305],{"id":304},"nobody-sees-a-thing-until-you-publish","Nobody sees a thing until you publish",[11,307,308],{},"This is the part that matters most, and it is the part a wall chart cannot give you.",[11,310,311,312,315],{},"Every week you build is a ",[35,313,314],{},"version",". Drafts are yours. The published one is what teachers,\nstudents and parents see, and there is at most one of those per term.",[26,317,321],{"alt":318,"height":319,"src":320,"width":31},"The Versions tab, listing v1 for First Term 2026\u002F2027, marked Published, with 208 lessons and who built it, offering Open and Restore. Below it a card headed v1: what is wrong with it explains that errors stop a publish and warnings do not, with a Check button.",550,"\u002Fblog\u002Fweekly-timetable\u002Fversions.png",[11,322,323],{},"Check a version before publishing: errors stop a publish, warnings do not. Compare two versions to\nsee exactly what moved between them.",[11,325,326],{},"So you can rebuild next term's timetable in the middle of this one, in daylight, on the real system,\nwith the real staff list, and nobody outside the workspace is any the wiser. Publishing archives the\nold version rather than deleting it. When somebody asks what changed in a mid-term reshuffle, the\ncomparison is a screen rather than an argument.",[11,328,329,332],{},[35,330,331],{},"Until you publish for the first time, your existing timetable is still your timetable."," Every\nschool already on 1410SMS keeps seeing exactly what it saw yesterday. The engine takes over at the\nmoment you first publish and not a moment sooner, which means adopting this is something you do at\nyour own pace rather than something that happens to you on a Tuesday.",[18,334,336],{"id":335},"what-everyone-else-gets","What everyone else gets",[11,338,339],{},"Once it is live, the week stops being a document that has to be distributed.",[118,341,342,348,354,360],{},[121,343,344,347],{},[35,345,346],{},"Teachers"," see their own week across every class they take, and what they are teaching next.",[121,349,350,353],{},[35,351,352],{},"Students"," see their class's week.",[121,355,356,359],{},[35,357,358],{},"Parents"," see each child's week, which quietly answers most of the questions a school office\ngets asked on a Sunday evening.",[121,361,362,365],{},[35,363,364],{},"The app"," shows the same published week a day at a time, opening on today, with the period\nrunning now and the one after it on the dashboard.",[11,367,368],{},"That last one is deliberate. A phone is not where you read a timetable grid, it is where you check\nwhat is happening in twenty minutes. We did not put the builder on it either, for the same reason\nnobody builds a timetable on a phone.",[18,370,372],{"id":371},"where-to-find-it","Where to find it",[11,374,375,377],{},[35,376,199],{}," in the sidebar. Eight tabs: Overview, Periods and Rooms, Requirements, Groups,\nTeachers, Generate, Builder, Versions. Start at Periods and Rooms, because everything else depends\non the shape of your day.",[11,379,380,381,386],{},"The full walkthrough, including teacher unavailability, teaching groups and what each readiness\ncheck is looking for, is in the ",[382,383,385],"a",{"href":384},"\u002Fdocs\u002Fweekly-timetable","Weekly Timetable documentation",".",{"title":158,"searchDepth":159,"depth":159,"links":388},[389,390,391,392,393,394],{"id":211,"depth":162,"text":212},{"id":242,"depth":162,"text":243},{"id":278,"depth":162,"text":279},{"id":304,"depth":162,"text":305},{"id":335,"depth":162,"text":336},{"id":371,"depth":162,"text":372},"Guides","2026-08-09","The timetable is the one document a school rebuilds every year and dreads every year. The new Weekly Timetable workspace does the placing, catches the clashes as they happen, and shows nobody anything until you publish.",{},"\u002Fblog\u002Fbuild-your-school-week",{"title":185,"description":397},"blog\u002Fbuild-your-school-week",[179,180],"PEE1vWfRQk9p0H6bpXOtYzLyfVpKh1TnkefYJKAchX0",{"id":405,"title":406,"author":6,"body":407,"category":395,"date":167,"description":509,"draft":169,"extension":170,"featured":169,"image":171,"imageAlt":171,"meta":510,"navigation":173,"ogImage":171,"path":511,"seo":512,"stem":513,"tags":514,"updated":171,"__hash__":517},"blog\u002Fblog\u002Fright-to-left-text.md","The bug that printed confident nonsense",{"type":8,"value":408,"toc":502},[409,412,415,419,422,425,428,432,435,441,447,453,456,460,463,466,474,478,483,486,490,493],[11,410,411],{},"A school sent us a report card and asked why the Arabic subject names came out as nonsense.",[11,413,414],{},"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.",[18,416,418],{"id":417},"why-a-pdf-does-this","Why a PDF does this",[11,420,421],{},"The fonts built into the PDF standard are WinAnsi-encoded. They cover Latin and not much else.",[11,423,424],{},"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,426,427],{},"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.",[18,429,431],{"id":430},"three-separate-problems","Three separate problems",[11,433,434],{},"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,436,437,440],{},[35,438,439],{},"A font that has the glyphs."," Without an embedded face that actually contains Arabic, you are back\nto the Latin substitution above.",[11,442,443,446],{},[35,444,445],{},"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,448,449,452],{},[35,450,451],{},"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,454,455],{},"So the order is: work out the run order, then let the shaper order what is inside each run.",[18,457,459],{"id":458},"where-we-put-the-fix","Where we put the fix",[11,461,462],{},"At the single point where the platform creates a PDF document, not in each renderer.",[11,464,465],{},"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,467,468,469,473],{},"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 ",[470,471,472],"code",{},"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.",[18,475,477],{"id":476},"the-bar-for-shipping-it","The bar for shipping it",[11,479,480],{},[35,481,482],{},"A school with no Arabic gets byte-identical documents to the ones it got before.",[11,484,485],{},"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.",[18,487,489],{"id":488},"if-your-school-teaches-arabic","If your school teaches Arabic",[11,491,492],{},"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.",[26,494,499],{"alt":495,"height":496,"src":497,"width":498},"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,500,501],{},"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":158,"searchDepth":159,"depth":159,"links":503},[504,505,506,507,508],{"id":417,"depth":162,"text":418},{"id":430,"depth":162,"text":431},{"id":458,"depth":162,"text":459},{"id":476,"depth":162,"text":477},{"id":488,"depth":162,"text":489},"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":406,"description":509},"blog\u002Fright-to-left-text",[515,516,180],"report-cards","internationalisation","hhNFq4YguQCpT35AUSKtoYrKGXURJ6UNf3aOCq1DCXY",1787681163367]