systemforge-ai / frontend /components /ui /HeroSection.tsx
JacobJA's picture
Clean fresh deployment
34b6cef
Raw
History Blame Contribute Delete
9.7 kB
import React from 'react';
import { motion } from 'framer-motion';
import WorkflowBuilder from '../workflow/WorkflowBuilder';
interface HeroSectionProps {
onSubmit: (workflowText: string) => void;
isRunning: boolean;
}
const EXAMPLE_WORKFLOWS = [
{
title: 'E-commerce Operations Chaos',
flow:
'Orders come from Shopify → Team manually updates inventory in Excel → Slack message sent to warehouse → Warehouse updates delivery status manually → Customer support manually handles delays',
},
{
title: 'Hospital Approval Workflow',
flow:
'Patient fills intake form → Reception manually verifies insurance → Doctor manually reviews reports → Lab sends PDF reports by email → Admin manually updates billing',
},
{
title: 'Hiring Workflow Mess',
flow:
'Resume comes from LinkedIn → HR manually shortlists candidates → Interview scheduling via WhatsApp → Feedback collected in Google Sheets → Offer approval delayed manually',
},
{
title: 'Startup Support Workflow',
flow:
'Customer submits issue → Support team checks CRM manually → Engineering gets pinged in Slack → Fix status tracked in Notion → Customer gets manual update email',
},
];
const containerVariants = {
hidden: {},
visible: {
transition: {
staggerChildren: 0.14,
},
},
};
const fadeUp = {
hidden: {
opacity: 0,
y: 30,
},
visible: {
opacity: 1,
y: 0,
transition: {
duration: 0.7,
ease: 'easeOut',
},
},
};
export default function HeroSection({
onSubmit,
isRunning,
}: HeroSectionProps) {
return (
<section
style={{
position: 'relative',
zIndex: 10,
minHeight: '100vh',
display: 'flex',
justifyContent: 'center',
padding: '120px 24px 80px',
}}
>
<motion.div
variants={containerVariants}
initial="hidden"
animate="visible"
style={{
width: '100%',
maxWidth: '1200px',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
}}
>
{/* EYEBROW */}
<motion.div
variants={fadeUp}
style={{
display: 'flex',
alignItems: 'center',
gap: '12px',
marginBottom: '28px',
}}
>
<div
style={{
width: 60,
height: 1,
background:
'linear-gradient(90deg, transparent, rgba(227,9,19,0.7))',
}}
/>
<span
style={{
fontFamily: 'var(--font-mono)',
fontSize: '0.72rem',
letterSpacing: '0.35em',
color: '#E30913',
}}
>
WORKFLOW REDESIGN ENGINE
</span>
<div
style={{
width: 60,
height: 1,
background:
'linear-gradient(90deg, rgba(227,9,19,0.7), transparent)',
}}
/>
</motion.div>
{/* TITLE */}
<motion.div
variants={fadeUp}
style={{
textAlign: 'center',
marginBottom: '28px',
}}
>
<h1
style={{
fontFamily: 'var(--font-display)',
fontSize: 'clamp(4rem, 10vw, 8rem)',
lineHeight: 0.95,
fontWeight: 900,
letterSpacing: '-0.03em',
marginBottom: '16px',
}}
>
<span style={{ color: '#F0F0FF' }}>
SYSTEM
</span>
<span
style={{
color: '#E30913',
textShadow:
'0 0 30px rgba(227,9,19,0.5), 0 0 80px rgba(227,9,19,0.25)',
}}
>
FORGE
</span>
</h1>
<div
style={{
fontFamily: 'var(--font-display)',
fontSize: 'clamp(1.5rem, 3vw, 2.6rem)',
color: '#8888AA',
letterSpacing: '0.08em',
}}
>
Messy Workflow → AI-Native Architecture
</div>
</motion.div>
{/* TAGLINE */}
<motion.p
variants={fadeUp}
style={{
maxWidth: '860px',
textAlign: 'center',
fontSize: 'clamp(1rem, 2vw, 1.25rem)',
lineHeight: 1.8,
color: '#8888AA',
marginBottom: '52px',
}}
>
Transform approvals, spreadsheets, manual handoffs, broken operations,
and disconnected systems into scalable production-grade AI workflows
powered by{' '}
<span
style={{
color: '#00D4FF',
textShadow:
'0 0 20px rgba(0,212,255,0.18)',
}}
>
AMD-accelerated Qwen models
</span>
.
</motion.p>
{/* AGENT FLOW */}
<motion.div
variants={fadeUp}
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexWrap: 'wrap',
gap: '10px',
marginBottom: '56px',
}}
>
{[
{
num: '01',
title: 'ARCHITECT',
color: '#00D4FF',
},
{
num: '02',
title: 'CRITIC',
color: '#FFB800',
},
{
num: '03',
title: 'REFINER',
color: '#00FF9C',
},
].map((item, index) => (
<React.Fragment key={item.title}>
<motion.div
whileHover={{
scale: 1.03,
y: -2,
}}
style={{
padding: '14px 30px',
border: `1px solid ${item.color}30`,
background: `${item.color}08`,
borderRadius: 4,
minWidth: 190,
textAlign: 'center',
}}
>
<div
style={{
fontFamily: 'var(--font-mono)',
fontSize: '0.7rem',
color: item.color,
letterSpacing: '0.25em',
marginBottom: 4,
}}
>
{item.num}
</div>
<div
style={{
fontFamily: 'var(--font-display)',
fontSize: '0.95rem',
color: item.color,
letterSpacing: '0.18em',
}}
>
{item.title}
</div>
</motion.div>
{index < 2 && (
<div
style={{
color: '#444466',
fontSize: '1.2rem',
}}
>
</div>
)}
</React.Fragment>
))}
</motion.div>
{/* WORKFLOW BUILDER */}
<motion.div
variants={fadeUp}
style={{
width: '100%',
maxWidth: '980px',
marginBottom: '48px',
}}
>
<WorkflowBuilder
onGenerate={(steps: string[]) =>
onSubmit(steps.join(' → '))
}
isRunning={isRunning}
onWorkflowSelect={() => { }}
onWorkflowChange={() => { }}
/>
</motion.div>
{/* EXAMPLE WORKFLOWS */}
<motion.div
variants={fadeUp}
style={{
width: '100%',
maxWidth: '980px',
}}
>
<div
style={{
fontFamily: 'var(--font-mono)',
fontSize: '0.7rem',
letterSpacing: '0.28em',
color: '#444466',
marginBottom: '18px',
textAlign: 'center',
}}
>
EXAMPLE_MESSY_WORKFLOWS
</div>
<div
style={{
display: 'flex',
flexDirection: 'column',
gap: '18px',
}}
>
{EXAMPLE_WORKFLOWS.map((item, index) => (
<motion.div
key={index}
whileHover={{
y: -2,
}}
style={{
background:
'rgba(0,212,255,0.04)',
border:
'1px solid rgba(0,212,255,0.12)',
borderRadius: 4,
padding: '22px',
cursor: 'pointer',
}}
>
<div
style={{
fontFamily: 'var(--font-display)',
fontSize: '1.1rem',
color: '#00D4FF',
marginBottom: '12px',
}}
>
{item.title}
</div>
<div
style={{
fontFamily: 'var(--font-mono)',
fontSize: '0.88rem',
lineHeight: 1.8,
color: '#8888AA',
}}
>
{item.flow}
</div>
</motion.div>
))}
</div>
</motion.div>
</motion.div>
</section>
);
}