No description
Find a file
Philip Peterson 2dd6c7da22 Add email field to booking form + dev mail mocking
- 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.
2026-06-03 23:05:06 -07:00
.gitea/workflows Add front page, nav rebuild, and CI workflow 2026-05-14 20:05:46 -07:00
.idea Structure 2026-05-12 17:28:47 -07:00
.vscode File extensions 2026-05-08 22:56:06 -07:00
config/sync wip booking flow 2026-05-13 14:55:52 -07:00
docker Add email field to booking form + dev mail mocking 2026-06-03 23:05:06 -07:00
node_modules wip 2026-05-24 19:23:05 -07:00
scripts wip booking flow 2026-05-13 14:55:52 -07:00
web Add email field to booking form + dev mail mocking 2026-06-03 23:05:06 -07:00
.gitignore Initial commit 2026-04-20 00:33:56 -04:00
build.sh Fix styling 2026-05-27 23:42:59 -07:00
CLAUDE.md Add email field to booking form + dev mail mocking 2026-06-03 23:05:06 -07:00
composer.json wip booking flow 2026-05-13 14:55:52 -07:00
docker-compose.yml Fix statelessness 2026-05-28 18:14:59 -07:00
Dockerfile Add email field to booking form + dev mail mocking 2026-06-03 23:05:06 -07:00
Makefile Fix styling 2026-05-27 23:42:59 -07:00
package-lock.json wip 2026-05-24 19:23:05 -07:00
package.json Tailwind 2026-05-16 11:45:33 -07:00
README.md Fix statelessness 2026-05-28 18:14:59 -07:00
tailwind.config.js add swatch page, rename colors 2026-06-01 02:46:47 -07:00

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