import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { Project } from '../types'; import { listProjects, createProject } from '../api'; import './Home.css'; function Home() { const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showForm, setShowForm] = useState(false); const [newProject, setNewProject] = useState({ name: '', description: '', is_public: true }); const [creating, setCreating] = useState(false); useEffect(() => { loadProjects(); }, []); async function loadProjects() { try { setLoading(true); const data = await listProjects(); setProjects(data); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load projects'); } finally { setLoading(false); } } async function handleCreateProject(e: React.FormEvent) { e.preventDefault(); try { setCreating(true); await createProject(newProject); setNewProject({ name: '', description: '', is_public: true }); setShowForm(false); loadProjects(); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create project'); } finally { setCreating(false); } } if (loading) { return
Loading projects...
; } return (

Projects

{error &&
{error}
} {showForm && (

Create New Project

setNewProject({ ...newProject, name: e.target.value })} placeholder="my-project" required />
setNewProject({ ...newProject, description: e.target.value })} placeholder="Optional description" />
)} {projects.length === 0 ? (

No projects yet. Create your first project to get started!

) : (
{projects.map((project) => (

{project.name}

{project.description &&

{project.description}

}
{project.is_public ? 'Public' : 'Private'} Created {new Date(project.created_at).toLocaleDateString()}
))}
)}
); } export default Home;