Alright, I must admit it was fun, I think after doing this one I feel quite confident in my back-end path now as I was able to learn so much by doing this project.
Apart from all the basic features I also added a spending feature where clients can update their envelopes in terms of spending separately and not just general editing of the envelope, in my opinion, this will separate the concerns of these features.
Anyways please review my code and let me know where I need improvements and all.
Thanks a lot, here is my solution