I have always loved a diverse vocabulary, from vividly descriptive scenes in books and eloquent deliveries of motions within a debate to the more malicious usage of language through argumental obscurantism and the appeal to authority fallacy. The irony of being both dyslexic and a painfully slow reader of complex literature with a love of vocabulary is not lost on me. With age, I have noticed a slump in the expansion of my diction, so my learning methods are clearly not working!
Having always wanted to try and build an app, I thought focusing on expanding my vocabulary would be a nice well contained project to start with, defining these more advanced words somewhat pretentiously as ‘D1’ level, by the colloquial European language definitions (A1-C2) – aka, beyond native speaker, or to use the Japanese martial arts/sporting grading system First Dan level.
So, let’s get into it. I began with a rough idea of what I wanted, with a self-contained Progressive Web App being the most reasonable implementation to avoid app development languages and the dreaded app stores, with the added bonus that I could develop for Apple and android simultaneously.
To actually develop the thing, I began construction utilising AntiGravity in agentic mode (I am a python guy…you didn’t think I was going to learn JavaScript for this, did you?). Skipping over a lot of the waffle during the development process I will talk through the app and a few of the neat features (at least, as they currently stand).
The app’s features
I began with ** learning pannel** to make assist in the learning of these words:

This gives a pool of words from lists that have been selected for learning and presented in a flashcard style. Alternative linguistic forms of the word are also shown when relevant, and the card can be flipped by tapping to reveal the definition. I went for a ‘Tinder’ style swiping interface, where if you know the word, you can right swipe to remove it from the pool and left swipe to keep it in the pool, but go to another word. You can toggle the word lists in this panel with the dropdown.
We add a word list panel:

This lets you mange new words and current words into thorough lists. We can filter by list, sort by various word metrics (we will come back to these) and add words as favourites here – automatically updating them to the favourites list.

I then made a challenge section to gamify the using of words each week. Word lists are selected (like in the learning section), a random ten words are then chosen (weighting less frequently used words on the first selection), and then when happy you can lock in the challenge. You can no longer change the words, but now you can add to the usage for the rest of the week. There is also a favourites tab for the curation of words that you can always add to the usage of.
Finally, I added a stats tab, for tracking long term statistics.

I also added a profile section for controlling what words go into the learning and challenge tabs. There is also an updating words-list function that appears when I push more word lists – I have already provided quite a few words. Finally, if word lists are not selected, I provide two levels of reasonable words to get started with.

Technical features:
Metrics:
To give some indication as to how useful any word or phrase is, I include four metrics. These are only present for words I add to the app – not user added words. When a word is used, we trigger a request to the google Ngrams API to see the usage of said word over various periods of time. We construct the metrics ‘topicality’, ‘use’ and ‘utility’ by taking the use of these words over various periods of time, normalising to the word ‘vocabulary’ over that same time period, scaling with a logarithm and then capping between 0-5. Momentum is simply the ratio of the words usage from 2010-2019 to 2000-2009, with a positive number indicating a more relevant word.

Dictionary:
I then added a dictionary function for checking definitions of words. I used a GCIDE Dictionary Integration - a fairly comprehensive dictionary - that provides built definitions for the user to add new words with ease. There were a few trade-offs to consider with using an offline dictionary, so it is not always the most comprehensive, but is fast, simple, free to use and working.
And thats it (for now), I hope you can enjoy it!