This seems like a strong idea for a puzzle! A couple of suggestions:
1. Implement an undo move stack. On Level 4 it's easy to accidentally hit the last piece in the wrong place and have to start the entire level over again. By not having undo move, you're putting a ceiling on the complexity of puzzles you can reasonably ask the player to solve.
2. Movement is a bit slow. Is there a way to have the heaviness of movement feeling, but make it a tiny bit faster and more predictable? At the moment, it's easy to accidentally collect a blob piece because you released the movement direction you were holding down too late, and you're doing this because large levels are a pain to traverse at this speed.
3. Why can you only move over the hole when you're in the correct shape? It feels like there's a missed opportunity there for another movement mechanic.
Lastly, if you're not familiar with it, I'd encourage you to check out Stephen Lavelle's Puzzlescript, which allows for the rapid building/prototyping of grid-based puzzle games, where implementing and iterating on rulesets and puzzle layouts can be done very simply. Even if you're going to make something with fancier graphics, Puzzlescript is a terrific tool for designing levels and exploring mechanics. There's tonnes of great examples of puzzlescript games on itch under its tag.