Changelog — Donately
All notable changes to this app are recorded here. Newest entries on top.
[2026-05-16]
- Fix: Edit / Hide / Delete buttons on the forms list weren't catching clicks. Tapping any of the small icon buttons on the right of a row sometimes opened the form detail page instead of running the button's action. Each button now stops its own click cleanly, regardless of whether you hit the icon or its border.
- Embedded donation forms now auto-size to their content. When your form is embedded on another website via the
?embed=1 URL, the iframe height now adjusts to match the form so there's no empty space below it and no inner scrollbar. The host site just needs to add a small message listener (see the docs).
- Embedded donation forms now fluidly fill the iframe. Previously the form stayed capped at ~440px wide and left blank space on the sides of a wider iframe (and added 16px outer padding). In embed mode the wrap padding is now zero and the form scales to whatever width you give the iframe container — so it looks integrated into the host page instead of floating in the middle.
- Organization name no longer shows on the public donation form. The Quiet design used to print your organization name as a small kicker above "Make a donation"; the Editorial design printed it in a "№ 014 · Your Organization" pill at the top. Both are now hidden — your form just shows the form title. Your organization name is still used on the tax-deductible receipt where it belongs.
- Fix: Save / Cancel buttons in the form editor sheet no longer hover over fields. The button row is no longer sticky — it sits at the natural end of the form just like the gallery editor does. Scroll to the bottom to find Save / Cancel; the form fields above never get covered.
- Fix: dark mode now works correctly inside an embedded form. Previously, clicking the dark-mode toggle inside an iframe-embedded form left text floating on a transparent background (the host page would show through). Now the form keeps its visible dark surface when dark mode is active, so the form stays readable regardless of what's behind the iframe. Light mode still strips the chrome and blends seamlessly into the host page.
[2026-05-15]
- Every text on the donation form is now editable. Settings → Form labels & text lets you rewrite the form title, subtitle, the iOS-island "live appeal" pill, the "As you'd like to be thanked" name placeholder, the email/name/anonymous labels, the cover-fees sentences, the one-time / monthly buttons, the donate button, the secure-payment and tax-receipt footers, and the Progress design's raised / of / donors / days left / avg labels. Leave any field blank to keep the default.
- Filter donations by form. The donations list now has a Form dropdown so you can see only the donations made through a specific form. When the filter is active, a banner shows which form you're viewing with a one-click "Clear filter".
- Jump from a form to its donations. The form detail page now has a "View donations" button. The Raised and Donations stat cards are also clickable — they take you straight to the filtered donations list for that form.
- Filter to archived donations. A new Archived / Active dropdown on the donations list lets you see what you've hidden away.
- Delete donation forms forever. The forms list and form detail page now have a Delete button alongside Hide. Deleting a form removes its donations and subscription records, and the confirmation tells you exactly how many of each will go before you commit.
- Delete a donor forever. The donor profile now has a Delete donor button next to Archive. Deleting a donor also wipes their donations, subscriptions, and admin notes — count is shown in the confirmation.
- Archive individual donations. The donation detail page now has Archive and Restore buttons — handy for hiding test donations or failed payments from your main list without losing the record. The donations list hides archived ones by default.
- Active recurring subscriptions get a warning. If you delete a form or donor with an active monthly subscription, we mark it ended locally and remind you to cancel it in your Stripe or Paystack dashboard too — otherwise the donor's card will keep being charged.
- Delete a single donation. From the donation detail page, you can now remove a donation record permanently. This only affects your Donately admin — the actual payment in Stripe/Paystack stays untouched.
Internal
- Fixed the per-app uninstall hook signature (
int $userId → string $userId) so cleanup actually fires when an admin or cron purges the install.
[2026-05-14]
- Added a Watch/Read tab on the tutorial page — every lesson now has a written version alongside the video for users who prefer to read.
[2026-05-11] — Standalone-apps pivot
- Pancho is no longer involved in your co-admins' access. The "Staff & Invites" card in Settings is gone, along with the Pancho invite flow. Donately is single-admin today (one Pancho user per install); a future in-app Staff section will let you add co-admins directly with phone + PIN.
Internal
- All
require_tenant_member() / require_tenant_admin() gates rewritten to require_auth() as a placeholder. apps/donately/api/members.php and the members api-route removed.
- Schema:
tenant_members / tenant_invites CREATE TABLE statements stripped (comments remain). identity block removed from app.json.
[2026-05-10]
- Initial release. Donately is here. Create as many donation forms as you need, share a clean URL with donors, and collect money straight into your own Stripe or Paystack account.
- Four hand-crafted designs. Pick from Quiet (minimal sage), Editorial (print-spread serif), Native (iOS glass), or Progress (campaign goal bar). Each works in light and dark mode and lets donors toggle.
- Per-form custom domains. Map any verified domain to a specific donation form so
donate.yourbrand.org opens your spring appeal, not a generic page. Configure under Account → Domains; Donately appears with a picker for which form the domain should point at.
- One-time and monthly recurring. Donors choose on the form. Recurring runs on Stripe Subscriptions or Paystack Plans; webhooks renew automatically; admin can cancel from the donor profile.
- Tenant-owned payment keys. Each install enters its own Stripe and Paystack keys in Settings. Money flows straight to you — Mypancho takes no cut and never holds your funds.
- Donor profiles, deduplicated by email. Repeat donors land as the same record, not a new row. Total given, donation count, first/last gifted dates, and admin-only notes.
- Real reports. Daily revenue chart, recurring vs one-time split, top forms, top donors, recurring health (active subscribers, past-due, MRR, churn).
- Cover the fee toggle lets donors absorb processor fees so 100% of their gift reaches you. Auto-computed by provider and currency.
- Custom fields per form. Collect t-shirt size, employer for matching, dedication name — whatever you need, optional or required.
- Goal progress bar on the Progress design. Live tracker of raised vs goal with donor count and days left.
- Staff seats. Invite teammates as view-only staff. They see donations and donors but not Settings or Forms creation.
- Refund window. Configure how long after a donation admins can refund directly from the donation detail page.
Internal
- Stripe path uses the Payment Element (not legacy
card element) for SCA / 3DS support out of the box. Paystack path uses the official PaystackPop popup.
- Webhook handlers verify HMAC signatures, are idempotent on
(provider, event_id), and record events to a local webhook_events log for debugging.
- The four design files (
views/public/styles/*.php) are 1:1 ports of the original JSX designs at apps/donately/source/_extracted/forms/. Both light and dark palettes live in donately_form_palette().