'use client'; import { useState, useEffect } from 'react'; import { ArrowLeft, Dna, ExternalLink, Loader2 } from 'lucide-react'; import Link from 'next/link'; export default function WorkflowPage() { const [isLoading, setIsLoading] = useState(true); const [langflowStatus, setLangflowStatus] = useState<'checking' | 'online' | 'offline'>('checking'); const LANGFLOW_URL = 'http://localhost:7860'; useEffect(() => { const checkLangflow = async () => { try { const img = new Image(); img.onload = () => setLangflowStatus('online'); img.onerror = () => { fetch(`${LANGFLOW_URL}/api/v1/version`, { mode: 'no-cors' }) .then(() => setLangflowStatus('online')) .catch(() => setLangflowStatus('offline')); }; img.src = `${LANGFLOW_URL}/favicon.ico?t=${Date.now()}`; setTimeout(() => { if (langflowStatus === 'checking') { setLangflowStatus('online'); } }, 2000); } catch { setLangflowStatus('offline'); } }; checkLangflow(); const interval = setInterval(() => { if (langflowStatus === 'offline') { checkLangflow(); } }, 5000); return () => clearInterval(interval); }, [langflowStatus]); const handleRetry = () => { setLangflowStatus('checking'); setIsLoading(true); }; // Clean white loading state if (langflowStatus === 'checking') { return (

Connecting to Langflow...

); } // Clean white offline state if (langflowStatus === 'offline') { return (
{/* Clean header */}
Back to BioFlow
BioFlow / Workflow Builder
{/* Offline message */}

Langflow not running

langflow run --host 0.0.0.0 --port 7860

Note: Run in a separate terminal/venv to avoid dependency conflicts

); } // Clean white header with Langflow iframe return (
{/* Clean minimal header */}
Back to BioFlow
BioFlow / Workflow Builder
Open in New Tab
{/* Full viewport Langflow iframe */}
{isLoading && (

Loading Langflow...

)}