diff --git a/apps/web/public/images/products/bloomword.png b/apps/web/public/images/products/bloomword.png
new file mode 100644
index 0000000..12d74db
Binary files /dev/null and b/apps/web/public/images/products/bloomword.png differ
diff --git a/apps/web/src/app/apps/page.tsx b/apps/web/src/app/apps/page.tsx
index 1ab6826..d4ff8b1 100644
--- a/apps/web/src/app/apps/page.tsx
+++ b/apps/web/src/app/apps/page.tsx
@@ -22,7 +22,7 @@ const apps = [
{
name: "Bloomword",
tagline: "Grow your vocab: a daily word game with a living 3D tree",
- icon: "/images/products/bloomword.svg",
+ icon: "/images/products/bloomword.png",
color: "text-green-600 dark:text-green-400",
borderColor: "border-green-500/20",
href: "/products/bloomword",
diff --git a/apps/web/src/app/products/bloomword/page.tsx b/apps/web/src/app/products/bloomword/page.tsx
index 5ff5478..2f9a3f3 100644
--- a/apps/web/src/app/products/bloomword/page.tsx
+++ b/apps/web/src/app/products/bloomword/page.tsx
@@ -78,7 +78,7 @@ export default function BloomwordPage() {
-
+
Now Live
diff --git a/apps/web/src/app/products/page.tsx b/apps/web/src/app/products/page.tsx
index 9e94dc6..8ecfc27 100644
--- a/apps/web/src/app/products/page.tsx
+++ b/apps/web/src/app/products/page.tsx
@@ -119,7 +119,7 @@ const products: Product[] = [
title: "Bloomword",
description: "A daily word game where everyone gets the same letters and races the sunset; every word you find grows a biome-specific, living 3D typographic tree. Build streaks, collect biomes, and share your bloom. Play free at bloomword.earth, or download free on iOS and Android.",
color: "green",
- icon: "/images/products/bloomword.svg",
+ icon: "/images/products/bloomword.png",
releaseDate: "2026-07-06",
},
{
diff --git a/apps/web/src/components/portfolio/bento-grid.tsx b/apps/web/src/components/portfolio/bento-grid.tsx
index 623fb34..4179ec7 100644
--- a/apps/web/src/components/portfolio/bento-grid.tsx
+++ b/apps/web/src/components/portfolio/bento-grid.tsx
@@ -73,7 +73,7 @@ const items: Item[] = [
{ name: "Smirk Wallet", tagline: "Non-custodial browser wallet with social tipping.", color: "amber", span: 1, image: "/images/products/smirk-wallet.png", alt: "Smirk Wallet browser extension", href: "https://smirk.cash", external: true, vignette: { webm: "/showcase/vignettes/smirk.webm", poster: "/showcase/vignettes/smirk.png" } },
// Transparent chroma-keyed vignette (the engine can't emit real alpha — BW_FLAT magenta key):
// full-bloom tree at rest, hover retracts and regrows it. Palindrome loop, seam 0.0.
- { name: "Bloomword", tagline: "A word game where every answer grows the tree.", color: "green", span: 1, image: "/images/products/bloomword.svg", alt: "Bloomword, a word game about growing a tree", href: "/products/bloomword", vignette: { webm: "/showcase/vignettes/bloomword.webm", poster: "/showcase/vignettes/bloomword.png" } },
+ { name: "Bloomword", tagline: "A word game where every answer grows the tree.", color: "green", span: 1, image: "/images/products/bloomword.png", alt: "Bloomword, a word game about growing a tree", href: "/products/bloomword", vignette: { webm: "/showcase/vignettes/bloomword.webm", poster: "/showcase/vignettes/bloomword.png" } },
// Single theme-independent asset: the INSET black silhouette stroke (sg_outline) sits ON the yellow letters, so one
// baked alpha render reads on both light and dark tiles — no per-theme pair needed (a 3D->web pipeline win).
{ name: "Barns & Neutrons", tagline: "Cozy puzzle expedition across the real Chart of Nuclides.", color: "amber", span: 2, image: "/images/products/barns-and-neutrons.svg", alt: "Barns & Neutrons, a game about the Chart of Nuclides", href: "/products/barns-and-neutrons", vignette: { webm: "/showcase/vignettes/barns.webm", poster: "/showcase/vignettes/barns.png" } },
diff --git a/apps/web/src/lib/services.ts b/apps/web/src/lib/services.ts
index 2398132..a6b81b3 100644
--- a/apps/web/src/lib/services.ts
+++ b/apps/web/src/lib/services.ts
@@ -86,7 +86,7 @@ const commerceProof: Proof[] = [
const gamesProof: Proof[] = [
{ title: "Suchoice", blurb: "Stop overthinking decisions: snap a photo, let AI read the options, spin the wheel. iOS and Android.", img: "/images/products/suchoice.png", href: "/products/suchoice", tag: "Live" },
{ title: "Vegan IQ", blurb: "1,000+ plant-based trivia questions across 8 categories, with a daily challenge and weekly quiz. iOS and Android.", img: "/images/products/vegan-iq.png", href: "/products/vegan-iq", tag: "Live" },
- { title: "Bloomword", blurb: "A daily word game where every word you find grows a living 3D typographic tree. Free at bloomword.earth and on iOS and Android.", img: "/images/products/bloomword.svg", href: "/products/bloomword", tag: "Live" },
+ { title: "Bloomword", blurb: "A daily word game where every word you find grows a living 3D typographic tree. Free at bloomword.earth and on iOS and Android.", img: "/images/products/bloomword.png", href: "/products/bloomword", tag: "Live" },
{ title: "Bauhaus Echo", blurb: "A visual memory puzzle game inspired by Bauhaus design. Android, iOS, and web.", img: "/images/products/bauhaus-echo.png", href: "/products/bauhaus-echo", tag: "Live" },
{ title: "Such Moon Launch", blurb: "Vry rocket, much landing, wow: a Wownero-themed pixel rocket arcade with 11 levels and tilt-to-steer. Everywhere.", img: "/images/products/such-moon-launch.png", href: "/products/such-moon-launch", tag: "Live" },
// Cross-listed from Education & Science: they're science/math games we build + ship in-house.
@@ -111,7 +111,7 @@ const educationProof: Proof[] = [
{ title: "Nuclear consulting & training", blurb: "PhD-led radiation-science teaching: Monte Carlo methods with GEANT4, shielding and dose fundamentals, detector physics, and open-source labs.", href: "https://jwinterm.github.io/geant4-radiation-labs/", tag: "Service" },
{ title: "Numchangers", blurb: "A kids math game (ages 5-8) where numbers morph into dots, shapes, and 3D characters, so arithmetic becomes a visible action instead of a quiz. Godot, mobile-first.", tag: "Early" },
{ title: "Zero-Day Defender", blurb: "A cybersecurity edutainment game: learn how real attacks and defenses work by playing through them, from phishing and passwords to zero-days.", tag: "Coming soon" },
- { title: "Bloomword", blurb: "Vocabulary as play: a daily word game where every word you find grows a living 3D typographic tree. Free on iOS and Android and at bloomword.earth.", img: "/images/products/bloomword.svg", href: "/products/bloomword", tag: "Live" },
+ { title: "Bloomword", blurb: "Vocabulary as play: a daily word game where every word you find grows a living 3D typographic tree. Free on iOS and Android and at bloomword.earth.", img: "/images/products/bloomword.png", href: "/products/bloomword", tag: "Live" },
{ title: "Vegan IQ", blurb: "Nutrition and food knowledge as a daily habit: 1,000+ plant-based trivia questions across 8 categories, with a daily challenge and weekly quiz. iOS and Android.", img: "/images/products/vegan-iq.png", href: "/products/vegan-iq", tag: "Live" },
];