Commit Graph
44 Commits
Author SHA1 Message Date
jwinterm 848deaf371 fix(brand): regenerate the games pulse so its arc clears the frame corners
Copied through from such-graphics db616f8. The launch arc's feet ran to y=178,
inside the frame's corner arcs (centred (26,174) and (174,174), r=12), so on
/apps the leg, its cap and its node dot all sat on the corner and the mark read
as broken. The feet now stop at the glyph baseline, y=164.

Generated, not hand-edited: the pack is canonical and a regen would have
overwritten a local fix.
2026-08-17 11:35:16 -04:00
jwinterm 261cb04667 feat(site): one voice, brand gradients, a lighter splash gate, denser portfolio
- Voice unified on the title-tag register: the homepage h1 now says what we
  sell (Custom E-commerce, Apps & Crypto Tools); 'Precision engineering for
  everyone' is demoted to the supporting line. The structured-data and
  manifest descriptions now match the OG description instead of carrying
  their own registers.
- The off-palette cyan/blue gradients are gone: .hero-title and the new
  .brand-gradient-text use the four-colour system (light palette on light,
  dark palette on dark, per the pack). Splash cover text, services and
  portfolio headings, the hero aura, and button shadows all follow.
- The splash now dismisses once 40% scrolled past instead of requiring the
  whole screen to leave the viewport (it was already once-per-session and
  reduced-motion-skipping).
- Portfolio: heading 'Portfolio', subtitle 'Products & projects', meta title
  to match; grid grows to three columns on xl in a max-w-6xl container.
- anim3_matrix slimmed: single-layer glow, unfiltered crackle and orbs, and
  the border cycles stroke colour instead of animating filter:hue-rotate --
  the filter animation forced a full filter re-render per frame and pegged a
  core on the page hosting it.
2026-08-16 00:04:28 -04:00
jwinterm c73b9f1c04 feat(brand): regenerate every mark and animation from the such-graphics pack
All branding and animation assets now come from packs/such-software/pack.json
(such-graphics feat/brand-full-blast) instead of hand-maintained files:

- anim1_pulse / anim3_matrix / anim_type_v4 (both themes): regenerated with
  the corrected U bowl, measured pulse timing (the hand-authored node delays
  ran ~17% fast), and CSS animation with real prefers-reduced-motion support.
- clean marks, lockups (clean_*_w_text), favicons (svg + 192px png), and the
  OG banner: regenerated; the OG card is the pack's 1200x630 projection.
- splash-such: rebuilt from the pack -- the old one carried the divergent U,
  an off-palette cyan frame, and the pre-correction radius. Now theme-aware:
  two inlined data URIs (hero-splash shows the light palette on light, the
  dark palette on dark) since the pack's dark hues are tuned for near-black.
- new assets available: games_pulse (the launch arch with the rocket, wired
  into /apps), morph, ambient_{atom,mesh,leaf}, favicon_dots, favicon_live,
  icon-192/512 + maskable-512 (wired into manifest.json), /favicon.ico.
- animation embeds switched <img> -> <object>: Chrome freezes CSS animations
  inside SVG-as-img (the old files animated because they were SMIL); an
  object hosts a real SVG document where CSS animation and the
  reduced-motion query both work. Verified live in Chrome.
2026-08-15 23:18:44 -04:00
jwinterm d3916fd0e8 bloomword: use the real app-icon PNG everywhere (was the flat SVG)
Swaps /images/products/bloomword.svg for bloomword.png across the apps
index, the products index, the Bloomword product page, the bento grid,
and both services.ts proof lists (games + education), so the icon
matches what actually ships on the App Store and Play listings.

