VicroCode
Make Code Create Value
VicroCode is a lightweight online platform for publishing, running, sharing, and monetizing code projects. Launch HTML, Python, SQLite, AI agents, management tools, games, and more without server setup.
Please wait while VicroCode loads. You can also explore the AI programming guide
Loading...

AI MARKET GUIDE

The Placement-First English Tutor: Building a Practice App That Knows Your Level Before It Teaches

A V2EX learner is tired of AI tutors that open with "How are you" and have no plan. Here's how to build a placement-first tutor on VicroCode.

There's a short V2EX thread that stuck with me. Someone discovered that chat models are great for English practice, then hit the wall everyone hits: no plan. You ask it to teach you and it opens with "How are you." Their actual wish was clear and reasonable: talk to me first, figure out my level, then feed me the right material step by step. Don't restart from zero every session.

That's not a request for a smarter model. It's a request for structure. A raw chat window is stateless by design, so every conversation begins as if you've never spoken before. What the learner wants is the opposite of a fresh chat: a system that remembers where they are and moves them forward.

So let's build that instead of yet another open-ended chatbot.

The core idea: assess, store, then adapt

The fix is boring in the best way. Three moving parts:

  1. A short placement check that runs before any teaching happens.
  2. A stored record of the learner's level that survives between sessions.
  3. Lessons that read that record and serve the next appropriate step.

The model still does the language work, but it's now working inside a scaffold that has memory and a sequence. "How are you" only shows up if the placement logic decides a beginner needs it.

The placement check

Keep the first session tight. A handful of prompts across reading comprehension, a few grammar discriminations, and one or two short free-writing tasks are enough to sort someone into a rough band. You don't need a research-grade instrument here; you need a repeatable score that seeds the lesson engine.

A model from the platform's Model Center can grade the free-response items and justify the score, while the fixed-answer items are scored with plain logic. The point is to end the check with a concrete level and a short profile of weak spots, not a vibe.

Where the level lives

This is the part the chat window can't do. The learner's band, their weak areas, and a log of completed lessons go into a small database so the next session opens where the last one ended. A SQLite database fits this cleanly: one row per learner, a few tables for lesson history and mistakes.

Call it an editable ledger on purpose. Placement is never perfect, and learners plateau or jump. Being able to open a SQLite editor and nudge someone's level up, correct a bad initial read, or reset a stalled track means the system stays honest instead of trapping people at a wrong estimate. That manual override is a feature, not a patch.

Serving progressive lessons

With a stored level, the lesson step becomes a lookup plus generation. Read the current band and the weakest skill from the ledger, then ask the model to produce a lesson targeted at exactly that, one notch harder than last time. After the learner responds, score it, write the result back, and adjust the band if the pattern warrants it.

The grading and sequencing logic is a natural fit to run Python online: pull the learner state, call the model, evaluate the answer, update the record. The learner never sees the plumbing. They just notice that today's lesson follows from yesterday's, which is the whole thing the V2EX poster was missing.

Shipping it as something people can actually open

A tutor nobody can reach is a script. The front end is a plain HTML interface for the placement flow and the daily lesson, backed by the Python logic and the database. You can put it behind web app hosting so a learner just opens a link, does their placement, and comes back to a session that remembers them. If you want to take it further, the project can be published and shared, and monetized if there's an audience for it.

Be honest about the boundary

The original thread praised two things about chat models: pronunciation correction and spoken back-and-forth. I want to be straight that both sit outside what I'd claim here. The confirmed VicroCode capabilities cover text: models, Python, databases, hosting. Voice input, audio playback, and pronunciation scoring are not part of that set, so this build is a text-based reading, grammar, and writing tutor. If someone needs spoken practice, this isn't the tool, and I'd rather say so up front than imply a feature that isn't there.

What this design does deliver is the part the poster actually complained about: no more starting from "How are you" every time. The level is assessed once, stored, editable, and used to drive what comes next. That's the difference between a chat window and a tutor, and it's buildable with the pieces on hand.

Why this generalizes

Strip away the English-learning specifics and you have a pattern worth reusing: put a stateful ledger in front of a stateless model. Assess, store, adapt. Any coaching or practice tool that currently feels amnesiac, onboarding flows, interview prep, skills drills, has the same gap and the same fix. The model was never the missing piece. The memory was.