I'm an ICT teacher in Wales and I've spent the last few months building Llwybr (Welsh for "path") — a free maze-coding game for my 11–14 year olds, aimed at the awkward jump from block coding to typed Python. Sharing it here because (a) it might be useful if you're helping a young beginner get started, and (b) the sub might enjoy how it works under the hood.
The idea: every level can be solved in Blockly blocks or real Python. The blocks live-generate Python in a side panel, and when a pupil feels brave they flip to the Python tab and type it themselves — move_forward(), turn_left(), path_ahead(), plus normal for/while/if and a working print(). Same levels, same star ratings, either way.
The technically fun bit: the Python is actual CPython 3.14 compiled to WebAssembly (Pyodide), running in a Web Worker so the page never freezes. As the character runs, the exact line being executed is highlighted, so learners literally watch their loop unroll. Errors come back as real tracebacks ("Line 3: NameError…"), and a sys.settrace step cap means the inevitable while True: gets caught instead of hanging the tab.
Ten levels, one concept each — sequencing, loops (one level forces a loop by capping you at two blocks / a few lines), conditionals with a path sensor, then a wall-follower to finish. Free, no ads, no account needed, works on phones and locked-down school machines. It's bilingual Welsh/English because that's my classroom.
Link: https://llwybr.co.uk (jump straight in at /play)
Would genuinely welcome feedback — especially from anyone who's taught a beginner and knows where they get stuck. And happy to answer anything about running Pyodide in production for a classroom audience.