Product updates

You said. We built.

Nearly everything below started as something a teacher told us was missing, or getting in the way. Here is what we have done about it.

Last updated 18 August 2026

Week of 17 August

TeachersStudentsSchools

You saidEdexcel is the only board with turtle in its subset, and there was nothing in the course for it. If you teach 1CP2 there was a whole section of your specification we simply did not cover.

Turtle graphics, for Edexcel

Eight lessons covering every turtle command in Edexcel's subset, from your first line to a filled, coloured picture. The course is now 92 lessons, all free to read.

The topic starts with one turtle and one line and finishes with a scene that uses the lot. Along the way: turning and headings, drawing shapes with a loop and working the angle out as 360 divided by the number of sides, lifting the pen so you can move without drawing, filling shapes and the colours you are allowed to name, placing the turtle at a coordinate, and circles and arcs.

Every command in the subset is in there, and the checkpoint carries the whole list as a reference you can revise from. Code in the lessons runs and draws on the page, so nothing needs installing.

Every lesson says plainly who examines it. Turtle appears nowhere in OCR J277 or AQA 8525, so if that is your board the topic tells you it is there for interest and nothing in it can be asked of you. We would rather say that than let you spend an evening on something that cannot earn you a mark.

There are sixteen turtle challenges to go with it, seven of them new and written for the start of the topic, so each lesson hands you one to warm up on and one to stretch you.

Open the turtle topic →

Week of 10 August

StudentsTeachers

You saidyour students needed a course they could work through on their own: something interactive that teaches programming properly from day one, not another worksheet.

A free Python course, 84 lessons long

We built a 13 topic Python course that takes a student from their very first line of code to searching, sorting and algorithm design. All 84 lessons are free to read.

There is nothing to install and nothing to set up. Students write code on the page and it runs there, so a locked-down school laptop is enough, and a student can carry on at home on a phone.

Each lesson does one thing. It explains an idea, shows a small example, warns about the mistake almost everyone makes, then asks the student to type something themselves. 96 of those exercises are marked automatically, and every topic ends with a checkpoint.

Below is a lesson from start to finish: what it teaches, code that runs on the page, an exercise marked as you go, a hint when you are stuck, and the checkpoint that closes the topic.

Thirteen topics, taken in order, with every lesson title visible before you start
A lesson: what you will be able to do, the idea, then code that runs on the page
Hard ideas drawn out. A binary search, one pass at a time
Exercises are marked as you go, with the checks shown
A hint for a student who is stuck, and the model answer when they need it
Every topic ends with a checkpoint that puts the whole thing together
Each lesson hands off to real challenges from the library

Also in this release

  • Every code listing in a lesson runs, so a student can change an example and see what happens instead of reading it.
  • Lessons cite the spec point they teach, and each practice card links to the matching past-paper question.
  • Work written before signing in is carried across to the account rather than lost.
Open the course →
Teachers

You saidyou wanted to know where a class actually is, rather than where the scheme of work says it should be.

A dashboard for how far your class has got

We built a grid of every student against every topic, so one screen tells you who has finished what, who has started and stopped, and who has not begun.

Set the lesson you have taught up to and the grid flags anyone who has fallen behind it, so the students worth chasing come to you instead of being buried in a list.

Students see the same thing from their side: a dashboard showing how far through the course they are and what comes next.

A tick means the student's browser reported that their answer matched the expected output. It is not a record of us re-running their program, and the page says so, because a teacher should know exactly what a tick is worth.

Also in this release

  • Lessons can be set as work in their own right now, not just challenges.
  • If you set a class a challenge it has already been given, you are told at the moment you assign it rather than after the lesson.
  • Student work and feedback are visible to the teachers of that class and to the student. Not to everyone else at the school.
Open the teacher area →
Teachers

You saidthe teacher screens were hard to find your way around: everything sat on one page, and some of it you could only reach by editing the address bar.

The teacher area, rebuilt around your classes

We rebuilt it so a class is somewhere you go into. Open a class and you get its own screen with the join code, the roster, its assignments and a way back out.

Why it was worth rebuilding rather than tidying: the old layout put every class on one page, which is fine with one class and unusable with six. A teacher with a full timetable could not look at one group without reading past the others.

Every screen now has its own address, so you can bookmark a class, open a gradebook in a second tab, and press the back button and have it do what you expect.

Open the teacher area →
StudentsTeachers

You saidthe hard part is explaining the ideas a static textbook cannot show: what a loop is actually doing, how an index counts, why a binary search halves the list.

