import {zodResolver} from '@hookform/resolvers/zod'; import {ProjectSchemas} from '@plunk/shared'; import { Button, Card, CardContent, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, } from '@plunk/ui'; import {AnimatePresence, motion} from 'framer-motion'; import {FolderPlus, UserPlus} from 'lucide-react'; import {NextSeo} from 'next-seo'; import {useRouter} from 'next/router'; import React, {useState} from 'react'; import {useForm} from 'react-hook-form'; import type {z} from 'zod'; import {useProjects} from '../../lib/hooks/useProject'; import {network} from '../../lib/network'; export default function CreateProject() { const {mutate: projectsMutate} = useProjects(); const router = useRouter(); const form = useForm>({ resolver: zodResolver(ProjectSchemas.create), defaultValues: { name: '', }, }); const [errorMessage, setErrorMessage] = useState(null); async function onSubmit(values: z.infer) { try { await network.fetch<{success: boolean}, typeof ProjectSchemas.create>('POST', '/users/@me/projects', values); // Refresh the projects list await projectsMutate(); // Redirect to dashboard await router.push('/'); } catch (error) { setErrorMessage(error instanceof Error ? error.message : 'Something went wrong'); } } return ( <>

Welcome to Plunk

Choose how you'd like to get started

{ e.preventDefault(); void form.handleSubmit(onSubmit)(e); }} className="p-6 md:p-8" >

Create a new project

Start from scratch and set up your own project.

( Project Name You can change this later )} />
{errorMessage && ( {errorMessage} )}

Join an existing project

Get access to a project created by your team

Contact your project administrator and ask them to add you as a member. They can invite you from the project settings page.

); }