{"id":31853539,"url":"https://github.com/programie/mealplan","last_synced_at":"2025-10-12T13:29:53.107Z","repository":{"id":171757170,"uuid":"638466811","full_name":"Programie/MealPlan","owner":"Programie","description":"A webapp for managing meal plans","archived":false,"fork":false,"pushed_at":"2025-02-24T07:19:18.000Z","size":753,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-25T09:36:07.950Z","etag":null,"topics":["cooking","meal-management","meal-planner","meal-tracker"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Programie.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-09T12:35:41.000Z","updated_at":"2025-02-24T07:19:15.000Z","dependencies_parsed_at":"2023-10-01T15:30:58.664Z","dependency_job_id":"847e26dd-d1cd-4af1-b148-c5d4164f18dc","html_url":"https://github.com/Programie/MealPlan","commit_stats":null,"previous_names":["programie/mealplan"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Programie/MealPlan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Programie%2FMealPlan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Programie%2FMealPlan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Programie%2FMealPlan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Programie%2FMealPlan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Programie","download_url":"https://codeload.github.com/Programie/MealPlan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Programie%2FMealPlan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011444,"owners_count":26084947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cooking","meal-management","meal-planner","meal-tracker"],"created_at":"2025-10-12T13:29:51.734Z","updated_at":"2025-10-12T13:29:53.101Z","avatar_url":"https://github.com/Programie.png","language":"PHP","readme":"# MealPlan\n\nA webapp for managing meal plans.\n\n[![DockerHub](https://img.shields.io/badge/download-DockerHub-blue?logo=docker)](https://hub.docker.com/r/programie/mealplan)\n[![GitHub release](https://img.shields.io/github/v/release/Programie/MealPlan)](https://github.com/Programie/MealPlan/releases/latest)\n\n## Features\n\n* Create weekly meal plans\n* Get an overview of your most or least cooked meals\n* Get notified to prepare your meals before actually cooking the meal (i.e. for marinade)\n* Autocomplete meal entries from previous created meal plans\n  * Integrate [Tandoor Recipes](https://docs.tandoor.dev) to autocomplete meal entries from recipes in your cookbook\n\n## Security notice\n\nAs of now, there is no authentication implementation available. Everyone able to access the application can see and modify your meal plans!\n\nYou should not make this application reachable from the internet without configuring authentication on the webserver level (i.e. htaccess/htpasswd on Apache).\n\nA proper authentication system might be implemented in the future.\n\n## Installation\n\nDownload the [latest release](https://github.com/Programie/MealPlan/releases/latest) and extract it into your webserver directory. Change the document root to the `public` directory.\n\nAlternatively, you might want to use the [Docker image from Docker Hub](https://hub.docker.com/r/programie/mealplan).\n\n## Configuration\n\nThe base configuration for the database as well as the application base URL can be configured in the `.env` file or by configuring environment variables in your webserver.\n\nVariables:\n\n```dotenv\nAPP_URL=https://app-domain.example.com\nDATABASE_DRIVER=pdo_mysql\nDATABASE_HOST=your.database.host\nDATABASE_NAME=database-to-use\nDATABASE_USERNAME=username-to-use\nDATABASE_PASSWORD=password-to-use\nDATABASE_SERVER_VERSION=mariadb-11.0.3\n```\n\nMySQL (or MariaDB to be exact) is the only supported database driver. The application might work with another database system as well.\n\nAll other configuration is done in `config.yaml` which should be placed in the `config` folder. For default values, you can take a look into the [defaults.yaml](config/defaults.yaml).\n\n### Custom links\n\nYou might configure any links which will be shown in the \"Links\" dropdown.\n\nThe links can be configured in the `config.yaml` like in the following example:\n\n```yaml\nparameters:\n  app.custom-links:\n    # Add a link\n    - title: \"Some link\"\n      url: \"https://example.com\"\n\n    # Add another link\n    - title: \"Another link\"\n      url: \"https://example.org\"\n\n    # Add a separator\n    - separator: true\n\n    # Add a submenu\n    - title: \"Submenu\"\n      links:\n        # Link in this submenu\n        - title: \"A link in a submenu\"\n          url: \"https://example.com/foo\"\n\n        # Another submenu in this submenu\n        - title: \"Sub-Submenu\"\n          links:\n            # Another link\n            - title: \"Link in the sub-submenu\"\n              url: \"https://example.com/foobar\"\n```\n\n### Webhooks\n\nIt is possible to send a request upon saving a meal plan or for configured notifications.\n\nTo configure a webhook which should be called after saving the meal plan, you might use the following configuration in your `config.yaml`:\n\n```yaml\nparameters:\n  app.save:\n    webhook-url: https://example.com/some-webhook-path\n```\n\nRequesting a specific URL for configured notifications can be configured like the following in your `config.yaml`:\n\n```yaml\nparameters:\n  app.notification:\n    webhook-url: https://example.com/some-notification-path\n```\n\n### Notifications\n\nMealPlan can send notifications for specific meal plan entries. This is useful to not forget to do something important a few hours before actually cooking the meal.\n\nThe easiest way to configure notifications is by using the webfrontend while editing the meal plan. But you have to remember to actually add the notification every time you need it.\n\nAnother way is to automatically add those notifications based on specific patterns of the meal title. This can be done by using the `app.notification \u003e pattern-times` configuration property in your `config.yaml`:\n\n```yaml\nparameters:\n  app.notification:\n    pattern-times:\n      # Configuration which will trigger a notification 1 hour before the meal time\n      - patterns:\n          - '/some meal/'\n          - '/another meal/'\n        time: \"1H\"\n        text: \"There is something todo\"\n        space: 1\n\n      # Configuration which will trigger a notification 12 hours before the meal time\n      - patterns:\n          - '/long preparation meal/'\n        time: \"12H\"\n        text: \"Something todo\"\n        space: 1\n```\n\n`patterns` is a list of regular expressions which should match the meal title.\n\nThe property `time` defines the time till the meal ([ISO 8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations)).\n\nThe `text` is simply included in the notification (i.e. for displaying to the user).\n\nThe `space` property can be used to restrict the patterns to a specific space. If omitted, the configuration will be used in all spaces.\n\n**Note:** As of now, a notification only requests the notification webhook URL (see the [Webhooks](#webhooks) section).\n\n**Note:** To trigger notifications, you must configure a cronjob or something similar to regularly execute `bin/console trigger-notifications`.\n\n### All Meals\n\nTo exclude specific parts of meals or whole meals from the \"All Meals\" list, you might use the following configuration in your `config.yaml`:\n\n```yaml\nparameters:\n  # Remove patterns from the meal text\n  # This example will list \"Remaining of Bread\" as \"Bread\"\n  app.grouped-meals.remove-patterns:\n    - /^Remaining of /\n\n  # Exclude patterns from the list\n  # This example will prevent \"meal to exclude\" to be included in the \"All Meals\" list\n  app.grouped-meals.exclude-patterns:\n    - /meal to exclude/\n```\n\n### Tandoor Recipes\n\nTo enable the Tandoor Recipes integration for autocompleting meals from your recipes, add the following configuration to your `config.yaml`:\n\n```yaml\nparameters:\n  app.datasources.provider: tandoor-recipes\n  app.datasources.tandoor-recipes:\n    base-url: https://your-tandoor-instance.example.com\n    api-token: your-api-key\n```\n\nYou can get the API key in the account settings of your Tandoor Recipes instance.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogramie%2Fmealplan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprogramie%2Fmealplan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogramie%2Fmealplan/lists"}