Pictures for the ideas that will not sit still

We drew them. 62 diagrams across the course, made for these lessons rather than borrowed, and every one of them readable on a phone.

They are drawn as vectors rather than pictures of a screen, so they stay sharp on a projector and recolour themselves in dark mode instead of glowing white at a class with the lights off.

Here are nine of them.

The parts of a print statement The line print open bracket quote Hello quote close bracket. Four parts are numbered from left to right and explained underneath: one, print is the instruction and is always lower case. Two, the round brackets, which always come in a pair. Three, the quote marks, which mean the contents are text. Four, Hello, shown on screen exactly as written. print("Hello") 1 2 3 4 1 print the instruction, always lower case 2 ( ) round brackets, always in a pair 3 " " quote marks mean this is text 4 Hello shown on screen exactly as written
Every part of a print statement
A variable as a labelled box in memory The line name = "Sam" has an arrow running down into a box labelled name, which holds a card reading Sam. A second arrow leaves the box towards print(name). name = "Sam" the = sign puts the value into the box name "Sam" print(name) and reads it back out again
A variable as a labelled box
How an if, elif, else chain is checked A flowchart. The score enters the first test, is score 70 or more. If True it gives Grade A. If False it drops to the next test, is score 50 or more, which gives Grade B if True. If False it falls through to else, which gives Grade C. Python stops at the first test that is True. score >= 70 True Grade A False score >= 50 True Grade B False else Grade C Checked from the top down It stops at the first True
How if, elif and else choose a path
The same six cells numbered forwards and backwards The word PYTHON is drawn as six cells. Above them run the negative indexes minus 6, minus 5, minus 4, minus 3, minus 2 and minus 1. Below them run the ordinary indexes 0, 1, 2, 3, 4 and 5. The cell holding N is shaded amber, because both numbering systems land on it: it is index 5 counting forwards and minus 1 counting backwards. Two arrows point up at that cell, one from the expression word square bracket len of word minus 1 square bracket and one from the expression word square bracket minus 1 square bracket. A seventh cell to the right is drawn dashed and struck through, is greyed as index 6, and is labelled IndexError, because no such position exists. The note underneath says the two expressions give the same character and that there is no index 6. TWO WAYS TO NUMBER THE SAME SIX CELLS COUNTING BACK FROM THE END IndexError -6 -5 -4 -3 -2 -1 P Y T H O N 0 1 2 3 4 5 6 COUNTING FROM ZERO word[len(word) - 1] word[-1] word[-1] and word[len(word) - 1] both give the same character. There is no index 6.
Counting backwards through a string
A while loop tests its condition before every pass A value arrives at a diamond shaped test that asks whether the guess is wrong. If the answer is True the program runs the block, which asks again, and then loops back round to the test. If the answer is False the loop is skipped and the program carries on. The note underneath explains that because the test comes first, a condition that is False straight away means the block never runs at all. guess != 7 CHECKED BEFORE EVERY PASS True ask again AND TEST IT AGAIN False carry on below the loop Nobody says how many passes. The loop runs until the condition turns False. If it is False on the very first check, the block never runs even once.
What a while loop actually repeats
One pass of a bubble sort over 5, 3, 8, 1 The list 5, 3, 8, 1 is drawn four times, one row per step of the first pass. In step one the first two cells, 5 and 3, are shaded amber and the note says 5 is greater than 3 so they swap. In step two the cells holding 5 and 8 are shaded and the note says 5 is less than 8 so they are left alone. In step three the cells holding 8 and 1 are shaded and they swap. The last row shows 3, 5, 1, 8 with the 8 shaded green, because the largest value has reached the end of the list. A note explains that the pass made three comparisons and two swaps, and that the next pass can ignore the last cell. ONE PASS OVER 5, 3, 8, 1 STEP 1 5 3 8 1 5 > 3 SWAP THEM STEP 2 3 5 8 1 5 < 8 LEAVE THEM STEP 3 3 5 8 1 8 > 1 SWAP THEM END OF PASS 3 5 1 8 8 is now in its final place Three comparisons and two swaps, and the list is still not sorted. But the largest value is at the end for good, so pass 2 can ignore it.
One pass of a bubble sort
The same search, seven comparisons against three The sorted list 3, 8, 12, 19, 23, 31, 47, 52 is drawn twice, with 47 as the target both times. In the linear search row the first six cells are shaded amber and numbered 1 to 6 in the order they were compared, the seventh cell holding 47 is shaded green and numbered 7, and the last cell was never looked at. In the binary search row only three cells are touched: 19 is compared first, then 31, then 47, which is found, so the numbering runs 1, 2, 3 under those three cells alone. Labels note that a linear search works on any list while a binary search only works because the list is sorted, and that doubling the list doubles the work of a linear search but adds one comparison to a binary search. FINDING 47 IN THE SAME EIGHT ITEM LIST LINEAR SEARCH, 7 COMPARISONS WORKS ON ANY LIST, SORTED OR NOT 3 8 12 19 23 31 47 52 1 2 3 4 5 6 7 BINARY SEARCH, 3 COMPARISONS ONLY WORKS BECAUSE THE LIST IS SORTED 3 8 12 19 23 31 47 52 1 2 3 Same list, same target, same answer: seven comparisons against three. The numbers are the order the items were compared in, not their positions. Double the list and a linear search doubles too; a binary search adds one.
Linear search against binary search
A while loop traced row by row, including the check that failed On the left is a short program: count is set to 5, stars is set to an empty string, and while count is greater than 2 a star is added to stars and count is reduced by one, and finally stars is printed. On the right is the completed trace table with four columns, count, count greater than 2, stars and Output. The first three rows show count as 5, 4 and 3 with the condition True and stars growing to one, two and three stars. The fourth row is shaded amber: count is 2, the condition is False, and the output is three stars. A note says there are four rows for three passes because the last row is the check that came out False, and that count ends on 2 rather than 3. THE PROGRAM ONE ROW EVERY TIME A VALUE CHANGES count = 5 stars = "" while count > 2: stars = stars + "*" count = count - 1 print(stars) count count > 2 stars Output 5 True * 4 True ** 3 True *** 2 False *** *** TRACE ONE LINE AT A TIME THE FAILED CHECK IS A ROW TOO Four rows for three passes: the last row is the check that came out False. count ends on 2, not 3, which is the sort of thing reading the code will not show.
Filling in a trace table
The five flowchart symbols and what each one is for Five shapes drawn side by side. A rounded rectangle holding the word Start is the terminal, used for Start and Stop. A parallelogram holding Input age is the input or output symbol, used for input and print. A plain rectangle holding total equals 0 is a process, a step that works something out. A diamond holding age is less than 16, question mark, is a decision, a yes or no question. A rectangle with a vertical line down each side holding getScore is a subprogram, used to call a routine. A note underneath warns that the rectangle and the parallelogram are the two that get swapped, and that a step touching the user or the screen is a parallelogram. THE FIVE SHAPES EVERY BOARD USES Start TERMINAL Start and Stop Input age INPUT OR OUTPUT input() and print() total = 0 PROCESS A calculation age < 16? DECISION A yes/no question getScore SUBPROGRAM Call a routine The rectangle and the parallelogram are the two that get swapped. If the step touches the user or the screen it is a parallelogram.
The five flowchart symbols every board uses
See them in the course →
Students

