Skip to main content
MyRigCheck
2026
Founder & Full Stack Engineer

MyRigCheck

Personal Product

Built a production game-compatibility platform that checks 367,825 titles against a detected PC rig and returns FPS estimates, bottleneck analysis, and a Rig Power Score. Designed a deterministic IGDB + Steam read-layer pipeline with phase-based builds, blue-green swaps, and post-swap canaries, then served the catalog through a read-only database gateway with a graceful degraded mode for the self-hosted origin.

Scroll to explore

Project Highlights

Key metrics and achievements that define this project

0+
Technologies
0
Year Released
Founder & Full Stack Engineer
Role

Interested in This Project?

Explore the live demo, check the code, or reach out to discuss it

Full Case Study

See the delivery timeline, architecture notes, and decision tradeoffs.

A production game-compatibility platform that checks 367,825 titles against a detected rig. The build pairs a 13-phase IGDB + Steam read layer and a journaled blue-green swap with a Next.js runtime that reads precomputed compatibility by game, hardware hash, and resolution - then degrades gracefully when the self-hosted origin goes offline.

The Challenge

Answering 'can my PC run this?' at catalog scale means reconciling messy IGDB and Steam requirements, normalizing CPU and GPU names, and serving hundreds of thousands of game pages without querying ingestion collections or paying a per-request compatibility cost.

The Solution

Separated ingestion from serving: IGDB and Steam land in source namespaces, a deterministic 13-phase build materializes read.* collections (requirements, hardware reference, compatibility cache, search, discovery, dashboard), and a journaled blue-green swap promotes the new layer only after validation gates and canaries pass. The Next.js app queries the read layer through a read-only executor, resolves the saved rig server-side, and reads compatibility precomputed by game, hardware hash, and resolution.

Key Learnings

The hardest part of a data-heavy product is not the UI; it is making the data pipeline deterministic, observable, and reversible. Treating the build as a product surface - with phase contracts, validation gates, and rollback - made it possible to ship a large catalog on a self-hosted origin without turning every data change into an outage risk.

Project Case Study Timeline

Delivery Decisions, Not Just Screenshots

A phase-by-phase record of how the work was scoped, built, and carried into production.

Problem / DiscoveryFeatured

Scope the compatibility question

2026-Q1

Mapped the user question, the available IGDB and Steam fields, and the places where the source data could not answer it cleanly.

Technical Notes

The product needed a normalized hardware layer before it could make a credible compatibility claim, so discovery covered both game data and CPU/GPU identities.

Outcome

The build started with a data contract instead of a UI-first prototype.

ArchitectureFeatured13 phase-ids from init through finalize

Design the namespaced read layer

Separated ingestion, staging, runtime, and rollback namespaces, then defined a deterministic phase order with validation gates and a journaled swap.

Technical Notes

Runtime queries are constrained to read.*; a separate build gateway owns writes so the public runtime credential is read-only.

Implementation

Build the rig and compatibility experience

Implemented hardware detection, a saved-rig flow, and compatibility surfaces backed by hardware_reference and compatibility_cache.

Technical Notes

Compatibility is keyed by game_id, hardware_hash, and resolution, with resolver provenance exposed for exact, case-insensitive, fuzzy, and unknown matches.

Outcome

FPS estimates, bottleneck analysis, and the Rig Power Score became read-path features rather than per-request calculations.

Optimization

Make the catalog browsable at scale

Materialized slugs, discovery pages, search entities, ranking signals, and metadata for a 367k-title catalog.

Technical Notes

The same build drives page generation, search, and ranking so they cannot drift into separate truth sources.

Outcome

The catalog is searchable and crawlable without querying source collections at request time.

LaunchFeatured

Ship trust surfaces and degraded-mode operations

Published methodology, accuracy, data-source, and corrections pages, plus a versioned dataset export and AI-ingestion files.

Technical Notes

A Cloudflare cache rule serves stale pages when the origin is down, and a Worker plus heartbeat provide a designed fallback instead of Error 1033.

Outcome

The public launch covered both discoverability and the operational failure mode.

Key Decisions

Engineering tradeoffs that shaped the build

A compact snapshot of the technical and product decisions that had the biggest impact on delivery.

Build a read layer instead of querying ingestion collections at runtime

IGDB and Steam data is large, normalized differently, and not shaped for page rendering. Serving it directly would couple request latency to ingestion state and make every schema change a runtime risk.

Decision

I built a deterministic phase pipeline that materializes read.* collections and promotes them as one versioned unit.

Query igdb.* and steam.* directly from the appCache individual API responsesMaterialize a dedicated read layer

Impact: Runtime queries stay stable and fast, and a bad build can be rolled back as a whole.

Tradeoff: The pipeline is more infrastructure than a conventional CMS-backed app.

Split read and build credentials behind separate gateways

The public app only needs to read the catalog, while ingestion and the read-layer build need write access to staging and metadata collections.

Decision

I routed runtime reads through a read-only executor and kept writes behind a separate build gateway and key.

Give the runtime a broad database credentialUse one gateway with role checksSplit read and build executors with separate keys

Impact: A compromised runtime credential cannot mutate source or staging data.

Tradeoff: There are two endpoints and two secrets to operate.

Precompute compatibility by game, hardware hash, and resolution

Compatibility is the core product surface, and recalculating it for every card and page would dominate request time.

Decision

Phase07 builds the hardware reference and compatibility cache, and the runtime reads the precomputed result with resolver provenance.

Compute compatibility on every requestCache only the hottest gamesPrecompute compatibility for the catalog during the build

Impact: Cards and pages can show FPS and tier signals without a per-request comparison.

Tradeoff: The build has to keep hardware aliases and benchmark scores fresh.

Design the self-hosted origin for failure

The production origin runs on a laptop behind a Cloudflare tunnel, so power or network loss would otherwise surface as a raw Error 1033 page.

Decision

I added a serve-stale cache rule, a Worker-based degraded page, and a heartbeat to keep the failure mode intentional.

Accept the default Cloudflare errorMove to a managed hostAdd a cache rule and a Worker fallback

Impact: Visitors see the last good catalog or a designed upgrading page instead of an infrastructure error.

Tradeoff: The fallback adds Cloudflare configuration and a heartbeat process.

Visual Showcase

A closer look at the shipped interface

This screen captures the production-facing design language, layout rhythm, and overall polish of the experience.

AssetProject Poster
Open Live Demo
Tech Stack

Built With

Scroll to explore technologies →

Next.js 16

React 19

TypeScript

MongoDB

Tailwind CSS 4

Cloudflare Workers

Docker

Zod

Ankur Halder

Loading portfolio…