tldr: I made a personalized app for studying spanish using LLMs/AI/Claude. There’s video at the end of the post.
I’ve often been building single-use apps with Claude Artifacts when I’m helping my children learn. For example here’s one on visualizing fractions. […] What’s more surprising is that it is far easier to create an app on-demand than searching for an app in the app store that will do what I’m looking for. Searching for kids’ learning apps is typically a nails-on-chalkboard painful experience because 95% of them are addictive garbage. And even if I find something usable, it can’t match the fact that I can tell Claude what I want.
This tweet from Arvind Narayanan (which came to my inbox via Simon Willison) is very similar to my personal experience with LLMs and Claude Artifacts in my study of Spanish.
Miguel and I wrote inContext - which, if you aren’t familiar, is a browser extension for learning another language that provides context-informed definitions of words in the language you’re learning - which uses AI in its core for processing the context and definitions.
Still, I’ve found that in my own language studies, I want something even more specific and personalized, and what I want can change from day to day.
Last night, after my Spanish class, I put all the words I didn’t know into a spreadsheet. I first used Claude to generate definitions and example sentences for each word, which I did manually. Then, I pasted the spreadsheet into Claude, wrote the prompt, and copied the resulting spreadsheet with the words, definitions, and example sentences.
Next, like Narayanan, I asked Claude to build me a flashcard app (just HTML/CSS/JS in a single file) that would show me flashcards of the words. After two to three back-and-forths with Claude, I got the flashcard app working.
I told Claude that instead of hard-coding the flashcard data, we’re going to load it from a CSV at a URL, and I loaded the data from Google Sheets directly using the technique I wrote up a few weeks ago.
I worked through the flashcards, and after a while, I realized I wanted more.
So I went back to Claude, pasted in my CSV of words, and asked it to “Generate CCQs for testing a Spanish learner’s understanding of the words and concepts above. Output as a CSV with the columns Question,Answer,WordBeingStudied.” I took the outputted CSV and put it into Google Sheets.
Those columns had effectively the same schema as the flashcards, so I changed the app to point to the new spreadsheet, and voila, I was now answering questions about the flashcards. To give an example in English, let’s say one of my flashcard words was “lying.” Then, the corresponding question generated by Claude was, “If you lie, are you being honest or dishonest?”.
I still wanted more, so I told Claude to generate 100 more questions based on similar words and concepts for a language learner. And, of course, Claude abided. I did the same thing: put the CSV up on Google Sheets, loaded the flashcard HTML, and started working through them.
I felt like Goldilocks eating the soup that was just right. The flashcards were doable but challenging, with about 5% to 10% of the vocab being new. I used inContext to seamlessly look up the words I didn’t know right on the flashcards!
That was last night. I woke up this morning and thought, “I could turn into a little, re-useable app, but I’m not sure I want to.” Part of the magic was the quick and fast generation, the way that my learning needs and interests were met just as I needed them.