'use client' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import { createSite, listSites } from '@/lib/api/sites' import { getSubscription } from '@/lib/api/billing' import { toast } from '@ciphera-net/ui' import { getAuthErrorMessage } from '@/lib/utils/authErrors' import { Button, Input } from '@ciphera-net/ui' export default function NewSitePage() { const router = useRouter() const [loading, setLoading] = useState(false) const [formData, setFormData] = useState({ name: '', domain: '', }) // * Check for plan limits on mount useEffect(() => { const checkLimits = async () => { try { const [sites, subscription] = await Promise.all([ listSites(), getSubscription() ]) if (subscription?.plan_id === 'solo' && sites.length >= 1) { toast.error('Solo plan limit reached (1 site). Please upgrade to add more sites.') router.replace('/') } } catch (error) { // Ignore errors here, let the backend handle the hard check on submit console.error('Failed to check limits', error) } } checkLimits() }, [router]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) try { const site = await createSite(formData) toast.success('Site created successfully') router.push(`/sites/${site.id}`) } catch (error: any) { toast.error(getAuthErrorMessage(error) || 'Failed to create site: ' + ((error as Error)?.message || 'Unknown error')) } finally { setLoading(false) } } return (

Create New Site

setFormData({ ...formData, name: e.target.value })} placeholder="My Website" />
setFormData({ ...formData, domain: e.target.value.toLowerCase().trim() })} placeholder="example.com" />

Enter your domain without http:// or https://

) }