The sibling comment is great. If you can't decide, pick whatever motivates you the most.
The key is to hold yourself accountable. It's easy to build sandcastles and think you're a brilliant architect if you don't try jumping on top of them. The iteration loop is what forces you to learn: pick something about your thing you can test objectively, and then make it better.
One of my favorite things to do is to implement something boring and standard, but with an unusual arbitrary design constraint that forces me to rethink the normal approach.
Redis from Scratch will walk you through the very basics.
Want to know how to build compilers? Crafting Interpreters (while very wordy) will walk you (painstakingly) through the very basics.
Want to build a basic server? Beej on Linux Networking.
Build a time-series database to handle back-testing for automated trading systems.
Slap on a bare-bones SQL interpreter onto it.
Now add networking so you can deploy it somewhere.
Now figure out what’s wrong with it (is the performance merely slow or are there serious pitfalls a la MongoDB?)
How do you handle multi user environments?
How you optimize for filesystem throughput while maintaining ACID? Are you like Mongo where you just queue everything and return an ACK — or do you only ACK back when you’ve successfully written to disk?
What’s your protocol for communicating with your DB?
How about sharding or distributed storage?
Hot/cold data swapping?
Execution engine or hand-crafted data retrieval semantics a la q (lang)?
How about remote direct memory access (RDMA) to get past the kernel? How about regular old kernel bypass?
How you handle a catastrophic failure where I physically pull the plug on your machine?
Are you using SIMD/vectorization?
There’s so much you could do. Pick whatever interests you the most.