Design

Changes to Back-End: I had to change my server's response format for some handlers to send data with the string[] type instead of single strings so that all my errors could be displayed. I added /api to all of my handlers' routes. I also had to tweak my tests to ensure they still worked after the changes. I'd say I struggled more with changing and typing the front-end. I think the only change I would make to how I structured my back-end is maintaining consistency with my response formats.

Client-Side Validation: I added a little. For example, users can't input any characters for inputs expecting only numbers, and all inputs are required to avoid empty inputs. I think it's a waste to not have anything client-side because that saves your server some validation and prevents some invalid input immediately, but you should still design your server-side validation so that you can rely on it anyways. Avoiding crashes/unexpected behavior is crucial, and the server is the last line of defense.

React

State Experience: I'm still a beginner with React. I'm comfortable using setState functions inside a single component at this point, but I still find myself having to get used to props. I had to restructure my front-end to pass books as a prop so that my Table and Search components both had access, and this took some time to figure out (including typing)

Typing the Front-End: I struggled a ton, specifically error handlng, but I valued the experience. I had to break down error handling and understand the code from previous activities to get my message system working. Typing and exporting my props was also tricky at first.

SPA vs MPA

My Experience: I can't provide a good answer for this because my group used React back in CS375. I still think this (SPA) is harder, but I'm learning so much more from it. This is taking more time to pick up, but it's a powerful tool to get an idea of what could go wrong with your applications. My experience with MPA was simpler, but working with SPA is more satisfying when I figure out errors because I feel like I'm actively improving my understanding with practice.