I really like the overall "formula" of the game. Starts out with the simple mechanics, then combines the simple mechanics, then goes into more complex mechanics, and then combines the simple and complex mechanics. Really like this kind of design (as opposed to just throwing everything at the player at once) cause the player is never like "wait what" and is able to see everything intuitively without any explanation being needed, resulting in very nice difficulty progression.
One thing though on level 5, it is easy to tell which key is the real one cause it hovers up and down, the fake keys just stay still. Maybe it would have been better to give them a hover as well as the functionality of the real key since you would just have to restart the level anyway since you're stuck in the fake key area. That way player won't immediately have the inclination to go towards the single moving key.
Another thing, when it comes to moving enemies, maybe it could be better if there are limited number of moves that you have? That way the player is less likely to wanna spam the key and more likely to think before applying the input. On level 1 and 2 if you press the shift key, the game will freeze (input no longer works but music keeps playing). Also, maybe shift key isn't the best key to use as input for a game like this cause if you spam it (which is a tendency to wanna do for a game like this), the "sticky keys" prompt pops up. I was thinking just swapping the functionality of the shift and spacebar keys (since you need to move enemies much more often than place spawn points), that way the sticky key issue is far less likely to occur. Though ya overall solid work!