MARS BEER
University coursework that outgrew the brief: a shop with a cart, an admin panel, and three registries that meet in one report.
- Light and dark themes, guarded routes and two access roles
- Three registries served by a single table component
- The report joins orders, customers and beers in JavaScript
A look inside.

The door asks who is arriving, and the answer changes the whole site: a customer lands in the shop, an administrator in the panel. The brief asked for a login; two roles are what made everything else necessary. 
The customer side. The cart stays pinned next to the shelf, with the total adding up live: in a shop, the number that matters is what you have already spent, and it should not be one click away. 
One of the three registries. Beers, customers and orders are different screens served by the same table component, which takes its columns and actions as parameters. It was a chance to write the same screen three times, and I did not. 
The report is where the three registries meet: each row joins an order, the customer who placed it and the beer that went out. With no database, the join happens in JavaScript, and it is what turns three loose lists into one piece of information.