No description
| .vite/deps | ||
| app | ||
| bin | ||
| bootstrap | ||
| config | ||
| database | ||
| docker/mysql-init | ||
| frontend-old | ||
| public | ||
| resources | ||
| routes | ||
| src/DishPlanner | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.dusk.local | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| build-push.sh | ||
| build_and_push.sh | ||
| composer.json | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| LICENSE.md | ||
| package-lock.json | ||
| package.json | ||
| phpunit.dusk.xml | ||
| phpunit.xml | ||
| postcss.config.js | ||
| README.md | ||
| shell.nix | ||
| tailwind.config.js | ||
| update.sh | ||
| vite.config.js | ||
🍽️ 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
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
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.
📞 Support
For issues and questions, please use Codeberg Issues.