A tutor inside VS Code · not an autocomplete

Build the real thing
Actually learn the language

Midnight Oil lives in VS Code and won't just write the code for you. You build your real project, and it explains the new bits by comparing them to a language you already know, then makes you type them yourself. It also keeps score.

  • Teach: the next step, at whatever help level you can stomach
  • Bridge: new idioms explained in a language you already speak
  • Master: it tracks what's actually sticking, concept by concept

Coming to the VS Code Marketplace · sign in, pick a plan, start learning

Midnight Oil · Tutor · Medium
The Midnight Oil Tutor panel: assist dial, Ruby→TypeScript bridge, syntax-highlighted fill-in-the-blanks, hint, and skills
Progress
Progress dashboard showing Level and overall mastery

The unoccupied middle

Every tool picks a side, and both fail the experienced dev

autocomplete

Cursor & Copilot

They write the code for you. You ship faster and learn nothing. Congratulations, you're a faster typist.

courses

Boot.dev & Exercism

They do teach, but on toy problems you'll forget by lunch. Your real project, and its real mess, never show up.

Transfer-teaching

It teaches you from the language you already speak

You already know what you want to write, you just don't know how this language spells it. Same idea, new syntax. It hands you the familiar scaffolding and blanks out the parts that are actually new to you.

  • The bridge: “In Ruby you'd mutate in place, TypeScript declares types inline.”
  • You fill in the blanks yourself, it won't do it for you
  • A hint when you're close, never the answer

JS → Go · Java → Rust · Ruby → TypeScript · or no source at all

Tutor · Ruby → TypeScript
A cross-language bridge from Ruby to TypeScript above a fill-in-the-blanks code block

The signature feature

The assist-dial: turn down the help, turn up the learning

One knob, four settings. It changes how much you're shown, but never who's doing the typing. Crank it up for the borrow checker while it's still witchcraft, turn it down for the stuff you've already got.

High

Full idiomatic code

A copy-pasteable block, only for boilerplate you already understand.

Medium

Fill in the blank

Scaffolding filled in, the new-language idioms blanked for you to type. The heart of it.

Low

A nudge

“Something here won't compile the way you think. Want a hint?” You have to ask. That's the point.

Off

Pure reviewer

Write freely, it critiques after. For when you just want to be spot-checked.

Inside your editor

We didn't build an editor, it lives in the one you've got

Midnight Oil is a VS Code extension. Everything you already use stays put: files, search, git, your LSP, your runners. It just adds the teaching, which is the part nobody else bothers to build.

teach selection

Select code, hit Ctrl/⌘ + Alt + E, and it diagnoses and scaffolds the next step at your level.

assist-dial

Ctrl/⌘ + Alt + L cycles High → Medium → Low → Off. A status-bar item + a clickable dial.

inline cues

The lesson shown in place: ghost text, a highlighted line, or a fill-in marker on the target.

explain

Ctrl/⌘ + Alt + X gives you the what, the why, and the gotchas, with citations to real lines in your code.

Track your mastery

Every concept gets a rank, and yes there's a test

It tracks how well you actually know each concept, per language. Four tiers, and you don't grind your way up, you pass a gate test the AI grades. Get good enough across a language and it hands you a title, like a video game with worse graphics.

Beginner Intermediate Advanced Expert
  • Gate tests unlock the next tier · practice earns reps
  • Craft titles: Novice → Journeyman → Craftsman → Master
  • One overall Level across every language
Midnight Oil: Progress
The Progress dashboard: Level, overall mastery, and per-concept tier bars by language
Questions
AI-generated test questions filtered by tier with pass/fail marks

How a session works

Three ways in, one loop

01

Plan-first

“Teach me Rust by building a CLI todo app.” It drafts teachable milestones, you execute them one at a time.

02

Bring your own project

Open an existing repo. It finds teachable moments as you work, no lesson plan, just your code.

03

Goal-first

“Teach me X by building Y.” It scaffolds a path from your goal to a real, working thing.

teach selection you attempt save diagnostics verify mastery updates

Stop autocompleting, start actually learning it

Great for side projects and the “I should really learn this properly” itch. Less great two hours before a deadline, when you'll cave and let the robot do it, and honestly, fair enough.