Dungeon example

Project overview

In my bachelor's capstone, we were placed in small teams and tasked with completing a project as a project manager. The manager was responsible for ensuring the project’s successful completion. Over the course of the degree, we took additional classes where we served as programmers under different project managers. This provided a valuable, real-world simulation of starting and managing a project from scratch.

Project Summary
PizzaView is the ultimate destination for discovering and reviewing the best pizza places around the globe. Whether you're a casual pizza lover or a connoisseur, our site lets you explore, rate, and share your favorite pizza joints based on key criteria that define an exceptional pizza. With PizzaView, you can search for pizza spots, leave detailed reviews, view mouth-watering photos, and engage with a community of fellow pizza enthusiasts—all in a fun, pizza-themed environment!

Requirements

The requirements for this project were quite ambitious—especially since I was managing four members with little to no experience in C# or web development. This made the process particularly interesting, as I had to balance teaching them the fundamentals with ensuring the project stayed on track. We were given nine weeks to complete this, so not all features were finished, but we aimed high from the start.

  • User Registration & Login: Users can create personal accounts and securely log in.
  • User Reviews: Authenticated users can leave ratings and written reviews for restaurants.
  • Review Media Support: Users can attach images to their reviews.
  • Review Moderation: Automated filtering detects inappropriate language or spam; flagged reviews are rejected.
  • User Reputation System: Users flagged for repeated violations lose the ability to post reviews.
  • Favorites & History: Users can favorite restaurants and view their review history.
  • Advanced Search: Full-text search by restaurant name, address, or city.
  • Map Integration: Users can browse and filter restaurants by location using a map-based UI.
  • Responsive Design: Fully functional across mobile and desktop devices with cross-platform CSS.

Challenges

This project came with unique challenges. As the project manager, I was expected to limit my own programming contributions, focusing on guidance instead. However, our members had no experience in C# or web development, which meant I had to provide constant support without simply coding everything myself. Additionally, one team member was not very responsive, which complicated the workflow.

  • Finding ways to contribute without taking over all the work.
  • Helping educate the team so they wouldn’t feel overwhelmed.

Design

In the first few weeks, I focused heavily on documentation and design. During this time, team members learned the basic processes we would use throughout the project. They also contributed to design decisions and created their own UML diagrams.

  • C# .NET Core (7.0)
  • Blazor Server (With Blazor Bootstrap)
  • Microsoft Entity Framework Core
  • EF Repository (My own helper library for working with Entity Framework factories)
  • Microsoft Identity Framework
Initial design Initial design document. This was changed significally. Final design Final design document. IEntity is removed from this graph to reduce clutter.

Approach & Solution

Balancing the role of project manager with my experience—and the need to let others learn—was tricky. We worked around it by having me create foundational pieces of the application’s architecture, allowing others to mirror and expand upon those patterns. This helped the team build confidence and gain hands-on skills.

Backend

For the backend, we followed a RESTful approach. All entities in the database followed a common structure and layered architecutre pattern, resulting in a more maintainable codebase:

  • EntityRepositoryBase: Provided the basic CRUD operations for database interaction.
  • EntityServiceBase: Handled business logic between controllers and repositories.
  • ServiceControllerBase: Accepted HTTP requests and routed them to the service layer. Included default REST actions.

Here is the basic elements of those classes.

Here is a simple implementation.

This solution was great as it allowed for easy-scaling on creating new elements in the database without the other members getting overwhelmed. this design also allowed for you to create instances of actions you may need, like getting all reviews by a certain store.

The Results

Managing this project was a fantastic learning experience. In past projects, I often worked solo or with equally experienced teammates. This time, my team had little background knowledge. I had to clearly explain my design choices and encourage others to make their own decisions—even if I didn’t initially see their choices as optimal—so everyone felt invested in the project.

The project ultimately enhanced my communication skills and showed how quickly a team can deliver a functional solution. I truly enjoyed this experience and plan to continue refining PizzaView to reach its full potential.

Below is my professor’s final comment on my performance review:

I just have to say I think of you as a "most improved" person. It's not that you weren't a strong student initially - you always had a great attitude and your teammates liked working with you. It's just that you were vocal about how much you had to learn initially, enough to impress me with your solid performance despite your misgivings, and here you are, graduating after leading a successful project despite having a difficult team situation. Very well done and I commend you. Your attitude and interest in learning and growth is exactly what will make you a solid contributor on a software team in the future. I know you have more room to grow technically, but we all do. The learning is never over, and if you keep a positive attitude, you will succeed in the work place.

Gallery