Skip to content
All projects
Web AppIn active development

rob2rhyme.app

This portfolio, plus the private admin office behind it.

The rob2rhyme.app landing page in dark mode, showing the hero and the start of the selected-work grid.

Overview

A Next.js 16 portfolio that runs on an authored content registry rather than a live API scrape, so every page renders completely even when GitHub is unreachable. Behind an access code sits an admin office for the contact inbox, invite codes, and GitHub security alerts.

The problem

The first version generated every card straight from the GitHub API and hid the whole site behind a 6-digit code. That meant nothing was linkable or shareable, cold visitors hit a code wall, and a missing token produced an empty homepage that stayed empty for the length of the cache window.

The approach

Inverted the data flow: an in-repo content registry is the source of truth, and GitHub is optional enrichment layered on top. The access code moved off the front door and onto a private section, so the work is public while private material stays gated. Session cookies are signed with HMAC-SHA256 rather than the reversible encoding that shipped originally.

Outcome

  • Pages render completely with no GitHub token — verified in CI by building with the token unset
  • One batched GraphQL query replaces 48 REST calls per revalidation
  • Public, linkable project pages instead of an in-card toggle
  • Light/dark/system theming with three accents, applied before first paint

What it does

  • Authored project registry

    Each project is a typed module with its own thumbnail, snapshots, stack, timeline and case study. Narrative blocks are optional, so a half-written entry still renders cleanly.

  • Resilient GitHub enrichment

    Live stars, languages and commit dates are merged in when available and silently omitted when not. No page depends on the API being reachable.

  • Admin office

    Contact submissions land in a private inbox with an audit trail and email replies, alongside invite-code management and a Dependabot alert dashboard.

  • Theming without a dependency

    A token layer plus a blocking inline script — light, dark and system, three accent palettes, no flash of the wrong theme and no third-party library.

Snapshots

A project detail page in dark mode: title, live-site button, the problem and approach sections, and an at-a-glance sidebar listing role, time invested and the grouped stack.
Every project gets the same page: the case study on the left, the facts on the right.
The projects index in light mode, showing category filters and a grid of project cards.
The index in light mode — the same components, repainted from tokens rather than restyled.
The contact page on a phone-width screen, showing the site header and the enquiry form.
Phone width. Every tap target clears 44px, and the e2e suite fails the build if one doesn't.

Ask about rob2rhyme.app

Want something like this, or curious how a piece of it works? Send a note — it reaches me tagged with this project, so I have the context before I reply.

Replies within 24h on business days.