A new language learning tool

Time for a new side project

Like many full-time software developers, I have a hard time putting my tools down at the end of the workday. I just want to keep building!

I've got another hobby besides code: learning languages! I find that I'm missing a specific tool to help me stay organized. So I'm going to build that tool, and while I'm at it, scratch an itch to learn some new technologies and improve existing skills.

To top it off, I decided to do all this building and learning in public. Thanks to swyx for inspiring me to do this.

Problem statement

The rest of this post is going to read like an informal requirements document. I'm going to describe what my problem is, and how I'm going to solve it with the software that I'll write.

Lots of free resources are out there...

For any language learner, there are a ton of free resources out there to hear your language of study being spoken. It's important to listen all of the time to acquire your language, and I've got loads of links to YouTube channels, podcasts, and other stuff so I can listen at my level and get all the practice I can.

... but there's so much, I'm a little overwhelmed

There are so many videos and podcasts to listen to, I'm having trouble keeping track of:

I need a way to keep it all straight!

I need an assistant

I need an executive assistant to go and get all the content I want to listen to, suggest to me four or five things at a time, remember what I've heard (and how much I liked it), keep track of what I might want to hear again, or what I'm not quite ready for now but might be in a month, and generally upload all of it out of my brain (which is already too crowded!)

But executive assistants are expensive, so I'll build myself a free one!

The StudyPuck

Not the hockey kind of "puck", though. In Shakespeare's "Midsummer Night's Dream", the fairy king Oberon has a high-energy servant named Puck who spends the whole play running back and forth and doing jobs for him.

PUCK: I'll put a girdle round the earth in forty minutes!

Instead of dispensing sketchy love potions, my "Study Puck" will fetch me things to listen to. He'll receive feedback and advice and bring more targeted material the next time. He'll keep track of it all so I don't have to worry about it.

Is there already a tool out there for this?

I've considered a few other tools out there that might give me this capability, and so far haven't found exactly what I need.

YouTube?

YouTube's algorithms do keep track of what you've watched and suggest more of the same content. But:

All-inclusive video aggregators?

Products like Zero to Hero do aggregate and present lots of videos in languages I want to learn. But:

Flashcards?

I use Anki to keep track of flashcards and I love its spaced repetition algorithms. But:

And anyway, I want to build something!

Part of my motivation here is I want to build something with code and learn some tech! Enough said.

Architecture

So how to build StudyPuck? I want some very specific things here.

Free or vanishingly cheap

For this side project, I don't want to spend much money. Or any money if I can help it. There are generous free tier platforms for developers out there, and my goal is to stay well within the free tier, and run my app indefinitely.

Simple to manage

I don't want a lot of management overhead here, so:

Build it out of stuff I want to learn

Finally, the side benefit of tech learning goals. Here's what I hope to learn more about while building StudyPuck:

Front-end vanilla web development

For the last several years I've focused on back-end development. While I was gone, something amazing happened to web development: it got really good! I need a vehicle to experiment with all the powerful improvements made to CSS and JavaScript.

A modern web framework

I'm looking at Svelte. While I'm bringing myself up to date on modern web development, extras like a virtual DOM are an unneeded overhead.

A free, serverless database

I've always wanted to do a project with DynamoDB - I don't know any other serverless database with this generous a free tier offering.

Terraform

I'm looking at having parts of this app on AWS but possibly Cloudflare too, so a non-vendor-specific infrastructure-as-code tool is called for. I'll use Terraform to define the app's infrastructure and resources.

GitHub Actions

I've worked with many DevOps tools but never tried GitHub's "GitOps" offering. This looks like the simplest way to have a low-management pipeline.

Dev containers

I've never tried using Visual Studio Code to develop in local container environments and have been looking for an excuse to do so.

This is going to take a while

Lots to do and it will take a while (since I don't get a lot of time for side projects!) But I'm looking forward to it.

Next