"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { getSocket } from "../lib/socket-client"; import { writeSession } from "../lib/store"; const AVATARS = ["🦄","🦊","🐼","🐸","🐱","🐶","🦁","🐯","🐰","🐻","🐨","🦝"]; export default function CreateRoomPage() { const router = useRouter(); const [nickname, setNickname] = useState(""); const [avatar, setAvatar] = useState("🦊"); const [mode, setMode] = useState<"skribbl"|"gartic"|"color">("skribbl"); const [rounds, setRounds] = useState(4); const [drawTime, setDrawTime] = useState(80); const [canvasType, setCanvasType] = useState<"blank"|"template">("blank"); const [templateId, setTemplateId] = useState("mandala"); const [busy, setBusy] = useState(false); const [err, setErr] = useState(""); const submit = async (e: React.FormEvent) => { e.preventDefault(); setErr(""); if (!nickname.trim()) { setErr("Pick a nickname"); return; } setBusy(true); const settings: any = {}; if (mode === "skribbl") { settings.rounds = rounds; settings.drawTimeSec = drawTime; settings.language = "en"; } if (mode === "color") { settings.canvasType = canvasType; settings.templateId = templateId; } const socket = getSocket(); const finish = () => { socket.emit("room:create", { nickname: nickname.trim(), avatar, mode, settings }, (resp: any) => { if (!resp || !resp.ok) { setErr(resp?.error || "failed"); setBusy(false); return; } writeSession(resp.code, { token: resp.sessionToken, nickname: nickname.trim(), avatar, playerId: resp.playerId }); router.push(`/room/${resp.code}`); }); }; if (socket.connected) finish(); else socket.once("connect", finish); }; return (
DrawTogether Join Instead

Create your room

Pick a mode and customise the rules

setNickname(e.target.value)} placeholder="Doodle Master"/>
{AVATARS.map(a => ( ))}
{([ {id:"skribbl", label:"Skribbl Race", desc:"Draw & guess", color:"var(--coral)", testid:"mode-skribbl"}, {id:"gartic", label:"Gartic Phone", desc:"Pass it on", color:"var(--mint)", testid:"mode-gartic"}, {id:"color", label:"Color Together", desc:"Chill paint", color:"var(--lavender)", testid:"mode-color"}, ] as const).map(m => ( ))}
{mode === "skribbl" && (
{[2,4,8].map(r => ( ))}
{[60,80,120].map(t => ( ))}
)} {mode === "color" && (
{canvasType === "template" && (
)}
)} {err &&
{err}
}
); }