diff --git a/apps/web/src/app/about/page.tsx b/apps/web/src/app/about/page.tsx index 9fd39a1..86d455d 100644 --- a/apps/web/src/app/about/page.tsx +++ b/apps/web/src/app/about/page.tsx @@ -34,7 +34,7 @@ export default function AboutPage() {
Such Software is a software studio in Kennett Square, PA, founded by John Winter Murphy, whose background is in semiconductor and nuclear engineering: a Materials Engineering PhD from UT-Dallas and six years at Lawrence Livermore National Laboratory. - We build accessible e-commerce websites, crypto and payment integrations, and original mobile apps and games. We also consult on cryptocurrency and payment software and integration — the client or a licensed third party holds funds; we never take custody — and teach nuclear, radiation, and semiconductor modeling through open-source labs, training, and talks. + We build accessible e-commerce websites, crypto and payment integrations, and original mobile apps and games. We also consult on cryptocurrency and payment software and integration; the client or a licensed third party holds funds, and we never take custody. We teach nuclear, radiation, and semiconductor modeling through open-source labs, training, and talks.
diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index 81841b6..7e6d5cc 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -283,19 +283,22 @@ @keyframes nebula-caret { 0%, 50% { border-color: currentColor; } 50.01%, 100% { border-color: transparent; } } @keyframes nebula-term-out { to { opacity: 0; } } -/* Hero title: an animated gradient sheen. LCP-safe — the text paints immediately with the +/* Hero title: an animated gradient sheen. LCP-safe: the text paints immediately with the gradient; only the gradient POSITION animates, which never delays the largest paint. The - global reduced-motion rule freezes it to the base gradient. */ + global reduced-motion rule freezes it to the base gradient. + The wider 300% ramp over an 18s cycle makes this a slow drift rather than a visible sweep, + and the symmetric cubic-bezier easing removes the hard turnaround the old ease-in-out had + at each end of the travel. */ /* The brand's four-colour system (S green, U magenta, C blue, H teal), one per glyph. Light theme uses the light palette; .dark swaps in the dark palette, which is the same hues lifted for contrast on near-black -- from packs/such-software/pack.json. */ .hero-title { background-image: linear-gradient(110deg, #1a5c38 0%, #b83670 30%, #176a92 55%, #12857e 80%, #1a5c38 100%); - background-size: 220% auto; + background-size: 300% auto; -webkit-background-clip: text; background-clip: text; color: transparent; - animation: hero-sheen 9s ease-in-out infinite; + animation: hero-sheen 18s cubic-bezier(0.37, 0, 0.63, 1) infinite; } .dark .hero-title { background-image: linear-gradient(110deg, #35925c 0%, #e8689e 30%, #4aade0 55%, #3ad4c6 80%, #35925c 100%); diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index 64dbe6c..8929362 100644 --- a/apps/web/src/app/page.tsx +++ b/apps/web/src/app/page.tsx @@ -28,11 +28,12 @@ export default function Home() { className="hero-title text-4xl sm:text-5xl md:text-7xl font-bold mb-6 pb-2" style={{ maxWidth: "min(calc(90vw - 120px), 100%)" }} > - Custom E-commerce, - Apps & Crypto Tools + Precision Engineering + for Everyone- Websites, games, payments, and consulting too — plus our own mobile apps. A software studio in Kennett Square, PA. Precision engineering for everyone. + Custom e-commerce, apps, games, and crypto payment tools, built to order in + Kennett Square, PA. Plus a shelf of mobile apps and games of our own.
It is 2:07 AM. A fifth-year PhD student has just caused a catastrophic accelerator overload, - irradiating the building and everyone in it — and the thesis defense is at 8:00 AM. Descend + irradiating the building and everyone in it, and the thesis defense is at 8:00 AM. Descend through five warped department wings, master four types of radiation, and decide whether to bury the evidence or face the Committee. Alpha Doc is a systems-driven roguelike with dark academic teeth. diff --git a/apps/web/src/app/products/barns-and-neutrons/opengraph-image.tsx b/apps/web/src/app/products/barns-and-neutrons/opengraph-image.tsx index f31911d..3e0b179 100644 --- a/apps/web/src/app/products/barns-and-neutrons/opengraph-image.tsx +++ b/apps/web/src/app/products/barns-and-neutrons/opengraph-image.tsx @@ -1,6 +1,6 @@ import { gameOgImage, OG_SIZE, OG_CONTENT_TYPE } from "@/lib/og"; -export const alt = "Barns & Neutrons — a game about the Chart of Nuclides"; +export const alt = "Barns & Neutrons: a game about the Chart of Nuclides"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; diff --git a/apps/web/src/app/products/barns-and-neutrons/page.tsx b/apps/web/src/app/products/barns-and-neutrons/page.tsx index 0f2c740..3956763 100644 --- a/apps/web/src/app/products/barns-and-neutrons/page.tsx +++ b/apps/web/src/app/products/barns-and-neutrons/page.tsx @@ -21,16 +21,16 @@ export const metadata: Metadata = { ], openGraph: { title: "Barns & Neutrons: A Game About the Chart of Nuclides", - description: "A cozy, honest expedition across the real Chart of Nuclides — the anti-spreadsheet. In development by Such Software.", + description: "A cozy, honest expedition across the real Chart of Nuclides: the anti-spreadsheet. In development by Such Software.", type: "website", url: "/products/barns-and-neutrons", }, }; const faqs = [ - { q: "What is Barns & Neutrons?", a: "A cozy exploration-puzzle game set on the real Chart of Nuclides — the grid of every known isotope. You start on a small island of known nuclides and each step into the dark is a small physics puzzle: capture a neutron, coax a decay. The reward is discovery, as a new nuclide lights up and its Compendium entry unfolds." }, + { q: "What is Barns & Neutrons?", a: "A cozy exploration-puzzle game set on the real Chart of Nuclides, the grid of every known isotope. You start on a small island of known nuclides and each step into the dark is a small physics puzzle: capture a neutron, coax a decay. The reward is discovery, as a new nuclide lights up and its Compendium entry unfolds." }, { q: "Is it educational?", a: "Yes, but through play, not lectures. Every animation reflects real physics, and discoveries unlock real-world context (Tc-99m in medical imaging, Am-241 in smoke detectors, C-14 in dating) along with half-lives, Q-values, and cornerstone papers. The data is grounded in open sources like ENDF, IAEA, and NIST." }, - { q: "What does “Barns” mean?", a: "A barn is the real unit of nuclear cross-section (10⁻²⁴ cm²) — a measure of how likely a nucleus is to interact with a neutron. The neutron-capture puzzles are literally about tuning energy to hit that cross-section." }, + { q: "What does “Barns” mean?", a: "A barn is the real unit of nuclear cross-section (10⁻²⁴ cm²), a measure of how likely a nucleus is to interact with a neutron. The neutron-capture puzzles are literally about tuning energy to hit that cross-section." }, { q: "What platforms will it be on?", a: "It is built in Godot for desktop (Windows, macOS, Linux) and mobile (iOS, Android)." }, { q: "When is it out?", a: "It is in active development. The first playable slice (the Mo-99 → Tc-99m neighborhood) is the current milestone. Follow Such Software for release news." }, ]; @@ -51,8 +51,8 @@ const jsonLd = { const features = [ { title: "Discovery is the loop", body: "No linear tech tree. You explore a real, enormous map of ~3,300 nuclides. Completionism and pure curiosity pull you deeper, with no timers and no game-overs." }, - { title: "Honest physics", body: "When reality and a cuter lie compete, reality wins — then we make reality beautiful. Neutron scattering is forward-peaked at fast energies because it actually is." }, - { title: "Failure is serendipity", body: "Miss a neutron capture and the nucleus does what it really would — maybe a decay instead. You discover a different nuclide and learn real behavior. No punishment, only discovery." }, + { title: "Honest physics", body: "When reality and a cuter lie compete, reality wins; then we make reality beautiful. Neutron scattering is forward-peaked at fast energies because it actually is." }, + { title: "Failure is serendipity", body: "Miss a neutron capture and the nucleus does what it really would: maybe a decay instead. You discover a different nuclide and learn real behavior. No punishment, only discovery." }, { title: "The Compendium", body: "Every discovered isotope unlocks a card: real uses, half-lives, Q-values, and a link to a cornerstone paper (Fermi, Chadwick, Hahn & Strassmann). You learn the history, not just the facts." }, { title: "A 3D tabletop, not a spreadsheet", body: "A tilted, extruded ceramic-tile board with a glowing valley of stability and dramatic discovery vignettes. Cozy, warm, and tactile." }, { title: "Open core", body: "The physics, data, and code are open; the art, prose, and Compendium illustrations are ours. Facts aren't copyrightable, and we cite them anyway." }, @@ -85,13 +85,13 @@ export default function BarnsAndNeutronsPage() {
A cozy, honest expedition across the real Chart of Nuclides — the anti-spreadsheet.
+A cozy, honest expedition across the real Chart of Nuclides: the anti-spreadsheet.
Barns & Neutrons is a calm puzzle game about the real Chart of Nuclides. You begin on a tiny lit island of known isotopes, and each step into the dark is a small, elegant physics - puzzle — capture a neutron, coax a decay. The reward is discovery: a new nuclide lights up + puzzle: capture a neutron, coax a decay. The reward is discovery: a new nuclide lights up and its Compendium entry unfolds. It is our flagship edutainment title, and it shares its DNA with our founder’s open-source{" "} GEANT4 radiation labs. diff --git a/apps/web/src/app/products/bauhaus-echo/page.tsx b/apps/web/src/app/products/bauhaus-echo/page.tsx index 7505fd1..483c172 100644 --- a/apps/web/src/app/products/bauhaus-echo/page.tsx +++ b/apps/web/src/app/products/bauhaus-echo/page.tsx @@ -70,7 +70,7 @@ export default function BauhausEchoPage() {
A visual memory puzzle game inspired by Bauhaus design aesthetics. Memorize arrangements of geometric tiles, watch them shuffle, then reconstruct the pattern. - Or unwind in Zen mode — a pressure-free sandbox where you compose with tiles at your own pace. + Or unwind in Zen mode, a pressure-free sandbox where you compose with tiles at your own pace.
If you purchase the "Remove Ads" upgrade, your transaction is processed by:
We do not have access to your payment information. We only receive confirmation of your purchase status. diff --git a/apps/web/src/app/products/bloomword/page.tsx b/apps/web/src/app/products/bloomword/page.tsx index ad97315..cc35105 100644 --- a/apps/web/src/app/products/bloomword/page.tsx +++ b/apps/web/src/app/products/bloomword/page.tsx @@ -95,7 +95,7 @@ export default function BloomwordPage() { Bloomword is a daily word game with a twist you can watch grow. Everyone gets the same letters each day and races the sunset to find words, and every word you find sprouts new growth on a living 3D typographic tree. Keep your streak, collect the biomes, and share the - bloom you grew today. It is free on iOS and Android — learn more at{" "} + bloom you grew today. It is free on iOS and Android. Learn more at{" "} bloomword.earth.
diff --git a/apps/web/src/app/products/decay-theory/opengraph-image.tsx b/apps/web/src/app/products/decay-theory/opengraph-image.tsx index bae1733..87b4a86 100644 --- a/apps/web/src/app/products/decay-theory/opengraph-image.tsx +++ b/apps/web/src/app/products/decay-theory/opengraph-image.tsx @@ -1,6 +1,6 @@ import { gameOgImage, OG_SIZE, OG_CONTENT_TYPE } from "@/lib/og"; -export const alt = "Decay Theory — Erwin's Atomic Adventure"; +export const alt = "Decay Theory: Erwin's Atomic Adventure"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; diff --git a/apps/web/src/app/products/decay-theory/page.tsx b/apps/web/src/app/products/decay-theory/page.tsx index 43796ca..6d9c2b4 100644 --- a/apps/web/src/app/products/decay-theory/page.tsx +++ b/apps/web/src/app/products/decay-theory/page.tsx @@ -27,10 +27,10 @@ export const metadata: Metadata = { }; const faqs = [ - { q: "What is Decay Theory?", a: "A 2D side-scrolling platformer where the entire world is made of individual atoms undergoing radioactive decay in real time. You don't see platforms vanish in bulk — you watch the ground dissolve atom by atom beneath your feet." }, - { q: "Who is Erwin?", a: "Erwin is a quantum-coherent cat — a nod to Schrödinger — whose body is itself a particle system. Health is 'quantum coherence,' shown as particle density: a healthy Erwin is a tight cloud; near death, a ghostly shimmer." }, + { q: "What is Decay Theory?", a: "A 2D side-scrolling platformer where the entire world is made of individual atoms undergoing radioactive decay in real time. You don't see platforms vanish in bulk; you watch the ground dissolve atom by atom beneath your feet." }, + { q: "Who is Erwin?", a: "Erwin is a quantum-coherent cat, a nod to Schrödinger, whose body is itself a particle system. Health is 'quantum coherence,' shown as particle density: a healthy Erwin is a tight cloud; near death, a ghostly shimmer." }, { q: "Does it actually teach physics?", a: "Yes, through mechanics rather than lectures. Decay modes, half-lives, decay chains, fission, and reactor control are things you feel. Isotopes use real half-lives and color coding." }, - { q: "How is it released?", a: "Episode 1, 'Ground State,' is a free vertical slice — no ads, no IAP. The full game (more zones and powers) unlocks via a single one-time purchase." }, + { q: "How is it released?", a: "Episode 1, 'Ground State,' is a free vertical slice: no ads, no IAP. The full game (more zones and powers) unlocks via a single one-time purchase." }, { q: "When is it out?", a: "Episode 1 is the current milestone, targeting iOS and Android first, with a desktop (Steam) port later. Follow Such Software for the launch." }, ]; @@ -50,8 +50,8 @@ const jsonLd = { }; const features = [ - { title: "The world decays as you watch", body: "Every tile is thousands of simulated atoms with a real decay probability. Platforms erode into swiss cheese and crumble under your feet — stochastic, beautiful, and deadly." }, - { title: "Quantum powers", body: "Observation collapses a wave function to stabilize ground; Time Rewind undoes a fatal step. Later powers — superposition, entanglement, tunneling — each teach a real concept." }, + { title: "The world decays as you watch", body: "Every tile is thousands of simulated atoms with a real decay probability. Platforms erode into swiss cheese and crumble under your feet: stochastic, beautiful, and deadly." }, + { title: "Quantum powers", body: "Observation collapses a wave function to stabilize ground; Time Rewind undoes a fatal step. Later powers each teach a real concept: superposition, entanglement, tunneling." }, { title: "Erwin, a living particle system", body: "Your cat is rendered as 2,000+ particles. Coherence is health: take damage and Erwin literally comes apart at the seams." }, { title: "Real isotope data", body: "Isotopes carry authentic half-lives and decay chains, color-coded by family. The Geiger-counter audio tempo tracks the local decay rate." }, { title: "Tight, skill-based platforming", body: "Precise tilt-and-touch controls, checkpoints, and speedrun-friendly level design. A real platformer, not a quiz with jumps." }, @@ -91,7 +91,7 @@ export default function DecayTheoryPage() {Decay Theory is a hard-sci-fi platformer where the entire world is composed of individual simulated atoms decaying in real time. You play Erwin, a quantum cat navigating a world that - is literally evaporating at the subatomic level — and you learn real nuclear physics by + is literally evaporating at the subatomic level, and you learn real nuclear physics by feeling it, not by reading it.
@@ -111,7 +111,7 @@ export default function DecayTheoryPage() {Neroswap runs a fleet of Python scrapers on a dedicated server. Every 10 minutes, each scraper pulls the latest orderbook or ticker data - from its exchange — via API, gRPC, or HTML scraping over Tor. The + from its exchange, via API, gRPC, or HTML scraping over Tor. The results are merged into JSON files and synced to a CDN edge server.
diff --git a/apps/web/src/app/products/page.tsx b/apps/web/src/app/products/page.tsx index 1e528bd..df48767 100644 --- a/apps/web/src/app/products/page.tsx +++ b/apps/web/src/app/products/page.tsx @@ -152,7 +152,7 @@ export default function ProductsPage() { Portfolio
- Products & projects — from commerce backends to consumer games, plus three nuclear-physics games in development. + Products & projects: from commerce backends to consumer games, plus three nuclear-physics games in development.
diff --git a/apps/web/src/app/products/such-moon-launch/leaderboard/page.tsx b/apps/web/src/app/products/such-moon-launch/leaderboard/page.tsx index 9fc4d33..4ded134 100644 --- a/apps/web/src/app/products/such-moon-launch/leaderboard/page.tsx +++ b/apps/web/src/app/products/such-moon-launch/leaderboard/page.tsx @@ -7,12 +7,12 @@ import Link from "next/link"; import type { Metadata } from "next"; export const metadata: Metadata = { - title: "Such Moon Launch — Global Leaderboard | Such Software", + title: "Such Moon Launch: Global Leaderboard | Such Software", description: "Live global rankings for Such Moon Launch: fastest landings, biggest Moonrock hauls, and Endless Mode wave records across all 12 levels.", alternates: { canonical: "/products/such-moon-launch/leaderboard" }, openGraph: { - title: "Such Moon Launch — Global Leaderboard", + title: "Such Moon Launch: Global Leaderboard", description: "Live global rankings: fastest landings, biggest Moonrock hauls, and Endless Mode wave records.", type: "website", @@ -113,7 +113,7 @@ export default async function LeaderboardPage({ 🏆 Leaderboard- Live global rankings — {levelName}. Updates every minute. + Live global rankings: {levelName}. Updates every minute.
{/* Level selector */} @@ -167,7 +167,7 @@ export default async function LeaderboardPage({ ) : scores.length === 0 ? (A Wownero-themed pixel-art rocket arcade. Fly across the solar system, dodge Martians, asteroids, gamma rays, and black holes. Collect crypto, upgrade your ship, and unlock - 13 ship skins. 11 story levels plus a procedural endless mode — with tilt-to-steer + 13 ship skins. 11 story levels plus a procedural endless mode, with tilt-to-steer controls on mobile.
@@ -95,7 +95,7 @@ export default function SuchMoonLaunchPage() {Such Moon Launch is the greatly expanded re-release of the very first game I ever wrote. - The original — Meowlet Moon Launch — was a single-level rocket-landing prototype + The original, Meowlet Moon Launch, was a single-level rocket-landing prototype published years ago as a test app under our old Tabby Labs developer account. One level, simple physics, no music, no juice. But it shipped, and people played it.
@@ -104,7 +104,7 @@ export default function SuchMoonLaunchPage() { a procedural endless mode, 4 weapons, 8 ship upgrades, 13 skins, achievements on Google Play Games and Apple Game Center, cloud save, a global leaderboard backend, a 3D landing mini-game on final approach, and proper tilt-to-steer controls calibrated - for phones — no drift, no fight. All wrapped in a Wownero-themed pixel-art aesthetic. + for phones: no drift, no fight. All wrapped in a Wownero-themed pixel-art aesthetic.Same rocket, same Moon. Almost everything else is new. @@ -114,10 +114,10 @@ export default function SuchMoonLaunchPage() {
If you purchase the "Remove Ads" upgrade, your transaction is processed by:
We do not have access to your payment information. We only receive confirmation of your purchase status. diff --git a/apps/web/src/app/products/suchoice/page.tsx b/apps/web/src/app/products/suchoice/page.tsx index 03511f7..8283349 100644 --- a/apps/web/src/app/products/suchoice/page.tsx +++ b/apps/web/src/app/products/suchoice/page.tsx @@ -27,7 +27,7 @@ const features = [ { name: "Snap & Decide", description: "Point your camera at any menu, ingredient list, label, or set of options. AI reads them and loads them into the wheel." }, { name: "Spin the Wheel", description: "Add your own options or use the ones AI found. Spin the wheel of destiny and go with it." }, { name: "Coin Flip", description: "Instant 50/50 decisions with a satisfying animated flip, sound effects, and confetti." }, - { name: "Dice Roll", description: "3D physics dice — d6, d8, 2d6, and d20. Shake your phone or tap to roll. Real tumbling, real numbers." }, + { name: "Dice Roll", description: "3D physics dice: d6, d8, 2d6, and d20. Shake your phone or tap to roll. Real tumbling, real numbers." }, { name: "Decision Duel", description: "Two players, one screen. Tap near the puck to send it flying toward your opponent's goal. Speed increases every hit." }, { name: "Adventure Mode", description: "Enter a city, spin for a random activity, and open the winner in Google Maps." }, ]; @@ -69,7 +69,7 @@ export default function SuchoicePage() {
- Stop overthinking every decision. Six ways to decide — snap a photo and let AI read it, spin the wheel, flip a coin, roll 3D physics dice, battle it out in a head-to-head duel, or explore your city with a random activity. + Stop overthinking every decision. Six ways to decide: snap a photo and let AI read it, spin the wheel, flip a coin, roll 3D physics dice, battle it out in a head-to-head duel, or explore your city with a random activity.
- Something not working right? Let us know what happened, your device, and OS version — we'll investigate. + Something not working right? Let us know what happened, your device, and OS version. We'll investigate.