restructure docs and config, license, readme redo

This commit is contained in:
mikicvi
2025-09-28 21:49:56 +01:00
parent 1911aa9211
commit 7fdd7285a4
8 changed files with 139 additions and 169 deletions
+92 -167
View File
@@ -2,133 +2,93 @@
A modern, full-stack table tennis court booking system built with Next.js, shadcn/ui, and SQLite.
## Features
## Features
### User Features
- **🔐 Secure Authentication**: JWT-based registration and login
- **📅 Interactive Calendar**: Real-time court availability and booking
- **📧 Email Notifications**: Automatic booking confirmations
- **📱 Mobile-First Design**: Responsive UI for all devices
- ** Admin Panel**: Court management, user administration, analytics
- **🔒 Security**: Rate limiting, input validation, password hashing
- **Secure Authentication**: User registration and login with JWT tokens
- **Court Booking**: Interactive booking calendar with real-time availability
- **Email Notifications**: Automatic confirmation and cancellation emails
- **Mobile-First Design**: Responsive UI that works on all devices
- **Booking Management**: View and manage your bookings
### Admin Features
- **Court Management**: Add/remove courts and configure availability
- **Time Slot Configuration**: Set operating hours for different days
- **User Management**: View and manage user accounts
- **Booking Override**: Admin can edit or cancel any booking
- **Announcements**: Create and manage system announcements
- **Activity Logs**: Comprehensive logging of all system activities
- **Analytics Dashboard**: Booking statistics and usage metrics
### System Features
- **7-Day Booking Window**: Users can only book up to 1 week in advance
- **Real-time Validation**: Both client and server-side booking validation
- **Secure Backend**: SQLite database with Drizzle ORM
- **Docker Support**: Easy deployment with Docker and reverse proxy
- **Email Integration**: Gmail SMTP integration for notifications
## Technology Stack
- **Frontend**: Next.js 14, React, TypeScript
- **UI Components**: shadcn/ui, Tailwind CSS, Radix UI
- **Backend**: Next.js API routes, Drizzle ORM
- **Database**: SQLite
- **Authentication**: JWT tokens with httpOnly cookies
- **Email**: Nodemailer with Gmail
- **Deployment**: Docker, Nginx reverse proxy
## Quick Start
## 🚀 Quick Start
### Prerequisites
- Node.js 18+
- npm or yarn
- Gmail account for email notifications
- npm/yarn
- Gmail account (for notifications)
### Installation
1. **Clone the repository**
```bash
git clone <repository-url>
cd tt-booking
```
2. **Install dependencies**
```bash
npm install
```
3. **Set up environment variables**
```bash
cp .env.example .env.local
```
Edit `.env.local` with your configuration:
```env
NEXTAUTH_SECRET="your-secret-key-here-make-this-very-long-and-random"
EMAIL_USER="your-email@gmail.com"
EMAIL_PASSWORD="your-gmail-app-password"
ADMIN_EMAIL="admin@example.com"
ADMIN_PASSWORD="admin123"
```
4. **Set up the database**
```bash
npm run db:push
```
5. **Run the development server**
```bash
npm run dev
```
6. **Access the application**
- User interface: http://localhost:3000
- Admin panel: http://localhost:3000/admin
## Configuration
### Gmail Setup
1. Enable 2-factor authentication on your Gmail account
2. Generate an App Password: Google Account > Security > App passwords
3. Use the App Password as `EMAIL_PASSWORD` in your environment variables
### Default Settings
- **Courts**: 2 courts (configurable via admin panel)
- **Monday/Tuesday**: 19:00-23:00 (configurable)
- **Sunday**: 12:00-17:00 (configurable)
- **Booking window**: 7 days from current date
## Docker Deployment
### Development
```bash
docker-compose up -d
# Clone and install
git clone <repository-url>
cd tt-booking
npm install
# Configure environment
cp .env.sample .env.local
# Edit .env.local with your settings
# Setup database
npm run db:setup
# Start development
npm run dev
```
### Production
**Access**: http://localhost:3000 (Admin: `/admin`)
1. **Update environment variables** in `docker-compose.yml`
2. **Configure SSL certificates** in the `ssl` directory
3. **Update domain** in `nginx.conf`
4. **Deploy**:
```bash
docker-compose -f docker-compose.yml up -d
```
## 🔧 Configuration
## Project Structure
Create `.env.local` with:
```env
NEXTAUTH_SECRET=your-very-long-random-secret-key
NEXTAUTH_URL=http://localhost:3000
ADMIN_EMAIL=admin@your-domain.com
ADMIN_PASSWORD=your-secure-password
# Optional - Email notifications
EMAIL_USER=your-email@gmail.com
EMAIL_PASSWORD=your-gmail-app-password
```
## 🗄️ Database Commands
```bash
npm run db:setup # Full database setup
npm run db:seed # Essential data only
npm run db:reset-confirm # Reset database
npm run db:studio # Open database GUI
```
## 🐳 Deployment
### Production (Docker)
```bash
cp .env.sample .env.production
docker compose -f docker-compose.production.yml up -d
```
### Home Server
```bash
./setup-tunnel.sh # Setup Cloudflare tunnel
./deploy.sh # Deploy
```
## 🛠️ Technology Stack
- **Frontend**: Next.js 14, React, TypeScript, shadcn/ui, Tailwind CSS
- **Backend**: Next.js API routes, SQLite, Drizzle ORM
- **Auth**: JWT with httpOnly cookies
- **Email**: Nodemailer + Gmail
- **Deployment**: Docker, Nginx
## 🗂️ Project Structure
```
tt-booking/
@@ -139,63 +99,28 @@ tt-booking/
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── ui/ # shadcn/ui components
│ ├── auth/ # Authentication forms
│ ├── booking/ # Booking components
│ └── admin/ # Admin components
├── lib/ # Utility libraries
│ ├── db/ # Database schema and connection
│ ├── auth.ts # Authentication utilities
── email.ts # Email functionality
│ └── utils.ts # General utilities
├── docker-compose.yml # Docker configuration
├── Dockerfile # Container definition
└── nginx.conf # Reverse proxy configuration
│ ├── auth/ # Authentication
│ ├── booking/ # Booking system
│ └── admin/ # Admin interface
├── lib/ # Utilities
│ ├── db/ # Database schema
│ ├── auth.ts # Authentication
── email.ts # Email service
├── scripts/ # Database scripts
│ ├── setup-database.ts # Database setup
│ └── reset-db.ts # Database reset
└── docker-compose.*.yml # Deployment configs
```
## API Endpoints
### Authentication
- `POST /api/auth/login` - User login
- `POST /api/auth/register` - User registration
- `POST /api/auth/logout` - User logout
### Bookings
- `GET /api/bookings` - Get user bookings
- `POST /api/bookings` - Create booking
- `PUT /api/bookings/[id]` - Update booking
- `DELETE /api/bookings/[id]` - Cancel booking
### Admin
- `GET /api/admin/stats` - Dashboard statistics
- `GET /api/admin/courts` - Manage courts
- `GET /api/admin/settings` - System settings
- `GET /api/admin/logs` - Activity logs
## Security Features
- **Rate Limiting**: API endpoints are rate-limited via Nginx
- **CSRF Protection**: Built-in Next.js CSRF protection
- **SQL Injection Prevention**: Drizzle ORM parameterized queries
- **XSS Protection**: Content Security Policy headers
- **Secure Cookies**: httpOnly, secure, sameSite cookies
- **Input Validation**: Zod schema validation
- **Password Hashing**: bcrypt with salt rounds
## Contributing
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
2. Create feature branch
3. Make changes and test
4. Submit pull request
## License
## 🆘 Support
This project is licensed under the MIT License.
## Support
For issues and questions, please create an issue in the repository.
- 📚 [Database Setup Guide](docs/DATABASE_SETUP.md)
- 🚀 [Deployment Guide](docs/DEPLOYMENT_GUIDE.md)
- 🐛 Create an issue for bugs or questions