No description
Find a file
myrmidex 7b14aa240c
All checks were successful
CI / ci-image (pull_request) Successful in 1m1s
CI / ci (pull_request) Successful in 9m53s
Merge branch 'release/v0.9.0' into 55-add-browser-test-for-registration
2026-08-20 23:44:34 +02:00
.forgejo/workflows 61 - Bake node modules and Chromium into the CI image 2026-08-19 19:32:08 +02:00
.vite/deps feature - 6 - Structural fixes 2025-12-28 11:01:13 +01:00
app 51 - Indicate eating out when skipping a meal 2026-08-18 22:01:59 +02:00
bin FOSS pivot: retire SaaS, demo, and APP_MODE plumbing (#37 #38 #39 #40 #41) 2026-08-16 17:29:19 +02:00
bootstrap 45 - Add Forgejo CI workflow 2026-08-17 13:30:49 +02:00
config 45 - Add Forgejo CI workflow 2026-08-17 13:30:49 +02:00
database 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
docker 55 - Move the dev image to Debian so Playwright can run 2026-08-20 23:32:21 +02:00
public feature - 3 - Add logos 2026-01-04 04:01:11 +01:00
resources 35 - Add dashboard stats for dishes, users, meals and favorites 2026-08-19 15:42:39 +02:00
routes 35 - Add dashboard stats for dishes, users, meals and favorites 2026-08-19 15:42:39 +02:00
src/DishPlanner 35 - Add dashboard stats for dishes, users, meals and favorites 2026-08-19 15:42:39 +02:00
storage feature - 6 - Structural fixes 2025-12-28 11:01:13 +01:00
tests 55 - Add browser test for registration 2026-08-20 23:36:30 +02:00
.dockerignore FOSS pivot: retire SaaS, demo, and APP_MODE plumbing (#37 #38 #39 #40 #41) 2026-08-16 17:29:19 +02:00
.editorconfig feature - 6 - port react frontend to laravel blade + livewire 2025-12-28 10:47:18 +01:00
.env.example feature - 6 - port update compose files 2025-12-28 10:47:18 +01:00
.env.testing 45 - Add Forgejo CI workflow 2026-08-17 13:30:49 +02:00
.gitattributes 46 - Add CI image and app image build workflows 2026-08-17 14:00:02 +02:00
.gitignore 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
artisan feature - 6 - port react frontend to laravel blade + livewire 2025-12-28 10:47:18 +01:00
CHANGELOG.md 47 - Document v0.8.0 in CHANGELOG 2026-08-17 21:38:10 +02:00
composer.json 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
composer.lock 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
CONTRIBUTING.md 52 - Move dev compose to docker/dev/ to match the standard layout 2026-08-19 00:13:46 +02:00
docker-compose.prod.yml FOSS pivot: retire SaaS, demo, and APP_MODE plumbing (#37 #38 #39 #40 #41) 2026-08-16 17:29:19 +02:00
Dockerfile feature - 18 - Add payments to subscription flow 2026-01-07 00:29:53 +01:00
Dockerfile.dev 55 - Move the dev image to Debian so Playwright can run 2026-08-20 23:32:21 +02:00
LICENSE.md FOSS pivot: retire SaaS, demo, and APP_MODE plumbing (#37 #38 #39 #40 #41) 2026-08-16 17:29:19 +02:00
package-lock.json 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
package.json 54 - Replace Dusk with Pest 4 browser testing 2026-08-19 02:09:42 +02:00
phpstan-baseline.neon 60 - Make schedule test assertion counts deterministic 2026-08-20 20:24:09 +02:00
phpstan.neon 45 - Add Forgejo CI workflow 2026-08-17 13:30:49 +02:00
phpunit.xml 53 - Force phpunit.xml env vars to protect the dev database 2026-08-18 23:42:00 +02:00
pint.json 45 - Add Forgejo CI workflow 2026-08-17 13:30:49 +02:00
postcss.config.js feature - 6 - port react frontend to laravel blade + livewire 2025-12-28 10:47:18 +01:00
README.md 52 - Move dev compose to docker/dev/ to match the standard layout 2026-08-19 00:13:46 +02:00
shell.nix 56 - Cover session invalidation and fix pest-browser path handling 2026-08-20 22:05:39 +02:00
tailwind.config.js feature - 3 - Improve login page layout 2026-01-04 03:26:50 +01:00
vite.config.js feature - 6 - fix dev compose issues 2025-12-28 10:47:18 +01:00

🍽️ 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.prod.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.