Today I have a placement test for SFI. When I had my enrolment call, the woman on the phone asked how long I had lived in Sweden and I said seven months. Then she asked how come I speak Swedish so well. I felt really flattered. The truth is that I only started accelerating my learning when I moved here and forbade myself from using any English. What's the magic trick to unlock language fluency? Oh well, this is something teachers and learners have been asking forever. For me it's been a combination of motivation, repetition, and not being scared of making a fool of myself.
Last week I started vibe coding an app to learn Swedish words for beginners. I wanted to understand what goes into building a vocabulary tool from scratch. What data do you need? How do you decide what to teach first? How do you make it stick?
The first thing you need to teach vocabulary is a vocabulary list, not just any list, but one that is ranked by how useful each word actually is.
Luckily, there is a dataset called the Kelly Corpus, maintained by Språkbanken at the University of Gothenburg. All my love to you!! It contains the most frequent and useful Swedish words, tagged by CEFR level. The corpus is a big XML file. Each word has a frequency score, a part of speech, and a CEFR level. What it does not have is English translations :(
It wasn't the first time I encountered this problem. At least this time I only had a pair of languages (SWE–EN) and my beloved Kelly Corpus. Then I found a Swedish lexical database called SALDO.
Rather than manually translating 100 words (boooring) or trying to join two databases (there are mysteries in the universe not worth knowing), I used Claude in two ways.
First, to help me vibe code the actual app. I described what I wanted: flashcards, a quiz mode, a typing exercise, and Claude generated the code. I am not a developer. I know enough to read code and understand what it does, but I would not have written this from scratch.
Second, the app itself uses Claude at runtime. When you are studying a word and want to see it in context, you can tap "show example sentence" and Claude generates a simple A1-level Swedish sentence on the spot. That is much more useful than a static example, because it tailors the sentence to the word you are actually looking at. This is the magic of creating content using AI, it accelerates content creation, but the pedagogical decisions are still made by you, my linguist friend.
Rather than just feeling like it works, spaced repetition actually works. You review a word right before you are about to forget it. Review it successfully and the next review is scheduled further in the future. Struggle with it and it comes back sooner.
The algorithm I used is called SM-2, the same one behind Anki (the beloved flashcard app for memorising vocab). After each card you rate yourself: I knew it or not yet, and the app calculates when to show it to you again.
The app starts you with 10 cards per session. Cognitive load is real, and trying to learn too much at once is the fastest road to quitting learning a language.
My app runs entirely in one HTML file, no frameworks to install, no build process. Just a file I uploaded to my Raspberry Pi (yes, this website runs on a Raspberry Pi sitting in a cupboard behind my girls' dress-up stuff, so I like to say it runs on unicorn magic and fairy dust) using a single terminal command. Write a file, copy a file, it is ALIVE!
If you want to try it, the trainer is here:
And if you are building something similar, I would love to hear about it. Email me.