"use client"; import { FormEvent, useState } from "react"; type RunTaskResponse = { providerUsed: string; goal: string; successDefinition: string; executionTrace: string[]; finalResult: string; planNotes?: string | null; error?: string; }; const DEFAULT_PROMPT = "Plan and summarize a concise hackathon demo for a task runner UI."; export default function Home() { const [prompt, setPrompt] = useState(DEFAULT_PROMPT); const [result, setResult] = useState(null); const [error, setError] = useState(null); const [isRunning, setIsRunning] = useState(false); async function handleSubmit(event: FormEvent) { event.preventDefault(); const trimmed = prompt.trim(); if (!trimmed) { setError("Enter a prompt before running the task."); return; } setIsRunning(true); setError(null); try { const response = await fetch("/api/run-task", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ prompt: trimmed }), }); const payload = (await response.json()) as RunTaskResponse; if (!response.ok) { throw new Error(payload.error || "Task run failed."); } setResult(payload); } catch (requestError) { setResult(null); setError(requestError instanceof Error ? requestError.message : "Task run failed."); } finally { setIsRunning(false); } } return (

Hackathon demo

Shared planner, shared provider, minimal surface.

Run the same task planning path used by the worker services, but render it in a single Next.js page that is easy to ship to Hugging Face Spaces.