{error}
)} {result && (import { useState } from "react"; import axios from "axios"; import { apiUrl } from "./api"; import VideoUploader from "./components/VideoUploader"; import ResultCard from "./components/ResultCard"; import FrameChart from "./components/FrameChart"; export default function App() { const [result, setResult] = useState(null); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); async function handleAnalyse(file) { setError(null); setResult(null); setIsLoading(true); try { const form = new FormData(); form.append("file", file); const { data } = await axios.post(apiUrl("/predict"), form, { headers: { "Content-Type": "multipart/form-data" }, timeout: 120_000, }); setResult(data); } catch (e) { const status = e.response?.status; if (status === 404) { setError( "API not found (404). Redeploy the frontend after setting VITE_API_URL, or check vercel.json rewrites point to your Render URL." ); } else { setError(e.response?.data?.detail || e.message || "Something went wrong."); } } finally { setIsLoading(false); } } return (
{error}
)} {result && (