Name: Left Hand Dev Period: ∞ Date: Today

Software written with the other hand.

Classroom tools from a math teacher, built to bridge abstract mathematics and student intuition.

rāSHio drawing a histogram and box plot of sample ages.
rāSHio
A printed linear equations quiz made with verSHion.
verSHion
bookSHelf's shelf of open textbooks: Integrated Math 1, Introduction to Statistics and Calculus Volume 1.
bookSHelf

rāSHio, drawing a histogram live in the browser.

The problem set

Each one started as a real problem in a real room: a stats class, a CS lab, a weld shop. Most open in the browser with no account and nothing to install.

rāSHio's preview app: a histogram and box plot of sample ages with min, quartiles, median and max.
Live

A statistics calculator for the intro course, built to replace the StatCrunch and TI-84 shuffle. A spreadsheet up front, then t-tests, ANOVA, chi-square and probability shading, and every chart redraws as the data changes. The data never leaves the student's machine.

Given: browser, D3, Cloudflare D1 Open it →
bookSHelf's shelf of open textbooks: Integrated Math 1, Introduction to Statistics and Calculus Volume 1.
Live

Open textbooks, rewritten for the student who actually reads them: plain-English explanations, worked examples, collapsible solutions. An 11‑step pipeline produces every page.

Given: 180+ sections, MathJax Open it →
A printed linear equations quiz laid out by verSHion, with multiple choice, a graph question and a show-your-work line.
Live

Question banks in, printed tests out. Old PDFs, scans, screenshots and Word docs become clean exams with shuffled versions and an answer key.

Given: Rust, egui, WebAssembly Open it →Source
Chapter 1 · JS fundamentals
  1. 1.1 Software Lifecycle
  2. 1.2 Variables and Data Types
Live

A JavaScript classroom platform. Lessons, an in-browser editor with live autograding, join codes and per-student progress for the teacher.

Given: Next.js, CodeMirror, D1 Open it →Source
Course syllabus · section 4Late workParent or guardian, initial to show you read this section.S.H. initialed
Live

A living syllabus that parents initial section by section, so a signature means they read the late-work policy.

Given: vanilla JS, no build Open it →Source
the whole engine, as globalssetup()  draw()SpriteGroupworldcamerakbmouse
Live

A 2D game engine for beginners: sprites and real Box2D physics in a handful of globals. Write setup() and draw(), and the engine runs them.

Given: planck.js, zero imports Open it →Source
steps, in the student’s words
  1. slide right 3, down 2
  2. turn 90° about (0, 0)
  3. flip over y = x
The tool shows where every mark went. Naming the single move is the student’s job.
Live

Tracing paper over a coordinate grid. Plot a figure, lay the paper down, then slide it, turn it about a center you pick, or flip it over a mirror line.

Given: vanilla JS, no dependencies Open it →Source
each student lands in one
  • can’t start
  • won’t start
  • doesn’t know enough yet
+ flags rushing
Live

Alleviate the tension between students and teachers. A forward-only set of math and reasoning problems that shows whether a student can’t start, won’t start, or doesn’t know enough yet.

Given: HTML, CSS, JS · no server Open it →Source
type it, then copy it outx = −b ± √b2 − 4ac2aLaTeXMathMLOMMLSVG
Live

An equation editor in pure Rust. Type it naturally, then copy it out as LaTeX, MathML, Word's OMML or SVG.

Given: Rust, wasm, WebGL2 Open it →Source
one window, four appsWordCraft.docxGridCraft.xlsxDeckCraft.pptxPdfCraft.pdf
Live

Documents, spreadsheets, slides and PDFs as tabs in one window. Opens .docx, .xlsx and .pptx, with equaSHion and verSHion built in. Every app is written in Rust.

Given: Rust, egui, wgpu Open it →Source
field result · top matchEschscholzia californicaCalifornian poppy99.98%
Live

Plant ID that runs on your own server or right in the browser. Seven real models get compared head to head, and the README says plainly that 16 photos are a smoke test.

Given: FastAPI, BioCLIP, Docker Open it →Source
Lincoln POWER MIG 210 MP · MIG, mild steel33 of 100wire speed21.5 Vvoltage125 Aat the arc
Draft
12.

SLAG

Weld settings for the machine in front of you. Pick the process, metal and thickness, and it turns the chart's targets into the number you actually dial in.

Given: React, Vite, D1 Open it →Source
ready to analyzeUpload a photo or a short clip of the weld.MIGTIGStickFlux Core
Draft

Grades welds, not people. Upload a photo or a short clip, describe the joint and position, and get a written report back from a vision model.

Given: Qwen3-VL, Ollama Open it →Source

Loose-leaf

Source on GitHub, ready to clone. Several open straight from a single HTML file. Each name opens its repository.

The classroom

  1. 14.

    Grades 30 written responses in minutes on a local model. No cloud.

  2. 15.

    Handwriting OCR for stacks of student pages, on a local vision server.

  3. 16.

    Scans worksheets on a ScanSnap iX500 into searchable PDFs. AI fixes wait for your OK.

  4. 17.

    Turns a syllabus into one page a student reads in ninety seconds.

Math & making

  1. 18.

    Plain-words CAD on its own Rust B-rep kernel. It refuses what it can’t build.

  2. 19.

    Turns STL and 3MF meshes back into STEP solids with true geometry.

Home lab

  1. 20.

    A motion-forward home screen and photo screensaver for Roku TV.

  2. 21.

    The agent framework behind this page. It edits itself after each session.

About

Steven Huff

Math educator, CS teacher and curriculum developer. Ten-plus years teaching, from elementary through college.

One teacher. One left hand.

Read the full CV →
  1. Why "Left Hand"?

    Because I’m left-handed. Lefties drag their hand through wet ink, so every line gets checked twice. The smudge is a feature.

  2. Why the capital SH?

    They're the initials. rāSHio, bookSHelf, verSHion: the tools sign their own names.

  3. What's the rule?

    A student should open the page, get the answer, and get back to the homework. Student data stays on the student's machine wherever possible.