You saidstudents were told work had been set and then had to go and find it themselves.

Notifications you can actually click

We rebuilt the panel so every card is a link. Tap the one about your marked work and you land on that piece of work.

Open your dashboard →
StudentsTeachers

You saiddark mode stopped working the moment you left the editor, which made it not worth using.

Dark mode, everywhere

We took it through the whole platform: sign in, the join screen, every student page and all eight teacher screens.

The toggle also sits quietly in the corner now instead of floating over whatever you are reading.

Open the course and try it →
Schools

You saidyour data protection officer needed to know that deleting something really deletes it, rather than hiding it.

When you delete a class, it is actually gone

We went through the deletion routine against what the privacy notice promises, found the gaps, and closed them.

Work, feedback, teacher notes and progress attached to a deleted class are now removed with it, including the rows that used to be left behind because nothing pointed at them any more.

A nightly job prunes anything past the retention window the privacy notice states, and records only that it ran and how many rows went. Never what they said.

Read the privacy notice →
TeachersSchools

You saidyou could not defend putting an AI tutor in front of a class unless you could see what it had said.

If you switch the AI tutor on, you can see how it was used

The tutor is off unless your school turns it on. If you do, the class teacher can read every conversation, and a student in distress is pointed to real help first.

Nothing here happens unless a school admin switches the tutor on, and switching it on asks you to name a safeguarding lead first.

