Moonraccoon mark MOONRACCOON
Soon, on Radix.

Case Study · Design & Development

Moonraccoon

We build Moonraccoon as a live coming-soon splash. Three visual variants, an original mark, and cursor parallax that turns off for reduced motion.

Site
moonraccoon.xyz ↗
Status
Launch page live
Disciplines
Visual design · Frontend development
Stack
Next.js 15 · React · TypeScript · next/font · Vercel

The problem

The product is not shipped, so the page holds the domain and a visual system. Three variants let us try them on real visitors.

What was built

The public site is live at moonraccoon.xyz. moonraccoon.org redirects to it. Each request picks order, log, or decal at random unless you pin one with a query string. The order variant is deep navy and brass, Cinzel and Hanken Grotesk, the same pair we use here. Log and decal bring their own type.

How it's built

Three variants share one app.

There is no backend on this page, and it is not a Radix product yet.

01

Random unless pinned

The route is force-dynamic. Each request gets a random variant unless you pin one with ?v=order, log, or decal.

02

The mark follows the pointer

A client component nudges the raccoon-in-the-moon mark toward the pointer. prefers-reduced-motion skips the listener.

03

Fonts from next/font

next/font loads Cinzel, Hanken Grotesk, Libre Caslon Text, DM Mono, and Anton. No layout shift from a late Google Fonts stylesheet.

04

Vercel, Cloudflare DNS

Canonical .xyz on Vercel. .org redirects. Nameservers on Cloudflare. A 1200×630 OG image ships with the app.

Next.js 15 · TypeScript · next/font · cursor parallax · reduced-motion · Vercel.

What this shows

A live page for an unshipped product.

The brand system and the motion are live. It is not a Radix product yet.

coming soon three variants reduced motion original mark
Ω

Need a splash that holds a domain until the product exists?

We design the brand system and ship the page.