diff --git a/bun.lock b/bun.lock
index db9f1d7..b3e6786 100644
--- a/bun.lock
+++ b/bun.lock
@@ -6,6 +6,7 @@
"dependencies": {
"@auth/drizzle-adapter": "^1.7.2",
"@hookform/resolvers": "^5.0.1",
+ "@icons-pack/react-simple-icons": "^12.4.0",
"@radix-ui/react-accordion": "^1.2.3",
"@radix-ui/react-alert-dialog": "^1.1.6",
"@radix-ui/react-aspect-ratio": "^1.1.2",
@@ -184,6 +185,8 @@
"@hookform/resolvers": ["@hookform/resolvers@5.0.1", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA=="],
+ "@icons-pack/react-simple-icons": ["@icons-pack/react-simple-icons@12.4.0", "", { "peerDependencies": { "react": "^16.13 || ^17 || ^18 || ^19" } }, "sha512-h8sOIVaUFKlMGgVMbhsPEyLOVW6in27KILV4V5q/I5iK4Mz6Du6qc91aFe2D7/qfLyYPr5XIP270GKmsltVfAw=="],
+
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="],
"@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="],
diff --git a/package.json b/package.json
index 22b4352..b424680 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"dependencies": {
"@auth/drizzle-adapter": "^1.7.2",
"@hookform/resolvers": "^5.0.1",
+ "@icons-pack/react-simple-icons": "^12.4.0",
"@radix-ui/react-accordion": "^1.2.3",
"@radix-ui/react-alert-dialog": "^1.1.6",
"@radix-ui/react-aspect-ratio": "^1.1.2",
diff --git a/public/logo.png b/public/logo.png
new file mode 100644
index 0000000..242fa1a
Binary files /dev/null and b/public/logo.png differ
diff --git a/public/multiplayer-screenshot.jpeg b/public/multiplayer-screenshot.jpeg
new file mode 100644
index 0000000..c15c97c
Binary files /dev/null and b/public/multiplayer-screenshot.jpeg differ
diff --git a/src/app/_components/github-links.tsx b/src/app/_components/github-links.tsx
new file mode 100644
index 0000000..a641a33
--- /dev/null
+++ b/src/app/_components/github-links.tsx
@@ -0,0 +1,46 @@
+'use client'
+
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+} from '@/components/ui/dropdown-menu'
+import { ExternalLink } from 'lucide-react'
+import type { PropsWithChildren } from 'react'
+
+const WEB_GITHUB_REPO_URL = 'https://github.com/ershisan99/balatromp'
+const MOD_GITHUB_REPO_URL =
+ 'https://github.com/Balatro-Multiplayer/BalatroMultiplayer'
+
+export function GithubLinks({ children }: PropsWithChildren) {
+ return (
+
+ {/*Dropdown trigger*/}
+ {children}
+
+
+
+ Multiplayer Mod
+
+
+
+
+
+ BalatroMP Website
+
+
+
+
+
+ )
+}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 58cf246..292d106 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,20 +1,20 @@
import '@/styles/globals.css'
-import type { Metadata } from 'next'
-import { Geist } from 'next/font/google'
+import type {Metadata} from 'next'
+import {Geist} from 'next/font/google'
-import { MainHeader } from '@/components/header'
-import { ThemeProvider } from '@/components/theme-provider'
-import { TRPCReactProvider } from '@/trpc/react'
-import { SessionProvider } from 'next-auth/react'
-import { NextIntlClientProvider } from 'next-intl'
-import { getLocale } from 'next-intl/server'
+import {MainHeader} from '@/components/header'
+import {ThemeProvider} from '@/components/theme-provider'
+import {TRPCReactProvider} from '@/trpc/react'
+import {SessionProvider} from 'next-auth/react'
+import {NextIntlClientProvider} from 'next-intl'
+import {getLocale} from 'next-intl/server'
import PlausibleProvider from 'next-plausible'
export const metadata: Metadata = {
title: 'Balatro Multiplayer',
description: 'Unofficial (for now) stats for the Balatro Multiplayer Mod',
- icons: [{ rel: 'icon', url: '/favicon.ico' }],
+ icons: [{rel: 'icon', url: '/favicon.ico'}],
}
const geist = Geist({
@@ -23,8 +23,8 @@ const geist = Geist({
})
export default async function RootLayout({
- children,
-}: Readonly<{ children: React.ReactNode }>) {
+ children,
+ }: Readonly<{ children: React.ReactNode }>) {
const locale = await getLocale()
return (
-
-
-
-
-
-
-
-
-
-
- {children}
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+
)
}
diff --git a/src/app/leaderboards/layout.tsx b/src/app/leaderboards/layout.tsx
new file mode 100644
index 0000000..b0196d4
--- /dev/null
+++ b/src/app/leaderboards/layout.tsx
@@ -0,0 +1,13 @@
+import { MainHeader } from '@/components/header'
+import type { ReactNode } from 'react'
+
+export default function RootLayout({
+ children,
+}: Readonly<{ children: ReactNode }>) {
+ return (
+ <>
+
+ {children}
+ >
+ )
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index b206df6..06c8c6f 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,3 +1,531 @@
-export default async function Home() {
- return Hello
+import { GithubLinks } from '@/app/_components/github-links'
+import { ModeToggle } from '@/components/mode-toggle'
+import { Button } from '@/components/ui/button'
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
+import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu'
+import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'
+import { SiGithub } from '@icons-pack/react-simple-icons'
+import {
+ Award,
+ BookOpen,
+ ChevronRight,
+ Info,
+ Menu,
+ MessageSquare,
+ Trophy,
+ Users,
+} from 'lucide-react'
+import Image from 'next/image'
+import Link from 'next/link'
+export default function Home() {
+ return (
+
+
+
+
+
+

+
+ Balatro Multiplayer
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balatro Multiplayer
+
+
+
+
+
+ Documentation
+
+
+
+ Leaderboards
+
+
+
+ About
+
+
+
+ Credits
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Follow along on GitHub
+
+
+ Play Balatro Against Your Friends
+
+
+ The unofficial multiplayer mod for Balatro. Challenge your
+ friends, compete in tournaments, and climb the global
+ leaderboards.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+ Everything you need to enjoy Balatro with friends and the wider
+ community.
+
+
+
+
+
+ Real-time Matches
+
+
+
+ Challenge friends to head-to-head poker matches with
+ synchronized gameplay.
+
+
+
+
+
+ Tournaments
+
+
+
+ Create and join tournaments with custom rules and brackets.
+
+
+
+
+
+ Global Leaderboards
+
+
+
+ Compete for the highest scores and track your progress against
+ players worldwide.
+
+
+
+
+
+ Spectator Mode
+
+
+
+ Watch live matches between top players and learn new
+ strategies.
+
+
+
+
+
+ Custom Game Modes
+
+
+
+ Play with modified rules and unique challenges created by the
+ community.
+
+
+
+
+
+ Cross-Platform
+
+
+
+ Play with friends regardless of their platform - Windows, Mac,
+ or Linux.
+
+
+
+
+
+
+
+
+
+ Ways to Play
+
+
+ Choose how you want to experience Balatro Multiplayer
+
+
+
+
+
+
+
+
+
+ Direct Play
+
+
+
+ Create a lobby and share the code with friends for casual
+ matches.
+
+
+ -
+
+ • No matchmaking or ratings
+
+
+ -
+
+ • Customize all lobby options
+
+
+ -
+
+ • Play with friends directly
+
+
+ -
+
+ • Perfect for casual games
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Matchmaking Queues
+
+
+
+ Join ranked queues with MMR-based matchmaking and
+ leaderboards.
+
+
+
+
Vanilla Queue:
+
+ - • Original game balance
+ - • Has MMR but no MMR-based matchmaking
+ - • Same seed for fair competition
+
+
+
+
Ranked Queue:
+
+ - • Rebalanced cards and mechanics
+ - • MMR-based matchmaking
+ - • New jokers, reworked tarots, new planets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Custom LFG
+
+
+
+ Find players for games with custom rulesets via our Discord
+ community.
+
+
+ -
+
+ • Any ruleset or lobby options
+
+
+ -
+
+ • Compatible with mods (with agreement)
+
+
+ -
+ • No MMR or rankings
+
+ -
+
+ • Great for experimenting with new formats
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ How It Works
+
+
+ Getting started with Balatro Multiplayer is simple. Install
+ the mod, connect with friends, and start playing.
+
+
+
+ -
+
+ 1
+
+
+
Install the Mod
+
+ Download and install the multiplayer mod using our
+ simple installer.
+
+
+
+ -
+
+ 2
+
+
+
+ Create or Join a Game
+
+
+ Host your own game or join an existing one with a simple
+ game code.
+
+
+
+ -
+
+ 3
+
+
+
Play Together
+
+ Compete in real-time with synchronized gameplay and live
+ scoring.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ready to Play?
+
+
+ Join thousands of Balatro players already enjoying multiplayer
+ matches.
+
+
+
+
+
+
+
+ )
}
diff --git a/src/components/mode-toggle.tsx b/src/components/mode-toggle.tsx
index 34ae2fa..8cae52f 100644
--- a/src/components/mode-toggle.tsx
+++ b/src/components/mode-toggle.tsx
@@ -18,7 +18,7 @@ export function ModeToggle() {
return (
-