This is a frontend-only rapid prototyping app for an ARG (Alternate Reality Game) platform launch flow. The purpose is to test UI/UX, user flows, and design concepts without any backend integration.
Important: This is NOT a production app. It's a prototyping environment for rapid iteration.
Landing Page → ARG Section → Platform Opens → Path Selection
/ /arg /platform /paths
| Technology | Purpose |
|---|---|
| Next.js 16+ | React framework with App Router |
| TypeScript | Type-safe development |
| Tailwind CSS v4 | Utility-first styling |
| shadcn/ui | Pre-built accessible components |
| Vercel | Hosting (free plan) |
No Backend - All data is mocked locally in src/data/mock.ts.
src/
├── app/ # Next.js App Router pages
│ ├── layout.tsx # Root layout (dark mode enabled)
│ ├── globals.css # Design system & theme tokens
│ ├── page.tsx # Landing page (/)
│ ├── arg/page.tsx # ARG section (/arg)
│ ├── platform/page.tsx # Platform (/platform)
│ └── paths/page.tsx # Path selection (/paths)
│
├── components/
│ ├── ui/ # shadcn/ui components (auto-generated)
│ ├── layouts/ # Layout wrappers (PageWrapper, etc.)
│ └── shared/ # Shared/reusable custom components
│
├── lib/
│ ├── utils.ts # cn() helper for class merging
│ └── design-tokens.ts # Design system reference
│
├── data/
│ └── mock.ts # Mock data for prototyping
│
└── hooks/ # Custom React hooks
The design system uses a dark theme inspired by occult aesthetics, celestial imagery, and mystical symbolism.
| Token | CSS Variable | Tailwind Class | Use Case |
|---|---|---|---|
| Void | --void |
bg-void |
Deepest darkness, dramatic sections |
| Abyss | --abyss |
bg-abyss |
Main backgrounds |
| Violet | --violet |
bg-violet, text-violet |
Primary actions, emphasis |
| Gold | --gold |
bg-gold, text-gold |
Accents, highlights, special elements |
| Ethereal | --ethereal |
bg-ethereal, text-ethereal |
Secondary highlights, links |
| Token | Tailwind Class | Maps To |
|---|---|---|
| Background | bg-background |
Deep navy void |
| Foreground | text-foreground |
Soft off-white |
| Primary | bg-primary |
Luminous violet |
| Secondary | bg-secondary |
Muted violet |
| Accent | bg-accent, text-accent |
Gold |
| Muted | bg-muted, text-muted-foreground |
Dimmed elements |
| Card | bg-card |
Elevated surface |
| Border | border-border |
Subtle violet-tinted |
| Destructive | bg-destructive |
Ethereal crimson |
# Add components as needed
npx shadcn@latest add button card dialog input separator badge
# Components install to src/components/ui/shadcn/ui components automatically use our theme tokens. Here's how to enhance them:
import { Button } from "@/components/ui/button";
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
// These automatically use --primary, --card, etc.
<Button>Primary Action</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outlined</Button>
<Card>Content here</Card>// Add glow to buttons for emphasis
<Button className="glow-violet">Mystical CTA</Button>
<Button className="glow-gold">Golden Action</Button>
// Glass effect cards
<Card className="glass">
<CardContent>Ethereal content</CardContent>
</Card>
// Gradient backgrounds
<div className="bg-gradient-mystic p-8">
<Card>Card on gradient</Card>
</div>// Mystical heading with glow
<h1 className="text-4xl font-bold text-foreground text-glow">
Title
</h1>
// Gold accent text
<p className="text-gold">Important highlight</p>
// Ethereal link style
<span className="text-ethereal hover:text-ethereal/80 cursor-pointer">
Clickable text
</span>
// Violet emphasis
<span className="text-violet font-semibold">Emphasized</span>// Standard elevated card
<Card>...</Card>
// Glass morphism card
<Card className="glass">...</Card>
// Card with glow on hover
<Card className="hover:glow-violet transition-shadow duration-300">
...
</Card>
// Card with border accent
<Card className="border-violet/30">...</Card>// Primary with glow
<Button className="glow-violet">Primary</Button>
// Ghost with gold text
<Button variant="ghost" className="text-gold hover:text-gold/80">
Golden Ghost
</Button>
// Outline with ethereal
<Button variant="outline" className="border-ethereal text-ethereal">
Ethereal Outline
</Button>
// Large mystical CTA
<Button size="lg" className="glow-violet text-lg px-8">
Enter the Unknown
</Button>| Class | Effect |
|---|---|
glow-violet |
Purple outer glow |
glow-gold |
Gold outer glow |
glow-ethereal |
Cyan outer glow |
text-glow |
Text shadow glow (uses current color) |
glass |
Frosted glass background with blur |
bg-gradient-mystic |
Subtle diagonal purple gradient |
bg-gradient-celestial |
Vertical void-to-navy gradient |
// Headings
<h1 className="text-5xl font-bold tracking-tight">Hero</h1>
<h2 className="text-3xl font-semibold">Section</h2>
<h3 className="text-xl font-medium">Subsection</h3>
// Body
<p className="text-base text-foreground">Primary text</p>
<p className="text-sm text-muted-foreground">Secondary text</p>
<p className="text-xs text-muted-foreground/60">Tertiary/caption</p>
// Special
<p className="text-lg text-gold font-medium">Highlighted</p>
<p className="text-violet italic">Mystical emphasis</p>// Page sections
<section className="py-16 md:py-24">...</section>
// Content gaps
<div className="space-y-8">...</div> // Between sections
<div className="space-y-4">...</div> // Between elements
<div className="space-y-2">...</div> // Tight grouping
// Card padding
<CardContent className="p-6">...</CardContent>// src/components/shared/mystical-button.tsx
import { Button, ButtonProps } from "@/components/ui/button";
import { cn } from "@/lib/utils";
interface MysticalButtonProps extends ButtonProps {
glow?: "violet" | "gold" | "ethereal";
}
export function MysticalButton({
glow = "violet",
className,
...props
}: MysticalButtonProps) {
return (
<Button
className={cn(
glow === "violet" && "glow-violet",
glow === "gold" && "glow-gold",
glow === "ethereal" && "glow-ethereal",
className
)}
{...props}
/>
);
}// src/components/shared/mystical-card.tsx
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { cn } from "@/lib/utils";
interface MysticalCardProps {
title?: string;
children: React.ReactNode;
variant?: "default" | "glass" | "glow";
className?: string;
}
export function MysticalCard({
title,
children,
variant = "default",
className
}: MysticalCardProps) {
return (
<Card className={cn(
variant === "glass" && "glass",
variant === "glow" && "hover:glow-violet transition-shadow",
className
)}>
{title && (
<CardHeader>
<CardTitle>{title}</CardTitle>
</CardHeader>
)}
<CardContent>{children}</CardContent>
</Card>
);
}-
Create GitHub Repository
git remote add origin https://github.com/YOUR_USERNAME/prototype-app.git git branch -M main git push -u origin main
-
Connect to Vercel
- Go to vercel.com
- Click "Add New Project"
- Import your GitHub repository
- Vercel auto-detects Next.js - click "Deploy"
-
Share URL
- Vercel provides:
prototype-app.vercel.app - Share with co-founder for testing
- Vercel provides:
# Make changes, then:
git add .
git commit -m "Update design"
git push
# Auto-deploys in ~30-60 secondsgit checkout -b experiment/new-idea
git push -u origin experiment/new-idea
# Creates preview: prototype-app-git-experiment-new-idea.vercel.appnpm run dev # Start dev server (localhost:3000)
npm run build # Production build (verify before push)
npm run lint # Check for issues- NO backend - All data in
src/data/mock.ts - NO API calls - Pure frontend
- NO auth - Keep it simple
- Dark mode only - Mystical theme
- shadcn/ui first - Use existing components before building custom
// src/data/mock.ts
export const newMockData = [
{ id: "1", label: "Item" },
];// src/app/new-route/page.tsx
export default function NewPage() {
return (
<div className="min-h-screen bg-background flex items-center justify-center">
<h1 className="text-4xl font-bold">New Page</h1>
</div>
);
}npx shadcn@latest add [component-name]- Frontend only - Never suggest backend/API integrations
- Use shadcn/ui - Don't rebuild existing components
- Apply theme tokens - Use
glow-*,glass,bg-gradient-*classes - Prefer semantic colors -
bg-primary,text-accentover raw values - Dark mode context - Use glows not shadows, lighter = elevated
- Keep prototyping fast - Simple code over perfect abstractions