Skip to content

feat: added 3 interactive grid components - #50

Merged
vij-sameerb5 merged 1 commit into
mainfrom
test
Sep 6, 2026
Merged

vij-sameerb5 merged 1 commit into
mainfrom
test

Conversation

@vij-sameerb5

Copy link
Copy Markdown
Member

Component Name

Three grid-section components.

Slug Category
any-grid grid-sections
crypto-grid grid-sections
girl-grid grid-sections

Description

any-grid — A seven-tile bento on black where the layout never moves and every
card is alive instead. Built from a supplied reference video, read frame by frame:
a scan column sweeping a token chart with a tracker dot riding the line beneath it,
three counters easing to their figures while two more scramble and settle, cycling
tool icons and action rows, a portrait swapping with its badge, six breathing bars,
and a collaborator's cursor dragging a selection across the closing line.

The selection uses a clipped duplicate — a dark-on-light copy of the phrase wiped
over the white one via clip-path: inset(0 var(--cut) 0 0) — so the text genuinely
inverts as the highlight passes rather than faking it with a colour crossfade.
Continuous values are written straight to refs; only four state values re-render,
on 0.9–1.8s ticks.

crypto-grid — A seven-tile payments bento on white. A purple hero over three
partner coins, a ring of app tiles sweeping the top arc of a circle whose centre
sits on the card's bottom edge, a QR plate riding 20% off the top, a report panel
whose spend bar fills on wake, a field of 286 glyphs quietly rewriting itself, and
a bell that rings.

The integration ring is three nested layers per tile — the ring turns +360°, the
middle layer unwinds it, the inner layer unwinds the tile's seat angle — so every
logo stays bolt upright the whole way round. Geometry was derived from the reference
rather than eyeballed: apex within 3px, tile size within 1px, and the same number of
tiles visible at once.

girl-grid — A five-tile support-agent bento on soft grey, laid out wide and
shallow. A portrait under a frosted band carries a conversation that arrives bubble
by bubble and restarts; the language card is a real set of switches; the conversations
counter sits under a bare ZepaFolder; the omni-channel tile floats its channels
along a dashed arc and its microphone records when pressed.

Two genuine controls, both real <button> elements with aria-pressed, keyboard
focus rings and labels — not fake graphics:

  • Language switches — off they're outlined chips showing the code; on they widen,
    the code fades, a flag fills the track and a knob springs across.
  • Microphone — press to record: the glyph swaps for a five-bar level meter on
    offset delays and two rings pulse outward.

Board proportions were matched to the reference by measurement (2.00:1 vs 1.96:1;
row height 0.244× the board width vs 0.243×), with type within ~2% of the reference
scale on every element.

Embed-safety across all three: no position: fixed, no window.innerWidth/ innerHeight/scrollY, no @import or external font links, no global html/body/
*/a selectors, every class and keyframe prefixed per component (ag-, cg-,
gg-). Each owns its own scroll container.

Responsive: three or four tiers each (900 / 560 / 380). On phones the vw-capped
clamps are replaced with fixed pixel sizes — those caps collapse badges, switches and
chart heights to nothing at 375px — and hover lifts are disabled, since on touch they
stick after a tap. height: 100svh alongside 100vh so the boards don't sit under a
collapsing mobile URL bar.

Preview

All three recorded and compressed to 1280×~800 @ 30fps, +faststart, audio stripped.
Sources were ~2400×1500 @ 120fps.

Component Before After Ratio SSIM
any-grid 15 MB 232 KB 66× 0.9936
crypto-grid 55 MB 524 KB 107× 0.9941
girl-grid 34 MB 259 KB 135× 0.9922

104 MB → 1.0 MB. SSIM measured against a visually-lossless encode of each; all
above 0.99. As with previous previews, the 120fps source carried most of the weight —
the frame-rate drop did more than the CRF.

Dependencies Added

None. No new npm packages; all three ship dependencies: [].

girl-grid declares one registry dependency — the first component in the registry
to use the field:

registryDependencies: ["https://zepa.design/r/zepa-folder.json"]

The 300K tile embeds ZepaFolder with variant="bare" (documented as "just the folder,
for dropping into someone else's tile"), lightbox={false} since a FLIP lightbox inside
a 260px cell would be cramped. size is a number rather than a CSS length, so it's
measured off the card with a ResizeObserver and bounded 74–152px.

Verified public/r/girl-grid.json carries the dependency URL and bundles only
demo.tsx, so the CLI fetches zepa-folder separately rather than inlining it.

Checklist

  • Added meta.ts — all 3, slugs match folder names
  • Added demo.tsx — all 3
  • Added preview (public/previews/{category}/{slug}/preview.mov) — all 3, compressed
  • Ran npm run build:registry — items.ts, loaders.ts, published.ts,
    registry.json, code-paths.ts and public/r/*.json all regenerated
  • Ran npm run lint — clean
  • Ran npm run test — 23 passed / 6 files
  • Responsive (mobile + desktop) — 3–4 breakpoint tiers per component
  • No console.log
  • No hardcoded secrets/API keys
  • No unnecessary dependencies — nothing added to package.json
  • No unnecessary hardcoded colors/assets — colours scoped as CSS vars per root;
    all imagery served from Cloudinary

@netlify

netlify Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for zepaui ready!

Name Link
🔨 Latest commit 1764a3e
🔍 Latest deploy log https://app.netlify.com/projects/zepaui/deploys/6a9dc774dfa00c000864b051
😎 Deploy Preview https://deploy-preview-50--zepaui.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@vij-sameerb5
vij-sameerb5 merged commit aeab992 into main Sep 6, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant