'use client' import { useActionState, useState } from 'react' import { useRouter } from 'next/navigation' import { createOrganization } from './actions' import { LandingPagePreview } from './LandingPagePreview' const initialState = { success: false, error: '' } export function CreateOrgForm() { const [state, formAction, isPending] = useActionState(createOrganization, initialState) const router = useRouter() const [step, setStep] = useState(1) const [formData, setFormData] = useState({ name: '', slug: '', contactEmail: '', adminEmail: '', adminPassword: '', logoUrl: '', plan: 'pilot', primaryColor: '#E63946', secondaryColor: '', landingPageTitle: '', landingPageText: '', landingPageHeroImage: '', landingPageHeroOverlayOpacity: 50, landingPageFeatures: '', landingPageFooter: '', appStoreUrl: '', playStoreUrl: '' }) const [aiContext, setAiContext] = useState('') const [isGenerating, setIsGenerating] = useState(false) const handleGenerateContent = async () => { if (!formData.name || !aiContext) return setIsGenerating(true) try { const res = await fetch('/api/ai/generate-landing-page', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ orgName: formData.name, context: aiContext }) }) const data = await res.json() if (data.title && data.text) { setFormData(prev => ({ ...prev, landingPageTitle: data.title, landingPageText: data.text })) } } catch (err) { console.error('AI generation failed', err) } finally { setIsGenerating(false) } } const [isUploading, setIsUploading] = useState(false) const handleUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0] if (!file) return setIsUploading(true) const uploadFormData = new FormData() uploadFormData.append('file', file) try { const res = await fetch('/api/upload', { method: 'POST', body: uploadFormData }) const data = await res.json() if (data.url) { setFormData(prev => ({ ...prev, logoUrl: data.url })) } } catch (err) { console.error('Upload failed', err) } finally { setIsUploading(false) } } const [isHeroUploading, setIsHeroUploading] = useState(false) const handleHeroUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0] if (!file) return setIsHeroUploading(true) const uploadFormData = new FormData() uploadFormData.append('file', file) try { const res = await fetch('/api/upload', { method: 'POST', body: uploadFormData }) const data = await res.json() if (data.url) { setFormData(prev => ({ ...prev, landingPageHeroImage: data.url })) } } catch (err) { console.error('Upload failed', err) } finally { setIsHeroUploading(false) } } const handleChange = (e: React.ChangeEvent) => { setFormData(prev => ({ ...prev, [e.target.name]: e.target.value })) } const nextStep = () => setStep(prev => prev + 1) const prevStep = () => setStep(prev => prev - 1) // Reset wizard after success if (state.success && step !== 5) { setStep(5) } return (

Neue Innung anlegen

{state.error && (
{state.error}
)} {/* Stepper Header (matched to screenshot) */}
{[1, 2, 3, 4, 5].map((s) => (
= s ? 'bg-[#E63946] text-white' : 'bg-gray-100 text-gray-400'}`}> {s}
{s < 5 && (
s ? 'bg-[#E63946]' : 'bg-gray-100'}`} /> )}
))}
{step !== 1 && ( <> )} {step === 1 && (

Landingpage unter: {formData.slug ? `${formData.slug}.localhost:3032` : 'ihr-slug.localhost:3032'}

)} {step === 2 && (
{formData.logoUrl ? (
Logo
) : (
)}
)} {step === 3 && (

KI Content-Erstellung

Beschreiben Sie in wenigen Stichpunkten, worauf die Innung fokussiert ist (Region, Tradition, Ausbildung, etc.). Die KI generiert daraus eine moderne Landingpage.