# CA-Lose Ticket intake and validation app with a React frontend and an Express + MySQL backend. ## Tech Stack ![React](https://img.shields.io/badge/React-61DAFB?logo=react&logoColor=000&style=flat) ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=fff&style=flat) ![Vite](https://img.shields.io/badge/Vite-646CFF?logo=vite&logoColor=fff&style=flat) ![Tailwind%20CSS](https://img.shields.io/badge/Tailwind%20CSS-38B2AC?logo=tailwindcss&logoColor=fff&style=flat) ![MUI](https://img.shields.io/badge/MUI-007FFF?logo=mui&logoColor=fff&style=flat) ![React%20Query](https://img.shields.io/badge/React%20Query-FF4154?logo=reactquery&logoColor=fff&style=flat) ![React%20Router](https://img.shields.io/badge/React%20Router-CA4245?logo=reactrouter&logoColor=fff&style=flat) ![Node.js](https://img.shields.io/badge/Node.js-339933?logo=nodedotjs&logoColor=fff&style=flat) ![Express](https://img.shields.io/badge/Express-000000?logo=express&logoColor=fff&style=flat) ![MySQL](https://img.shields.io/badge/MySQL-4479A1?logo=mysql&logoColor=fff&style=flat) ![Docker](https://img.shields.io/badge/Docker-2496ED?logo=docker&logoColor=fff&style=flat) ![Nginx](https://img.shields.io/badge/Nginx-009639?logo=nginx&logoColor=fff&style=flat) ## Project Structure - Frontend (Vite + React + Tailwind + MUI): [frontend](frontend) - Backend (Express): [backend](backend) - Database schema: [backend/scheme.sql](backend/scheme.sql) - Docker compose stack: [docker-compose.yml](docker-compose.yml) ## Quick Start (Docker) 1. Set the database password env var used by Docker Compose: ```bash export DB_PASSWORD=your_password ``` 2. Start MySQL and the backend: ```bash docker compose up -d ``` Notes: - The frontend service is commented out in [docker-compose.yml](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](frontend/nginx.conf)). ## Local Development ### Backend 1. Create a .env file in the backend folder with: ```env PORT=8004 DB_HOST=127.0.0.1 DB_USER=root DB_PASSWORD=your_password DB_NAME=ca_lose ``` 2. Install deps and run: ```bash cd backend npm install node server.js ``` Backend listens on http://localhost:8004 and exposes routes under /default. ### Frontend ```bash 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](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](backend/scheme.sql). - Per-user ticket tables are created on demand by the backend (see [backend/routes/default/frontend.data.js](backend/routes/default/frontend.data.js)).