128 lines
No EOL
3.8 KiB
Markdown
128 lines
No EOL
3.8 KiB
Markdown
# 🍽️ Dish Planner
|
|
|
|
A Laravel-based meal planning application that helps households organize and schedule their dishes among multiple users. Built with Laravel, Livewire, and FrankenPHP for a modern, single-container deployment.
|
|
|
|
## ✨ Features
|
|
|
|
- **Multi-user dish management** - Assign dishes to specific household members
|
|
- **Smart scheduling** - Automatic schedule generation with recurrence patterns
|
|
- **Calendar view** - Visual 31-day schedule overview
|
|
- **Real-time updates** - Livewire-powered reactive interface
|
|
- **Dark theme UI** - Modern interface with purple/pink accents
|
|
- **Single container deployment** - Simplified hosting with FrankenPHP
|
|
|
|
## 🚀 Self-hosting
|
|
|
|
The production image is available at `codeberg.org/lvl0/dish-planner:latest`.
|
|
|
|
### docker-compose.yml
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: codeberg.org/lvl0/dish-planner:latest
|
|
container_name: dishplanner_app
|
|
restart: always
|
|
ports:
|
|
- "8000:8000"
|
|
environment:
|
|
APP_KEY: "${APP_KEY}"
|
|
APP_URL: "${APP_URL}"
|
|
DB_DATABASE: "${DB_DATABASE}"
|
|
DB_USERNAME: "${DB_USERNAME}"
|
|
DB_PASSWORD: "${DB_PASSWORD}"
|
|
MAIL_HOST: "${MAIL_HOST:-}"
|
|
MAIL_PORT: "${MAIL_PORT:-587}"
|
|
MAIL_USERNAME: "${MAIL_USERNAME:-}"
|
|
MAIL_PASSWORD: "${MAIL_PASSWORD:-}"
|
|
MAIL_FROM_ADDRESS: "${MAIL_FROM_ADDRESS:-noreply@example.com}"
|
|
volumes:
|
|
- app_storage:/app/storage
|
|
depends_on:
|
|
- db
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/up"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
|
|
db:
|
|
image: mariadb:11
|
|
container_name: dishplanner_db
|
|
restart: always
|
|
environment:
|
|
MYSQL_DATABASE: "${DB_DATABASE}"
|
|
MYSQL_USER: "${DB_USERNAME}"
|
|
MYSQL_PASSWORD: "${DB_PASSWORD}"
|
|
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
|
|
volumes:
|
|
db_data:
|
|
app_storage:
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Required | Description |
|
|
|----------|----------|-------------|
|
|
| `APP_KEY` | Yes | Encryption key. Generate with: `echo "base64:$(openssl rand -base64 32)"` |
|
|
| `APP_URL` | Yes | Your domain (e.g., `https://meals.example.com`) |
|
|
| `DB_DATABASE` | Yes | Database name |
|
|
| `DB_USERNAME` | Yes | Database user |
|
|
| `DB_PASSWORD` | Yes | Database password |
|
|
| `DB_ROOT_PASSWORD` | Yes | MariaDB root password |
|
|
| `MAIL_HOST` | No | SMTP host for email notifications |
|
|
| `MAIL_PORT` | No | SMTP port (default: 587) |
|
|
| `MAIL_USERNAME` | No | SMTP username |
|
|
| `MAIL_PASSWORD` | No | SMTP password |
|
|
| `MAIL_FROM_ADDRESS` | No | From address for emails |
|
|
|
|
## 🔧 Development
|
|
|
|
### NixOS / Nix
|
|
|
|
```bash
|
|
git clone https://codeberg.org/lvl0/dish-planner.git
|
|
cd dish-planner
|
|
nix-shell
|
|
```
|
|
|
|
The shell will display available commands and optionally start the containers for you.
|
|
|
|
#### Available Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `dev-up` | Start development environment |
|
|
| `dev-down` | Stop development environment |
|
|
| `dev-restart` | Restart containers |
|
|
| `dev-rebuild` | Full rebuild (removes volumes) |
|
|
| `dev-rebuild-quick` | Quick rebuild (keeps volumes) |
|
|
| `dev-logs [service]` | Follow logs |
|
|
| `dev-shell` | Enter app container |
|
|
| `dev-artisan <cmd>` | Run artisan commands |
|
|
| `dev-fix-permissions` | Fix Docker-created file permissions |
|
|
|
|
#### Services
|
|
|
|
| Service | URL |
|
|
|---------|-----|
|
|
| App | http://localhost:8000 |
|
|
| Vite | http://localhost:5173 |
|
|
| Mailhog | http://localhost:8025 |
|
|
| MariaDB | localhost:3306 |
|
|
|
|
### Other Platforms
|
|
|
|
Contributions welcome for development setup instructions on other platforms.
|
|
|
|
## 📄 License
|
|
|
|
This project is open-source software licensed under the [MIT license](LICENSE.md).
|
|
|
|
## 📞 Support
|
|
|
|
For issues and questions, please use [Codeberg Issues](https://codeberg.org/lvl0/dish-planner/issues). |