scoopy●Try product demo

Interactive demo · 221 synthetic items · zero external writes

A product experience first.
An inspectable system underneath.

Scoopy reframes catalog browsing as a small reveal. The public implementation keeps the complete visual journey while replacing retailer content and commercial behavior with deterministic, reviewable code.

60-second tour

What to inspect

  1. Scroll the story.The box moves through six chapters with a static fallback.
  2. Open collections.Twelve themes expose a generated 221-item catalog.
  3. Build twice.The same theme and tier return the same scoop.
  4. Submit the form.The final state confirms nothing was stored or sent.

Architecture

Progressive enhancement keeps the story optional.

Why static?

The demo needs no account, backend, database, analytics, or paid service. GitHub Pages is the full runtime.

Why deterministic?

A stable hash makes the interaction testable and lets a recruiter reproduce the same state.

Why a fallback?

Content remains readable when WebGL, motion, or JavaScript capabilities are limited.

Workflow

From approved visual prototype to public evidence.

  1. 01
    Preserve

    Carry over the product composition, brand tokens, and six-chapter interaction.

  2. 02
    Sanitize

    Replace catalog titles, brands, URLs, images, sales claims, and form behavior.

  3. 03
    Isolate

    Bundle pinned fonts and animation libraries locally and block third-party runtime traffic.

  4. 04
    Prove

    Test deterministic data, fallbacks, keyboard navigation, mobile layout, and zero writes.

Annotated public code

Small functions carry the important guarantees.

Deterministic selectioncatalog.mjs ↗
export function deterministicScoop(items, size, seed) {
  const count = Math.max(0, Math.min(Number(size) || 0, items.length));
  return seededOrder(items, seed).slice(0, count);
}

The seed is derived from theme and tier, so tests and visitors can reproduce a scoop.

Capability gateindex.html ↗
var mode = 'none';
var canvas = document.createElement('canvas');
if (canvas.getContext('webgl2') || canvas.getContext('webgl')) {
  mode = 'auto';
}
window.__scoopMode = mode;

The content path is the default; the 3D layer earns permission from browser capabilities.

Zero-write successapp.js ↗
heading.textContent = 'Demo state complete, ' + name + '.';
message.textContent = 'Nothing was stored or sent. This browser-only form exists to demonstrate the final product state.';
success.append(icon, heading, message);
form.appendChild(success);

Text-only DOM APIs prevent injection. No fetch, storage API, form action, or analytics endpoint exists in the demo path.

Quality evidence

Safety is part of the product behavior.

221 / 12exact item and theme contract
0third-party runtime requests
0stored or transmitted form entries
3 pathsfull 3D, reduced motion, static fallback

Run locally

One static build, no service account.

npm install
npm run dev
npm run test:all

Limitations: this is a product concept, not a storefront. Prices, inventory, pickup, delivery, and waitlist behavior are demonstrative.