# Project Rules ## Shell & Process Rules - **NEVER run `cmd /c` or `cmd.exe` directly.** Use `Invoke-WebRequest`, `Invoke-RestMethod`, `Start-Process`, or direct `node` commands via PowerShell instead. - **NEVER run long-running processes (e.g. `node server.js`) in the foreground.** Always use `Start-Process -NoNewWindow` without `-Wait` to background them. - **NEVER run long-running processes (e.g. `node server.js`) in the foreground.** Always use `Start-Process -NoNewWindow` without `-Wait` to background them. - **Prefer `Invoke-WebRequest` / `Invoke-RestMethod`** over `curl.exe` for HTTP testing. - When backgrounding a server process, redirect stdout/stderr to log files: `-RedirectStandardOutput "out.log" -RedirectStandardError "err.log"`. ## Project Context This is a **Game Player Complaint/Suggestion/Appeal System** (MC Report System) built with: - **Backend**: Node.js + Express + **MySQL** (mysql2) - **Frontend**: Vanilla JS SPA with hash-based routing - **Auth**: JWT with role-based access (owner/admin/player) ### Key Files - `backend/db.js` — MySQL connection pool + schema init + config persistence - `backend/server.js` — Express entry point, checks install status, conditional route loading - `backend/routes/tickets.js` — Core ticket logic (report/suggestion/appeal) - `backend/routes/install.js` — Installation wizard API - `public/js/app.js` — Frontend router - `data/config.json` — MySQL connection config (created during install) ### Installation Flow 1. Start server: `node backend/server.js` 2. Visit `http://localhost:3100/#/install` 3. Step 1: Enter MySQL credentials, test connection 4. Step 2: Create owner account 5. Restart server to load business routes ### After making backend changes 1. Stop existing server: `Get-Process -Name "node" -ErrorAction SilentlyContinue | Stop-Process -Force` 2. Restart: `Start-Process -FilePath "node" -ArgumentList "backend\server.js" -WorkingDirectory "C:\Users\canglan\Documents\Web\mc-report" -NoNewWindow -RedirectStandardOutput "o.log" -RedirectStandardError "e.log"`