SPB Git forge

spb/spinza

Public
8commits 1branches 0releases
1.6 MBsize
maindefault branch
16 days agolast push
TypeScript 97.6% SQL 1.4% JavaScript 0.5%
8.2 KB · 128 lines tsx
Raw Blame History
1import type { Metadata } from "next";2import Link from "next/link";3import { DAILY_REWARDS, RESCUE_CREDITS_AMOUNT, RESCUE_CREDITS_COOLDOWN_HOURS, STARTING_BALANCE, BET_LEVELS, formatSC } from "@spinza/shared";4import { Button } from "@/components/ui";5import { ProsePage, Section, Callout, Bullets } from "@/components/lobby/prose";67export const metadata: Metadata = {8  title: "How it works",9  description: "How Spinza works: a username, 10,000 fictional credits, twenty original games, daily rewards and levels. No deposits, no withdrawals, no cash value.",10  alternates: { canonical: "/how-it-works" },11};1213const TOC = [14  { id: "credits", label: "Spinza Credits" },15  { id: "account", label: "Your account" },16  { id: "games", label: "The games" },17  { id: "refills", label: "Daily rewards & refills" },18  { id: "progression", label: "Levels, missions, achievements" },19  { id: "fairness", label: "Fairness & certification" },20  { id: "faq", label: "Questions" },21];2223export default function HowItWorksPage() {24  return (25    <ProsePage eyebrow="Guide" title="How Spinza works" lead="Spinza is a social casino built around one idea: all the craft of great slot design, none of the money. Here is everything you need to know before your first spin." toc={TOC}>26      <Section id="credits" title="Spinza Credits are fictional — completely">27        <p>Everything in Spinza is played with Spinza Credits (SC). They are a made-up in-game currency. They have no monetary value, they cannot be bought, they cannot be sold, transferred, gifted or withdrawn, and they cannot be exchanged for prizes, goods or anything else.</p>28        <p>Because nothing of value is ever at stake, Spinza is not gambling. It is a game about games: the reels, the features, the near-misses and the big moments, without a wallet attached.</p>29        <Callout>30          <strong>Virtual credits only. No deposits. No withdrawals. No cash value.</strong> There is no shop, no checkout and no way to add credits with money — by design, forever.31        </Callout>32      </Section>3334      <Section id="account" title="An account is just a username">35        <p>To create an account you choose a username (3 to 24 lowercase letters, numbers, underscores or hyphens) and a password of at least eight characters, and confirm you are 18 or older. That is the whole form. Spinza never asks for an email address, a phone number or a payment method.</p>36        <p>37          Because there is no email on file, Spinza gives you a <strong>recovery code</strong> when you register — the format is <code className="rounded bg-surface-2 px-1.5 py-0.5 font-mono text-[13px]">SPZ-XXXX-XXXX-XXXX</code>. It is the only way to reset a forgotten password. Save it somewhere safe. Every time it is used, a fresh code is issued. You can also rotate it at any time from{" "}38          <Link href="/settings#security" className="text-accent-2 underline-offset-4 hover:underline">39            Settings → Security40          </Link>41          .42        </p>43        <p>Every new account receives {formatSC(STARTING_BALANCE)} immediately.</p>44      </Section>4546      <Section id="games" title="Twenty original games">47        <p>Every Spinza game is designed and built in-house — symbols, artwork, rules and math. You will find classic five-reel layouts alongside cascading grids, expanding wilds, hold-and-respin jackpots, collect-and-multiply meters, mystery symbols and pick bonuses.</p>48        <Bullets49          items={[50            <>51              <strong>Bet levels</strong> are the same everywhere: {BET_LEVELS.map((b) => b.toLocaleString("en-US")).join(", ")} SC per spin (some games narrow the range).52            </>,53            <>54              <strong>Volatility</strong> tells you how a game feels. Relaxed games pay small and often; extreme games stay quiet for long stretches and then explode.55            </>,56            <>57              <strong>Game Info</strong>, inside every game, shows the full rules, paytable, features and the certified return figures.58            </>,59            <>60              <strong>Outcomes are decided on the server</strong> for every round, recorded with a round ID, and listed in your history.61            </>,62          ]}63        />64      </Section>6566      <Section id="refills" title="Running low is never the end">67        <p>Spinza is designed so nobody gets stuck at zero.</p>68        <Bullets69          items={[70            <>71              <strong>Daily reward.</strong> Claim once a day. The amount grows with your streak: {DAILY_REWARDS.map((d) => d.toLocaleString("en-US")).join(" → ")} SC over seven consecutive days, then the cycle starts again. Miss a day and you fall back one step; miss longer and the streak resets.72            </>,73            <>74              <strong>Rescue credits.</strong> If your balance reaches 0 SC, claim {formatSC(RESCUE_CREDITS_AMOUNT)} from the Rewards page. Available again {RESCUE_CREDITS_COOLDOWN_HOURS} hours after each use.75            </>,76            <>77              <strong>Level-ups, missions and achievements</strong> all pay credits too (see below).78            </>,79          ]}80        />81      </Section>8283      <Section id="progression" title="Levels, missions and achievements">84        <p>Every spin earns experience points, with bonuses for triggering features and for trying a game for the first time. XP fills a level bar; each new level grants credits, with larger bonuses every fifth, tenth and twenty-fifth level.</p>85        <p>Missions are short daily and weekly challenges — spin a number of rounds, trigger a bonus, land a big multiplier. Achievements are permanent milestones across your whole Spinza history. Both pay credits and XP the moment they complete.</p>86        <p>Leaderboards rank players by biggest win, biggest multiplier, most spins and highest level. They are for bragging rights only, and you can opt out entirely in Settings.</p>87      </Section>8889      <Section id="fairness" title="Fairness and certification">90        <p>Before a game is published, it is run through millions of simulated rounds. The observed return, hit rate, bonus frequency and maximum win are compared with the game&apos;s design targets, and the game only opens to players if it passes. The certification summary is shown in each game&apos;s Game Info panel.</p>91        <p>Outcomes are generated server-side with a cryptographically secure random source. The client only animates what the server has already decided.</p>92      </Section>9394      <Section id="faq" title="Questions">95        <dl className="space-y-4">96          {[97            ["Can I buy credits?", "No. There is no store and never will be. Credits come only from daily rewards, rescue credits, missions, achievements and levelling up."],98            ["Can I win real money or prizes?", "No. Spinza Credits have no value outside Spinza and cannot be converted into anything."],99            ["Do I need to download anything?", "No. Spinza runs in your browser on phone, tablet and desktop. You can add it to your home screen for a full-screen experience."],100            ["What data do you keep?", "Your username, a hash of your password, your gameplay statistics and your settings. No email, no phone, no trackers, no ads."],101            ["I lost my password and my recovery code.", "Unfortunately the account cannot be recovered — there is no email on file to verify you. You are welcome to start again with a new username."],102          ].map(([q, a]) => (103            <div key={q} className="rounded-md border border-line p-4">104              <dt className="font-semibold text-fg">{q}</dt>105              <dd className="mt-1 text-fg-2">{a}</dd>106            </div>107          ))}108        </dl>109      </Section>110111      <div className="flex flex-col gap-3 rounded-xl border border-accent/25 p-6 sm:flex-row sm:items-center sm:justify-between">112        <div>113          <div className="text-lg font-semibold tracking-tight">Ready to spin?</div>114          <p className="text-sm text-fg-3">A username is all it takes. Your first {formatSC(STARTING_BALANCE)} are waiting.</p>115        </div>116        <div className="flex gap-2">117          <Button variant="accent" href="/register">118            Play free119          </Button>120          <Button variant="ghost" href="/responsible-play">121            Responsible play122          </Button>123        </div>124      </div>125    </ProsePage>126  );127}128