~/lab

The lab.

Less polish, more curiosity. Questions, what was built to answer them, and what happened — including the parts that aren’t finished.

6 ENTRIES · 4 SHIPPED · 2 OPEN

#001

SHIPPED

WEBXR / UNITY / NODE.JS

Patching seven builds without rebuilding one

QUESTION
Can seven compiled Unity WebGL builds be fixed safely without rebuilding any of them?
EXPERIMENT
A Node.js script that patches the minified framework inside each brotli archive — guarded by exact-match counts, a syntax gate, backups and a read-back comparison.
RESULT
All seven builds patched idempotently; re-running reports “already patched”. Originals kept as backups.
LEARNING
When you can’t rebuild, make the patch prove itself before you trust it.

▸ TRY IT

  1. 0mspage loads; navigator.xr missing → fetch webxr-polyfill
  2. 900msUnity boots first → _InitXRSharedArray()
  3. 901msModule.WebXR.onUnityLoaded is not a function ✗
  4. 901msboot halts — no error on screen, just a gallery that never starts
  5. 1400mspolyfill arrives… nothing left to notify

RESULT · STALLED

#002

SHIPPED

AI AGENTS / PLAYWRIGHT / TESTING

Build the adversary first

QUESTION
What breaks a form-filling agent?
EXPERIMENT
A fictional career site where every hard pattern lives on its own route: custom JS dropdowns, async autocomplete, conditional questions, scroll-to-render fields, server-side validation, SPA navigation, login walls, CAPTCHAs, cookie banners.
RESULT
Every failure mode can be reproduced and tested in isolation by the end-to-end suite.
LEARNING
An agent is only as good as the worst page it has been tested against.

#003

SHIPPED

SEO / RENDERING / AUDIT

What does the crawler actually see?

QUESTION
Why doesn’t Artabia’s blog appear in search?
EXPERIMENT
Fetched each route’s pre-JavaScript HTML and sorted pages into three rendering buckets.
RESULT
Only the homepage rendered. Content pages served a fallback and canonicalised to the homepage; legal pages were empty shells.
LEARNING
Inspect a system from its consumer’s side. Here, the consumer was a crawler.

#004

RUNNING

RAG / SEARCH / INTERACTIVE

Watch the AI decide

QUESTION
Can you see why an AI answered what it answered — before a language model is involved?
EXPERIMENT
Type a question and watch the BM25 retriever score every chunk of Prince’s knowledge base.
RESULT
The same scores drive Ask Prince’s refusal gate: no strong match, no answer.
LEARNING
Explainability is cheapest before the model, not after it.

▸ TRY IT

  1. skill:3d13.20
  2. career:avrlabs10.69
  3. profile:summary9.10
  4. mission:artabia8.20
  5. skill:xr7.86
  6. profile:story7.34
  7. mission:arviewz7.18
  8. profile:stack6.45

│ = refusal threshold (2.2)

GATE OPEN → the model sees the top 5 chunks

#005

SHIPPED

UX / PERFORMANCE

A boot sequence that never blocks

QUESTION
Can a boot animation be pure decoration without ever being a delay?
EXPERIMENT
The boot overlay sits on top of fully server-rendered HTML. It is skippable, shortens to about a second for returning visitors and never runs on deep links.
RESULT
Content, SEO and screen readers never wait for it.
LEARNING
Delight is fine. Blocking is not.

▸ TRY IT

#006

VERIFY

COMPUTER VISION / PYTHON / OPENCV

Finding the painting in the photo

QUESTION
Can a phone photo of an artwork be turned into a clean, upright image of just the artwork?VERIFYUnverified — only in: Artwork detection service (Python)
EXPERIMENT
A Flask + OpenCV service: EXIF orientation correction, orientation scoring from Sobel gradients, text-region masking, and multi-strategy Canny/contour detection.VERIFYUnverified — only in: Artwork detection service (Python)
RESULT
[RESULT OF THE ARTWORK DETECTION SERVICE REQUIRED]
LEARNING
[WHAT YOU LEARNED REQUIRED]