Trim SEO titles to <=60 chars; stop tracking TODO.md

- Shorter, non-truncating <title>/OG titles for products, apps, wownerogue,
  smirk, neroswap, suchoice, barns-and-neutrons, webshops.
- TODO.md removed from the repo and gitignored (internal working notes).
This commit is contained in:
jwinterm
2026-06-06 15:11:33 -04:00
parent 874bc4a2ff
commit 11381bd1a0
10 changed files with 15 additions and 123 deletions
+2 -2
View File
@@ -7,11 +7,11 @@ import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Our Apps: Games & Tools for iOS, Android & Web | Such Software",
title: "Apps: Games & Tools for iOS, Android & Web | Such Software",
description: "Download Such Software's apps and games: Bauhaus Echo, Suchoice, Vegan IQ, Such Moon Launch, and more. Free on the App Store, Google Play, and the web.",
alternates: { canonical: "/apps" },
openGraph: {
title: "Our Apps: Games & Tools for iOS, Android & Web | Such Software",
title: "Apps: Games & Tools for iOS, Android & Web | Such Software",
description: "Download Such Software's apps and games: Bauhaus Echo, Suchoice, Vegan IQ, Such Moon Launch, and more. Free on the App Store, Google Play, and the web.",
type: "website",
images: [{ url: "/images/branding/OG_banner_v2_light.png", width: 1200, height: 630, alt: "Such Software" }],
@@ -7,7 +7,7 @@ import { JsonLd, breadcrumbLd, faqLd } from "@/components/seo/json-ld";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Barns & Neutrons: A Game About the Table of Nuclides | Such Software",
title: "Barns & Neutrons: Table of Nuclides Game | Such Software",
description: "Barns & Neutrons is a cozy exploration-puzzle game across the real Table of Nuclides. Capture neutrons, coax decays, and learn honest, cited nuclear physics. In development.",
alternates: { canonical: "/products/barns-and-neutrons" },
keywords: [
+1 -1
View File
@@ -7,7 +7,7 @@ import { JsonLd, breadcrumbLd, softwareAppLd, faqLd } from "@/components/seo/jso
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Neroswap: No-KYC Monero & Bitcoin Price Aggregator | Such Software",
title: "Neroswap: No-KYC Crypto Price Aggregator | Such Software",
description:
"Compare live Monero, Wownero, and Bitcoin prices across 6 DEX and no-KYC CEX orderbooks in real time. No accounts, no custody, no tracking.",
alternates: { canonical: "/products/neroswap" },
+2 -2
View File
@@ -4,11 +4,11 @@ import { ProductsGrid, type Product } from "@/components/portfolio/products-grid
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Our Products & Apps: Crypto Tools, Nuclear Games & Commerce | Such Software",
title: "Products: Crypto Tools, Games & Commerce | Such Software",
description: "Explore Such Software's products: Wownerogue Monero roguelike, Neroswap crypto aggregator, Smirk wallet, headless Webshops, our mobile games, and nuclear games in development.",
alternates: { canonical: "/products" },
openGraph: {
title: "Our Products & Apps: Crypto Tools, Nuclear Games & Commerce | Such Software",
title: "Products: Crypto Tools, Games & Commerce | Such Software",
description: "Explore Such Software's products: Wownerogue Monero roguelike, Neroswap crypto aggregator, Smirk wallet, headless Webshops, our mobile games, and nuclear games in development.",
type: "website",
},
@@ -7,7 +7,7 @@ import { JsonLd, breadcrumbLd, softwareAppLd } from "@/components/seo/json-ld";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Smirk Wallet: Non-Custodial Crypto Tipping by Username | Such Software",
title: "Smirk Wallet: Non-Custodial Crypto Tipping | Such Software",
description: "Tip BTC, LTC, XMR, WOW, and GRIN on Telegram or Discord by username. A non-custodial browser wallet: your keys never leave your device.",
alternates: { canonical: "/products/smirk-wallet" },
openGraph: {
+2 -2
View File
@@ -8,11 +8,11 @@ import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Suchoice: Spin the Wheel & AI Decision Maker App | Such Software",
title: "Suchoice: AI Decision Maker & Spin Wheel | 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: Spin the Wheel & AI Decision Maker App | Such Software",
title: "Suchoice: AI Decision Maker & Spin Wheel | 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: ["/images/og/suchoice.png"],
+2 -2
View File
@@ -7,11 +7,11 @@ import Link from "next/link";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Custom Online Stores & E-Commerce Development | Such Software",
title: "Custom Online Stores & E-Commerce | 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: "Custom Online Stores & E-Commerce Development | Such Software",
title: "Custom Online Stores & E-Commerce | 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",
images: ["/images/og/webshops.png"],
@@ -7,7 +7,7 @@ import { JsonLd, breadcrumbLd, faqLd } from "@/components/seo/json-ld";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Wownerogue: Provably-Fair Monero Multiplayer Roguelike | Such Software",
title: "Wownerogue: Provably-Fair Monero Roguelike | Such Software",
description: "Play Wownerogue: a provably-fair, blockchain-synced multiplayer roguelike. Every run is verifiable, every round ends on a new block. Free in-browser, no download.",
alternates: { canonical: "/products/wownerogue" },
keywords: [