dishplanner/README.md
myrmidex 1b6effb5d0
Some checks failed
CI / ci (push) Failing after 3s
CI / ci (pull_request) Failing after 2m32s
47 - Professionalize documentation
2026-08-17 14:11:50 +02:00

4.3 KiB

🍽️ Dish Planner

CI License: AGPL-3.0

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 forge.lvl0.xyz/lvl0/dishplanner:latest. See CHANGELOG.md before upgrading.

docker-compose.yml

services:
  app:
    image: forge.lvl0.xyz/lvl0/dishplanner: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://forge.lvl0.xyz/lvl0/dishplanner.git
cd dishplanner
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-logs-db Tail database logs
dev-shell Enter app container
dev-artisan <cmd> Run artisan commands
dev-test [path] Run the PHPUnit suite the CI way
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.

🤝 Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for the development setup, the checks that run in CI, and the commit conventions.

📄 License

This project is open-source software licensed under the AGPL-3.0 license.

📞 Support

For issues and questions, please use Forgejo Issues.