Expat Mode: how I update my language‑learning bot in a state of total uncertainty
Explore how I developed a Telegram bot to enhance my language learning journey amid uncertainty. Discover the innovative "Expat Mode," designed to balance learning between English and Spanish, automating decisions to keep progress steady and engaging.
This is a build in public style note.
For the past month, I’ve been actively developing a Telegram bot for language learning — primarily for myself.
Before this, I rarely talked about it publicly. In fact, I had mostly stopped sharing anything publicly at all.
Now the project has gained an important new feature — Expat Mode.
This article is about:
- how I live in uncertainty and why I came back to language learning at all
- how the bot decides by itself which language to study — English or Spanish
- and which product decisions I made along the way
Life in uncertainty and why I came back to languages
In recent years I’ve basically lived in a state of constant uncertainty: country, work, money, health, plans — everything is up in the air.
To realistically compete for normal roles, I need English and Spanish at a confident working level.
But in reality I was doing everything except learning languages:
- attending courses
- coding and building my own projects
- launching various work and career hypotheses
- following local advice and going to different activities
- trying to get a foothold in this new environment
It was a mode of: “I’m doing a lot of things, but I have no idea which of them actually moves the needle.”
None of the hypotheses obviously “took off”. Maybe there is some compounding effect running in the background, but it is very hard to lean on that.
ATS filters me out right away, I do not have a master’s degree.
Recently I calmed down, stopped “flailing around”, accepted my situation, decided to let things be — and tried to align what I want with what I need:
If languages are one of the basic levers, it is time to stop treating them as an afterthought and start working on them systematically.
Spanish is around B2.1, English somewhere between intermediate and upper‑intermediate.
Yesterday I decided to add a new layer on top of the bot — to rebuild a couple of modules for my current expat context and to add a mode that would take some learning decisions off my plate. That is how Expat Mode appeared.

What Expat Mode is
Expat Mode is a mode inside the bot for people who:
- are not native speakers of Romance languages
- live in a new country
- are pulling two languages at once (in my case, English and Spanish)
- do not want to decide every day: “What should I study today?”
The core idea:
The bot balances your learning across the two languages. You press one button — and it decides what is more beneficial to study right now.
What it looks like for the user:
- there is a single button — “learn”
- the engine itself chooses the language: English or Spanish
- when Expat Mode is turned on, the system makes sure that one language does not completely “eat up” the other’s attention
The philosophy is simple:
- In a phase of active growth, what matters is balancing effort between languages.
- When both languages are already at a solid level, you need a different mode — more about review and polishing.
My current focus is exactly this active growth phase.
How I arrived at this decision
Before Expat Mode I was oscillating between two approaches:
- Keep the languages at the same level.
- Balance effort in the growth phase.
I chose the second option.
The product hypothesis behind Expat Mode was:
If you automate language choice based on effort balance, a person can study longer, burn out less, and is more likely not to abandon the second language.
Before actually building the bot, I:
- ran 11+ research sessions via Claude Research
- separately tested ideas in Perplexity Lab
This helped me shape a clear enough understanding for what Expat Mode should be. I did some cross‑work between the Opus model in Claude Code and Perplexity Lab.
Next comes more about these systems — but without academic overload.
The key systems inside the bot

1. FSRS: when to review
FSRS (Free Spaced Repetition Scheduler) is an improved spaced‑repetition system.
In classic SM‑2 the intervals are predefined. FSRS instead:
- evaluates how reliably you remember each piece of material
- takes into account how much time has passed since the last review
- adjusts intervals to a specific user
Subjectively it feels like this:
- what you remember well appears less often
- what starts to slip appears more often — at just the right moment
For myself I summed it up in one rule:
Do not torture with what is already firmly in your head, and do not let go of what is starting to fall apart.

2. Ghost Review: how not to lock in mistakes
The second system is Ghost Review.
It exists to keep typical mistakes from turning into your “new normal.”
The mechanics:
- if you make the same mistake twice in a row on a single concept
- Ghost Review mode kicks in
- the bot intentionally brings that concept back soon:
The idea is simple:
Do not let your brain cement the wrong pattern.
From the outside it feels like a stubborn example that “hangs around” in your learning flow until you finally get it right.

3. Language concepts: not words, but building blocks
The third important part is how the bot understands what exactly to teach and review.
For this I use the vector database Qdrant, and I introduced a working unit for myself: a “language concept.”
Strictly speaking, linguistics may not use exactly this term in this way. But for AI and for this product solution I needed a simple building block:
A concept is a small stable element of the language: a rule, a structure, sometimes an idiom or a common phrase pattern.
It is more than just a “word.” It can be:
- tenses and their actual usage
- typical sentence‑building patterns
- stable constructions
On paper you can easily count 2,000–4,000–9,000 such concepts and more.
But that road leads to endless language modeling.
So in the first version of the bot I built in around 900 base concepts for English and Spanish, and for Expat Mode:
- that is enough to cover the foundation
- and still small enough that you can realistically push everything through the system without drowning in architecture
The hardest part: cross‑linguistic hints
One of the most ambitious ideas is cross‑linguistic hints.
Scenario:
- you are learning some concept in English
- the bot shows you a similar construction in Spanish (or vice versa)
- you see that the languages share common patterns, not just “vocabulary lists and grammar rules from a textbook”
Example:
- you are learning Past Simple in English
- the bot shows Pretérito Indefinido in Spanish
- you notice the shared pattern and grasp the idea faster
When this hits the mark, the effect is very pleasant:
If you already have experience in at least one language, these comparisons can speed up understanding 2–3x.
The honest status of this part:
- technically it currently works unstably
- on fast models the AI does not always pick good pairs of constructions
- right now it is more of a hack that does not fully fit the bot’s architecture
- and for people starting both languages almost from scratch this is a separate story altogether — they need a different hint design
At the moment Expat Mode is in active experiment territory here.
I am testing different pairing strategies and watching where they actually help and where they just add noise.
Does the system work right now?
In short — this is a working prototype, not a finished product.
What is already there:
- The bot tracks effort points — approximate “effort scores” for each language.
- If your last string of sessions was only in English,
- In terms of UX, right now it works like this:
What is still in progress:
- improving the cross‑linguistic hints
- fine‑tuning the balancing algorithm
- testing with real people: does this mode overwhelm them, and does it actually help them not quit?
For myself I call the current version v0:
- the core of balancing and reviewing works
- Ghost Review and FSRS are integrated
- but there are still several iteration loops ahead before I invite “external” users in
What I learned from this experiment
The main takeaway, more important to me than any formulas or architecture:
Whenever you can, build tools for yourself.
You can read other people’s success stories, look at popular apps, argue about methodologies.
But in practice:
- everyone has a different context
- a different amount of energy
- different constraints
Someone’s perfect Anki setup may not work for you.
Someone’s “just watch shows in the original language” also may not.
My path right now is a bot with automatic balancing of two languages, FSRS, Ghost Review, and experiments with cross‑language hints.
For you it might be something completely different:
simple flashcards, a notebook, a Notion table.
It does not really matter how “elegant” it looks from the outside.
What matters is that your tool:
- helps you move forward
- reduces chaos
- and gives you the sense that even in a state of uncertainty, you are not standing still.