coffee on
a full-stack web app for ordering coffee drinks with user authentication, shopping cart, and barista management
A full-stack coffee shop ordering system with two user roles. Customers can browse and order drinks with a favorites system for quick reordering. Baristas manage incoming orders through a dedicated dashboard.
key features
- User authentication (JWT)
- Browse and order drinks
- Shopping cart
- Favorites system (preferred barista and drinks)
- Order history and quick reordering system
- Order management
- Barista dashboard
tech stack
# frontend
lit.js | parcel | sass | gsap
# backend
node.js | express.js | mongodb | mongoose | jwt
api architecture
the backend exposes 40+ rest endpoints across five route groups.
/auth # login and token validation
/users # profile, favorites, cart
/drinks # product catalog and inventory
/orders # creation, tracking, status updates
/home # database seed and initialization
highlights
a few screens from the app, showcasing the user interface and functionality for both customers and baristas.








favorite baristas page

favorite drinks page


edit profile page
building coffee on was my first time designing a multi-role system from scratch. the trickiest part was managing state across user types. a customer’s cart and favorites behave differently from a barista’s order queue, and keeping that logic clean on a Lit.js frontend without a framework like React took real thought.
JWT authentication also clicked for me here. not just implementing it, but understanding why stateless auth matters when you have two different user flows hitting the same endpoints.