Here are some things I've down over the years in no particular order.
Work on algorithm problems during slow times at work, or when I know I'll be interviewing soon. I'd just search google for tech interview questions, then implement so that I really understood the solution.
I used to write 2d games as a hobby, I made Tetris, the most ambitious game I completed was a jump n run with a simple level. This taught me 2d graphics, animation, simple physics, and managing state of a lot of interacting entities.
I implemented software 3d with flat shaded polygons and used that to make a demake of an old game. This taught a lot about 3D, matrix math and modeling.
I've implemented parsers and interpreters for simple languages multiple times. I personally think this is the most bang for the buck type of project, you learn a lot about working with text, recursion and tree data structures.
I wrote an emulator for an old architecture. This taught me a lot about assembler and how machines operate.
I wrote a couple of simple games for gameboy color and ran them on an emulator using homebrew tools. This taught me a lot about assembler programming an old game consoles.
I wrote client server library kind of like zeromq. This taught me a lot about socket programming and threads.
There was other stuff. Note all these projects were for my own edification and amusement and were never released anywhere. It was all basically an excercise in "ok that's how that all work", then moved on. There was never a goal or schedule. These were just things that interested me.