U-Fund: A New Page was my SWEN 261 team project. We built a full-stack system where incarcerated people could request books, prison administrators could approve or deny them, and outside helpers could fund approved requests. It was one of my first chances to work on a fairly complex application with several roles and workflows shared across a team.
Working as a team
This was a very fun project to work on because the four of us had to collaborate on both sides of a large system. The team was Michael Lizzio, Liam Pennino, Nina Sagawa, and Selene Shen. We divided features between the Angular interface and Spring Boot API, then had to make sure all of our work fit together.
It gave me real experience coordinating responsibilities, working with code written by other people, and building features that depended on another teammate's work. There was no AI involved in the project.
Three different roles
The system had three roles with different permissions and tasks. Inmates created profiles, requested books, and received notifications when a request was approved, denied, or funded. Administrators reviewed the request pool, managed accounts and prisons, and moved approved books into the public cupboard. Helpers searched that cupboard, added books to a funding basket, and completed a simulated checkout.
The main workflow connected all three roles. An inmate submitted a book request, an administrator reviewed it, and approval moved that book into the collection helpers could fund. Funding it then generated another notification for the inmate.
How we structured it
The backend followed a three-tier design with Spring controllers, DAO interfaces, file-backed DAO implementations, and model classes. Seven REST resources handled accounts, books, requests, funding baskets, notifications, prisons, and profiles. The Angular app had matching services and route guards for each user's role.
The backend stored its data in JSON files and rewrote those files when records changed. The project also included JUnit tests and separate JaCoCo coverage reports for the controller, model, and persistence tiers.
One complete interaction
This sequence diagram follows a helper searching for a book and adding it to a funding basket. The request travels from the Angular client through the Spring controller and service layer, then into the basket and book data objects before the result returns to the browser.

