AI is making student slop.

A full programming course, built by a teacher, where students don't even want to open ChatGPT.

Before I taught this class they finished at functions. Now they're building web apps that fetch and store data. Just one example — 252 students have been through Tinkr.

tinkr.tech / world / web-dev / lesson / double-every-number

Double every number

Return a new array with every value doubled.

Your mission

Write a function doubleAll(numbers) that returns a new array where every number is multiplied by 2.

Documentation
Array.map
Read more
transforms each element into a new array
Arrow functions
Read more
(n) => n * 2
Editor
javascript
function doubleAll(numbers) {
  return numbers.map((n) => n * 2)
}
Test cases
5 / 5 passing
1
2
3
4
5
Test 5 of 5
pass
doubleAll([1, 2, 3, 4, 5]) [2, 4, 6, 8, 10]

The problem you already know

You teach. They paste.

As soon as they need to do something hard, students prompt an AI and paste the answer back without reading it. Then they move on, having learned nothing.

Ban AI and they fall back on Google — except Google is AI now. Point them at MDN and it's for working devs, not students. Point them at W3Schools and it's never quite right — too thin, or too much, and rarely clear.

The real question isn't how to stop them using AI. It's why they reach for it in the first place. Usually the course makes them — something's confusing, something's missing, something's boring.

So the things they'd leave for — docs, tests, help from you — are inside the exercise.

What students get

A course they don't want to leave.

Short explanations. Tight challenges. Everything they need is one click away, inside the exercise — including you.

241
lessons
7
lesson formats
6
curriculum worlds

JS fundamentals → algorithms → HTML/CSS → async → APIs → data → micro-projects → capstones.

Seven formats, one progression.

Challenge-based, not tutorial-based. Less explaining, more pattern recognition.

01

Read

Short concept pages. No fluff, no 1500-word intros. Just enough to start the next exercise.

02

Quiz

Multiple-choice checkpoints. Catch misunderstandings before they harden into habits.

03

Trace

unusual

No code to write. The student simulates the computer, walking data through given code and predicting what it prints. Flips the struggle — the hard part of programming is that data is invisible, so we let them be the computer.

04

Arrange

unusual

Drag lines of code into the correct order. Short, fast reps. Builds a gut feel for what correct code looks like. Works on a phone.

05

Write

Full code editor, JavaScript, tests baked in. Hit Run, see pass/fail. No need to ask AI if it works.

06

Build

Multi-file HTML/CSS/JS with live preview. Real projects, not algorithm puzzles.

07

Exam

Timed, teacher-controlled. Same UI they already know — the test format isn't the obstacle.

tinkr.tech / lesson / trace-the-loop
Trace

Trace the loop

Be the computer. Walk the variables, line by line.

Read this code
1 let total = 0
2 for (let n of [2, 4, 6]) {
3 total += n
4 }
5 console.log(total)
Line 1

What is total after line 1?

number
Line 3

What is total after the first iteration?

string
number
boolean

2 more checkpoints below

tinkr.tech / lesson / add-one-to-each
Write

Add one to each

Return a new array with every value increased by 1.

Editor
javascript
function addOne(numbers) {
  return numbers.map((n) => n)
}
Test cases
2 / 5 passing
1
2
3
4
5
Test 3 of 5
fail
addOne([1, 2, 3])
expected: [2, 3, 4]
got: [1, 2, 3]

Docs as a first-class citizen

Replaces MDN, W3Schools, and Google — for students.

Tinkr has its own documentation, written for students, not for spec authors. Every exercise links to the docs it needs, just-in-time, no tab-switching.

Reading docs is a real-programmer skill. It's the opposite of prompting an AI. Students who can read docs don't need to cheat.

Free and public. Send your class here even if you don't use Tinkr to teach.

tinkr.tech / docs / array-filter
Array.filter

Make a smaller list.

filter gives you a new array that only contains the items that pass your test. The rest are thrown away. The original array stays the same.

const nums = [1, 2, 3, 4]
nums.filter(n => n > 2)
// → [3, 4]

See also

  • → Array.map
  • → Arrow functions
  • → Practice: filter adults

Homework they'll actually do

Students don't do homework.

So Tinkr has thumb-friendly mobile games — short Arrange reps they'll actually do on the bus, not at a laptop.

Homework stops being a fight. They practice between classes without feeling like they are.

9:41
Arrange
Greet by name

Drag the lines into the right order.

function greet(name) {
return "Hi, " + name
}
greet("Ada")

SDB — the backend for real apps

We're teaching how the internet works, not just syntax and algorithms.

A chat app. A multiplayer game. A leaderboard. Students engage when they're building something real and familiar — and SDB is the backend that lets them, no SQL course required.

  • Ready-made endpoints. No schema, no migrations, no auth dance. POST and GET.
  • Pre-built backends for games. Antiyoy, WanderWorld — build the frontend and battle with the whole class.
  • XSS protection toggle. Flip it off when you want to teach why it matters. Flip it back on.
tinkr.tech / sdb-ui / ada / chat-app
SDB

chat-app

ada · 24 docs

Messages for the class chat app project.

Endpoint

GET POST PATCH DELETE tinkr.tech/sdb/ada/chat-app

Documents

1 · { "name": "Ada", "msg": "who's online?" }
2 · { "name": "Bob", "msg": "here, what's the task" }
3 · { "name": "Cal", "msg": "my game is almost done" }
… 21 more

