diff --git a/apps/web/src/app/products/such-moon-launch/page.tsx b/apps/web/src/app/products/such-moon-launch/page.tsx
index 6f7f347..9cc98a0 100644
--- a/apps/web/src/app/products/such-moon-launch/page.tsx
+++ b/apps/web/src/app/products/such-moon-launch/page.tsx
@@ -2,16 +2,17 @@ import { Header } from "@/components/layout/header";
import { MobileNav } from "@/components/layout/mobile-nav";
import { Card } from "@repo/ui/components/card";
import { SuchMoonLaunchStoreButtons } from "@/components/store-buttons";
+import { JsonLd, breadcrumbLd, softwareAppLd } from "@/components/seo/json-ld";
import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Such Moon Launch | Such Software",
- description: "Vry rocket. Much landing. Wow! A pixel-art rocket-flying arcade with 11 levels, 4 weapons, and an endless mode. Wownero-themed. Android, iOS, Web, Desktop.",
+ title: "Such Moon Launch: Pixel Rocket Arcade Game | Such Software",
+ description: "Fly a rocket across the solar system in this Wownero-themed pixel arcade. 11 levels, 4 weapons, tilt-to-steer, endless mode. Free on iOS, Android, web, desktop.",
alternates: { canonical: "/products/such-moon-launch" },
openGraph: {
- title: "Such Moon Launch | Such Software",
- description: "Vry rocket. Much landing. Wow! A pixel-art rocket-flying arcade with 11 levels, 4 weapons, and an endless mode. Wownero-themed.",
+ title: "Such Moon Launch: Pixel Rocket Arcade Game | Such Software",
+ description: "Fly a rocket across the solar system in this Wownero-themed pixel arcade. 11 levels, 4 weapons, tilt-to-steer, endless mode. Free on iOS, Android, web, desktop.",
type: "website",
},
};
@@ -41,6 +42,20 @@ const weapons = [
export default function SuchMoonLaunchPage() {
return (
+
+
diff --git a/apps/web/src/app/products/suchoice/page.tsx b/apps/web/src/app/products/suchoice/page.tsx
index 1e6a684..700ab87 100644
--- a/apps/web/src/app/products/suchoice/page.tsx
+++ b/apps/web/src/app/products/suchoice/page.tsx
@@ -2,17 +2,18 @@ import { Header } from "@/components/layout/header";
import { MobileNav } from "@/components/layout/mobile-nav";
import { Card } from "@repo/ui/components/card";
import { StoreButtons } from "@/components/store-buttons";
+import { JsonLd, breadcrumbLd, softwareAppLd } from "@/components/seo/json-ld";
import Image from "next/image";
import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Suchoice | Such Software",
- description: "Six ways to decide: AI photo reader, spin the wheel, coin flip, 3D dice, head-to-head duel, and city explorer. Android and iOS.",
+ title: "Suchoice: Spin the Wheel & AI Decision Maker App | Such Software",
+ description: "Can't decide? Snap a photo and let AI read your options, spin the wheel, flip a coin, or roll 3D dice. The fun decision-maker app for iOS and Android.",
alternates: { canonical: "/products/suchoice" },
openGraph: {
- title: "Suchoice | Such Software",
- description: "Six ways to decide: AI photo reader, spin the wheel, coin flip, 3D dice, head-to-head duel, and city explorer. Android and iOS.",
+ title: "Suchoice: Spin the Wheel & AI Decision Maker App | Such Software",
+ description: "Can't decide? Snap a photo and let AI read your options, spin the wheel, flip a coin, or roll 3D dice. The fun decision-maker app for iOS and Android.",
type: "website",
images: [{ url: "/images/products/suchoice.png", width: 512, height: 512, alt: "Suchoice" }],
},
@@ -30,6 +31,19 @@ const features = [
export default function SuchoicePage() {
return (
+
+
diff --git a/apps/web/src/app/products/vegan-iq/page.tsx b/apps/web/src/app/products/vegan-iq/page.tsx
index 22c3678..8b30dfa 100644
--- a/apps/web/src/app/products/vegan-iq/page.tsx
+++ b/apps/web/src/app/products/vegan-iq/page.tsx
@@ -2,25 +2,28 @@ import { Header } from "@/components/layout/header";
import { MobileNav } from "@/components/layout/mobile-nav";
import { Card } from "@repo/ui/components/card";
import { StoreButtons } from "@/components/store-buttons";
+import { JsonLd, breadcrumbLd, softwareAppLd } from "@/components/seo/json-ld";
import Image from "next/image";
import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Vegan IQ | Such Software",
- description: "Test your plant-based knowledge with 1000+ trivia questions across 8 categories. Swipe and tap gameplay with verified data. Android and iOS.",
+ title: "Vegan IQ: Plant-Based Trivia Game | Such Software",
+ description: "Test your plant-based knowledge with 1,000+ trivia questions across 8 categories, plus a daily challenge and weekly quiz. Free vegan trivia for iOS and Android.",
alternates: { canonical: "/products/vegan-iq" },
openGraph: {
- title: "Vegan IQ | Such Software",
- description: "Test your plant-based knowledge with 1000+ trivia questions across 8 categories. Swipe and tap gameplay with verified data. Android and iOS.",
+ title: "Vegan IQ: Plant-Based Trivia Game | Such Software",
+ description: "Test your plant-based knowledge with 1,000+ trivia questions across 8 categories, plus a daily challenge and weekly quiz. Free vegan trivia for iOS and Android.",
type: "website",
images: [{ url: "/images/products/vegan-iq.png", width: 512, height: 512, alt: "Vegan IQ" }],
},
};
const features = [
- { name: "1000+ Questions", description: "Curated trivia questions backed by verified data from USDA, Poore & Nemecek, NIH, and FAOSTAT. No AI-generated content." },
+ { name: "1,000+ Questions", description: "Curated trivia questions backed by verified data from USDA, Poore & Nemecek, NIH, and FAOSTAT. No AI-generated content." },
{ name: "8 Categories", description: "Nutrition, environment, ingredients, food history, animal welfare, health, cooking, and culture." },
+ { name: "Daily Challenge", description: "A fresh set of questions every day. Build a streak and keep your knowledge sharp." },
+ { name: "Weekly Quiz", description: "New themed quiz each week with fresh content to test how far you've come." },
{ name: "Swipe & Tap", description: "Swipe right for true, left for false. Tap your answer for multiple choice. Fast, intuitive gameplay." },
{ name: "Dark & Light Mode", description: "Play in whichever theme you prefer. Automatic or manual switching." },
{ name: "SFX & Haptics", description: "Satisfying sound effects and haptic feedback on correct and incorrect answers." },
@@ -30,6 +33,19 @@ const features = [
export default function VeganIqPage() {
return (
+
+
@@ -51,7 +67,7 @@ export default function VeganIqPage() {
- Think you know your vegan facts? Vegan IQ puts your plant-based knowledge to the test with over 1000 trivia questions across 8 categories.
+ Think you know your vegan facts? Vegan IQ puts your plant-based knowledge to the test with over 1,000 trivia questions across 8 categories.
Every question is backed by verified data from sources like the USDA, Poore & Nemecek (2018), NIH, and FAOSTAT.
diff --git a/apps/web/src/app/products/webshops/page.tsx b/apps/web/src/app/products/webshops/page.tsx
index ea2fedd..eaba277 100644
--- a/apps/web/src/app/products/webshops/page.tsx
+++ b/apps/web/src/app/products/webshops/page.tsx
@@ -2,16 +2,17 @@ import { Header } from "@/components/layout/header";
import { MobileNav } from "@/components/layout/mobile-nav";
import { Card } from "@repo/ui/components/card";
import { Button } from "@repo/ui/components/button";
+import { JsonLd, breadcrumbLd } from "@/components/seo/json-ld";
import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Webshops | Such Software",
- description: "Headless Medusa commerce engines with revenue-share pricing. No upfront costs, aligned incentives.",
+ title: "Custom Online Stores & E-Commerce Development | Such Software",
+ description: "Custom online stores with no upfront cost and revenue-share pricing. Own your data, escape template limits, and hit 100/100 Lighthouse. Built on Medusa.",
alternates: { canonical: "/products/webshops" },
openGraph: {
- title: "Webshops | Such Software",
- description: "Headless Medusa commerce engines with revenue-share pricing. No upfront costs, aligned incentives.",
+ title: "Custom Online Stores & E-Commerce Development | Such Software",
+ description: "Custom online stores with no upfront cost and revenue-share pricing. Own your data and escape template limits. Built on Medusa.",
type: "website",
},
};
@@ -19,20 +20,27 @@ export const metadata: Metadata = {
export default function WebshopsPage() {
return (
+
← Back to Products
-
- Webshops
+
+ Custom Online Stores
+
Webshops built and run on revenue share.
- We build headless commerce platforms on Medusa v2 with a revenue-share model.
- No massive setup fees, no monthly retainers. We only win when you make sales.
+ We build custom online stores with a revenue-share model: no large setup fee, no monthly
+ retainer. We only win when you make sales. Under the hood it is a headless Medusa v2
+ backend with a Next.js storefront, so you own your data and your business logic.
@@ -81,6 +89,12 @@ export default function WebshopsPage() {
+
+ See also our{" "}
+ development services
+ {" "}and{" "}
+ custom web apps.
+
diff --git a/apps/web/src/app/products/wownerogue/page.tsx b/apps/web/src/app/products/wownerogue/page.tsx
index 549dd57..6d278de 100644
--- a/apps/web/src/app/products/wownerogue/page.tsx
+++ b/apps/web/src/app/products/wownerogue/page.tsx
@@ -3,6 +3,7 @@ import { MobileNav } from "@/components/layout/mobile-nav";
import { Card } from "@repo/ui/components/card";
import { WownerogueLinks } from "@/components/store-buttons";
import Link from "next/link";
+import { JsonLd, breadcrumbLd } from "@/components/seo/json-ld";
import type { Metadata } from "next";
export const metadata: Metadata = {
@@ -70,6 +71,11 @@ const steps = [
export default function WowneroguePage() {
return (
+
diff --git a/apps/web/src/app/services/page.tsx b/apps/web/src/app/services/page.tsx
index daddc4f..ed732f3 100644
--- a/apps/web/src/app/services/page.tsx
+++ b/apps/web/src/app/services/page.tsx
@@ -9,14 +9,14 @@ import { Card } from "@repo/ui/components/card";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Services | Such Software",
- description: "Medusa v2 development, custom web applications, and cryptocurrency consulting. High-performance headless commerce, real-time platforms, and Web3 integration.",
+ title: "Medusa, Web App & Crypto Development Services | Such Software",
+ description: "Custom e-commerce on Medusa v2, real-time web apps, and Monero/crypto consulting. A Kennett Square, PA studio building for scale, accessibility, and performance.",
alternates: {
canonical: "/services",
},
openGraph: {
- title: "Services | Such Software",
- description: "Medusa v2 development, custom web applications, and cryptocurrency consulting.",
+ title: "Medusa, Web App & Crypto Development Services | Such Software",
+ description: "Custom e-commerce on Medusa v2, real-time web apps, and Monero/crypto consulting. A Kennett Square, PA studio building for scale, accessibility, and performance.",
type: "website",
},
};
diff --git a/apps/web/src/app/support/page.tsx b/apps/web/src/app/support/page.tsx
index ab9183e..98840f6 100644
--- a/apps/web/src/app/support/page.tsx
+++ b/apps/web/src/app/support/page.tsx
@@ -5,12 +5,12 @@ import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
- title: "Support | Such Software",
- description: "Get help with Bauhaus Echo or any Such Software product. Report bugs, request features, or send feedback.",
+ title: "Support & Feedback | Such Software",
+ description: "Get help with any Such Software app or game. Report a bug, request a feature, or send feedback. We read every message.",
alternates: { canonical: "/support" },
openGraph: {
- title: "Support | Such Software",
- description: "Get help with Bauhaus Echo or any Such Software product. Report bugs, request features, or send feedback.",
+ title: "Support & Feedback | Such Software",
+ description: "Get help with any Such Software app or game. Report a bug, request a feature, or send feedback. We read every message.",
type: "website",
},
};
@@ -39,13 +39,13 @@ export default function SupportPage() {
Feature Requests
- Have an idea to make the game better? We're always looking for ways to improve.
+ Have an idea to make your app or game better? We're always looking for ways to improve.
General Feedback
- Enjoying the game? Hate something? All feedback is welcome and helps us prioritize.
+ Enjoying one of our apps? Hate something? All feedback is welcome and helps us prioritize.
diff --git a/apps/web/src/components/seo/json-ld.tsx b/apps/web/src/components/seo/json-ld.tsx
new file mode 100644
index 0000000..1d799cd
--- /dev/null
+++ b/apps/web/src/components/seo/json-ld.tsx
@@ -0,0 +1,92 @@
+/**
+ * JSON-LD helpers. `JsonLd` renders a structured-data