CLIENT

itzenzoTTV (Independent)


TECHNOLOGIES

Next.js, React, TypeScript, Tailwind CSS, WPGraphQL, Headless WordPress, ISR, PM2, nginx, DigitalOcean


YEAR

2026


EXTERNAL URL

https://itzenzo.tv


A headless Next.js storefront for my own trading-card business, backed by a WordPress instance over WPGraphQL and self-hosted on a DigitalOcean droplet — chosen over Vercel to avoid vendor lock-in. GraphQL handles reads, REST handles writes, and per-call ISR revalidates on demand after checkout so inventory stays fresh without rebuilding the site.

Architecture, build, and self-hosted deployment — my own product, from data model to droplet.


Background

A card business selling live needed a catalog and retention site it fully owned.

itzenzoTTV sells trading cards through live commerce, and needed a permanent home for its catalog and community that wasn’t rented from a platform. The goal was a fast, modern storefront that could scale past hundreds of card singles, stay in sync with inventory changes from live selling, and run on infrastructure I controlled end to end — no per-seat SaaS, no build-minutes meter, no lock-in.

Because it’s my own business, I owned every decision: the CMS backend, the hosting, the deploy pipeline, and the cost structure.


Implementation

Headless Next.js on WPGraphQL, self-hosted, with production-grade edges.

The frontend is Next.js 16 / React 19 / TypeScript with Tailwind, reading product and card data from the WordPress backend over WPGraphQL and writing through REST. Rather than a Vercel deploy, it runs on a DigitalOcean droplet alongside the WordPress instance and a Node service, managed by PM2 behind nginx. Incremental Static Regeneration is scoped per call with on-demand revalidation triggered after checkout, so a sale updates the affected pages without a full rebuild, and per-IP rate limiting protects the API surface.

Scale and polish got real attention: a count-first paginated catalog with background prefetch keeps browsing fast past hundreds of singles, a deploy-time image-proxy warmup avoids cold-cache stalls on first load, and server/client sort order is aligned so the grid doesn’t reshuffle on hydration.

The same WordPress instance that powers this catalog also serves as the backend for my portfolio — one CMS, two very different frontends.


Results

A fast, owned storefront running on infrastructure with no lock-in.

itzenzo.tv is live as the catalog and retention hub for the business — a headless storefront that stays in sync with live-selling inventory and scales comfortably as the catalog grows. Self-hosting kept ongoing costs predictable and the whole stack portable, with no dependency on a single hosting vendor.

A working proof of modern headless patterns — WPGraphQL, ISR, and on-demand revalidation — on infrastructure I run myself.