I wouldn’t say you’re at fault for delivering. You are at fault of not delivering a concise solution that uses least elements possible and has a nice clean fast-to-read readme, one setup script or docker file or whatever.
And tbh the result is just a solution (ignoring all the issues of is this terminal inspired and is email backend as a service acceptable choice) - looks generic, nothing interesting besides a super long proposal and super long readme to achieve nothing special honestly. Just a solution checking the boxes. Probably one of many. That’s why probably wasn’t selected.
TL;DR
1. Be more concise in messaging and documentation
2. Do something more than just the working solution esp if they mention brownie points for cool stuff in the task description