A full-stack e-commerce web application for browsing and purchasing artisan pottery. Built with Lit web components on the frontend, Express + MongoDB on the backend, and TypeScript throughout.
This is an npm workspace monorepo with three packages:
packages/
├── app/ # Frontend — Lit web components + Vite
├── server/ # Backend — Express API + MongoDB
└── proto/ # Static HTML/CSS prototype
- Frontend: TypeScript, Lit, Vite,
@calpoly/mustang(routing & state) - Backend: Node.js, Express, TypeScript, MongoDB (Mongoose), JWT, bcryptjs
- Tooling: npm workspaces, nodemon, esbuild-node-tsc
- User registration and login (JWT authentication)
- Browse pottery product catalog
- View individual item details
- Shopping cart management
- User profiles
- Node.js
- A running MongoDB instance
- A
.envfile inpackages/server/with:
TOKEN_SECRET=your_jwt_secret
PORT=3000
MONGO_CONNECTION=your_mongodb_connection_string
npm install# 1. Build the frontend
cd packages/app
npm run build
# 2. Start the server (serves the built frontend)
cd ../server
npm run start:appCreate an account on the signup page before accessing protected routes. All user data (cart, profile) is tied to your account.