There are 2 kinds of learning: "Push" and "Pull". "Push" means you find learning opportunities and "push" them onto whatever you're building. "Pull" means you have something you have to build but don't have all the personal resources you need, so you "pull" in what you need as you go.
You're problem is that you're a "Pull" learner using a "Push" approach. The result is that you haven't learned deeply enough because you're pushing what you have so that permanent deep knowledge hasn't successfully transferred into the firmware of your brain. When you "pull" knowledge, you're applying it immediately in a deep, permanent way and you're much more likely to get all the value from it.
How do I know you're a "Push" learner? Easy, your language. "Coding challenges", "tutorials", "videos" are classic examples. Nothing wrong with these when you need them (by "Pulling"). But when you "Push" them into your brain you get the classic result: confusion, over complication, frustration, and eventually, anger. This is a common problem. You are not alone.
I am the opposite, a classic "Pull" learner. I bet I don't know more that 20% of the syntax of any technology I know. I've written over 2 million lines of code in over 1,000 successful projects but I've only written about 15 programs from scratch. I really don't care about how much I know or how good I am; I only care about getting the job done and satisfying my customer to get their job done with my tools.
Like I promised, your solution is simple: Find someone who needs what you're building and then find a way to build it. That's it. Trust your inner self to find what you need, learn it, make it work, and the internalize it.
The sooner you stop worrying about your problem and start worrying about your customer's, the sooner you solve your problem as a byproduct of solving theirs.
Give it a shot and let us know how it goes.