The SVG is now unreferenced; leaving it in place for now.
2026-07-28 21:04:19 -04:00
jwinterm 20e0962fbc bento: smirk wallet 3D coin vignette
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.
2026-07-12 08:27:30 -04:00
jwinterm e1f7f3c49d home: scroll-enter lands at the very top; bloomword motion front-loaded; webshops copy
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.'
2026-07-12 08:19:45 -04:00
jwinterm e3ce7bdbba bento: 2x2 webshops layout + custom 1.2:1 reel crop + crisp vegan-iq re-render
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.
2026-07-12 08:06:44 -04:00
jwinterm 02b56acfe1 bento: overhaul — webshops morph reel, bloomword vignette, vegan-iq card flip
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.
2026-07-11 11:15:50 -04:00
jwinterm 679e1befdf fix(bento): barns wordmark — ink the letterform crease, not the solid's silhouette
The stroke was traced from the WHOLE extruded solid's alpha (front face + side walls),
so the line sat at the side wall's outer edge, offset from the glyphs — mushy letters.
Now a third render pass emits the FRONT FACES only (depth-0 TextMesh, z-seated at the
full mesh's front plane) and the stroke traces that mask: ink lands exactly on the
letterform crease and the darkened extrusion reads as the 3D body behind it. Also
gates the absorption flash out of mask passes (it could cross the mask threshold near
a strike and get inked). web_qa self-gate green (0.0% stripped, seam 0.0000, 512/600 KiB).
2026-07-11 09:53:42 -04:00
jwinterm 3d0c20d38e fix(bento): barns vignette — outline letters only + 3D crease, clean beta/nuclei
Per feedback: the whole-frame alpha stroke outlined the flying beta and the background
nuclei and only traced the outer silhouette (no internal creases). Now:
- Stroke from a WORDMARK-ONLY mask pass (nuclei + beta hidden) so only the letters get
  the ink line — beta stays a soft blue glow, nuclei stay clean.
- Darken the extruded SIDE WALLS so the front-face→side CREASE reads as a toon edge that
  a silhouette stroke can't reach.
outline2d gains an optional --mask (outline one element); mask-less still outlines
everything for a full cartoon look.
2026-07-11 09:02:33 -04:00
jwinterm 2b73a8b5ef fix(bento): barns vignette — real black outline + coherent blue beta, single theme-independent asset
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).
2026-07-11 08:41:18 -04:00
jwinterm 9ae740c21c fix(bento): barns vignette — clean yellow rest, seam-clean loop, subtle blue beta
Clean rest (frame 0 no longer catches a wrapped ripple: 2 strikes decay before
the seam), no white blowout (pulse strength down + blue core + lower HDR-bloom),
thinner outline, bigger wordmark.
2026-07-08 12:42:13 -04:00
jwinterm 90e7cb58ea fix(bento): per-theme barns vignette + alpha-safe beta (survives transparent capture)
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.
2026-07-08 12:21:32 -04:00
jwinterm d4f65489b5 feat(bento): barns vignette v2 — toon outline + recurring beta strikes
Extruded ChakraPetch wordmark now has an inverted-hull ink outline (crisp toon
edges) and 3 staggered beta strikes across the 5s loop with overlapping ripples,
so the tile stays alive instead of flashing once. Rendered on the 1080 Ti.
2026-07-08 11:50:26 -04:00
jwinterm c93421c083 feat(bento): live hover vignettes + Barns & Neutrons feature tile
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.
2026-07-07 13:18:24 -04:00
jwinterm a5647735d4 feat(services): restructure into 4 pillars + seamless morph loop
Services page was a long undifferentiated scroll of six ad-hoc sections.
Reframe it as four clear pillars, each led by an intro and backed by the
real products behind it:
- Commerce & web: Webshops, custom builds, Grin BTCPay plugin, Evaluetron
- Games & apps: Suchoice, Vegan IQ, Bloomword, Bauhaus Echo, Such Moon Launch
- Crypto & payments: consulting, Smirk Wallet, Hash Bags, Evaluetron
- Education & science: Barns & Neutrons, nuclear training, Numchangers, creds

Add a pillar jump-nav so the page reads as four areas, and a ProofCard that
links shipped products to their detail pages (image tile) and shows
pre-release ones as informational tiles with a status pill.