Once it is on, a class teacher can read the whole conversation a student had with the tutor, and see when a student revealed a sample answer or opened a hint. It is on the student report, alongside their work.

If a message suggests a student is struggling with something far more serious than code, the tutor does not answer the question. It shows them Childline, Samaritans and Shout, and your named safeguarding lead is emailed straight away. That email says what kind of concern it is and who it is about, never the words the child wrote.

This is not a monitored service. Nobody here is reading these overnight, and the check can be wrong in both directions.

Open the teacher area →
Students

Hide the brief and use the full width

Collapse the challenge brief on a desktop or laptop when you want the editor to have the whole screen.

Open a challenge →
TeachersSchools

You saidplenty of schools are not permitted to use AI, and needed to be able to say so plainly rather than trust a setting buried in a class.

You decide whether AI is used at all

One setting for your whole school, in the Safeguarding panel. It starts at No AI at all, so nothing about your students is sent to OpenAI unless someone there turns it on.

There are three levels. On gives your students the AI tutor, Explain Code and written feedback when they press Check answer. Tutor off removes the tutor but keeps Explain Code, error help and the written feedback. No AI at all does what it says: nothing about your students leaves for OpenAI.

Your school starts at No AI at all, so nothing is sent unless you choose it. If your school does allow AI, a school admin can switch it on in the Safeguarding panel.

Marking is not affected by any of this. Check answer works out whether the program is right by comparing what it printed with what was expected, in our own code, so your students still get a real result and your gradebook still fills in. At the strictest level they simply do not get the written paragraph alongside it.

Turning the tutor on asks you to name a safeguarding lead first. If a student ever types something worrying, that is the person we email, and there is no point switching the tutor on before there is somebody to tell.

Open the Safeguarding panel →
Teachers

You saidmarking code in a comment box was hopeless: the student never saw the note next to the thing it was about.

Leave a note on a student's work

Write a note against a piece of work and the student reads it beside the work itself, not buried in a notification.

Open the teacher area →

Week of 27 July

StudentsTeachers

17 more Python challenges

The Python library is now 182 challenges. A batch of older ones had broken characters in the brief, and those are repaired.

Browse the challenges →

Week of 20 July

StudentsTeachers

You saidthe library started too hard: you needed challenges covering the absolute basics for a class meeting Python for the first time.

19 challenges for a class that has never coded

We wrote 19 of them, pitched at printing a line and reading one input, so a first lesson has somewhere to start. Recently added challenges carry a NEW ribbon so you can find them.

Browse the challenges →

Week of 13 July

SchoolsTeachers

You saidgetting a class started took an entire lesson: accounts made in advance, passwords printed out, and half the room locked out anyway.

A class signs in with the accounts it already has

We made it a class code. Students sign in with the Google or Microsoft account the school already gave them, and the code is spent the moment it is used.

This is the change that makes a whole class workable in one period. Every trial that quietly died died at account setup, so that is the part we removed.

Invited teachers can use single sign-on too, and creating a school now marks you as a teacher rather than leaving you on a personal account.

Also in this release

  • Joining is locked to your own email domain by default. You can turn it off, and the screen says plainly what that costs you.
  • Every student who joins through a class code is flagged as a child account.
Open the join page →

Week of 22 June

StudentsSchools

You saidthe editor sometimes never loaded on the school network, and nobody could tell you why.

Code that runs on a filtered school network

We now serve Python and the editor from our own domain instead of a third-party CDN, so a filter that blocks anything unfamiliar no longer leaves a class staring at a blank page.

Run some Python →
Teachers

You saidfinding out who was stuck meant opening each task in turn.

One gradebook for the whole class

We put progress across every assignment into a single grid, so you can see at a glance who is stuck and on what before the lesson starts.

Also in this release

  • The AI tutor policy is set per assignment, and the setting is enforced rather than advisory.
Open the teacher area →

Week of 15 June

Students

You saidthe A-level web technologies content needed somewhere students could actually build a page, not just read about one.

A real web editor, with live preview

We built a multi-file editor for HTML, CSS and JavaScript with the page updating as you type. Save it to your account, upload images, then share a link or let someone fork it.

Built for OCR H446 web technologies, but it is a general-purpose editor: anything you can make from static files, you can make here.

Projects autosave, so a lesson that ends abruptly does not cost a student their work.

Open the web editor →
StudentsTeachers

20 web challenges, marked automatically

Build and debug HTML, CSS and JavaScript against a brief and have it checked for you, the same way the Python challenges work.

Browse the web challenges →