2024-10-15 Written for Evie, published for easy shareability.
Todo-lists are great, because they're really really simple.
At their simplest, it's a bullet point on a piece of paper, strike off when done.
You'd start by making a CLI (Terminal App, no cool lookin UI), Ask for Data, store it in a list,
display it, and done
Now, Persistence, you lose your todos when you close the program, kinda like burning the paper lol, not ideal
So, let's save the data, make it permanent. The easiest way is to write it a file, and read from it when you
start the app again.
Then, learn a cool format, like JSON, it's commonly used, so worth getting used to. (Especially for Web APIs, understand JSON, it's simple)
Then, Databases! Try SQLite (it's just a file but a special format), and use SQL. It's just creating a new row, the simplest things can get!
Optional: Then, you could try PostgreSQL, you'd need a pgsql server, I'd be glad to host one for you (overflowing with idle resources -> me).
Cool, now you have persistence, but is it pretty?
This is when you'd look into pretty printing on the terminal, some color, that stuff.
What about a web interface? Just view, and add to the list. Not a Java pro, but you'd use Springboot or something with some basic HTML.
You'd also learn a bit of Javascript, based on how you do this. You can do Server-Side-Generation (create html in real time and return it to the client)
Or Client-Side-Rendering (fetch the data from an API and display it).
Latter is more useful for your learning! But templating is also good to know.
Cool, now you have persistence, and a WebUI. This is a good place to stop.
What about Authentication? What if you could have multiple users with their own todo lists?
Simple stuff, just username/password, throw it into the db, login, cookies, JWT Stuff, tada, done. You'll learn a bit of JS from this.
But, you'll have to update the database format. Since it was just one user (the jargon for that is 'single tenant'), you got away with just a Todo table.
Now you'll need to connect each Todo to a User!
You could also take the opportunity to make the UI look better, you're a designer after all ;)
Tailwind and CSS Jazz, maybe a component library.
Optional, good for market: This is a great time to learn a Javascript framework. I recommend Svelte!
Cool, now you have a pretty website, you understand the basics of databases, Java, Authentication. It sounds daunting reading all that here, but
each step is simple! That's how you climb a mountain :)
Coooooool, okay. We're basically done, you can tack on any feature you want. Think "Sign in with Gmail" or "Sign in with Discord". That's OAuth,
another way of authenticating. That's fun and super useful to know.
Then, what about a Discord bot?
What about a desktop app? You could make the website an app, or do something completely new. Both are great. Maybe it can send notifications
near the due date? Maybe email reminders?
Infinite room for growth!