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
+20 -2
View File
@@ -17,6 +17,8 @@ node_modules/
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
logs/
*.log
# Runtime data # Runtime data
pids pids
@@ -28,10 +30,14 @@ pids
*.db *.db
*.sqlite *.sqlite
*.sqlite3 *.sqlite3
data/
backups/
# IDE # IDE
.vscode/ .vscode/
.idea/ .idea/
*.swp
*.swo
# OS generated files # OS generated files
.DS_Store .DS_Store
@@ -48,6 +54,18 @@ build/
# Coverage directory used by tools like istanbul # Coverage directory used by tools like istanbul
coverage/ coverage/
# nyc test coverage
.nyc_output .nyc_output
# Temporary files
*.tmp
*.temp
tmp/
temp/
# Backups
*.bak
*.backup
# Runtime directories (created during execution)
/logs
/backups
/data
+27
View File
@@ -0,0 +1,27 @@
## License
This project is licensed under the MIT License:
```
MIT License
Copyright (c) 2024 Table Tennis Booking System
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
+77 -152
View File
@@ -2,133 +2,93 @@
A modern, full-stack table tennis court booking system built with Next.js, shadcn/ui, and SQLite. 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 ## 🚀 Quick Start
- **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
### Prerequisites ### Prerequisites
- Node.js 18+ - Node.js 18+
- npm or yarn - npm/yarn
- Gmail account for email notifications - Gmail account (for notifications)
### Installation ### Installation
1. **Clone the repository**
```bash ```bash
# Clone and install
git clone <repository-url> git clone <repository-url>
cd tt-booking cd tt-booking
```
2. **Install dependencies**
```bash
npm install npm install
```
3. **Set up environment variables** # Configure environment
cp .env.sample .env.local
# Edit .env.local with your settings
```bash # Setup database
cp .env.example .env.local npm run db:setup
```
Edit `.env.local` with your configuration: # Start development
```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 npm run dev
``` ```
6. **Access the application** **Access**: http://localhost:3000 (Admin: `/admin`)
- User interface: http://localhost:3000
- Admin panel: http://localhost:3000/admin
## Configuration ## 🔧 Configuration
### Gmail Setup Create `.env.local` with:
1. Enable 2-factor authentication on your Gmail account ```env
2. Generate an App Password: Google Account > Security > App passwords NEXTAUTH_SECRET=your-very-long-random-secret-key
3. Use the App Password as `EMAIL_PASSWORD` in your environment variables NEXTAUTH_URL=http://localhost:3000
ADMIN_EMAIL=admin@your-domain.com
ADMIN_PASSWORD=your-secure-password
### Default Settings # Optional - Email notifications
EMAIL_USER=your-email@gmail.com
- **Courts**: 2 courts (configurable via admin panel) EMAIL_PASSWORD=your-gmail-app-password
- **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
``` ```
### Production ## 🗄️ Database Commands
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 ```bash
docker-compose -f docker-compose.yml up -d 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
``` ```
## Project Structure ## 🐳 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/ tt-booking/
@@ -139,63 +99,28 @@ tt-booking/
│ └── layout.tsx # Root layout │ └── layout.tsx # Root layout
├── components/ # React components ├── components/ # React components
│ ├── ui/ # shadcn/ui components │ ├── ui/ # shadcn/ui components
│ ├── auth/ # Authentication forms │ ├── auth/ # Authentication
│ ├── booking/ # Booking components │ ├── booking/ # Booking system
│ └── admin/ # Admin components │ └── admin/ # Admin interface
├── lib/ # Utility libraries ├── lib/ # Utilities
│ ├── db/ # Database schema and connection │ ├── db/ # Database schema
│ ├── auth.ts # Authentication utilities │ ├── auth.ts # Authentication
── email.ts # Email functionality ── email.ts # Email service
│ └── utils.ts # General utilities ├── scripts/ # Database scripts
├── docker-compose.yml # Docker configuration │ ├── setup-database.ts # Database setup
├── Dockerfile # Container definition │ └── reset-db.ts # Database reset
└── nginx.conf # Reverse proxy configuration └── docker-compose.*.yml # Deployment configs
``` ```
## API Endpoints ## 🤝 Contributing
### 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
1. Fork the repository 1. Fork the repository
2. Create a feature branch 2. Create feature branch
3. Make your changes 3. Make changes and test
4. Add tests if applicable 4. Submit pull request
5. Submit a pull request
## License ## 🆘 Support
This project is licensed under the MIT License. - 📚 [Database Setup Guide](docs/DATABASE_SETUP.md)
- 🚀 [Deployment Guide](docs/DEPLOYMENT_GUIDE.md)
## Support - 🐛 Create an issue for bugs or questions
For issues and questions, please create an issue in the repository.
View File