The flat lockup becomes a live tile: a 3D smirk coin (transparent, sg_outline inset ink,
dark rim) that rests smirk-up, tosses end-over-end on hover with the suchoice coin-flip
feel, lands $-up, and half-flips home for a seamless loop. 518KB webm + transparent
poster; web_qa gated.
Scroll-enter: the triggering gesture's MOMENTUM outlives the 800ms wave (a trackpad
flick trails ~1.5s), and those ticks scrolled the revealed page so you landed below
the hero. The scroll lock now holds until the input goes quiet (250ms without a
wheel/touch event, 3s cap) and releases exactly at the top. Verified with a simulated
14-tick 1.5s flick: lands scrollY=0, and a fresh gesture afterwards scrolls normally.
Bloomword recut: the loop opened with a 1s bloom hold so hover felt dead (movement
backloaded). Now a 0.2s hold then a brisk 3x retract into the full regrow, closing bob
at the end; still frame0==frameN (seam 0.0000), 390KB.
Webshops tagline: 'One platform, unlimited possibilities.'
New shape (drops Bauhaus): Webshops 2x2 feature / Smirk + Bloomword stacked right /
Barns 2x1 + Vegan IQ bottom. Grid gains md:row-span-2.
Webshops reel rebuilt at 1.2:1 (864x720) to match the 2x2 tile box with PER-SHOP crop
offsets (artisan's headline is left-anchored, coaching's box sits right of center, the
rest center) so no shop's hero text gets clipped by the cover fit.
Vegan IQ re-rendered at 1600x900 with the card at 95% height (text was landing on too
few yuv420p samples at 720p and read pixelated); webm 488KB, seam still 0.0000.
New lineup (drops Occupy Wallets + Wownerogue): Webshops (span 2) leads with the
theming-morph reel — the 5 re-snapped post-glowup demo shops crossfading, proof that
one platform yields completely different storefronts; Bloomword gets a transparent
chroma-keyed tree vignette (full bloom at rest, hover retracts + regrows, palindrome
seam 0.0); Vegan IQ gets a brand-panel card-flip reel from its own social pipeline
(logo -> real quiz card unanswered -> answered, seam 0.0); Barns/Smirk/Bauhaus stay.
HoverVignette grows fit=cover (opaque reels fill the tile, poster = tile art), an
optional H.264 mp4 source (Safari can't decode VP9), and on-screen autoplay for
no-hover devices (IntersectionObserver >= 0.5) so phones see the animations at all.
All four live tiles verified with Playwright: correct video plays on its tile's
hover, others stay paused.
Root causes (all 3D->web pipeline law violations):
- Beta 'flashing / getting deleted': the MatterWave beta was BLEND_ADD (writes ~no
alpha) so it was stripped by the transparent capture, AND its off-screen auto-free
killed the packet a third of the way through its flight. Now alpha-safe (MIX under
BN_ALPHA), pinned alive for the full flight (no_free), bigger + slower + brightness-
capped so it reads as a coherent BLUE de Broglie packet the whole way in.
- 'No black outline': the 3D inverted-hull shell was sub-pixel + washed by the fresnel
rim (invisible on light, flecky on dark). Replaced with a 2D silhouette INK STROKE
from the alpha matte (sg_outline, outline2d.py) — uniform, gap-free, and INSET so the
black line sits ON the yellow fill and reads on BOTH themes from ONE asset.
- Softened the ripple pulse so the crest stays a blue tint, not a white clip.
Seam diff frame0==frameN = 0.0 (perfectly seamless).
Two fixes to the barns hover vignette after seeing it live:
1. The beta was STRIPPED by the transparent capture: the flash/particle used
additive blending, which writes ~no alpha, so it vanished in the alpha webm
(only the opaque letters survived = that brief white "lightning"). Switched the
flash to alpha-blend and pushed the absorption onto the opaque letters (strong
blue surface-ripple pulse), so the beta now survives on BOTH light and dark.
2. Light + dark mode need different ink: a near-black outline vanishes on a dark
tile; a light outline vanishes on a light tile. Render two baked assets
(barns-light = dark ink, barns-dark = cream ink) and HoverVignette picks by
resolved theme (next-themes). Added a clean rest poster (no active strike) via
a BN_POSTER render so at-rest looks right.
At rest the card chrome (opaque bg, 64px frost, border, shadow) is now nearly
invisible so tiles read as just the title + the 3D render/image floating on the
page (especially clean on mobile, where every tile is 'at rest'). The glass
lights up + the colour tint paints on hover / focus / tap. Title and image keep
their visibility.
Add HoverVignette: a transparent alpha-WebM 3D render that plays over a tile on
hover/focus. Poster-first, preload=none, reduced-motion-safe, Safari-degrades to
the poster (no VP9-alpha). Feature tiles drop the static screenshot (the poster
is the rest state) and grow + lift above neighbours on hover so the animation is
the focus.
Rework the grid to six gap-free tiles: drop Neroswap, shrink Wownerogue to span 1.
First vignette: Barns & Neutrons — extruded 3D "BARNS & NEUTRONS" in the brand
ChakraPetch face with ambient drifting nuclei and a beta strike that fires a
surface-ripple + blue absorption flash across the letters. Rendered transparent
on the 1080 Ti via such-graphics.
- bento-grid: the Occupy Wallets tile is height-constrained (object-contain)
to ~240px wide, but sizes='33vw' made Next serve a 750w file into a 241px
slot (~62 KiB waste). Cap the sizes hint to the real display size.
- blog: add the 'a month later' chapter to the animated-hero post — the
Turnstile 450KB below-the-fold weight, deferred, mobile 75 -> 93 / desktop 99.
The previous commit (e1ff601) put a {/* */} comment between JSX attributes, which is
a syntax error, and it shipped because the commit wasn't gated on the build. Removed.
- Cap the two wildly oversized bento source PNGs so Next can't serve giant variants:
occupy-wallets 1200x837/393K -> 700x488/167K, neroswap 1584x672/1.8M -> 700x297/404K.
(bauhaus/vegan are already 512px and self-cap; privacy-labs was already small.)
- Fix the bento <Image> sizes: object-contain height-constrains the image so it renders
~360px wide in either span; 66vw/100vw made Next serve up to ~750-1200w. Now
'(max-width:768px) 90vw, 33vw'.
- Bump turbo 2.7.4 -> 2.9.16 (GHSA-hcf7-66rw-9f5r, GHSA-3qcw-2rhx-2726). pnpm audit
now clean.
- /contact redirects straight to the home contact form; product CTAs that
pointed at the broken /about#contact now use /contact.
- Bento: custom e-commerce (Occupy Wallets) top-left, Smirk Wallet top-right,
Wownerogue + Neroswap in the middle row; 'art brand' -> 'artist'.
- Splash: full-viewport animated SUCH logo cover with four corner nav
buttons; reveals the site once "entered" (scroll-through or Explore) and
does not resurrect on scroll-up. Original hero restored beneath it
(title-anchored monitor pulse + Cherenkov-blue background).
- Logo: traveling Cherenkov glow ring + gentle letter breath (SVG/Framer,
reduced-motion safe); beveled glass corner buttons.
- Services: new "Nuclear & Radiation Modeling" section + "Consulting"
umbrella (payments, crypto, nuclear), MCNP Google Scholar link, and a
not-a-licensed-PE clarification.
- About/founder bio: LLNL credibility + accessibility, art101.io link.
- Products: add Barns & Neutrons, Alpha Doc, Decay Theory (detail pages,
OG cards, SVG icons); client-side sortable grid with coming-soon at the
bottom. New Neroswap + Custom Websites icons (de-duplicated).
- SEO: game pages added to sitemap.
- Copy: dial back em-dashes to colons/commas/parens on home + services.
- New /products/wownerogue page (SEO metadata + VideoGame JSON-LD) and
wownerogue-launch blog post covering the fairness, block-timing, and payout design.
- Drop the retired r/CryptoCurrency and MoonPlace references from the portfolio grid,
products index, and custom-websites page; feature Wownerogue + Neroswap instead.
- Add WownerogueLinks component (live instances + GitHub source) and wire it into MDX.
- Remove now-orphaned r-cryptocurrency and moonplace images; add product page to sitemap.
- Product page at /products/neroswap with exchange descriptions, features, and architecture
- Blog post at /blog/neroswap-aggregator explaining the data pipeline and privacy design
- Added to products listing (first position, yellow color)
- Added to bento grid portfolio section
- Links to neroswap.com throughout
- SEO metadata with keywords, canonical URLs, Open Graph
- Fix homepage heading hierarchy (h2 -> h1)
- Add page-specific metadata to services and about pages
- Fix outline-none on form inputs for keyboard accessibility
- Delete sync conflict files
- Add group class back to bento cards for hover animations
- Use raw CSS for glassmorphism to fix Tailwind opacity errors
- Add TODO.md with production checklist
- Add semantic CSS classes (.section-container, .glass-card)
- Update Tailwind config for opacity modifier support
- **Visuals**:
- Implemented 'Data Ingress' animation with lines starting from edges and converging to a fixed point.
- Added centralized 'Monitor' icon as the convergence target.
- Refactored 'NebulaField' to use percentage-based coordinates for perfect alignment on resize.
- Smoothed animation timing and easing.
- **Micro-interactions**:
- Increased transparency of Bento Grid cards (from 90% to 70%) for better visibility of background elements.
- Added backdrop-blur to cards.
- **Fixes**:
- Fixed 'bg-clip-text' bug cutting off descenders in the main headline.