Public Sector Network platform
The community, events, learning and marketplace platform behind Public Sector Network, a free government-only network across Australia, New Zealand and North America. Built from the first commit in 2022 and run end to end as CTO.

The brief
Public Sector Network connects government professionals across Australia, New Zealand and North America: communities of practice, insights, events, training and a marketplace of vetted suppliers, free to anyone with a government email address, reaching an audience the network puts at more than 100,000. It is a certified B Corporation. In 2022 its digital side was a WordPress site and a handful of third-party tools that did not talk to each other. PSN needed a platform it owned: one place for members, content, events and vendors that a small team could run, and that would stand up to the scrutiny of government buyers and, later, a security audit.
What I built
I started the platform from an empty repository in January 2022 and have led it since, first with a team of two to three developers and, since mid-2025, as the sole engineer with AI-assisted tooling as the force multiplier. It replaced the WordPress-era site piece by piece; the last WordPress integration code was retired in 2026.
Today it is a Django and Wagtail application of about 105,000 lines of application code and 83,000 lines of tests, organised into 23 apps:
- Communities: posts, polls, memberships and live sessions with polls and Q&A, pushed to the browser over server-sent events rather than websockets.
- Insights: articles, whitepapers and video, with PostgreSQL full-text search and topic communities.
- Events: Wagtail pages for Government Innovation Week and the Innovation Showcase series. The platform is the OpenID Connect identity provider for the event system, so members sign in once; automated calendar invites feed RSVPs back into the CRM.
- Marketplace: vendor profiles with tiers, content, events and contact requests.
- On Demand: a video library with per-video paid access through Stripe Checkout.
- Academy, speaker bureau and hosted pages: single sign-on into the learning platform, a speaker directory, and versioned sponsorship prospectuses and post-event reports that staff publish themselves.
- Reach: in-app notifications, a digest newsletter, and push notifications to the iOS and Android apps.
- Staff tooling: moderation, a reporting suite and data explorer that replaced an off-the-shelf BI product, a URL shortener and a media library.
- First-party analytics: page views and engagement beacons with bot detection whose ban rules sync to Cloudflare’s edge, plus HubSpot and LinkedIn conversion sync.
The front end is server-rendered Django templates with Bootstrap 5 and HTMX. No JavaScript framework, no separate API layer to keep in step, and a design system documented as tokens.
How it runs
Cloudflare (WAF, CDN and Workers) sits in front of an AWS load balancer that accepts traffic only from Cloudflare. Behind it, Docker containers on Elastic Beanstalk autoscale across two availability zones in private subnets, backed by Multi-AZ PostgreSQL with point-in-time recovery, serverless Valkey for caching, and S3 behind CloudFront with signed URLs for private media. Background work runs as scheduled management commands and a nightly Fargate task rather than a queue cluster.
Separate staging and production environments: main deploys to staging, production to production. GitHub Actions runs checks, the full test suite in parallel with coverage, and a dependency audit on every push; CodeQL and Dependabot are on; rollback is a redeploy of the previous version. New Relic and CloudWatch cover observability, and AWS Backup keeps daily, weekly and monthly copies. In 2025 the whole estate moved between AWS regions.
Security and ISO 27001
In 2026 I led the platform’s ISO 27001:2022 readiness: an SDLC policy, an architecture review mapped section by section to Annex A, a traceability matrix from each control to its evidence, a four-view diagram set, and read-only evidence collectors that snapshot about 300 artefacts per run with secrets redacted at collection time, so the auditor’s pack is reproducible rather than hand-assembled.
Day to day: permission mixins on every view, signed media URLs, validated redirects, self-serve GDPR deletion with an audit trail, departed staff deactivated rather than deleted, and application-level overload protection so a crawler burst queues politely instead of slowing every request.
AI in the engineering loop
Claude Code has been part of the workflow since April 2025. Twenty-one version-controlled instruction files carry the platform’s conventions, dated decisions and incident notes; each agent session gets its own test database; tests enforce the conventions that matter; and AI review of every production change is written into the SDLC policy as a formal control. In the product, Claude summarises speaker biographies, and content recommendations come from a nightly similarity job rewritten from O(n²) to roughly O(n·k) with inverted indices.
Outcomes
- A platform PSN owns outright, serving members, vendors and staff from one codebase.
- Members sign in once for the community, events and academy; staff got reporting, invites and moderation built in instead of bought.
- Python 3.9 to 3.14, Django 4.0 to 5.2 LTS and Wagtail 6.1 to 7.4, upgraded in steps and never more than one LTS behind.
- Automated tests grew from about 67 to about 5,250 in under two years, with CI on every push.
- Audit-ready infrastructure, with policy, architecture and evidence that can be regenerated on demand.