Skip to content
View FPMedia's full-sized avatar

Block or report FPMedia

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
FPMedia/README.md

Henry Shepherdson, Fractional CTO / Technical Director at Erzo since 2010. A photo of Henry, with a handwritten note and arrow pointing at it: “that’s me, the person you’ll actually talk to”.

I'm the Technical Director at Erzo, which started in Johannesburg in 2010, and I work as a Fractional CTO for businesses that need senior technical leadership without a full-time hire. I'm based between Cape Town, Johannesburg and Durban, working with clients in South Africa, the UK and the US.

Most of my work lives in private client repos, so this page sums it up without naming names.

What I build

Websites and shops: fast Next.js sites, online shops, catalogues and booking forms SaaS platforms: a multi-service business-assessment SaaS, portals and a marketplace Auth and security: Firebase Auth, role-based access, security reviews and patched dependencies Forms and email: contact forms with Turnstile, rate limiting and Resend email E-readers and publishing: a branded Readium web e-reader and an Android PDF app Windows apps: WinUI 3 desktop tools I use to run the studio day to day AI and automation: Cursor and AI agents every day, plus AI assistants and exporters Accessibility: WCAG 2.2 AA checks with axe, keyboard and focus handling, contrast fixes

The longer list

Client websites, shops and catalogues

  • Fast Next.js sites for guesthouses, salons, engineering firms, florists, writers and training providers
  • Online shops with cart, checkout, PayPal, coupons and shipping estimates, plus a separate shop manager and a FastAPI product API
  • A course catalogue with bundles, monthly payment terms, currency-aware pricing, wishlists and filters
  • Room availability and booking-request forms for accommodation sites
  • Photo galleries with lightbox and focal-point cropping, AVIF/WebP images, Open Graph, sitemaps and PWA support
  • Accessibility built in: WCAG 2.2 AA checks with axe, keyboard and focus handling, and contrast fixes

SaaS platforms

  • A multi-service business-assessment SaaS (Next.js, NestJS, FastAPI)
  • A subscriber portal with seat management and Stripe subscriptions
  • A marketplace that matches homeowners with service professionals, with Paystack billing and an admin console
  • B2B ordering with generated PDF documents, an onboarding portal with admin invites, a PWA checklist app with photo capture, and an events app with group chat and live unread counts

Auth and security

  • Firebase Auth sign-up, email verification, invites and role-based access
  • Security reviews and hardening, with dependencies kept patched
  • Next.js security upgrades rolled out across 17 repos
  • CSP and security headers set at build time

Contact forms, email and bot protection

  • Serverless contact endpoints on Cloudflare with Turnstile, validation, a honeypot, rate limiting and Resend email
  • Enquiry and booking forms with Resend or Nodemailer on about a dozen sites
  • Consent-first Google Analytics with an equal-choice consent card

E-readers and publishing

  • A branded web e-reader built on my fork of Readium's Thorium Web, with Firebase sign-in, running on Cloudflare
  • Publications served by my fork of Readium CLI on Railway, with Cloudflare R2 storage
  • A native Android PDF reader (Kotlin, Jetpack Compose) with CI-built APKs
  • Article archives, podcast pages and SEO metadata for an author's site

Windows apps

  • A WinUI 3 desktop dashboard (MSIX) for running the studio: clients, projects, Toggl time tracking with timers, and WSL and Windows Terminal launchers

AI and automation

  • I build day to day with Cursor and AI coding agents
  • An AI Telegram assistant (OpenAI, Whisper) that handles text, voice and documents
  • A WordPress-to-Next.js content exporter
  • Open tools: transcriber (Whisper) and video-optimiser

By the numbers

As of 16 October 2026, counting public and private repos.

177 repositories: 144 private and 33 public 63 repos active in the last 90 days; 88 worked on in the last 12 months, of which 68 are new 1,620 contributions in the last 12 months, 1,580 of them in private repos 1,319 commits on main branches in the last 12 months 224 days with activity in the last 12 months 45 repos on Next.js in the last 12 months, 31 of them on Next.js 16

Main language of the 85 repos worked on in the last 12 months: TypeScript 44, JavaScript 14, Python 10, HTML 6, Other 8

Stack

  • Mostly: Next.js, React and TypeScript, with Tailwind CSS
  • Also: Python (FastAPI), Node (NestJS, Fastify, Hono, Express), other JavaScript, and WinUI 3 / C# for Windows apps
  • Data and auth: PostgreSQL (Prisma, Drizzle), Redis, Firebase Auth
  • Hosting: Railway and Cloudflare, with Docker and GitHub Actions
  • Email: Resend
  • How I work: Cursor and AI agents, with changes going through pull requests

Henry (handwritten signature)

Book an Ideas session LinkedIn

Or use the Erzo contact page.

Popular repositories Loading

  1. media-downloader media-downloader Public

    A powerful web-based media downloader for YouTube, YouTube Music, and X.com Spaces

    Python 1

  2. transcriber transcriber Public

    A modern web application for transcribing audio files using OpenAI's Whisper API

    Python 1

  3. video-optimiser video-optimiser Public

    A modern web application for optimizing video files with lossless compression. Perfect for reducing file sizes while maintaining visual quality.

    HTML 1

  4. demo-ai-search-engineer demo-ai-search-engineer Public archive

    Python 1

  5. salipswu salipswu Public archive

  6. hello-world hello-world Public archive

    Initiate project