Case study 02Postal Stationery Society of Australia2026
Australian Postal Stationery Society
A rebuild of a philatelic society’s ageing WordPress site as a Next.js site and admin CMS — three decades of journals migrated, made searchable, and handed to a volunteer to run without code.

The brief
The Postal Stationery Society of Australia had decades of journals, handbooks and articles sitting behind an old WordPress site that only a developer could change. The society needed a site its volunteer administrator could run, and an archive members could actually search.
I rebuilt it on Next.js, Supabase and Cloudflare R2, migrated every legacy file, and designed the admin around the requests the administrator sent me.
What I built
- A block-based CMS — hero, prose, link list, download, media and contact blocks — with drafts, previews, revision history and old-slug redirects
- An admin-editable three-tier navigation with dropdowns, reordering and a live preview
- A journal archive with member-only issues, plus galleries, news, downloads and a site-wide meeting notice
- Full-text search across journal PDFs and slide decks, using OCR for scanned pages, indexed automatically on upload
- Direct-to-R2 browser uploads through presigned URLs, with every file tracked in an asset registry
- Member sign-up and roles, with an activity log for the admin team
Moving thirty years of files
Idempotent import scripts pulled every legacy file, registered it, uploaded it to R2 and rebuilt the journal records — parsing three decades of inconsistent filenames, double issues included. Issues from 2020 onwards, which had never been on the public site, were backfilled from the society’s records.
Switching download links to R2 is guarded: the publish step fetches a probe file anonymously and aborts unless the bytes match, so a misconfigured bucket can’t turn working links into broken ones.
Search is private by design. Extracted text stays server-side, and public search returns only short snippets and links to the files.
By the numbers
- Legacy files migrated
- 207
- Archive moved to R2
- 665 MB
- Back-issue journals
- 103