I rolled my own emacs configuration for many years, but I've been extremely happy after switching to doom. It includes sane defaults and comes with some special tricks for making startup fast. If there's something that's not exactly what I want, I just figure out how to fix it in elisp and that's where my emacs learning comes in.
You really don't need to build up a config from scratch to get the full power of emacs. Using doom just gets you further along the curve to having the config that you want. You will definitely need to do some further tinkering with elisp to get doom configured "just so" or to implement functionality, and I find that's plenty enough for learning emacs.
I made a fzf-powered tool that makes cd'ing into deep directory trees quite fast and easy. It's somewhat reminiscent of ranger/nnn/broot, but in my mind, it eliminates the mental context switch of entering/exiting those tools.
It was weirdly satisfying to create an emacs package (https://github.com/dp12/parrot) that shows the party parrot from Slack gyrating in the mode line.
A somewhat useless feature, but it partially redeems itself by offering a "rotate-text" function.
Now I'm anxiously waiting for vim users to port it, as vim users are wont to do. I do expect the resulting plugin will be called something like vip for "very important parrot."
You really don't need to build up a config from scratch to get the full power of emacs. Using doom just gets you further along the curve to having the config that you want. You will definitely need to do some further tinkering with elisp to get doom configured "just so" or to implement functionality, and I find that's plenty enough for learning emacs.