The models are absolutely flying. Claude Code with Opus 5.5 has been another step-change improvement in the experience of programming—full stop. Adding features to any software project now involves a quick back-and-forth about an idea, followed by a short wait while the model delivers a working implementation. The models explore the codebase, propose architectures, adapt to suggestions, write the code, test the feature, and fix any issues. Then I validate it and it works. (Usually.)
There is nuance here: the models are not perfect. In really big projects, they sometimes miss things. Their solutions can get too specific if you are not careful. But they are undeniably changing the experience of programming.
And what am I doing with these powers? Among other things, I’m slicing and dicing through the backlog of tasks I have for inContext.
inContext is a language learning app built around the concept of making learning engaging through personalized content. It leverages language models to serve as an on-demand graded reader, generating a tailored mini-essay with corresponding questions and flashcards. Tailored because it adapts to the user’s topic and language level, but also because it can weave in vocab the user has struggled with in the past.
As an example of the fun things you can use as content, my notebook yesterday in Catalan came from a movie review of You Can See Everything. The other day I did one from a newspaper article on the recent criticisms of Alpha School. You could make one using your favorite podcast transcript. Or, a blog post.
Alex Ledger and I haven’t added much to inContext since we launched the first version in early 2025. Since then, we’ve had 500+ unique users and quite a bit of feedback. Not bad for an app we built with only a little help from Sonnet 3.5. But now, armed with Opus 5.5 and a wide-open weekend, it was time to make a few upgrades.
Here are some of the changes I’ve made with Claude Code at my side:
Added audio:
Previously, generating audio took over a minute and sometimes timed out. Now we split the reference text into five chunks, generate a separate audio file for each one in parallel, then stitch them together. It now takes… about one-fifth as long.
I updated to Gemini 3.8 Flash TTS for generating audio, which worked well in testing in a variety of languages.
For now, audio loads automatically. The cost of generating audio is about 20x the cost of generating all of the text in a notebook (content, questions, and vocab), so I might switch this to opt-in at some point.
No audio for the News section.

Improved quality of questions:
I got some feedback that the questions were too easy to “pattern match,” and that two answer choices weren’t enough. Questions are now harder to game and there’s a third answer choice.
They now generate in the background while the user reads the main content, they should be ready by the time the user finishes the text.

We Choose (story on a random topic) is now better at incorporating users’ unreviewed vocab naturally.
This is a trick I’ve been using in a lot of LLM workflows.
LLMs are often influenced too much by small details in the prompt, so having a very fast filtering LLM run before the main task can help mitigate this drift.
In this case, an LLM needs to write a story and incorporate relevant vocab from a list of words the user has historically struggled with. This list can be quite large and can distract the LLM from writing a good story. (It often shoehorns irrelevant words in awkward ways.)
So I added a smaller LLM that filters the list down to vocabulary relevant to the story’s topic. This curated list is then fed into the prompt that generates the story.
By switching reasoning off and severely restricting output tokens, I can generally get this filtering step down to about a second. This second buys more natural vocabulary usage.
Changes to Notebook History:
Added a streak counter.
Go back and review notebooks completed on specific days.

Revamped news section:
The old version sometimes failed, and often linked to too many sources.
It’s been simplified and now links to fewer but more relevant articles in the target language, they can be explored those in more detail if interested.

Upgraded the AI models that generate the content:
Our evals show that content quality has significantly improved with newer models.
Content should generate faster as well!
I also made some behind-the-scenes improvements:
Built the aforementioned comprehensive eval system that compares the quality of passages generated using different models.
I added a limit of 5 notebooks per 24-hour period.
After that, users will get a warning that tells them to come back in X hours.
(Making sure that one very enthusiastic user won’t run up a huge bill and bankrupt me.)
And on that note… I added a “support inContext” button!
If you’ve found it useful, you should consider pitching in a few dollars to help keep it running :)
One thing I’d like to do is seamlessly incorporate inContext Dictionary into the notebooks. inContext Dictionary is a Chrome extension that acts like a fast dictionary tool, giving users reading the web contextualized definitions of selected words. Simple definitions in the reader’s target language act as additional free context, allowing readers to stay in the language and work through words that might otherwise trip them up. For now we are supporting the Chrome extension, but it would be nice to have this as a fully integrated built-in feature.
I’d also like to make an app version of inContext. It’s already pretty smooth in the browser but there’s really nothing like a dedicated phone app with a simple UI. But pasting a full article’s text on mobile is clunky at best, so You Choose (story generated from user selected content) would need an automated way to fetch the content. This has been quite hard in the past to get working reliably.
Better integration with Anki or other flashcard apps could also be a good direction. More sophisticated tracking of underlying vocab (including adding FSRS) would optimize the use of vocab in flashcards and in We Choose stories.
Got any other ideas? I’d love to hear them!
