| .github/workflows | ||
| dev-docs | ||
| public | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .env.production.example | ||
| .gitignore | ||
| components.json | ||
| Dockerfile | ||
| eslint.config.js | ||
| index.html | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| README.md | ||
| tailwind.config.js | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
Yaltopia Ticket Admin
Admin dashboard for Yaltopia Ticket management system built with React, TypeScript, and Vite.
📚 For detailed documentation, see dev-docs/
Features
- User Management
- Analytics Dashboard
- Security Monitoring
- System Health Monitoring
- Audit Logs
- Announcements Management
- Maintenance Mode
- API Key Management
Tech Stack
- React 19
- TypeScript
- Vite
- TanStack Query (React Query)
- React Router v7
- Tailwind CSS
- Radix UI Components
- Recharts for data visualization
- Axios for API calls
Prerequisites
- Node.js 18+
- npm or yarn
Getting Started
1. Clone the repository
git clone <repository-url>
cd yaltopia-ticket-admin
2. Install dependencies
npm install
3. Environment Configuration
Copy the example environment file and configure it:
cp .env.example .env
Edit .env and set your API URL:
VITE_BACKEND_API_URL=http://localhost:3000/api/v1
VITE_ENV=development
4. Run development server
npm run dev
The application will be available at http://localhost:5173
Building for Production
1. Configure production environment
Copy the production environment example:
cp .env.production.example .env.production
Edit .env.production with your production API URL:
VITE_BACKEND_API_URL=https://api.yourdomain.com/api/v1
VITE_ENV=production
2. Build the application
npm run build:prod
The production build will be in the dist directory.
3. Preview production build locally
npm run preview
Deployment
Docker Deployment (Recommended)
- Build the Docker image:
docker build -t yaltopia-admin:latest .
- Run the container:
docker run -p 8080:80 yaltopia-admin:latest
- Deploy to your cloud provider (AWS, GCP, Azure, DigitalOcean, etc.)
Traditional VPS Deployment
- Build the application:
npm run build:prod - Copy the
distdirectory to your web server - Configure nginx or Apache to serve the static files
- Set up redirects for SPA routing (see nginx.conf example)
SPA Routing Configuration
For proper routing with nginx, use the included nginx.conf file or add this configuration:
location / {
try_files $uri $uri/ /index.html;
}
The project includes a Dockerfile and nginx.conf for containerized deployment.
See DEPLOYMENT.md for detailed deployment instructions.
location / {
try_files $uri $uri/ /index.html;
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
}
Build and run:
```bash
docker build -t yaltopia-admin .
docker run -p 80:80 yaltopia-admin
Environment Variables
| Variable | Description | Required | Default |
|---|---|---|---|
VITE_BACKEND_API_URL |
Backend API base URL | Yes | http://localhost:3000/api/v1 |
VITE_ENV |
Environment name | No | development |
VITE_ANALYTICS_ID |
Analytics tracking ID | No | - |
VITE_SENTRY_DSN |
Sentry error tracking DSN | No | - |
Scripts
npm run dev- Start development servernpm run build- Build for productionnpm run build:prod- Build with production environmentnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run lint:fix- Fix ESLint errorsnpm run type-check- Run TypeScript type checking
Project Structure
src/
├── app/ # App configuration (query client)
├── assets/ # Static assets
├── components/ # Reusable UI components
│ └── ui/ # Shadcn UI components
├── layouts/ # Layout components
├── lib/ # Utilities and API client
├── pages/ # Page components
│ ├── admin/ # Admin pages
│ ├── dashboard/ # Dashboard pages
│ └── ...
├── App.tsx # Main app component
├── main.tsx # App entry point
└── index.css # Global styles
Security Considerations
Current Implementation
- JWT tokens stored in localStorage
- Token automatically attached to API requests
- Automatic redirect to login on 401 errors
- Error handling for common HTTP status codes
Production Recommendations
- Use httpOnly cookies instead of localStorage for tokens
- Implement HTTPS - Never deploy without SSL/TLS
- Add security headers - CSP, HSTS, X-Frame-Options
- Enable CORS properly on your backend
- Implement rate limiting on authentication endpoints
- Add error boundary for graceful error handling
- Set up monitoring (Sentry, LogRocket, etc.)
- Regular security audits - Run
npm auditregularly
Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
Contributing
- Create a feature branch
- Make your changes
- Run linting and type checking
- Submit a pull request
License
Proprietary - All rights reserved