Come on in, the door’s open.

There’s always a better way, and I enjoy trying to find it.

My process

Three things

Keep moving
When I’m stuck I write — stream of consciousness, real pencil and real paper — or I go talk to someone about it. Getting something out is what breaks the block. An object in motion stays in motion.
Nothing is sacred
“If it isn’t broke, don’t fix it” is the enemy of progress. There is always a better way — it’s a matter of prioritising time and resources on what’s most urgent and important right now. Nothing is sacred. Anything can be scrapped for something else if it’s the top priority at that time.
AI is a tool, not the problem
I don’t think AI is the problem — I think greedy people misusing it are. It has real potential as a tool, just like the early days of technology did with computers, the internet, Google. It doesn’t have to replace anyone. It’s another tool on the belt for people who use it well and with integrity.

The work

Beacon’s Lighthouse dashboard: active backlogs, GitHub and ServiceDesk project counts, and quick navigation

Beacon

One app the whole IS department runs on — projects, tickets, assets, pull requests, scorecards.

Every role in a tech department needs something different, and none of them agreed. Work was spread across Azure DevOps, GitHub Enterprise and ServiceDesk Plus, so nobody could see the whole picture at once.

One project model underneath, replacing the three separate systems work had been spread across — Azure DevOps, GitHub Enterprise and ServiceDesk Plus — with one source of truth.

  • .NET
  • Next.js
  • Azure
  • GitHub Actions
  • Claude
More about this one
The hard part
Capturing what every role in the department needs, in one app, in a way that’s user-friendly and adaptable.
Thrown away
An earlier app of mine called Tech Portfolio. It was on an old stack with limited usability, so Beacon replaced it outright.
Next time
Smaller features, more often. It’s easy to add a lot in a small timeframe, but then rollouts become more overwhelming to users with a lot of new features and functionality at once.
Built for
Me, to run the department. Then my team, and the leadership team.
The 403HQ client portal sign-in screen

403HQ

A benefits portal for a client with roughly ten thousand employees. Then a second one for another.

A high-priority client’s contract needed retaining. Leadership mandated the build, with six weeks to get it live.

Five role personas, step-up MFA and user-managed content. A second deployment for another client reused the same codebase with its own branding and plan rules.

  • .NET
  • C#
  • Azure
  • Entra External ID
  • Step-up MFA
More about this one
The hard part
Two of us, six weeks, mandated. Build it, test it, pen test it, get it to production. The most challenging thing I’ve done in my career — and we finished with a couple of days spare.
Thrown away
The branding. Everything was built under a placeholder name until, mid-development, the real one came to me like a lightbulb moment.
Next time
The testing approach. We have no traditional QA, our users find testing hard, and things occasionally reach production that should have been caught.
Built for
A high-priority client, to retain their contract. Then a second client, with tweaks.
The AURA accessibility panel open on the National Benefit Services site, with the ADHD Friendly Profile switched on

AURA

Accessibility compliance as a single script tag. Colour controls, ADHD mode, and a set of things I’m genuinely fond of.

We were paying accessiBe per site. Every new web property made that worse, and more were coming.

Drops into any site as a single script tag, so it works regardless of what that site is built on. Hosted once, used on every property since — the cost of the next site is nothing.

  • TypeScript
  • WCAG 2.1 AA
More about this one
The hard part
A flexible, compliant ADA widget with real features that works regardless of the host’s tech stack. I’d never built a widget before.
Thrown away
The name, again — I had no idea what to call it until it was finished. Everything I built on day one is still in there.
Next time
Tell people what it can do — a notification or pop-up on first run so users understand its capabilities.
Built for
Our SVP of Tech asked for it to replace accessiBe.
The Ruckus home screen: quick actions to start a game, poll, presentation or quiz, with the live lobby beneath

Ruckus

Ten browser-based multiplayer games, with live polls and quizzes, for a fully remote company.

The company was paying for AhaSlides — low adoption, shared logins, and nothing employees found compelling.

Live play runs over SignalR, and the whole thing sits behind Microsoft SSO so access follows the identity infrastructure already in place. That retired the vendor and removed shared-login access management entirely.

  • .NET
  • SignalR
  • Entra ID
The Ruckus games library

The Ruckus games library

More about this one
The hard part
Figuring out how to do web-based multiplayer games with a host that are genuinely interactive and engaging — and building dynamic, interactive presentations good enough to replace AhaSlides.
Thrown away
The game list. I started with a much longer one and cut several of the ideas so it would ship sooner.
Next time
Get people from outside technology involved sooner.
Built for
The technology department, but really HR and leadership — social engagement across a remote company is something they had been working on for years.
The rebuilt National Benefit Services home page

NBS Website

The company’s public site, rebuilt across sixty-six pages, with the CMS marketing had been asking for.

Clients had been asking for a new website for years. Previous tech leaders never prioritised it.

Restructured around who actually visits — participants, sponsors and advisors — instead of the org chart. Secure document upload was built into the site itself rather than kept as a separate connection to another app.

  • Next.js
  • .NET
  • Azure
More about this one
The hard part
Turning every request from the senior leadership team and the board into something clean, modern and actually usable.
Thrown away
A connection to an internal app, replaced with a custom secure document upload. We didn’t want users bouncing between separate sites.
Next time
Get end users in earlier and start the feedback loop sooner.
Built for
The company — but really leadership and sales. Nobody prioritised it, so I just built it.

The things I build after hours are in the library

The desk

Also on the go

Other recent work, and what’s in progress right now.

  • Online Forms, Secure Upload & Onboarding

    Multi-Tenant Services · Headless Packages

    Three services, one implementation instead of three.

  • External Payroll Processing

    Payroll Ingestion · No Per-Employer Setup

    Ingests any employer’s payroll file without being configured for it first.

The Paragon recordkeeping platform

Paragon

Recordkeeping Platform · Replacing FIS Relius

Problem
FIS Relius is a licensed vendor platform sitting underneath 403(b), 457 and FICA Alternative administration.
What I Built
An in-house replacement spanning 616 endpoints and 194 entities, sharing the headless forms, upload and onboarding packages rather than duplicating them.
  • .NET
  • EF Core
  • Azure SQL
  • Clean Architecture
The Paragon sign-in screen

The Paragon sign-in screen

Thanks for stopping by.

Come back and see what’s new — there usually is something.

And there’s one more room at the back: my personal library.

If something here caught your interest — the platforms, the AI work, the design system, or one of the things I build after hours — I’d like to hear about it.

Tell me what you’re working on. It lands straight in my inbox and I reply personally.

Send me a letter

It goes straight to my inbox and I reply myself.