How to build an AI language tutor for your business with OpenAI Codex (no coding required)
Ship a tutor that charges you per lesson instead of per learner. Chat practice that corrects as it goes, flashcards and exercises made for the level, a dictionary in the lesson, daily streaks, and a ceiling on what each learner can spend on your AI key. Describe it one task at a time in plain English and Codex writes the app, showing you each change before it stays.
OpenAI Codex
$ Build a language learning app: a tutor that replies in the target language and corrects the learner’s mistakes, flashcards and fill-in-the-blank exercises made for their level, a dictionary and translator, and daily streaks, with a ceiling per learner on my own AI key and each learner’s progress kept to themselves.
- Tutor proven first, capped
- Drills and streaks written
- Ready for your review
Overview & core architecture
An AI language tutor is a practice partner rather than a course: a learner types in the language they are learning, gets a reply in it with their mistakes corrected, and drills what came up, with the model answering on your own key rather than a subscription per learner.
The usual version of this is a course app. Somebody wrote the lessons, recorded the audio, and charges every learner the same amount a month for the same path through them, whether they open the app every day or twice. Every product in the comparison further down works that way.
This version replaces the fixed path with a conversation. The learner says what they can, the tutor replies in the target language and points out what to fix, and the flashcards and exercises are generated around that level rather than pulled from a fixed deck. Behind it sit a dictionary and translator for the moment a word is missing, and a streak per activity that brings people back tomorrow.
What changes underneath is the bill. Every reply, card and exercise is one call to your AI provider at a per-token price, so a learner who practises for an hour a day costs you cents and a learner who never opens the app costs you nothing. The honest consequence, and the first decision below, is that a tutor on your own key needs a ceiling per learner, because the template ships without one.
The correction is the product
A chatbot that answers in Spanish is a novelty. A tutor that answers in Spanish, shows the learner the two words they got wrong and carries on the conversation is a lesson, and the prompt that makes the model do the second thing rather than the first is the most valuable text in this build.
Content is generated, not authored
No course to write and no audio to record. Cards and exercises come from the model for the language and the level the learner chose, which is why six languages ship on day one and a seventh is a line in a list, with the caveat that generated content needs a check a curated course does not.
The seat is the meter you remove
A course app charges per learner per month. A tutor on your own key charges per message, and the two diverge in your favour exactly where a subscription is most profitable: the learners who signed up and rarely practise.
Essential language tutor components
Six building blocks make up the tutor, and the corrected conversation is the one to prove first. Each is something you can ask your AI coding tool to build or rework in plain words.
Chat practice with corrections
The learner writes in the language they are learning and the tutor replies in it, marks what was wrong and why in a line or two, and keeps the conversation going. The last several turns travel with each message so the tutor remembers what was said, and the reply is rendered as formatted text rather than a wall of words.
Flashcards made for the level
Vocabulary cards generated for the chosen language and difficulty, flipped to reveal the meaning, with a speaker button that reads the word aloud using the visitor’s own browser voices.
Fill-in-the-blank exercises
Sentences generated at a chosen difficulty with a word missing, checked as the learner types, so practice follows what the conversation just surfaced rather than a fixed deck.
Dictionary & translator
The meaning of a word in the target language, and a phrase translated in either direction with one tap to swap the languages, without leaving the lesson to look it up somewhere else.
Per-activity daily streaks
A streak for chat, for cards, for exercises and for the dictionary, each recorded when the learner completes something, shown as counters on the dashboard and as a week view with charts on its own page.
Learner accounts & settings
Sign-up and sign-in, a profile per learner with their native and target languages, settings and a password change, and a demo mode that shows the dashboard to a visitor without an account.
Own the tutor or rent a seat in a course
Every product below charges per learner per month, packaged four different ways: monthly, prepaid for a year, prepaid for longer, or once for life. None of them charges for what a learner actually did. A tutor on your own key does, which is the number to hold on to while you read the table.
Build your own
Own the tutor outright: the learners, their progress and their streaks sit in a database you control, the content is generated for the languages and levels you choose, and the only bill that moves is the model calls you route through your own AI key. With an AI coding tool writing the machinery, that build is weeks rather than a quarter.
- No seat to buy, so a learner who signs up and rarely practises costs nothing
- Model calls at the provider’s per-token price on your own key, with a ceiling you set per learner
- Your own branding, your own sign-in and your own learners, which none of the four allows
- Languages, levels and the tutor’s manner are yours to decide rather than a catalogue to pick from
- Progress and streaks live in your database, so reporting and export are yours to define
- The code and the records are yours outright, and can move to any host you like
Rent a course
Rosetta Stone · Mango Languages · Ling · DropsRenting buys a curriculum written by people, audio recorded by native speakers, and a company that keeps both current across dozens of languages. What it costs is a price per learner per month, paid whether or not they practise.
- Lessons designed by people and recorded by native speakers, which a generated card is not
- Dozens of languages on day one, against the handful you configure
- Live this afternoon, with somebody else absorbing the model and content changes
- A price per learner per month on all four, however little that learner practised
- A curriculum rather than a conversation, so a learner who wants to talk is still on rails
- No corrections of what the learner actually wrote, because nothing in a fixed course reads it
The plainest version of the seat: one learner, one price a month, the same whether they finish a unit a day or none. The annual plan is a third cheaper for a year paid up front, which is the usual shape of the discount on every row here. Rosetta Stone is the row to read for what a curated course with speech practice built in costs, because that is what a generated tutor is not.
rosettastone.com · checked September 2026
The row that prices a household rather than a person: five profiles for one price, which is the closest any of these comes to the shape of a tutor you run for a group. The catalogue is the argument, seventy languages against the six this template ships with, and the counter-argument is that all seventy follow the same fixed path.
mangolanguages.com · checked September 2026
Priced by how long you commit: the monthly rate almost halves once a learner pays for a year up front, which tells you where the margin is. A free tier with limited lessons and ads is what most learners meet first, and the paid tier removes the limit rather than adding a different kind of practice.
ling-app.com · checked September 2026
The row with a lifetime price, which is the packaging closest to owning something and still not the same thing: a lifetime licence to somebody else’s vocabulary games, with no learners of your own on it. Worth reading against the one-time cost of a build, because it is the only row where the comparison is one price to one price.
languagedrops.com · checked September 2026
Rule of thumb: if you want to learn a language yourself, do not build this. Any row above teaches you more for less than the weeks below cost, and a curriculum written by people beats a generated deck for a beginner. If you teach, run a school, train staff or want a product of your own, the seat is the bill, and a tutor on your own key turns a price per learner into cents per lesson. The honest middle case is a tutor for beginners in a language you do not speak yourself, and there the right answer is to build it and have a native speaker check what the model generates before learners see it.
Why build with Codex
Skip the curriculum and the server engineering. Describe the tutor, the drills and the streaks you want, say who may sign in, and every learner’s progress is saved under their own account without you writing server code.
Codex closes that gap by working the way a developer would, just faster. The whole workflow becomes a simple loop:
Describe
Tell Codex what you want, in plain language.
Build
It edits the real project files, backend and auth and UI, rather than replying in a chat.
Check
Run the app yourself and confirm the change works.
Repeat
Describe the next change.
None of that loop needs a computer-science background, which is why one person can take an idea to a working app over a handful of focused sessions.
Three hard partshandled for you
The data model, authentication, and access rules are the pieces that make software like this genuinely hard to build alone. Describe them and Codex scaffolds all three, leaving mostly screens to build on top.
Any language is the interface
There’s no code to write, and no requirement to describe it in English. Ask for a new field, a renamed step, or an AI summary in whatever language you think in, and Codex implements it.
Local files it edits directly
Codex works on the project on your own disk rather than a copy somewhere else, so what it changes is exactly what you see when you run the app. Point it at the handful of files that matter and it stays fast and focused.
Pay a developer, or do it with AI
Nothing in a tutor you own carries a price per learner, so the cost is whoever writes it, plus a model bill that follows your own AI key and grows with practice rather than with sign-ups. Both ways of paying for the writing are priced below.
Hire a developer
Custom build, from scratch- Developer
- ~$9.8k-$39k
- Supabase (backend)
- Free tier · $25/mo (Pro plan)*
- Hosting
- $0 free tier
- AI tutor calls
- Per token on your own key
- Build time
- ~195 hrs of their work
~$9.8k-$39k to build, then from $25/mo after launch
Our ~195-hour estimate, costed against the rate survey linked below, whose bands run from $45-$75/hr for North American contractors up through $100-$150+/hr for senior US developers, before the 20-40% an agency adds, which brackets the range at roughly $50/hr and $200/hr. Most of those hours are the tutor prompt, the generated drills and the streak arithmetic, none of which shows in a screenshot. Then read the model row: at the default model’s rates a lesson of twenty exchanges costs well under a cent, and it is the only line that grows with use.
Build it with Codex
From scratch, with Codex- Codex
- ~$20/month (Plus) to ~$200/month (Pro)
- Backend (Supabase)
- Free tier · $25/month (Pro plan)*
- Hosting
- $0 on a free tier
- Your time
- ~94 hrs
~$20-$200/month while you build, then whichever plan you keep using
Codex itself is free to install. The cost sits in the ChatGPT plan behind it, or in API usage if you sign in with a key instead. Plus, around $20/month, covers a template import or a short build. A from-scratch build that runs for weeks usually needs Pro’s top usage-multiplier tier instead, which lands around $100 to $200 a month. The fee doesn’t shrink when you start from a template the way a per-hour developer bill would: the template changes how many of the hours in the estimator above you actually spend, not which ChatGPT plan you’re paying for.
* On this template the free-tier line to watch is the pause rather than storage. Nothing large is stored, because conversations are not saved and no files are kept, so a learner is a few rows of text. What bites is that a free project sleeps after a week without activity, and a tutor people open when they have ten spare minutes is exactly the sort that goes quiet. Pro, from $25/mo, ends the pause and keeps a daily backup for 7 days.
Prices and rates from supabase.com, developex.com and learn.chatgpt.com, checked September 2026.
Decide before you build
Six decisions to make before writing code. Two of them protect your AI key from a learner who practises more than you budgeted for, and one decides whether the tutor can hear.
What is your ceiling on tutor calls per learner?
Every reply, card and exercise is a paid call on your key, and the template ships with no limit on any of them. Decide now how many calls a learner gets per day or per month, what the screen says at the limit, and whether a paying learner gets more. Decided now it is a field on a table. Decided after the first surprising bill it is a rewrite.
Which languages and levels do you offer?
The template ships six languages in a fixed list and detects the learner’s native language from their browser. The model can teach far more, and each one you add is a line in a list plus a native speaker to check what it generates. Decide the list before the first screen, because it shapes the picker, the prompts and your marketing.
Do you save conversations?
The template keeps the conversation in the tab and forgets it when the tab closes. Saving it lets a learner pick up where they stopped and lets you show progress, and it also makes you the keeper of everything they typed while learning. Decide which, and if you save, decide for how long and how a learner deletes it.
Text only, or speaking too?
The template reads a flashcard aloud with the visitor’s own browser voices and has no microphone anywhere. Speaking practice is a real build: recognising speech, scoring pronunciation, a fallback for browsers without a voice for the language. Decide whether it is in the first version, because it changes the tutor prompt and the dashboard.
What counts as a streak day, and in whose time zone?
A streak is the feature that brings learners back and the one that makes them angry when it breaks. Decide whether any activity keeps it alive or each activity has its own, when the day rolls over for a learner in another time zone, and whether a missed day can be repaired. Write the rule down before the arithmetic is written.
Free trial, demo shell, or sign-up first?
The template’s demo mode shows the dashboard to a visitor without an account and gives them no tutor, no cards and no streak, because all of those spend your key. Decide whether strangers get a few real exchanges, an invitation, or the shell. Whatever you choose, limits attach to the account, because accounts are free to create.
Comparing your build options
Building a chat box that answers in Spanish is fast. The hard part is everything behind it: a correction that teaches rather than rewrites, drills generated at the learner’s level, a streak that counts days honestly, and a ceiling on what each learner can spend. Here are three ways to build the exact same product.
A tutor that answers is an afternoon. The weeks go on making it teach: correcting a learner’s sentence without rewriting it, carrying the last ten turns into the next reply, generating cards and exercises that match the level rather than the dictionary, and a streak that counts a day the way a learner in another time zone expects.
A kit gives you a login page, a settings screen and a tab bar. It has never heard of a target language, a correction or a streak, so the tutor, the drills and the progress, which are the whole product, start from nothing.
You hand Codex one task at a time and it edits the real files, the tutor functions, the dashboard and the database rules, and shows you the change before it stays. The check that matters: hit the daily limit on purpose and read what a learner sees.
Estimate your exact build timeframe
Customize your feature list below to see how build time changes. If you only need the tutor chat, or streaks are not part of your product, uncheck those rows to reduce the estimate.
Your estimate
94 hrs
start to finish
Based on the 6 of 6 features you’ve selected, plus ~21h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.
A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.
Let’s set up the tools you need
Before step 01, four things go on your computer. It takes about 15 minutes in total, and none of it is coding. Three are ordinary installers, and the fourth is a ChatGPT plan with Codex access switched on. After that, you build by describing what you want in plain language.
OpenAI Codex
Your main AI assistant. The app itself costs nothing and installs with a single command from OpenAI, then runs in your Terminal. What it costs to use is the next card: every request spends the usage allowance on your ChatGPT plan, and the free plan’s allowance is small enough that a build of this size stops early. Codex is also built into an extension for popular code editors and into the ChatGPT desktop app, which can hand a longer task off to Codex cloud to keep running in an isolated environment while you do something else.
Install Codex CLIChatGPT plan
Codex is technically included on the free ChatGPT plan too, but Free’s usage is the tightest of any tier. OpenAI doesn’t publish Free’s own cap, only that every paid tier gets a larger multiple of it, so treat Free as a way to try Codex rather than to build with it. ChatGPT Plus, around $20/month, is the realistic starting point, and a long, from-scratch build tends to need the top ChatGPT Pro tier, priced by usage multiplier at roughly $100 to $200/month. Codex can also run on pay-as-you-go API billing instead of a ChatGPT plan, if you’d rather pay per token than hold a subscription.
Compare ChatGPT plansNode.js engine
The engine that runs your app on your own computer. You never have to learn how it works: download the version marked LTS (the most stable one), install it, and forget about it.
Download Node.js (LTS)Supabase (database)
Where your project keeps its data. Install it, then sign in once by running supabase login. Words like migrations and row-level security turn up later in the guide, and Codex writes those parts for you.
Install Supabase CLINothing here is worth memorizing. These four just need to exist on your machine. From step 01 on, you say what you want and Codex runs the commands.
Build your language tutor, one Codex task at a time
You describe a task, Codex writes the files and runs the commands, and you read what changed. Two things shape the order: the ceiling lands with the first corrected reply, because every turn resends the conversation and a long test costs real money, and the schema is read before it runs.
- 01
Write AGENTS.md before anything is scaffolded
Codex loads AGENTS.md at the start of every task, so the two rules that matter most on this build (the key never reaches the browser, every call is capped) are loaded before any code exists to break them.
PromptSet up the projectStart by writing an AGENTS.md at the project root: the stack is React 18, Vite, TypeScript, Tailwind and the Supabase JS client, and this project is an AI language tutor. Fix the vocabulary (learners, target language, activities, streaks) and record two standing constraints: every call to the AI provider goes through a server-side function with the key in its secrets and a per-learner limit checked before the provider is contacted, and the browser never holds the key or decides the limit. You load that file automatically at the start of every later task. Then scaffold the project: a typed Supabase client under src/lib reading VITE_SUPABASE_URL and the publishable key (the sb_publishable_… key that replaced the older anon key) from .env, with .env confirmed present in .gitignore.
The two constraints are the ones worth writing down. Calling the provider from the browser and skipping the limit "for now" are both reasonable-sounding shortcuts, and both cost real money the first time a learner is generous with their practice.
- 02
Have Codex build the tutor and the ceiling in one task
One function, one corrected reply, and the log and the limit built in from the first call. Read the prompt Codex writes for the model as carefully as the code, because that prompt is the product.
PromptBuild the tutor function and the ceilingCreate a Supabase edge function called chat-assistant that calls my AI provider with the key held in function secrets. It takes the learner’s message, their target and native languages and the last ten turns, and asks the model to reply in the target language at the learner’s level and then, in the native language, to point out up to three mistakes and their fixes without rewriting the whole message. Before contacting the provider it writes a row to a calls table (learner, activity, model, tokens in and out, cost estimate) and checks that learner’s calls today against a limit read from a settings table, returning a friendly limit message when it is hit. Build one plain chat page that renders the reply as formatted text, with a placeholder learner id for now. Show me the system prompt you wrote before you run anything.
Asking to see the system prompt first is worth the round trip. Whether the tutor teaches or rewrites is decided in that text, and it is far cheaper to argue with a paragraph than with a running function.
- 03
Have Codex write the schema, and read the SQL before it runs
The data model is small and the rule is simple, which is exactly why it is worth reading rather than approving on trust. Everything later reads these tables.
PromptWrite the data modelWrite the migrations for this app and show me the SQL before running it. A profiles table with the learner’s native and target languages, created by a trigger on sign-up. An activity_completions table recording each completed activity with its type and the learner’s local day. A user_streaks table with the current and longest streak per activity. A calls table and a settings table for the ceiling from step 02. Design every table with an owner column so the access rules in the next task are one line each.
Reading the SQL here costs ten minutes. Finding a streak that was saved against the wrong learner costs a support conversation.
- 04
Narrow permissions, then add sign-in and the access rules
This task touches authentication, which is exactly the kind of change worth scoping Codex down for rather than leaving whatever settings you use for routine edits.
PromptAdd auth and access rulesThis task touches authentication, so narrow your permissions to just this one. Wire in Supabase Auth for email-and-password sign-up, login, logout, a persisted session and a useUser hook, and connect the profiles trigger. Enable row-level security on every table so a learner reaches only their own rows, with explicit WITH CHECK clauses on insert and update. Make every edge function, including the ones that only record activity or change settings, refuse a caller without a valid session at the gate rather than inside the function. Show me how to verify a second learner gets nothing back for the first learner’s rows.
There are no roles here, which is right for a personal tutor. One ownership rule, watertight, beats three rules with a gap.
- 05
Give the dashboard its own task, and the drills the next one
The dashboard is the screen learners live in and the drills are four more functions behind it. Keep them as two tasks so each change is small enough to read.
PromptBuild the dashboardBuild the learning dashboard as one page with a language picker and four tabs (Chat Practice, Flashcards, Quick Exercises, Dictionary), wire the Chat tab to the function from step 02 with the real learner id, and put my name and colours on it. Leave the other three tabs as empty states that say what they will do. Walk me through the component structure before you build it.
PromptBuild the drills and the dictionaryAdd four more edge functions, each through the same key, the same sign-in check and the same per-learner ceiling as the chat. A get-flashcards function that generates a set of vocabulary cards for the target language and a chosen difficulty. A generate-exercise-sentence function that returns a fill-in-the-blank sentence at a chosen difficulty with its answer. A get-word-meaning function and a translate-text function. Wire them to their tabs: cards that flip and read the word aloud with the browser’s own speech synthesis, exercises checked as the learner types, and a dictionary with one tap to swap the two languages.
Say "the same ceiling" out loud in the prompt. Four functions with four separate limits is the version of this that looks finished until the bill arrives.
- 06Destination
Hand streaks, settings and demo mode to a cloud run, then test it yourself
Streaks, settings and the demo shell are self-contained and well specified, a reasonable set to hand to a cloud run while you do something else, provided you read the change before it merges.
PromptAdd streaks, settings, demo, and testThree remaining pieces. Streaks: an activity-completed function that records a completed activity for the signed-in learner and extends, resets or keeps that activity’s streak using the learner’s local day, a get-streaks function, counters on the dashboard, and a history page with a week view and charts. Settings: the learner’s languages, a password change and a usage panel showing calls and estimated cost this period. Demo mode: a visitor who continues without an account sees the dashboard shell with sample content and no function accepts a call from them. When they are in, run the app and take it end to end yourself: open the demo signed out and confirm nothing calls the provider, sign up, hold a ten-turn conversation with mistakes in it, drill cards and an exercise, check the streaks moved, hit the daily limit on purpose and read what a learner sees, and fix whatever does not hold up.
Protecting your app: sign-in, learner progress, and your AI key
A language tutor holds three things worth protecting: each learner’s account and progress, whatever they typed while learning, and the key that pays for every reply. Here are the rules to follow before launching.
Use your backend’s built-in authentication
Sign-up, sign-in, sessions and password changes come from the authentication service attached to your database. Use it as it comes, because a language tutor gives you no reason to build identity logic of your own, and a hand-written version that is subtly wrong fails silently until somebody’s account is open to a stranger.
Ownership enforced in the database
The template ships 8 access policies over three tables, and the rule they enforce is the simplest possible: a profile, an activity record and a streak belong to one learner and nobody else reads or changes them. There are no roles, so everyone who signs in can do the same things, which is the right shape for a personal tutor and something to change deliberately if you add a teacher view.
Every tutor call requires a signed-in learner
The five functions that call the model refuse a caller without a valid session at the gate, so an anonymous visitor cannot spend your key by finding the address. The four that record activity and settings check the caller inside the function instead. Ask for the gate check on all nine, because an open AI endpoint is an invoice rather than a data leak.
A login is not a spending limit
The half this template leaves to you. Signing in decides whose practice spends your money, not how much of it. You want a log of every call, a quota per learner over a day or a month, and a hard stop that ends the lesson politely rather than an email that warns you afterwards. Treat an unmetered tutor as a security problem, because that is how it behaves.
Store the AI key server-side and say what leaves
The provider key lives in the function’s secrets and never in the app, where anyone could lift it. Then the part people skip: every sentence a learner types travels to your AI provider, and people practising a language write about their day, their work and their family. Say so to whoever signs in, and read your provider’s terms on what it does with what it receives.
The demo mode is a shell, on purpose
A visitor who chooses to continue without an account sees the dashboard and gets no tutor, no cards, no exercises and no streak, because every one of those would spend your key on somebody you cannot identify. If you want strangers to get a taste, give them a capped account rather than opening the functions.
Enable daily backups before real learners arrive
The free tier keeps no backups, so during the build your database is the only copy of every streak a learner has kept going. Daily backups kept for seven days start on Supabase Pro at $25/mo. Move to it before the first stranger signs up, because a lost streak is the one thing a learner will not forgive.
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.
Paste this before launch so Codex checks nobody can see data they shouldn’t.
One rule outranks everything above it: your database service key and your AI provider key belong on the server only, never in the app a learner downloads and never in a repository. If either escapes, treat it as compromised, check your provider’s usage page for what was spent with it, and replace it the same day.
What speeds the build, and what slows it
Speeds the build
- An AGENTS.md file at your project root: Codex reads it automatically before every task, so you never have to remind it
- Setting Codex’s permissions once for the session, instead of approving every small edit by hand
- Handing a long, well-scoped task to Codex cloud, so it keeps working in an isolated environment while you do something else
- Reviewing a diff in the IDE extension, next to the code it touched, before you keep it
Slows the build
- Leaving permissions wide open for a sensitive change instead of narrowing them for that one task
- Skipping the AGENTS.md file, so Codex starts each new task without your conventions loaded
- Handing Codex cloud a vague, open-ended task, where you can’t steer it mid-run the way you can in a live terminal session
- Merging a cloud task’s changes back in without reading the diff first
Git: what it is, and why you need it
Before you build anything, meet the one tool that makes building safe. You need no coding background for it: Git remembers every version of your project, so you can try things, break things, and get back to a working state in seconds.
What Git actually is
Git is a quiet recorder that runs alongside your project. Each time you save your work it keeps a full snapshot, so the entire history of your project lives on your computer, not just whatever the files look like right now.
Why you need it
Codex asks before it edits files or runs commands, unless you widen its permissions for the session. Once you do, Git is what makes that safe: there’s always a working version to return to, so you can hand it a bigger task without the fear of losing what already works.
A commit is a save point
Each commit is a snapshot with a short note, like “added the home page”. Make one after every working step and you can jump back to any of them later.
GitHub’s beginner guide to GitUndo anything, safely
If a change breaks something, you roll back to the last good commit instead of unpicking it by hand. It’s the safety net that keeps a Codex session low-risk even once you’ve widened its permissions.
GitHub is also where Codex can start from
Git lives on your computer. GitHub is a free, private cloud copy of the same project. Keep it private, and never commit secret keys or passwords. Once your project is pushed there, Codex cloud can pick up a task straight from a GitHub issue or repo, without you opening a terminal at all.
Create a free GitHub accountYou rarely type git commands
There’s little to memorize. Ask Codex to “commit this” or “undo the last change” and it runs the git steps for you, inside whatever permission boundary you’ve set. Prefer clicking to typing? The Codex extension for your editor shows each change next to the code it touched before you keep it, and GitHub Desktop gives you plain buttons for saving and rolling back.
Get CodexWhere to host your application
Hosting gives your app a home on the internet so anyone can open it via a web link. Choose a service below to make your site live. (Your database, logins, and business records are stored separately in Supabase, covered below).
| Host | Best for | Notes | Free tier |
|---|---|---|---|
| Vercel | One-click deploys | Publishes on every push once the repository is connected, and the template already ships the routing file that lets a bookmarked streak page open directly. Hobby is licensed for personal use only, and a tutor that students or staff sign in to is commercial by any reading, so it belongs on Pro at $20/user/mo. | Pro from $20/user/mo (Hobby is non-commercial) |
| Netlify | Drag-and-drop or Git | Link the repository, or drop the built folder onto the page and be live inside a minute. Say yes to the redirect rule it offers, because without it a learner’s bookmarked streak page lands on a not-found screen. | Free tier |
| Cloudflare Pages | Learners in more than one country | Served from the location nearest each learner, and people learning a language are rarely all in one country. The whole app is a small static folder, so the first screen arrives quickly even before the tutor has said a word. | Generous free tier |
| GitHub Pages | Not really this app | Publishes straight from a GitHub project after one routing change, and it is listed to be ruled out rather than chosen: the free tier requires a public repository, and this project sits beside function secrets nobody should be able to browse. | Free from a public repo only |
| Firebase Hosting | Teams already on Google | A short setup, then one command per release, with the deep-link rewrite declared in its own config file. Nothing about a language tutor argues for it, so choose it when your other accounts already live with Google. | Free Spark tier |
| AWS Amplify Hosting | Teams already on AWS | Publishes from the AWS console and wants the same rewrite rule as the others before a bookmarked page resolves. Pick it because your billing already lives on AWS, and for no other reason. | Free tier (build + hosting) |
| Surge | Publish from the terminal | A single command puts the built folder online with no repository involved, which is fine for showing a colleague the tutor and wrong the moment a real learner signs in and starts spending against your key. | Free - unlimited publishing |
| DigitalOcean App Platform | DigitalOcean users | Builds and serves from an account you already pay for, which for a small school or team means one supplier fewer beside your database and your AI provider. | Free - 3 static sites, 1 GB/mo transfer |
Choose on two things, neither of them speed. First, whether the plan permits commercial use, because Vercel’s Hobby tier does not and a tutor with paying learners is a business. Second, whether a bookmarked link to the streak page opens the app for a learner arriving cold, because their own progress is the page they bookmark. The tutor itself never touches the host: every reply comes from your database’s functions, and the host serves one small static folder.
The speaker button uses the visitor’s own browser voices, and a voice for the language may not exist on their device. The flashcards read a word aloud with whatever voices the browser and the operating system provide, so the accent varies from phone to phone and a language can come out in the wrong voice or not at all. Before you launch, press the speaker on every language you offer on a phone as well as a laptop, and decide what the button does when no voice is available rather than letting it silently do nothing.
Keep your data in Supabase
Learners, their activity and their streaks, plus the functions that call your AI provider, which is where the key belongs and the only place it should ever be.
| Service | Best for | Notes | Free tier |
|---|---|---|---|
| Supabase | Data, auth, and the tutor calls | Profiles, activity and streaks in Postgres, accounts from its auth service, and one edge function per AI job with the provider key in its secrets. Make a free project, hand over the URL and publishable key, and it is connected. Nothing large is stored, so the line to watch is not storage but the pause: a free project sleeps after a week without activity, and a learner who comes back on Monday finds a tutor that takes a moment to wake. | Free tier, then usage-based |
Add AI capabilities in one simple step
Securely route your AI API keys through a lightweight serverless function. Use simple prompts to automatically cap what each learner can spend, let them speak instead of type, place them at the right level, and schedule what they should review.
Log every call and put a ceiling on it
Nothing in the template records what the tutor was asked or what it cost, and nothing stops a learner from asking all day. Build this before anything else below, because everything below spends money too.
Add a calls table that records every model call (which learner, which activity, which model, how many tokens went in and came back, whether it succeeded, and a cost estimate) and write to it from every function that calls the provider, successful or not. Then add a ceiling: a limit per learner per day and a total across the whole app, both settings I can change without a deploy, checked inside the function before it contacts the provider and returning a friendly "you have reached today’s practice limit" rather than an error. Do not let the client send the limit or the cost, because both are read on the server. Then add a small usage panel in settings showing calls and estimated spend for the current period.
Let the learner speak instead of type
The tutor reads cards aloud today and cannot hear. Speaking is what most learners are actually afraid of, and the browser can listen for you, with the honest caveat that the recognition may use the platform’s own service rather than run on the device.
Add a microphone button to the chat and the exercises that uses the browser’s speech recognition to turn what the learner says in the target language into text, shows the transcript for them to correct before it is sent, and falls back to the text box in browsers that do not support recognition for that language. Then extend the tutor prompt so that when a message arrived by voice, the reply also comments briefly on any word the transcript suggests was mispronounced, without turning the lesson into a pronunciation drill.
Place the learner at the right level
A beginner and an intermediate learner get the same cards today unless they pick a difficulty themselves. A short placement conversation decides it for them, and the tutor adjusts as they improve.
Add a five-exchange placement conversation for a new learner in their target language, send the transcript to the ai function and ask for a level on a simple scale with a one-line reason, store it on the profile, and use it as the default difficulty for flashcards and exercises. Re-evaluate every twenty completed activities and tell the learner when their level changes, letting them override it.
Schedule what to review
Cards are generated fresh each time and nothing remembers which ones the learner got wrong. Saving them and bringing the hard ones back at the right interval is the difference between a game and a study tool.
Save every generated flashcard and exercise to the learner’s account with whether they got it right, then add a "Review" tab that schedules cards with spaced repetition: the ones they missed come back tomorrow, the ones they knew come back in a week, then a month. Ask the ai function to generate a fresh example sentence for each card on its review day so the same word is met in a new context, and show the learner how many cards are due today on the dashboard.
Each prompt above should pick whichever model tier fits the job: a fast, lower-cost model for high-volume work, and a stronger reasoning model for anything that weighs tradeoffs against each other. Codex’s model names change faster than this page does, so check OpenAI’s current model line-up (linked in the references below) before you build, rather than copying a name you saw once. Keep all of it behind that same ai function, so one key and one rule set covers every feature you add.
Get a head start with our template
Everything above starts from an empty folder, and it does not have to. The same tutor exists already built: the chat corrects, the cards and exercises generate, the dictionary answers and the streaks count, so your time goes on the languages, the tutor’s manner and the name on the door.
AI Language Tutor
The exact language tutor this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. Learn a language by chatting with an AI tutor that corrects you as you go, then practice until it sticks. Chat for real practice, look up meanings and translations, drill with flashcards and exercises, and keep a daily streak going.
The key benefits of starting with a template
The tutor chat, the drills, the dictionary and the streaks already work. Behind them, sign-in, the access rules, settings and a demo shell are done too. Read the security section above before you go live, because the ceiling on tutor calls is the one thing this template leaves to you.
Building the core from scratch
~94 hrs
Opening the template, already built
~1 hr
Pay Once, Own Forever. Build exactly what your team needs without renting a monthly SaaS subscription, paying per-seat fees, or dealing with platform lock-in.
A tutor that corrects, already prompted
The conversation function replies in the target language, marks the learner’s mistakes and carries the recent turns forward, and the reply renders as formatted text. Writing that prompt so it teaches rather than rewrites is the part a first attempt gets wrong, and it is done.
Drills generated for the level
Flashcards and fill-in-the-blank exercises come from the model for the chosen language and difficulty, with the cards read aloud by the browser. No deck to author before the first learner arrives.
A dictionary and translator in the lesson
Meaning and translation from the same dashboard, both directions, one tap to swap languages, each through its own function with the key held on the server.
Streaks with a history page
A streak per activity recorded when something is completed, counters on the dashboard, and a week view with charts on its own page, all in the database rather than in the browser.
Accounts, access rules and a demo shell
Email sign-in with a profile per learner, 8 access policies holding each learner to their own rows, settings and a password change, and a demo mode that shows the dashboard to a visitor without spending your key. There are no roles, so add a teacher view deliberately if you need one.
From founders who build on our templates
We needed a working product in front of users fast. I started from one of these templates instead of a blank repo, customized it in our AI tool, and shipped in days - not the weeks it usually takes.
Jeevan ThomasFounder & CEO, Hado.aiCommon questions
Cents, at the default model’s rates. A message and its corrected reply are a few hundred tokens, so twenty exchanges cost well under a cent, and a set of flashcards or exercises is about the same. The bill grows with practice rather than with sign-ups, which is why the first prompt in the AI section puts a ceiling on it: a learner who chats all day is the one case where cents add up.
Different, and honestly so. A course written by people and recorded by native speakers teaches a beginner more reliably than a generated deck. What the tutor does that a course cannot is read what the learner actually wrote and correct it, and practise a conversation the learner chooses. Most people who build this run it beside teaching, not instead of it.
The template ships six in a fixed list (Spanish, French, English, German, Mandarin and Japanese) and detects the learner’s native language from their browser. The model can tutor many more, and adding one is a line in the list, with the honest caveat that generated content in a language you do not speak needs a native speaker to check it.
Not as shipped. The flashcards read a word aloud using the visitor’s own browser voices, and the template has no microphone, recording or pronunciation scoring anywhere. Speaking practice is the second prompt in the AI section, built on the browser’s own speech recognition, and it is a real piece of work rather than a toggle.
Not in the template. A conversation lives in the tab and is gone when it closes, which keeps the database tiny and means you hold nothing a learner typed. Saving conversations so a learner can pick up where they left off is a decision above, and it makes you the keeper of everything they said while learning.
No. Describe what you need in plain language and your AI coding tool writes the tables, the accounts, the access rules and the functions that call the model. Your own job is creating a free Supabase project for it to point at and putting your AI key in its secrets, so the records and the key end up somewhere you own.
Less than a course subscription for anything above a handful of learners, because the price per learner is missing. What is left is Supabase and a host, both starting free, with Supabase Pro from $25/mo once real people sign in and you want backups and no pause, plus the model bill on your own key, which runs to cents per lesson.
Only that learner. Every profile, activity record and streak belongs to one account and the database enforces it on every query rather than trusting the screen to filter. There are no roles as shipped, so a teacher who wants to see their students’ streaks is a feature to design rather than a setting to switch on.
They can see it. The template’s demo mode shows the dashboard to a visitor without an account and gives them no tutor, no cards and no streak, because every one of those would spend your key on somebody you cannot identify. If you want strangers to get a few real exchanges, give them a capped account instead.
As shipped, only their patience. Every model call requires a signed-in learner, so strangers cannot spend your key, but nothing caps how much a learner may ask. The first prompt in the AI section adds a log of every call and a limit per learner per day, and this guide treats it as part of the build rather than an option.
Nothing here is proprietary. Learners, activity and streaks live in ordinary PostgreSQL, so a standard dump gives you everything in a form any Postgres host accepts, and the tutor prompts are plain text in the functions.
Yes. Every host here connects a custom domain with free HTTPS in a few clicks. Worth doing before you invite anyone, because a tutor students sign in to every day should look like it belongs to you.
No, though you will type the occasional command: installing Codex, starting the app, applying a database change. The setup section above lists what you need, with a link for each, and once it’s on your machine Codex runs most of those commands for you.
A regular ChatGPT chat can sketch ideas and write snippets, but it isn’t working on your actual project. Codex reads and edits the real files on your computer. The app you get out of it is one you can run and publish, not a preview.
On a ChatGPT plan, Codex’s usage resets on a rolling window rather than billing per token, so a heavy day of building can bump into a limit. You either wait for it to reset, move up a plan, or switch to pay-as-you-go API billing for the rest of the session. Nothing you’ve already built is lost either way, so the work only pauses.
References
Sources checked September 2026- 01Pricing (monthly and yearly, all 25 languages), Rosetta Stone. rosettastone.com
- 02Pricing (individual and family plans), Mango Languages. mangolanguages.com
- 03Pricing (monthly, 6-month and 12-month plans), Ling. ling-app.com
- 04Premium pricing (monthly, yearly and lifetime), Drops. languagedrops.com
- 05API pricing (per-token rates for the default tutor model), OpenAI. developers.openai.com
- 06Web Speech API (speech synthesis and recognition in the browser), MDN. developer.mozilla.org
- 07Pricing (Pro plan, pause, backups), Supabase. supabase.com
- 08Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
- 09Row Level Security, Supabase docs. supabase.com
- 10Pricing (plans, usage limits), ChatGPT docs. learn.chatgpt.com
- 11Codex CLI, ChatGPT docs. learn.chatgpt.com
- 12IDE extension, ChatGPT docs. learn.chatgpt.com
- 13ChatGPT desktop app, ChatGPT docs. learn.chatgpt.com
- 14Codex cloud, ChatGPT docs. learn.chatgpt.com
- 15AGENTS.md, ChatGPT docs. learn.chatgpt.com
This guide is general information. Third-party prices, plan limits and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. What a generated lesson costs depends on your provider’s current rates and how much your learners practise, so treat any cost expectation here as a starting point to measure rather than a specification. Build hours and the cost estimates derived from them are our own estimates, not quotes. Codex, ChatGPT, and the OpenAI API are products of OpenAI. Verify current capabilities and pricing before relying on them.