Also refresh the theming-morph reel with the seamless-loop build (crossfades
the last shop back to shop #1 instead of hard-cutting at the <video loop>).
2026-07-07 09:02:39 -04:00
jwinterm c41c7f28ee feat(webshops): refresh demo shots (now genuinely distinct) + varied surfaces gallery + booking callout
The five demo storefronts were re-themed to look like different companies
(distinct hero styles, card styles, density, grid, and homepage composition),
so re-snap the hero cards and regenerate the theming-morph reel from the
fresh shots.

Add a "Every surface, not just the homepage" gallery: six live surfaces
across different shops (yoga + coaching booking calendars, an editorial
product page, a dense catalog grid, a crypto product, a themed cart) so the
page shows platform depth the homepage crops hide.

Call out booking/scheduling explicitly: a new "Booking & Scheduling" feature
card, a booking FAQ (feeds FAQ JSON-LD), and a booking-calendar line in the
surfaces lead.

Demo images downsized to lean 1280w JPGs (png -> jpg).
2026-07-06 12:35:46 -04:00
jwinterm 99ce876cdd feat(site): theming-morph showcase hero on /products/webshops
The 'render once, serve cheap pixels' showcase, live. A 7s reel of the same
platform themed as five real demo brands (artisan -> merch -> crypto -> yoga
-> coaching), inside a decorative browser frame, at the top of the webshops
page.

- ShowcaseVideo: poster-first, preload='none' (no download until played),
  plays only while in the viewport (IntersectionObserver), pauses offscreen,
  and prefers-reduced-motion -> poster only (video never loads). muted +
  playsInline for mobile autoplay-on-view.
- BrowserFrame: static decorative chrome so the reel reads as a real shop.
- 16:9 assets ~330-355KB (webm/mp4) + 50KB poster, all within the motion budget.
2026-07-06 10:39:40 -04:00
jwinterm cbc8906715 feat(site): webshops rewrite + demo gallery + Bloomword/Meatspace/Mushroom Capital
- /products/webshops: lead with per-tenant theming; add the real platform
  features (Printful POD, non-custodial crypto to own wallet, Stripe Connect
  with item-margin-only fee framing, SIWE/wallet login, Telegram + email
  notifications, automated tax); fix the incorrect "Vercel/Railway" hosting
  line to fully-managed self-hosting; remove PayPal/Coinbase (not live).
- Live Demos gallery (new component) with real screenshots of the 5 themed
  demo storefronts.
- Add three projects to the portfolio: Bloomword (now live, bloomword.earth),
  Meatspace (in dev, meatspace.place), Mushroom Capital (coming soon,
  mushroom.capital) with an icon, a detail page (VideoGame + FAQ JSON-LD),
  and a sitemap entry each.
- Copy: avoid em dashes (colon/semicolon/comma) across the products area.

Verified: tsc clean, next build green (50/50 static pages).
2026-07-06 08:28:39 -04:00
jwinterm e1ff60180b Trim oversized bento images + fix sizes; bump turbo (clears advisories)
- 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.
2026-06-07 18:15:10 -04:00
jwinterm d2d4ff997f Cursor timing (~4 blinks each side); rewrite perf post to the real fix
- Monitor terminal: ~4 blinks, type 'such', backspace, ~4 blinks, fade.
- Rewrite the blog post so it tells the accurate story end to end (not an update):
  the LCP breakdown showed render delay with TTFB 0 and a free main thread, so it
  was neither the network nor JavaScript. It was render-blocking CSS, fixed by
  inlining the stylesheet. Server components / dropping framer are kept as honest
  supporting steps, not the gate. Swap the architecture figure for a CSS
  critical-path figure; mobile now a steady 100.
2026-06-07 17:32:21 -04:00
jwinterm 33400c5879 Publish perf blog post + Such Moon Launch iOS links
- New post 'My Animated Splash Was Tanking Our Mobile PageSpeed Score' (draft:false):
  the LCP investigation, the data-URI diagnostic, and the real fix (shrink the
  use-client boundary / server-render the static parts). Two SVG diagrams.
- Such Moon Launch now live on iOS: App Store link wired on the apps and product
  pages.
2026-06-06 20:41:31 -04:00
jwinterm c85383eff2 Mobile LCP: render splash logo as <img> (valid LCP element); faster blended transition; recenter tracer
- Inline <svg> is not an LCP candidate; on mobile the tagline is hidden so the
  logo was the only large element -> NO_LCP. Serve the mark as
  /images/branding/splash-such.svg and render it via <img> (a valid LCP
  candidate, painted from SSR HTML).
- Transition: start the cross-fade on click (shimmer plays as the splash fades
  into the content) and shorten durations 1.2s -> 0.8s; snappier and blended.
- Tracer target back to the midpoint (computerX+0.5, computerY+0.5).
2026-06-06 18:05:33 -04:00
jwinterm ed07bb5681 Add splash intro, nuclear games + consulting, Cherenkov hero
- 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.
2026-06-05 22:40:14 -04:00
jwinterm 4b2ae5646c OG cards: add icon-or-glyph graphic slot
Rework the per-product OG cards to a single template with a graphic slot: real
app icons for the apps that have one (Bauhaus Echo, Suchoice, Vegan IQ, Such Moon
Launch, Smirk), and thematic SVG glyphs for the rest (Wownerogue dungeon glyphs,
Neroswap candlesticks, a shopping bag for Webshops, a browser window for Custom
Websites). Same layout and accent system so the set reads as one family. Paths
are unchanged, so the page metadata already points at these.
2026-06-01 10:53:37 -04:00
jwinterm 97a8026ed6 SEO: FAQ schema, per-product OG cards, stable sitemap dates
- Add FAQPage structured data + visible FAQ sections to Wownerogue, Webshops,
  Neroswap, and Services (covers high-intent 'provably fair', 'no-KYC', and
  'revenue share' style queries; visible Q&A matches the schema).
- Generate branded 1200x630 OG cards per product and wire them into each
  product page's openGraph + twitter (summary_large_image), replacing the
  square app icons that previously got cropped in social previews.
- Sitemap: stop stamping every static page with new Date() on each build; use
  a single content-update date so freshness signals are not diluted.
2026-06-01 10:39:27 -04:00
jwinterm d8db411824 Add Wownerogue product page + blog post; remove r/CryptoCurrency and MoonPlace
- 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.
2026-06-01 10:09:11 -04:00
jwinterm ca5f555918 Rework home hero and portfolio, invert favicon theme mapping
- Home hero subhead rewritten to name commerce/websites/apps/consulting
  plus in-house mobile apps and games; primary CTA points to /products
- Portfolio page (/products) title renamed and each product card now shows
  a 56px icon beside the title
- Favicon served inverse to the browser color scheme so the tile contrasts
  with the chrome instead of blending into it
2026-04-20 13:04:27 -04:00
jwinterm f7fcb8d254 Suchoice v1.2.0: update product page, publish 3D physics blog post
Product page: added Dice Roll and Decision Duel to features grid (now
6 features), updated meta description and hero text, broadened Snap &
Decide description to include ingredients/labels.

Blog post: published 3D Physics in Flutter article covering three_js +
cannon_physics integration, framebuffer cache bug, quaternion convention
issue, vertex clustering for face detection, and settle mechanics.
2026-04-17 18:45:03 -04:00
jwinterm 6717ae071a fix OG banner 2026-04-09 16:45:18 -04:00
jwinterm 57a365dc06 add icons and animation to links 2026-04-09 08:42:33 -04:00
jwinterm 44638a04b3 add neroswap icon and dynamic feature to bento 2026-03-23 17:49:12 -04:00
jwinterm 3001d4bbe1 add ads.txt 2026-03-05 09:09:13 -05:00
jwinterm d720c6a38a add app-ads.txt 2026-02-26 20:17:04 -05:00
jwinterm 22c0c03c6c update animations, images, and link in about 2026-02-12 22:26:49 -05:00
jwinterm 357d5b4122 update logos and image strucutre 2026-02-07 22:29:23 -05:00
jwinterm 1705497ca6 Add blog and products pages (including bauhaus privacy policy) 2026-02-06 09:45:33 -05:00
jwinterm 8a119b4149 update images 2026-02-03 20:25:59 -05:00
jwinterm 19dfdbcea0 fix bento box p2 and update smirk image and wownerogue text 2026-02-03 19:37:35 -05:00
jwinterm daaae6c260 update: add smirk, discord, and personal site, remove reddit 2026-02-03 19:21:58 -05:00
jwinterm 0e7916e767 Fix founder signature icon using theme-aware logo SVGs 2026-01-16 21:15:06 -05:00
jwinterm 0d284b5c7d Upgrade Next.js to 15, fix first-load theme bug, add SVG assets
- Upgrade next 14.1.0 → 15.5.9, next-themes 0.2.1 → 0.4.6
- Fix theme not initializing on first load after server restart
- Add SVG logos and favicon, update site-logo to use SVGs
- Create shared Header component with skip-to-main link
- Add portfolio links to bento grid cards
- Improve accessibility: aria-describedby, prefers-reduced-motion
- Fix useFormState → useActionState for React 19 compatibility
- Fix founder-signature icon (use square favicon instead of wide logo)
2026-01-16 21:02:05 -05:00
jwinterm ffaea03e58 Fix critical accessibility and SEO issues
- 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
2026-01-16 15:03:12 -05:00
jwinterm f98b46d5e9 add images for bento 2026-01-16 10:02:43 -05:00