Home resource planing
  • PHP 80.8%
  • Twig 17.9%
  • Gherkin 0.6%
  • Nix 0.2%
  • CSS 0.2%
  • Other 0.3%
Find a file
psycodepath 8f72e77488
Some checks failed
CI/CD Pipeline / test (push) Successful in 54s
CI/CD Pipeline / build-and-push (push) Failing after 19s
task: cleanup directories
2026-07-10 14:15:44 +02:00
.agents docs(agents): correct styling stack, dedupe logging, renumber sections 2026-07-10 14:01:36 +02:00
.forgejo/workflows ci: fix docker installation and tagging in forgejo actions 2026-07-06 20:45:43 +02:00
.github/ISSUE_TEMPLATE docs: formalize ticket-first, BDD-first development workflow 2026-07-10 11:22:02 +02:00
assets/css feat(ux): unified confirm modal, toasts, and UX cleanups across templates 2026-06-25 20:48:22 +02:00
bin feat(kernel): add API key expiry and revocation (M7) 2026-07-08 21:20:43 +02:00
config feat(grocery): add sqlite adapters, twig templates, and psr-15 action handlers 2026-06-22 23:08:11 +02:00
docs task: cleanup directories 2026-07-10 14:15:44 +02:00
features Merge pull request 'issue/4-sessions-auth' (#10) from issue/4-sessions-auth into main 2026-07-03 18:50:50 +00:00
migrations feat(kernel): add API key expiry and revocation (M7) 2026-07-08 21:20:43 +02:00
public fix(kernel): stop leaking stack traces to clients in production (X2) 2026-07-08 21:05:45 +02:00
src task: cleanup directories 2026-07-10 14:15:44 +02:00
templates feat(kernel): add app-wide CSRF protection for state-changing requests 2026-07-08 16:49:34 +02:00
tests fix(grocery): fail taxonomy classification instead of saving junk on Gemini error 2026-07-08 21:24:24 +02:00
translations feat(ux): unified confirm modal, toasts, and UX cleanups across templates 2026-06-25 20:48:22 +02:00
.dockerignore Add docker-compose.yml and .dockerignore for deployment 2026-06-24 17:01:25 +02:00
.env.example fix(kernel): gate Authelia header auth on trusted proxy, drop dev bypass 2026-07-08 16:31:35 +02:00
.envrc feat: add stub dev env 2026-06-21 22:17:14 +02:00
.gitignore chore: exclude .planning/ from version control 2026-06-25 13:03:59 +02:00
behat.yml feat: integrate Behat and configure Gherkin feature tests 2026-06-25 21:48:39 +02:00
Caddyfile chore: configure multi-tenant reverse proxy and document branching workflow 2026-06-25 21:37:03 +02:00
composer.json docs(agents): correct styling stack, dedupe logging, renumber sections 2026-07-10 14:01:36 +02:00
composer.lock composer: replace manual env file parsing with vlucas/phpdotenv 2026-07-08 11:32:00 +02:00
docker-compose.yml chore: configure multi-tenant reverse proxy and document branching workflow 2026-06-25 21:37:03 +02:00
Dockerfile fix: compile and enable php intl extension in docker image 2026-06-24 22:28:24 +02:00
flake.lock feat: add stub dev env 2026-06-21 22:17:14 +02:00
flake.nix chore: configure multi-tenant reverse proxy and document branching workflow 2026-06-25 21:37:03 +02:00
HANDOFF.md docs: add comprehensive handoff for multi-tenancy implementation 2026-07-03 20:56:04 +02:00
LICENSE docs: improve README and add MIT license 2026-07-03 20:57:39 +02:00
package-lock.json Configure CSS build pipeline with Tailwind CSS v4 and daisyUI v5 via Tailwind CLI 2026-06-24 20:13:48 +02:00
package.json Configure CSS build pipeline with Tailwind CSS v4 and daisyUI v5 via Tailwind CLI 2026-06-24 20:13:48 +02:00
README.md docs: add docs/ folder and slim down README 2026-07-08 21:39:55 +02:00

Home Resource Planner (HRP)

A multi-tenant household management application built with PHP that helps families organize recipes, meal plans, grocery shopping, pantry inventory, and household tasks.

Features

  • 📊 Multi-tenant — isolated per-family SQLite database, subdomain-based tenant detection (e.g. family1.example.com).
  • 🍽️ Recipes & meal planning — store recipes, plan the week, and generate shopping lists from a plan.
  • 🛒 Grocery, catalog & pantry — shopping lists, a deduplicated product catalog, and pantry inventory with expiration tracking.
  • 📝 Tasks — household task / chore management.
  • 🤖 AI assists — optional Google Gemini recipe import and grocery taxonomy classification.
  • 👥 Flexible auth — local, LDAP/Active Directory, Authelia SSO, and API keys for integrations.
  • 🔒 Session isolation — per-tenant sessions with automatic database provisioning and migration.

Documentation

Full documentation lives in docs/:

Quick start

Requirements: PHP 8.5+, Composer, Git. Nix is optional (reproducible dev shell via flake.nix).

git clone https://git.steffenfrosch.de/psycodepath/hrp.git
cd hrp

# Optional: enter the Nix dev shell
nix develop

composer install
cp .env.example .env

# Serve at http://localhost:8000
composer dev          # php -S localhost:8000 -t public/

The database provisions and migrates itself on first request — no manual migration step. Create a local login and sign in at /login:

php bin/console user:create admin --tenant=default \
  --display-name="Admin" --password='change-me'

See Installation & Setup for multi-tenant host setup, Docker, and troubleshooting.

Project structure

hrp/
├── public/         # Web root (index.php front controller)
├── bin/console     # CLI entry point (Symfony Console)
├── config/         # Container bootstrap
├── src/            # Application code (PSR-4: Hrp\)
│   ├── Kernel/     # Core infrastructure (DI, tenancy, DB, auth, routing, AI)
│   ├── Grocery/    # Lists, catalog, pantry, categories, taxonomy
│   ├── Meals/      # Recipes, meal planning, recipe import
│   ├── Tasks/      # Household tasks
│   └── Account/    # User-account domain (placeholder; auth lives in Kernel)
├── migrations/     # SQL migrations (NNN_*.up.sql / .down.sql)
├── templates/      # Twig templates
├── translations/   # i18n message catalogs
├── tests/          # PHPUnit tests
├── features/       # Behat (BDD) feature tests
└── var/            # Runtime data (per-tenant SQLite, tenants.json, cache)

Development

./vendor/bin/phpunit tests   # unit & integration tests
composer behat               # BDD feature tests
composer stan                # PHPStan (level 8)
./vendor/bin/phpcs src tests # PSR-12 coding standard

Application logs are written to stdout as JSON (Monolog); verbosity is set by LOG_LEVEL.

Contributing

  1. Fork the repository.
  2. Create a feature branch (git checkout -b feature/amazing-feature).
  3. Commit your changes.
  4. Push and open a pull request in Forgejo.

License

This project is licensed under the MIT License — see LICENSE.

Support