const { useEffect, useRef, useState } = React; const EDITOR_BASE = "https://app.houserulescards.com.au"; const games = [ { id: "privacy-breach", word: "People", name: "Privacy Breach", availability: "Available now · Party Game", eyebrow: "For the friends who know too much", description: "Exploding Kittens & Werewolf style party deck. Personalised photos become the characters. Your group becomes the game.", prompt: "Who is most likely to read the group chat and not reply?", accent: "#3ca9ff", pale: "#d9eefd", image: "/images/people.jpg", alt: "Friends gathered around a table", price: "A$75.00", sticker: "BESTSELLER", editorUrl: `${EDITOR_BASE}/app/privacy-breach`, howToPlayUrl: `${EDITOR_BASE}/how-to-play/privacy-breach.html`, }, { id: "poker-deck", word: "Memories", name: "Poker Deck", availability: "Available now · Classic 54-card deck", eyebrow: "Your crew on every Court card", description: "A full 54-card playing deck. Court cards (Kings, Queens, Jacks) and custom card backs become your people; pips stay classic.", prompt: "Put your best mate as the King of Spades and Mum on the Queen.", accent: "#ff6f3c", pale: "#fff0ea", image: "/images/memories.jpg", alt: "Personalised playing cards", price: "A$75.00", editorUrl: `${EDITOR_BASE}/app/poker-deck`, }, { id: "match-it", word: "Reflexes", name: "Match It!", availability: "Available now · Fast-paced matching game", eyebrow: "For the eagle-eyed friends and family", description: "A fast-paced visual matching deck. Find the matching photo, icon, or inside joke between any two cards before anyone else calls it out!", prompt: "Which two cards share the exact same embarrassing photo?", accent: "#2665b1", pale: "#e4ecff", image: "/images/inside-jokes.jpg", alt: "Friends playing Match It matching card game", price: "A$75.00", editorUrl: `${EDITOR_BASE}/app/match-it`, }, { id: "guess-who", word: "Faces", name: "Guess Who?", availability: "Available now · Face-guessing game", eyebrow: "For the nosy friends and family", description: "Twenty-four favourite faces turned into a personalised Guess Who? set. Ask yes or no questions to narrow it down — who could it be?", prompt: "Is your person someone who still owes me money?", accent: "#e05a2b", pale: "#fff0ea", image: "/images/people.jpg", alt: "Friends playing Guess Who card game", price: "A$75.00", editorUrl: `${EDITOR_BASE}/app/guess-who`, }, { id: "top-trumps", word: "Stats", name: "Top Trumps & Stats", availability: "Available now · 4 distinct styles", eyebrow: "Stat-driven trading cards", description: "Stat-driven trading cards for footy teams, friends, pets, or family. Choose Classic, Archive, Sports Card, or Pokémon style.", prompt: "Rate your mates on Loyalty, Chaos Factor, and Cooking Ability.", accent: "#2488a8", pale: "#d9f1f4", image: "/images/team.jpg", alt: "Custom stat trading cards", price: "A$75.00", sticker: "POPULAR", editorUrl: `${EDITOR_BASE}/app/sports-cards-picker`, }, { id: "make-your-own", word: "Canvas", name: "Make Your Own", availability: "Available now · Blank canvas builder", eyebrow: "Pure freedom for bespoke decks", description: "A blank canvas deck builder. You bring the rules, photos, stats, and layout — we print it on premium gaming stock.", prompt: "Create your own custom rules, prompts, and deck mechanics.", accent: "#8b5cf6", pale: "#f3e8ff", image: "/images/people.jpg", alt: "Custom blank canvas card deck", price: "A$75.00", editorUrl: `${EDITOR_BASE}/app/make-your-own`, }, ]; const topTrumpsStyles = [ { id: "top-trumps-classic", name: "Classic", blurb: "Clean modern stats card. Pick your categories, add your people.", pip: "♠", accent: "#3ca9ff", editorUrl: `${EDITOR_BASE}/app/sports-cards-picker`, }, { id: "top-trumps-archive", name: "Archive Edition", blurb: "Vintage newspaper aesthetic. Classy stats for classy people.", pip: "♦", accent: "#ec4899", editorUrl: `${EDITOR_BASE}/app/sports-cards-picker`, }, { id: "sports-cards", name: "Sports Card Edition", blurb: "Stats, photos, and ratings everyone argues about on game day.", pip: "♣", accent: "#f59e0b", editorUrl: `${EDITOR_BASE}/app/sports-cards-picker`, }, { id: "top-trumps-pokemon", name: "Pokémon Style", blurb: "Type matchups, HP, special moves. Gotta personalise them all.", pip: "★", accent: "#10b981", editorUrl: `${EDITOR_BASE}/app/sports-cards-picker`, }, ]; const occasions = [ ["♥", "Birthdays", "A gift that gets the whole table talking and laughing."], ["♦", "Weddings", "Bring speeches, stories, and healthy mischief back home."], ["♣", "Families", "Turn old favorites and legendary stories into a new family tradition."], ["♠", "Teams & clubs", "Your crew’s legends, quirks, and recurring scoreboard myths."], ["♥", "Farewells", "A proper send-off full of the people and moments they’ll miss."], ["♦", "Christmas", "One present. Years of highly competitive family rematches."], ]; const reviews = [ { stars: 5, quote: "Gave my dad the Top Trumps deck of his football mates for his 70th. He hasn’t put it down.", name: "Priya R.", deck: "Top Trumps", }, { stars: 5, quote: "Made a Werewolf deck where my flatmates are the villagers. Game night is unhinged now.", name: "Sam W.", deck: "Privacy Breach", }, { stars: 5, quote: "Two days from order to door. Mum cried, then said 'oh god is that me on the Queen'.", name: "Jess A.", deck: "Poker Deck", }, ]; const examples = [ ["DAD’S 60TH BIRTHDAY", "A big birthday deck stacked with backyard stories and dad-isms.", "Poker Deck"], ["THE SATURDAY FOOTBALL CREW", "An end-of-season game full of legendary kicks and scoreboard myths.", "Top Trumps"], ["OUR FAMILY TIMELINE", "A playful timeline for the moments no one can agree happened when.", "Spot It"], ]; function ProductComposition({ game }) { return (
{game.alt} Made with your real photos
{game.availability} {game.name} House Rules
{game.eyebrow} {game.prompt}
Made for
your people
); } function Hero() { const [active, setActive] = useState(0); const [visible, setVisible] = useState(true); const heroRef = useRef(null); const game = games[active]; useEffect(() => { if (!heroRef.current || typeof IntersectionObserver === "undefined") return; const observer = new IntersectionObserver( ([entry]) => setVisible(entry.isIntersecting), { threshold: 0.15 }, ); observer.observe(heroRef.current); return () => observer.disconnect(); }, []); useEffect(() => { if (!visible || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return; const timer = window.setInterval( () => setActive((current) => (current + 1) % games.length), 8000, ); return () => window.clearInterval(timer); }, [visible]); return (
Personalised card games · Printed & Posted in Australia

Your own game,
for your own person.

Turn your{" "} {game.word.toLowerCase()}. {" "}into the game.

{game.description}

Start your deck ({game.price}) Explore formats
  • Made from your real photos
  • Live preview before ordering
  • Printed on premium gaming stock here in Australia
  • ★★★★★ 4.8 · 139+ reviews · Posted same business day
{games.map((item, index) => ( ))}
); } function GameCard({ game }) { return (
{game.sticker && (
★ {game.sticker}
)}
{game.availability} {game.name}

{game.availability}

From {game.price}

{game.name}

{game.description}

Customise {game.name} {game.howToPlayUrl && ( ▸ How to play )}
); } function Home() { return (
{/* MATERIALS & QUALITY ("The Good Stuff") */}

The good stuff

Printed here. Played everywhere.

Made in Australia on premium gaming card stock, with a live interactive preview before you order and fast tracked delivery to get the good times moving.

  • Premium gaming card stock
  • Australian production & local shipping
  • Same business day dispatch
  • Live instant preview in editor
{/* GAME FORMATS */}

The House Rules shelf

Five flavours of custom deck.

Each editor is purpose-built. Pick a format below to open its live interactive builder.

{games.map((game) => )}
{/* HOW EASY IS IT? (HOW IT WORKS) */}

How easy is it?

Incredibly.

01

Pick a format

Poker decks, Privacy Breach, Spot It, Top Trumps / Stats Cards, or a blank slate.

02

Build it in a few clicks!

Drag in photos. Type the names. Add the inside jokes. Live preview as you go.

03

Posted the same day

We print on premium gaming card stock and post it the same day via Australia Express Post. Most decks arrive in 2-3 working days after submitting!

{/* EXAMPLES */}

Concepts to make yours

Made for real people.

Start with the people you know best, then give the finished game a name that makes it theirs.

{examples.map(([title, copy, deck], index) => (
{deck}

{title}

{copy}

))}
{/* REVIEWS BAND ("What players say") */}

What players say

"Why didn't this exist already?"

Rated ★★★★★ 4.8 out of 5 across 139+ reviews from deck builders nationwide.

{reviews.map((r, i) => (
{"★".repeat(r.stars)}

"{r.quote}"

{r.name} {r.deck}
))}
{/* CLOSING CTA */}

House Rules · Games made personal

They already have enough stuff. Make them a game.

Personalised card games for the people who make your life more fun.

); }