290 lines
7.7 KiB
Markdown
290 lines
7.7 KiB
Markdown
# QR Master - Create Custom QR Codes in Seconds
|
|
|
|
A production-ready SaaS application for creating and managing QR codes with advanced tracking, analytics, and integrations.
|
|
|
|
## Features
|
|
|
|
- 🎨 **Custom QR Codes** - Create static and dynamic QR codes with full customization
|
|
- 📊 **Advanced Analytics** - Track scans, locations, devices, and user behavior
|
|
- 🔄 **Dynamic Content** - Edit QR code destinations anytime without reprinting
|
|
- 📦 **Bulk Operations** - Import CSV/Excel files to create multiple QR codes at once
|
|
- 🔌 **Integrations** - Connect with Zapier, Airtable, and Google Sheets
|
|
- 🌍 **Multi-language** - Support for English and German (i18n)
|
|
- 🔒 **Privacy-First** - Respects user privacy with hashed IPs and DNT headers
|
|
- 📱 **Responsive Design** - Works perfectly on all devices
|
|
|
|
## Tech Stack
|
|
|
|
- **Frontend**: Next.js 14 (App Router), TypeScript, Tailwind CSS
|
|
- **Backend**: Next.js API Routes, Prisma ORM
|
|
- **Database**: PostgreSQL
|
|
- **Cache**: Redis (optional)
|
|
- **Auth**: NextAuth.js (Credentials + Google OAuth)
|
|
- **QR Generation**: qrcode library
|
|
- **Charts**: Chart.js with react-chartjs-2
|
|
- **i18n**: i18next
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 18+
|
|
- Docker and Docker Compose V2
|
|
- Git
|
|
|
|
### Installation
|
|
|
|
#### Option 1: Development Mode (Recommended)
|
|
|
|
Run database in Docker, app on host machine:
|
|
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone https://github.com/yourusername/qr-master.git
|
|
cd qr-master
|
|
```
|
|
|
|
2. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Copy and configure environment:
|
|
```bash
|
|
cp env.example .env
|
|
```
|
|
Edit `.env` and set:
|
|
- `NEXTAUTH_SECRET` (generate: `openssl rand -base64 32`)
|
|
- `IP_SALT` (generate: `openssl rand -base64 32`)
|
|
- (Optional) Google OAuth credentials
|
|
|
|
4. Start database services:
|
|
```bash
|
|
npm run docker:dev
|
|
```
|
|
|
|
5. Run migrations and seed:
|
|
```bash
|
|
npm run db:migrate
|
|
npm run db:seed
|
|
```
|
|
|
|
6. Start development server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
7. Access the application:
|
|
- **App**: http://localhost:3050
|
|
- **Database UI**: http://localhost:8080 (Adminer)
|
|
- **Database**: localhost:5432
|
|
- **Redis**: localhost:6379
|
|
|
|
#### Option 2: Full Docker (Production)
|
|
|
|
Run everything in Docker:
|
|
|
|
1. Clone and setup:
|
|
```bash
|
|
git clone https://github.com/yourusername/qr-master.git
|
|
cd qr-master
|
|
cp env.example .env
|
|
# Edit .env with your configuration
|
|
```
|
|
|
|
2. Build and start:
|
|
```bash
|
|
npm run docker:prod
|
|
```
|
|
|
|
3. Run migrations:
|
|
```bash
|
|
docker-compose exec web npx prisma migrate deploy
|
|
```
|
|
|
|
4. Access at http://localhost:3050
|
|
|
|
📚 **For detailed Docker setup, see [DOCKER_SETUP.md](DOCKER_SETUP.md)**
|
|
|
|
## Demo Account
|
|
|
|
Use these credentials to test the application:
|
|
|
|
- **Email**: demo@qrmaster.com
|
|
- **Password**: demo123
|
|
|
|
## Development
|
|
|
|
### Available Scripts
|
|
|
|
```bash
|
|
# Development
|
|
npm run dev # Start Next.js dev server
|
|
npm run build # Build for production
|
|
npm run start # Start production server
|
|
|
|
# Database
|
|
npm run db:generate # Generate Prisma Client
|
|
npm run db:migrate # Run migrations (dev)
|
|
npm run db:deploy # Deploy migrations (prod)
|
|
npm run db:seed # Seed database
|
|
npm run db:studio # Open Prisma Studio
|
|
|
|
# Docker
|
|
npm run docker:dev # Start DB & Redis only
|
|
npm run docker:dev:stop # Stop dev services
|
|
npm run docker:prod # Start full stack
|
|
npm run docker:stop # Stop all services
|
|
npm run docker:logs # View logs
|
|
npm run docker:db # PostgreSQL CLI
|
|
npm run docker:redis # Redis CLI
|
|
```
|
|
|
|
### Local Development (without Docker)
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
2. Set up PostgreSQL and Redis locally
|
|
|
|
3. Configure `.env` with local database URL:
|
|
```env
|
|
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/qrmaster?schema=public
|
|
```
|
|
|
|
4. Run migrations:
|
|
```bash
|
|
npm run db:migrate
|
|
npm run db:seed
|
|
```
|
|
|
|
5. Start dev server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
qr-master/
|
|
├── src/
|
|
│ ├── app/ # Next.js app router pages
|
|
│ ├── components/ # React components
|
|
│ ├── lib/ # Utility functions and configurations
|
|
│ ├── hooks/ # Custom React hooks
|
|
│ ├── styles/ # Global styles
|
|
│ └── i18n/ # Translation files
|
|
├── prisma/ # Database schema and migrations
|
|
├── docker/ # Docker initialization scripts
|
|
│ ├── init-db.sh # PostgreSQL initialization
|
|
│ └── README.md # Docker documentation
|
|
├── public/ # Static assets
|
|
├── docker-compose.yml # Production Docker setup
|
|
├── docker-compose.dev.yml # Development Docker setup
|
|
├── Dockerfile # Container definition
|
|
├── DOCKER_SETUP.md # Complete Docker guide
|
|
└── env.example # Environment template
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /api/auth/signin` - Sign in with credentials
|
|
- `POST /api/auth/signout` - Sign out
|
|
- `GET /api/auth/session` - Get current session
|
|
|
|
### QR Codes
|
|
- `GET /api/qrs` - List all QR codes
|
|
- `POST /api/qrs` - Create a new QR code
|
|
- `GET /api/qrs/[id]` - Get QR code details
|
|
- `PATCH /api/qrs/[id]` - Update QR code
|
|
- `DELETE /api/qrs/[id]` - Delete QR code
|
|
|
|
### Analytics
|
|
- `GET /api/analytics/summary` - Get analytics summary
|
|
|
|
### Bulk Operations
|
|
- `POST /api/bulk` - Import QR codes from CSV/Excel
|
|
|
|
### Public Redirect
|
|
- `GET /r/[slug]` - Redirect and track QR code scan
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Description | Required | Default |
|
|
|----------|-------------|----------|---------|
|
|
| `DATABASE_URL` | PostgreSQL connection string | Yes | `postgresql://postgres:postgres@localhost:5432/qrmaster?schema=public` |
|
|
| `NEXTAUTH_URL` | Application URL | Yes | `http://localhost:3050` |
|
|
| `NEXTAUTH_SECRET` | Secret for JWT encryption | Yes | Generate with `openssl rand -base64 32` |
|
|
| `IP_SALT` | Salt for IP hashing | Yes | Generate with `openssl rand -base64 32` |
|
|
| `GOOGLE_CLIENT_ID` | Google OAuth client ID | No | - |
|
|
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | No | - |
|
|
| `REDIS_URL` | Redis connection string | No | `redis://redis:6379` |
|
|
| `ENABLE_DEMO` | Enable demo mode | No | `false` |
|
|
|
|
**Note**: Copy `env.example` to `.env` and update the values before starting.
|
|
|
|
## Security
|
|
|
|
- IP addresses are hashed with salt before storage
|
|
- Respects Do Not Track (DNT) headers
|
|
- CORS protection enabled
|
|
- Rate limiting on API endpoints
|
|
- Secure session management with NextAuth.js
|
|
|
|
## Deployment
|
|
|
|
### Docker (Recommended for Self-Hosting)
|
|
|
|
The application includes production-ready Docker configuration with PostgreSQL and Redis:
|
|
|
|
```bash
|
|
# Build and start all services
|
|
docker-compose up -d --build
|
|
|
|
# Run migrations
|
|
docker-compose exec web npx prisma migrate deploy
|
|
|
|
# View logs
|
|
docker-compose logs -f
|
|
```
|
|
|
|
For detailed deployment instructions, see [DOCKER_SETUP.md](DOCKER_SETUP.md).
|
|
|
|
### Vercel
|
|
|
|
1. Push your code to GitHub
|
|
2. Import the project in Vercel
|
|
3. Add a PostgreSQL database (Vercel Postgres, Supabase, or other)
|
|
4. Add environment variables in Vercel dashboard
|
|
5. Deploy
|
|
|
|
**Note**: For Vercel deployment, you'll need to set up a PostgreSQL database separately.
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
5. Open a Pull Request
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## Support
|
|
|
|
For support, email support@qrmaster.com or open an issue on GitHub.
|
|
|
|
## Acknowledgments
|
|
|
|
- Next.js team for the amazing framework
|
|
- Vercel for hosting and deployment
|
|
- All open-source contributors
|
|
|
|
---
|
|
|
|
Built with ❤️ by QR Master Team |