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.288] — 2026-09-02
Added
- Shielded.co.nz site-safety badge added to the footer (with the embed script and modal opener), sitting alongside the AdvertiseOnline.co.nz credit.
[0.9.287] — 2026-09-01
Added
- Fundraisers can now download a QR code for their public page from the
"Edit fundraiser" screen. The QR includes the site's G icon in the centre
(white-backed so it stays scannable), links to
/f/{slug}, and is served by a new owner/staff-only API with a one-click PNG download.
[0.9.286] — 2026-08-31
Fixed
- The audit archive job now verifies the Dedirock copy by listing the remote
audit/directory (a single-filelsdidn't match reliably), so the upload-then-delete pipeline completes.
[0.9.285] — 2026-08-31
Fixed
- The audit archive job connects to the Dedirock backup server as the
gnzbackupSFTP user (matching the live offsite backup), and creates the remoteaudit/directory in a tolerated pre-step so an "already exists" reply never aborts the upload.
[0.9.284] — 2026-08-31
Added
- Audit-log archive and retention job (
scripts/audit-archive.sh+audit-archive.mjs): logs older than 30 days are exported to a gzipped TXT archive, pushed to the Dedirock off-site backup server over the restricted SFTP channel, verified, and only then deleted from the database. Scheduled daily so the live audit log keeps a rolling 30-day window.
[0.9.283] — 2026-08-31
Fixed
- Blog full-text search now passes the language config as a fixed SQL literal (the previous build parameterized it, which Postgres rejected with "function plainto_tsquery(text, text) does not exist").
[0.9.282] — 2026-08-31
Changed
- Blog search now uses Postgres full-text search (tsvector column + GIN index
via migration 0057) ranked by relevance, replacing slow
ILIKEtext scans over title/excerpt/content — it stays fast as the blog grows past a few thousand posts. English stemming means "voucher" and "vouchers" now match each other. - The public blog API is paginated (
page,pageSizeup to 50,q) and returnsposts,total,pageandpageCountinstead of every post at once.
[0.9.281] — 2026-08-31
Changed
- The XML sitemap now caches its generated result for 6 hours instead of re-querying every fundraiser, blog post, organisation, wholesale product and P2P page on every request. Concurrent crawls share one generation, and the cache clears automatically if a generation fails.