# React + TypeScript + Vite This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. Currently, two official plugins are available: - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh # S22 Poll - RGL HL Season 22 Map Poll A React-based voting application with Steam authentication for the RGL Highlander Season 22 map selection poll. ## Features - 🎮 Steam authentication via Passport.js - 📱 Mobile-friendly drag & drop interface - 🖱️ Desktop drag & drop support - 📊 Vote ranking system - ✅ Confirmation dialog before submission - 🔒 Secure backend API ## Setup Instructions ### 1. Get Steam API Key 1. Go to [Steam Web API Key page](https://steamcommunity.com/dev/apikey) 2. Sign in with your Steam account 3. Enter a domain name (you can use `localhost` for development) 4. Copy your API key ### 2. Configure Environment Variables 1. Navigate to the `server` directory 2. Edit the `.env` file: ``` STEAM_API_KEY=your-steam-api-key-here SESSION_SECRET=your-super-secret-session-key-change-this-in-production ``` ### 3. Install Dependencies ```bash # Install frontend dependencies npm install # Install backend dependencies cd server npm install cd .. ``` ### 4. Start the Application ```bash # Start both frontend and backend npm run dev:full ``` Or start them separately: ```bash # Terminal 1 - Frontend (Vite dev server) npm run dev # Terminal 2 - Backend (Express server) npm run server ``` ## URLs - **Frontend**: http://localhost:5173 - **Backend API**: http://localhost:3001 - **Steam Auth**: http://localhost:3001/auth/steam ## How to Vote 1. **Sign in** with your Steam account 2. **Arrange the maps** by dragging (desktop) or tapping (mobile) 3. **Submit your vote** - you'll see a confirmation dialog 4. **Confirm** to finalize your vote (cannot be changed after submission) ## API Endpoints - `GET /auth/steam` - Initiate Steam authentication - `GET /auth/steam/return` - Steam authentication callback - `GET /auth/user` - Get current authenticated user - `GET /auth/logout` - Logout current user - `POST /api/submit-vote` - Submit vote ranking (requires authentication) ## Technologies Used - **Frontend**: React, TypeScript, Tailwind CSS, Vite - **Backend**: Node.js, Express, Passport.js, passport-steam - **Authentication**: Steam OpenID via Passport.js ## Development The app uses: - Hot reload for both frontend and backend - CORS enabled for cross-origin requests - Session-based authentication - Mobile-responsive design with Tailwind CSS ## Production Deployment Before deploying to production: 1. Update the `STEAM_API_KEY` and `SESSION_SECRET` in your production environment 2. Set `secure: true` for cookies in `server.js` when using HTTPS 3. Update the CORS origin and Steam return URLs to match your production domain 4. Build the frontend: `npm run build` You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: ```js // eslint.config.js import reactX from 'eslint-plugin-react-x' import reactDom from 'eslint-plugin-react-dom' export default tseslint.config([ globalIgnores(['dist']), { files: ['**/*.{ts,tsx}'], extends: [ // Other configs... // Enable lint rules for React reactX.configs['recommended-typescript'], // Enable lint rules for React DOM reactDom.configs.recommended, ], languageOptions: { parserOptions: { project: ['./tsconfig.node.json', './tsconfig.app.json'], tsconfigRootDir: import.meta.dirname, }, // other options... }, }, ]) ```