Skip to content
JasDev

Lab

Live skill demos

Every panel calls the real gateway (Express), catalog (FastAPI) and engine (Go) services. The request console under each demo shows exactly what went over the wire: status, latency, headers and the JSON body.

Stripe test mode · signed webhooks · idempotency

Payments

Pick a tier and check out. Prices live on the server (a client-sent amount is rejected), the webhook is verified against its raw-body signature, and duplicate deliveries are ignored. You come back to an animated timeline of the webhook events.

Choose a tier

Test card 4242 4242 4242 4242, any future expiry, any CVC. Use 4000 0000 0000 0002 to see a declined payment.

Recent orders (anonymized)

Loading recent orders…

Request console (0)

No requests yet. Use the controls above.

argon2id · JWT · rotating refresh tokens

Auth & security

Register a throwaway user, inspect the 15-minute access token, rotate the HttpOnly refresh cookie, then simulate a stolen refresh token: the gateway detects the reuse and revokes the whole token family, so even the unexpired access token stops working.

Request console (0)

No requests yet. Use the controls above.

Redis · Lua · sliding window

Rate limiter

Fires 30 requests at an endpoint allowed 20 per minute. The gateway counts them in a Redis sorted set with an atomic Lua script. Watch the RateLimit-Remaining header fall to 0 and the 429s begin. This demo has its own bucket, so it never blocks the other panels.

200 OK0 429 Too Many0
Bar height = RateLimit-Remaining after each request. 0 requests: 0 allowed (200), 0 rate limited (429).

Request console (0)

No requests yet. Use the controls above.

Redis · cache-aside · FastAPI + MongoDB

Cache: MISS vs HIT

Fetches the same project twice from the catalog service. The first read goes to MongoDB and fills Redis (X-Cache: MISS); the second is served from Redis (HIT). Invalidate goes through the gateway, which holds the catalog's service key.

Request 1

—

not fetched yet

Request 2

—

not fetched yet

Request console (0)

No requests yet. Use the controls above.

Express · FastAPI · Go

Polyglot race

The same contract (GET /bench/primes?n=, sieve of Eratosthenes) in three languages, called in parallel. Bars show each service's self-reported compute time; all three must return the same prime count.

Count primes up to n
  1. Express TypeScript / Node 24—
  2. FastAPI Python 3.12—
  3. Go Go 1.27—

Request console (0)

No requests yet. Use the controls above.

Postgres · MongoDB · Redis

Data stores

Each store holds what it is best at. Counts are live from each database.

  • PostgreSQL

    Relational data with integrity constraints · Neon in production

    Users
    n/a
    Orders
    n/a
    Stripe events
    n/a
    Visits
    n/a
    Contact messages
    n/a
  • MongoDB

    Flexible project documents with text search · Atlas in production

    Projects
    n/a
  • Redis

    Cache entries, rate-limit windows, locks · Upstash in production

    Keys
    n/a

Request console (0)

No requests yet. Use the controls above.

Vite · React · TanStack Router, Query & Table

Admin dashboard

The single-page app I use to run this site: a live health board for every service, visit charts, a sortable and filterable orders table, and project editing with optimistic updates. Try it in read-only demo mode, with sample admin views over public data and every write disabled.

Open the dashboard demo

Next.js · TypeScript · Tailwind

This site

Server components with typed API clients validated by shared zod contracts, a Lighthouse score of 100 across the board, zero layout shift, light/dark themes and reduced-motion support. Browse the projects to see it in action.