arii
Home

Blog

About

categories

coffee on

a full-stack web app for ordering coffee drinks with user authentication, shopping cart, and barista management
3 min read updated
coffee on landing page with dark blurred background and logo

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.

Welcome page
welcome page
login screen
login page
register screen
register page
home screen
home page
cart screen
cart page
baristas screen
baristas page
drinks screen
drinks page
favorite baristas screen

favorite baristas page

favorite drinks screen

favorite drinks page

profile screen
profile page
edit profile screen

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.