This looks really good. I wish I had had something like this many years ago when I was studying languages.
Somebody has already suggested adding spaced repetition and audio, which I agree with completely.
One more suggestion: In addition to having the LLM give you the meaning and example for the context in which you originally saw the word, also ask it to provide the word’s other main meanings and examples of it being used in those senses. You might encounter a word first in a slang or technical sense; while it’s useful to learn that meaning, it’s also important to learn other, more common meanings.
Below are some examples of words you might encounter first in technical contexts but would also be worth knowing in their more general meanings. (Examples suggested and defined by ChatGPT o1.)
canonical
Religious/General: Relating to a canon (e.g., church law) or a recognized body of works.
Math/Computing: Conforming to a standard or simplest form (e.g., “canonical form” of an equation).
resolution
General: A firm decision or determination (often heard in “New Year’s resolution”).
Tech/Imaging: The detail an image holds, typically measured in pixels, dots per inch (DPI), etc.
protocol
Diplomatic/General: The official procedure or set of rules governing state or ceremonial events.
Computing: A set of conventions and rules for transmitting data between electronic devices.
flux
General: Continuous movement or change, often implying instability.
Physics/Engineering: The amount of some quantity (e.g., heat, magnetism) passing through a given area over time.
Great work, I had a similar need, and built a similar app (using podcasts) [1]
I originally planned to add some kind of SRS to it, but I found that I learned much better just reading things in context instead of explicitly using SRS to memorize them. Steve Kaufmann (creator of LingQ) explains this better here [2]
Here's a list of all the apps (built by them!) mentioned in comments:
- LangTurbo (by @sebnun) - langturbo.com : Learn through podcasts with transcriptions and contextual word definitions
- Nuenki (by @Alex-Programs) - nuenki.app : Browser extension that translates appropriate-difficulty sentences across websites, with hover-for-definitions feature
- Manabi Reader (by @wahnfrieden) - reader.manabi.io : Japanese-focused integrated reader with SRS and Anki integration
- (by @muth02446) - Spanish: appicenter.net/Apps/VocabES/ - English: appicenter.net/Apps/VocabEN/ : Uses spaced repetition and audio for basic vocabulary learning
- Vocabuo (by @kebsup) - vocabuo.com : Combines SRS flashcards with ebook/YouTube/website reader, using AI for content generation
- LingoStories (by @laurentlb) - github.com/laurentlb/lingostories/ : Open-source language learning tool
- Turkish Learning Tool (by @learning-tr) : Browser extension for colloquial translations with audio and pronunciation features
- Language Reactor (by @davidzweig) : Planning to open-source soon, looking for contributors
Note: above list is summarized by Claude 3.5 Sonnet.
Thank you so much to everyone contributing to this thread! I learned a lot here just by sharing this - the power of open source, I guess! From all those conversations and recommendations, I've gathered a list of features that will hopefully be built in next coming days:
- A more user-friendly approach to running the app
- LiteLLM integration so we can use any LLM (it's done! thanks to @enessusan00!)
- Running the database locally
- Customizable language preferences (e.g., learning German through Turkish)
- A live version where anyone can easily try the app
- A protection mechanism for LLM responses to ensure getting valid JSON
- Fixing small bugs
- Customizable exercise types (ability to enable/disable specific question formats)
We'll be focusing on improving the app as much as we can, but help would be greatly appreciated! We'll be structuring the repository to make it easier for everyone to contribute together.
I'm truly amazed by all the insights and suggestions shared here. There are so many great ideas. Thank you all again for making this discussion so enriching and the support. I'll keep sharing updates here! All amazing suggestions shared here will be added to the roadmap in the README!
Made something similar for Basic Vocabulary (Spanish and English so far):
* https://www.appicenter.net/Apps/VocabES/ * https://www.appicenter.net/Apps/VocabEN/
Uses Spaced Repetition and Audio but is not personalized which is less of an issue for basic words. The hard part is getting good example sentences and "cross links". I had though about use AI for that but have not followed through.
Great app! I've been building something similar, but for less advanced language learners, who wouldn't understand definitions in their target language.
My app [1] is basically a combination of SRS flashcards with an ebook/YouTube/Website reader. Unlike Anki though, AI creates example sentences, definitions, images and audio.
I find it interesting that you want to get inspired by Duolingo. My approach is to have the most efficient grind possible - no gamification. I've found Duolingo was wasting so much of my time with exercises that did not really teach me anything and took a long time to complete + the XP points/levels etc. were quite distracting.
Interesting approach! Thanks for making it open-source, I think we need more open-language language learning tools. As I'm also building one (https://github.com/laurentlb/lingostories/), I'm going to take a look at what you did and the technical decisions.
You seem to focus on the English use-case. In my experience, getting exposure to other languages can be much more difficult, especially when you're not fluent yet. It would be interesting to see how to approach it: ideally, questions and answers should be in the target language, but the questions have to be very simple.
As someone else mentioned, having audio would be very useful. At some point, you could consider a hand-free mode: it reads the question out loud, pauses a few seconds, then tells the response.
Is there a "Duolingo" that takes a web site as input and makes it into a course? So I could learn by reading e.g. a geeky news site in the language to be learned.
This looks neat. If you’re going to add Duolingo style features, please don’t add fill-in-the-blank or word matching to the question types; or at least make them optional. They are an incredibly frustrating waste of time on Duolingo—they take up a ton of time to solve and don’t actually improve comprehension. My biggest gripe with Duolingo is that half of the questions asked in a lesson are questions like these which have the pretense of helping you learn but don’t actually deliver. I think if you instead came up with some very difficult question types that really challenged someone’s comprehension, it would be stickier than Duolingo (especially for the HN crowd who is actually trying to learn) and not just here to “play a game” like a large portion of the Duolingo audience.
Thank you for your contribution to the FOSS learning space.
Here's a few random suggestions: - spaced repetition. Again, anki style. - audio. Can you make it easy to record a phrase, anki style? Or maybe even make AI pronounce them correctly?
I would something like that.
This is absolutely amazing. Can I check how do you check the memorized retention? Are you increasing the period of testing a word once it's successfully memorized by doubles, in 1day, in 2days, in 4days, 8days, etc.?
As someone who's learning a language (french) with Duolingo, and also supplementing that with other methods (podcasts, social media, online chatting, talking to chatgpt) I've also really wanted a way to get duolingo type experience with my own set of vocabulary that I encounter. So i'll definitely check this out. Also your english is impressive!
This is nice! (100th star I pressed!) I'd like to try it, but the setup was a pain, it would be nice to have a button to deploy immediately to Vercel and Supabase! ref: https://vercel.com/docs/deployments/deploy-button
From my research, the best language learning program is Anki. It is open source and one can make custom 'decks' fairly simply. Perhaps a dictionary add-on for Anki would be good idea?
Apologies if this answered in the readme but does this support other languages than English?
Some thoughts
I'm on a Duolingo family plan, studying Ukrainian. It keeps throwing more and more difficult words without really building my knowledge and experience with the previous words.
I'm not sure if I can't hear the words correctly (it's possible, I'm partially deaf and it sounds like the voices it provides are low quality). I'm not sure if I'm not pronouncing them correctly (it often doesn't accept my pronunciations). Its feedback for improvement is extremely limited. For example, no matter how hard or slow or fast I pronounce it, it pretty much never accepts один ("oden" = "one") when I speak it.
When I was in 3rd through 6th grade of school, I learned English pronunciations using Spalding phonetics [0]. There are about 70 or so English phonemes if I recall. It would be handy to have that for other languages. It specifically taught how to put letters together to form sounds, and which combinations of letters are synonymous for sounds (but not for spelling, which was a separate class based much more on memorization of rules and exceptions). I excelled in both of these classes.
I've also sometimes asked ChatGPT for translations of words. It seems semi-OK. But it's much better to ask Ukrainian friends and colleagues. Friends and colleagues don't have a lot of time or patience to teach though. And they'd often throw additional meaning or context that was difficult to understand (for example, English has much less assignment of gender to words).
Not too much later in life (8th grade or so), I started writing software. I was homeschooled then, and had a lot of time on my hands. So I'd write software for most of the day every day for months at a time. There came a point where I stopped thinking in English and started thinking in objects and code relationships. I didn't realize it until my mother asked me what I was doing and I had to think to translate to English.
I've heard similar anecdotes: you start to become a native speaker when you can think in that language. I want that from Duolingo but haven't yet achieved it after 2.5 years. I imagine what's missing is just as @cat_multiverse said [1]: I don't really use the Ukrainian language in my daily life and should just start doing so even if it's just a journal. But without any feedback about correct pronunciation or grammar I worry that I would end up with my own mini language instead of truly a Ukrainian one.
[dead]
Hey there, quick suggestion as a PhD Linguistics candidate and avid language learner!
The best way I've found to identify vocabulary most important to my life is through journaling in the language I'm trying to learn. Describing exactly what I did that day, my thoughts, etc, as best I can.
I had thought of doing the journal entries digitally and gathering dictionary headwords from such journal entries, whether they're written in my mother tongue (English) or not, and use the built dictionary lists to drill vocab.
Traditionally you'd use a lemmatizer with a morphosyntactic tagger for the language to identify the dictionary words, but AI is serviceable these days to easily identify dictionary words from long-form text in many languages, though honestly would be surprised if AI outperforms the traditional methods already.
Good luck and have fun :)