What you get as the teacher

Every tool here exists because of a moment in my classroom.

Not a framework. Not a best-practice. A thing I needed on a Tuesday at 10:42 when five hands were up.

In the room, or fully remote — same thing.

I run classes in the school building and one that's entirely online. Dashboard, chat, live code view, exam control — all of it works over the internet.

tinkr.tech / teacher / 11a / progress

Group 11A · Progress

24 students · 18 online now

24
Students
18
Online
64%
Avg progress
ada
ex-07 · doubleAll
0:02
78%
new chat
bob
wx-04 · fetch posts
0:24
52%
stuck
cal
tr-12 · trace loop
45%
dan
ex-03 · max of list
0:04
81%
eva
qz-09 · arrays
0:01
69%
fin
ar-05 · greet()
31%

Situational tools for teachers.

Each card below: a classroom moment on top, the tool I built for it underneath.

30 students, no idea who's stuck.

Live dashboard. Total progress per student, plus how long each one has been sitting on their current lesson. Time-on-lesson is how I find who needs me next.

Five hands up — and the shy ones never raise theirs.

Per-lesson chat threads with every student. Private messaging means scared kids finally ask. Unread counts and push notifications so you don't miss one during a break.

"It's not working" with no context.

Live code view. Click a student's name and watch their code in real time. No screen-share setup, no "share your screen" dance.

Exam day is chaos.

Exam control. Open and close exams for the whole group at once. Check who's physically in class — only they can join. See who's joined, who's in progress, who's done. One screen.

Cohorts across years and periods.

Groups. Create them, move students between them. Each group has its own dashboard, chat, exam control, projects view.

Real projects live on GitHub, not Tinkr.

GitHub projects. When it's time for real projects outside Tinkr, you still have an overview of who's been active in their repo.

Students won't tell you what's broken.

Feedback inbox. Every lesson has a feedback button. Complaints and confusion land in a table — you see where students got stuck, I see what to fix. Tinkr evolves fast; your feedback shapes it.

Free for teachers.

Try before you commit. Take the whole course yourself, try every tool, see if it fits your class before students join.

tinkr.tech / teacher / 11a / chats
ada
ex-07 · doubleAll
View lesson →
ada
test 3 is still red — expected [2,4,6,8,10] got [1,2,3,4,5] idk what's wrong
you
check the arrow function — it returns n, should double it
ada
OH. ty 🙏
type a reply…
tinkr.tech / teacher / 11a / live / bob
Live
Watching bob · wx-04 · fetch posts
Editor
bob is typing
async function loadPosts() {
  const res = await fetch('/sdb/ada/posts')
  const posts = await res.json()
  return posts.map(p => p.title|
}
Tests
1 / 3 passing
1
2
3

Next year

What's coming, honestly.

Calling out what isn't in yet, because you're going to notice anyway.

Docs-centered lessons.

Right now the course is traditional — read a concept, solve a challenge, write code, check the test. It works.

Next year every lesson will orbit one piece of documentation: learn the doc → quiz on it → trace code that uses it → write code that uses it → one micro-project every 10 docs → a test every 30.

The whole progression points back to reading documentation — which is how programming actually works. Once students know how docs work, they don't need AI or Google. They just put the puzzle pieces together.

AI detection.

Watching typing rhythm and paste patterns to flag code that wasn't written by the student — both in exercises and in projects. So you can ask the real question before the gradebook closes.

AI teaching assistant — when it actually works.

I've tried integrating AI in Tinkr a few different ways. Every time it confused students more than it helped. So right now there's zero AI in the platform — I care about results, not marketing.

AI can genuinely help students and teachers if it's done right. We're not there yet. When it does more good than harm, it ships.

In-platform IDE, replacing VS Code.

VS Code is now full of AI, and there's no reliable way to tell whether a student actually wrote their code. Moving the editor into Tinkr is the only way to know for sure — every keystroke happens where we can see it.

For the student it still feels like a real IDE: real files, real bash, real git. Nothing simulated, nothing dumbed down — just the same tools, on our side of the screen.

A logic-first ramp.

For students who need a runway before touching code at all. Start from logic, progress into programming naturally.

screenshot
Photo of Krister — casual, looks like a teacher not a VC.

Who made this

Krister Viirsaar.

Software developer, 10+ years. I've taught 252 students through Tinkr — plus 500+ more at university level and in career-change trainings for adults.

Tinkr is a condensation of everything I've tried in a classroom. I know learning to code is hard. I also know it doesn't have to be.

I'll keep experimenting on Tinkr until programming becomes a normal part of school.

Pricing

Free for teachers so you can test the course before you buy for a class. It doesn't cost €1000 to start.

Teachers

Free

Test before you teach.

  • Full course, start to finish
  • Every teacher tool unlocked
  • No card, no hidden costs
Try the course
Most classrooms

Classroom

€100

Your whole class.

  • Every student in one group
  • Teacher dashboard and chat
  • Exams, progress, projects
Get classroom access

Individual

€50

One learner.

  • Full course access
  • Learn at your pace
  • Docs and SDB included
Start learning

Price is negotiable. Public school, private, homeschool co-op, bootcamp, club — tell me what you need, we'll work it out.

BETA

Work in progress.

Things will break. I fix them fast. Your feedback shapes what happens next.

Look inside.

Register, pick the "teacher" group, browse any lesson top to bottom. I'll know you joined — we can hop on a call if you want, or you can just poke around.