Organisation Subsite (CMS): new public website builder
- Introduced the new
subsiteapp: a per-organisation public website served from an org subdomain. - Added
SubsiteandSubsitePagemodels with sanitised HTML content. - Added subdomain routing middleware for production and a local dev override for testing.
- Integrated the visual page editor into the CMS dashboard.
- Added sanitisation dependencies and permissions wiring for all roles.
Disbursements: soft-delete + improved project UI
- Disbursements are now soft-deleted (tracked via
is_deleted,deleted_at,deleted_by) instead of being permanently removed. - Default queries exclude deleted records; the admin uses an unfiltered manager so deleted items remain visible and filterable.
- Disbursements moved into a dedicated Disbursements tab on the Project detail page with a sortable table, edit/delete actions, and a delete confirmation modal.
Donations: post-save receipt actions + soft-delete
- The Create Donation flow now supports post-save actions via a confirmation modal:
- Save the donation (always on)
- Create a receipt (default on)
- Email the receipt to the donor (default off)
- Receipt generation is handled via the existing receipt status + notification services.
- Donation deletion is now soft-delete (audit fields preserved; default queries exclude deleted rows).
- The donor autocomplete now emits a
donorSelectedevent so the modal can display the donor’s email dynamically.
Newsletter: improved AI prompt + live financial stats
- Updated the AI system prompt:
- Includes partner name in subtitle
- Passes through category
- Produces a 2–3 paragraph body
- Explicitly enforces “no financial figures” in the narrative
- Switched newsletter financial stats from editable DB fields to live computation (stats always reflect current project values).
- Improved preview UX:
- Added lightbox viewer for project photos
- Testimonial panel now renders consistently with an empty-state message
- Pull quote panel only renders when quote text is present