v2.1
LuckySign
Ticket intake and validation app with a React frontend and an Express + MySQL backend.
Tech Stack
Production Tech Stack
Note
For production, check the prod branch which contains an VPN git submodule of wg-easy to run the app securely on a private network. It also contains a dnsmasq container to resolve the backend service name from the frontend container. The main branch is meant for local development and testing, so it doesn't include those components to keep things simple.
Project Structure
- Frontend (Vite + React + Tailwind + MUI): frontend
- Backend (Express): backend
- Database schema: backend/scheme.sql
- Docker compose stack: docker-compose.yml
Quick Start (Docker)
- Set the database password env var used by Docker Compose:
DB_PASSWORD=your_password
- Start MySQL and the backend:
docker compose up -d
Notes:
- The frontend service is commented out in docker-compose.yml. If you want the frontend container, uncomment that block and rebuild.
- The frontend container uses Nginx and proxies /backend to the backend service (see frontend/nginx.conf).
- In order to use the database properly, run the scheme and create some users in the users table.
Local Development
Backend
- Create a .env file in the backend folder with:
PORT=8004
DB_HOST=127.0.0.1
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=ca_lose
- Install deps and run:
cd backend
npm install
node server.js
Backend listens on http://localhost:8004 and exposes routes under /default.
Frontend
cd frontend
npm install
npm run dev
Vite runs the app on the default dev port and talks to the backend using the API helpers in frontend/src/utils/api.
API Endpoints
- GET /default/users
- GET /default/confirm-user?username={name}
- POST /default/new-entry?username={name}
Database Notes
- The base users table is defined in backend/scheme.sql.
- Per-user ticket tables are created on demand by the backend (see backend/routes/default/frontend.data.js).
Description