import { Show, createSignal } from "solid-js" import { useNavigate } from "@solidjs/router" import { createTenantRelay, type RelayConfig } from "../../lib/api" import { slugify } from "../../lib/slugify" const PLANS = [ { id: "free", label: "Free", price: 0, members: "Up to 10", blossom: false, livekit: false }, { id: "basic", label: "Basic", price: 10_000, members: "Up to 100", blossom: true, livekit: true }, { id: "growth", label: "Growth", price: 50_000, members: "Unlimited", blossom: true, livekit: true }, ] as const type PlanId = (typeof PLANS)[number]["id"] const DEFAULT_CONFIG: RelayConfig = { policy: { public_join: false, strip_signatures: false }, groups: { enabled: true, auto_join: true }, management: { enabled: true }, blossom: { enabled: false }, livekit: { enabled: false }, push: { enabled: true }, } export default function RelayNew() { const navigate = useNavigate() const [name, setName] = createSignal("") const [subdomain, setSubdomain] = createSignal("") const [icon, setIcon] = createSignal("") const [description, setDescription] = createSignal("") const [plan, setPlan] = createSignal("free") const [submitting, setSubmitting] = createSignal(false) const [subdomainError, setSubdomainError] = createSignal("") function handleNameInput(value: string) { setName(value) setSubdomain(slugify(value)) setSubdomainError("") } async function handleSubmit(e: Event) { e.preventDefault() setSubdomainError("") setSubmitting(true) try { const relay = await createTenantRelay({ name: name().trim(), subdomain: slugify(subdomain()), icon: icon().trim(), description: description().trim(), plan: plan(), config: { ...DEFAULT_CONFIG, blossom: { enabled: plan() !== "free" }, livekit: { enabled: plan() !== "free" }, }, }) navigate(`/relays/${relay.id}`) } catch (e) { setSubdomainError(e instanceof Error ? e.message : "Failed to create relay") } finally { setSubmitting(false) } } return (

New Relay

handleNameInput(e.currentTarget.value)} placeholder="My Community" class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" />
{ setSubdomain(e.currentTarget.value) setSubdomainError("") }} placeholder="my-community" class="flex-1 px-3 py-2 focus:outline-none" /> .spaces.coracle.social
{subdomainError()}
setIcon(e.currentTarget.value)} placeholder="https://example.com/icon.png" class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" />