No description
- Add required email input (with autocomplete="email") to the booking
details form in the homepage Preact widget (rpt-booking.js).
Update EMPTY_FORM, submit payload, confirmedAppointment, and success
summary to include it. The form now collects: first/last name, email,
phone, comments.
- Update ScheduleController::storeSlot to extract/pass email in the
booking_request mail params (and require it for the full-contact path).
Log failures with details; return a structured error with a user-friendly
message instead of bare "mail_failed".
- riverside_pt_mail hook now includes the user's email in the notification
body (when provided).
- Dev improvements for mail:
- In DEBUG mode (default on localhost), force php_mail interface in
settings.php so the mailer uses the sendmail_path override.
- Dockerfile + entrypoint.sh now provide/install a fake-sendmail.sh
that prints the full email (To, Subject, headers, body from the
hook) to stderr (visible in `docker compose logs`) and always
succeeds (exit 0). This prevents "sh: 1: /usr/sbin/sendmail: not
found" and guarantees booking submissions never return the
"unable to send confirmation email" error in dev.
- In non-DEBUG, still uses symfony_mailer + Postmark as before.
- The fake is also baked into the image for consistency.
- JS error handling now prefers the server-provided 'message' from
the JSON error response (better UX for real mail failures).
- Update CLAUDE.md with the new email field + dev mail mocking behavior.
- New file: docker/php/fake-sendmail.sh (the mock).
This addresses the recent "mail_failed" issues while keeping production
email via Postmark.
|
||
|---|---|---|
| .gitea/workflows | ||
| .idea | ||
| .vscode | ||
| config/sync | ||
| docker | ||
| node_modules | ||
| scripts | ||
| web | ||
| .gitignore | ||
| build.sh | ||
| CLAUDE.md | ||
| composer.json | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Makefile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tailwind.config.js | ||
Riverside Physical Therapy
A Drupal-based appointment scheduling site for booking sessions between patients and practitioners.
Running locally
docker compose up --build
Default behavior: Every start performs a full database wipe + rebuilds the entire site from code (content types, fields, menu, etc.). See CLAUDE.md for details and the DRUPAL_FAST=1 escape hatch for faster iteration.
Admin login: admin / admin at /user/login
Makefile commands
make shell # open a bash shell in the app container
make drush <cmd> # run any drush command, e.g. make drush cr
Scripts
Seed provider availability
Populates provider_availability nodes for the next calendar month across all active providers, using randomised noise per provider.
make drush php-script scripts/seed_availability.php
Preview without saving:
SEED_DRY_RUN=1 make drush php-script scripts/seed_availability.php
Wipe existing availability for the month before seeding:
SEED_WIPE=1 make drush php-script scripts/seed_availability.php
Running the script twice without SEED_WIPE=1 will create duplicates.
Modules
- FullCalendar View — interactive appointment calendar
- Webform — patient booking forms
- Symfony Mailer — transactional email