Changelog
All notable changes to Generous.nz are recorded here, grouped by version. Every deployed build has a version number, a git tag, and an entry below.
Versioning scheme
Versions follow MAJOR.MINOR.PATCH:
- 0.x — pre-launch. Minor bumps mark a completed build phase or major feature set; patches are bug fixes on the current build.
- 1.0.0 — first public launch.
- 1.x+ — post-launch: minor = new features, patch = fixes, major = breaking changes or significant re-architecture.
Each version is tagged in git (v0.2.0) and the current version is kept in
package.json. See docs/version-control.md for how to cut a release.
[0.9.192] — 2026-08-26
Changed
- Referral attribution is now first-touch for both fundraiser and business links: the first invite a visitor opens is saved for 5 days and later links never override it, so the first referrer keeps the bonus. Landing pages show the credited inviter when an invite is already saved.
[0.9.191] — 2026-08-26
Changed
- Fundraiser referral landing page upgraded to match the business page: a prominent "Your invite bonus" card showing $100 of first fundraising fee-free ($0.00 platform fee on the first $100, then 5% + GST only when you raise, donors can cover the fee) plus a trust strip (direct Stripe payments, AI fraud checks, made in NZ, no monthly fees).
[0.9.190] — 2026-08-26
Added
- Referral links (
/r/G-…) now open a tailored sales landing page instead of redirecting straight to sign-up. Business links pitch the first $1,000 in sales fee-free, direct payments and order fulfilment; fundraiser links pitch the first $100 raised fee-free with the full range of raise types and AI tools. Each page shows the inviter, the offer, how it works, FAQ, and a clear CTA, and the 5-day referral cookie is still set on load (via a server action) so the reward is claimed at sign-up. Unknown/invalid links show a friendly generic page instead of an error.
[0.9.189] — 2026-08-26
Fixed
- Purchase history now survives item deletion. Verified at the database
level:
Order→Product/FundraiserandDonation→FundraiseruseON DELETE RESTRICT, so hard-deleting a product or fundraiser with orders fails instead of wiping them, and the app's own remove/delete flows were already soft (statusREMOVED/ARCHIVED). The one cascade that could erase sold vouchers —VoucherCode.wholesaleProductId→CASCADE— is nowSET NULL, so purchasers keep their vouchers in "My purchases" even if a wholesale product is hard-deleted. Wholesaler voucher lists/export handle removed products gracefully.
[0.9.188] — 2026-08-26
Changed
docs/bulk-test-runbook.mdupdated: disputes/refunds/payouts on seller accounts are now covered by the daily reconciliation job (v0.9.187); only recurring-donation renewals still need the seller webhook secret.
[0.9.187] — 2026-08-26
Added
- Daily connected-account reconciliation (
lib/payments/stripe-sync.ts, wired into/api/cron/reconcilewhich the daily app cron already calls). With the direct-charge model, Stripe sends dispute, refund and payout events to the seller's own account rather than the platform webhook — this job now polls every connected account over a rolling lookback (default 7 days,RECONCILE_LOOKBACK_DAYS) and replays the same logic the webhook would have run: mark orders/donations disputed or refunded, hold/cancel/restore commission, apply fee credits, notify sellers, raise moderation flags, and keep payout history current. Everything is idempotent, so missed webhooks self-heal on the next run, and seller-initiated refunds (which the webhook never saw) are now captured too.
[0.9.186] — 2026-08-26
Changed
docs/bulk-test-runbook.mdcorrected after the second full test run: Step 3 now makes clear thatcreate-checkouts-2.jsis only for re-creating wholesale checkouts that failed in the main script (running it otherwise duplicates orders), and stalecheckouts2.jsonshould be deleted before a fresh run..attach-shared-account.js(server helper, not app code) was also fixed to recreate a plain index so re-runs work.
[0.9.185] — 2026-08-26
Added
docs/bulk-test-runbook.md: the full automated test runbook for Stripe test mode. Saying "run testing" in a future conversation executes Steps 0–6 (test-mode check, seed data, shared test account attach, checkout creation, automated card payments, database/email verification, cleanup) and reports results per scenario.