<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Humanizit | AI Automation Feature</title>
<!-- CSS & Fonts -->
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Maven+Pro:wght@400;500;600;700;800;900&family=Poppins:wght@600;700;800;900&display=swap" rel="stylesheet">
<style>
#humanizit-wrapper {
font-family: 'Maven Pro', sans-serif;
background-color: #000;
color: #fff;
margin: 0;
padding: 0;
width: 100%;
position: relative;
min-height: 100vh;
}
#humanizit-wrapper h1,
#humanizit-wrapper h2,
#humanizit-wrapper h3,
#humanizit-wrapper h4,
#humanizit-wrapper h5,
#humanizit-wrapper h6 {
font-family: 'Poppins', sans-serif !important;
font-weight: 600 !important;
}
/* Markdown styling for AI responses */
.prose p { margin-bottom: 1rem; color: #d4d4d8; }
.prose h1, .prose h2, .prose h3, .prose h4 { color: #facc15; margin-top: 1.5rem; margin-bottom: 0.5rem; font-weight: 600 !important; }
.prose strong { color: #fff; font-weight: 700; }
/* Smooth scrolling */
html { scroll-behavior: smooth; }
</style>
<script type="importmap">
{
"imports": {
"react": "https://esm.sh/react@18.3.1",
"react-dom": "https://esm.sh/react-dom@18.3.1",
"react-dom/client": "https://esm.sh/react-dom@18.3.1/client",
"framer-motion": "https://esm.sh/framer-motion@11.11.11?deps=react@18.3.1",
"lucide-react": "https://esm.sh/lucide-react@0.454.0?deps=react@18.3.1",
"@google/genai": "https://esm.sh/@google/genai@1.3.0",
"htm": "https://esm.sh/htm@3.1.1",
"react/": "https://esm.sh/react@^19.2.3/"
}
}
</script>
</head>
<body>
<div id="humanizit-wrapper">
<!-- CRITICAL: ID must match what the script looks for -->
<div id="humanizit-app"></div>
</div>
<script type="module">
import React from 'react';
import ReactDOM from 'react-dom/client';
import { motion, AnimatePresence } from 'framer-motion';
import * as Lucide from 'lucide-react';
import { GoogleGenAI } from "@google/genai";
import htm from 'htm';
const html = htm.bind(React.createElement);
const {
MessageSquare, Cpu, TrendingUp, Check, ArrowUpRight,
MessageCircle, Mic, Megaphone, PenTool, Calendar,
Search, Database, FileSearch, Loader2, Sparkles
} = Lucide;
// --- AI SERVICE ---
const ai = new GoogleGenAI({ apiKey: process.env.API_KEY });
const consultAgent = async (userPrompt) => {
try {
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: userPrompt,
config: {
systemInstruction: "You are the Humanizit Strategic Automation Architect. Analyze the bottleneck and suggest a strategy using Front End, Back End, and Complex Growth agents. Keep it bold, professional, and use Markdown. Focus on the value of human-like automation.",
temperature: 0.7,
},
});
return response.text;
} catch (err) {
console.error("AI Error:", err);
return "I'm ready to architect your solution, but I'm having a connection issue. Please try again or book a call directly.";
}
};
// --- COMPONENTS ---
const FuturisticBackground = () => html`
<div className="absolute inset-0 z-0 overflow-hidden pointer-events-none">
<div className="absolute inset-0 opacity-[0.05]" style=${{ backgroundImage: 'linear-gradient(#facc15 1px, transparent 1px), linear-gradient(90deg, #facc15 1px, transparent 1px)', backgroundSize: '60px 60px' }} />
<${motion.div} animate=${{ scale: [1, 1.2, 1], opacity: [0.1, 0.15, 0.1] }} transition=${{ duration: 15, repeat: Infinity }} className="absolute -top-[10%] -left-[10%] w-[80%] h-[80%] bg-yellow-400 rounded-full blur-[180px]" />
<${motion.div} animate=${{ scale: [1, 1.1, 1], opacity: [0.05, 0.08, 0.05] }} transition=${{ duration: 20, repeat: Infinity, delay: 2 }} className="absolute bottom-[0%] right-[0%] w-[70%] h-[70%] bg-zinc-700 rounded-full blur-[150px]" />
</div>
`;
const AgentCard = ({ title, description, icon, tag, features, delay }) => html`
<${motion.div}
initial=${{ opacity: 0, y: 30 }}
whileInView=${{ opacity: 1, y: 0 }}
viewport=${{ once: true }}
transition=${{ duration: 0.6, delay }}
className="group relative bg-zinc-900/40 backdrop-blur-xl border border-white/5 p-8 rounded-[2.5rem] flex flex-col h-full hover:border-yellow-400/40 transition-all duration-500"
>
<div className="mb-10 flex items-center justify-between">
<div className="w-16 h-16 rounded-2xl bg-zinc-800 border border-white/5 flex items-center justify-center text-yellow-400 group-hover:bg-yellow-400 group-hover:text-black transition-all shadow-lg">${icon}</div>
<span className="text-[9px] uppercase font-black tracking-[0.2em] text-zinc-500 border border-zinc-800 px-4 py-1.5 rounded-full bg-black/20">${tag}</span>
</div>
<h3 className="text-2xl font-semibold mb-5 tracking-tight group-hover:text-yellow-400 transition-colors">${title}</h3>
<p className="text-zinc-400 text-sm leading-relaxed mb-10 flex-grow">${description}</p>
<ul className="space-y-4">
${features.map(f => html`
<li key=${f} className="flex items-center gap-3 text-xs font-medium text-zinc-300">
<div className="w-5 h-5 rounded-full bg-yellow-400/10 flex items-center justify-center shrink-0 border border-yellow-400/20">
<${Check} className="w-3 h-3 text-yellow-400" />
</div>
${f}
</li>
`)}
</ul>
<div className="absolute bottom-0 left-0 w-0 h-1 bg-yellow-400 group-hover:w-full transition-all duration-700" />
</${motion.div}>
`;
const CapabilityItem = ({ name, icon, delay }) => html`
<${motion.div}
initial=${{ opacity: 0, scale: 0.9 }}
whileInView=${{ opacity: 1, scale: 1 }}
viewport=${{ once: true }}
transition=${{ duration: 0.4, delay }}
className="group cursor-pointer flex items-center justify-between bg-yellow-400 p-6 h-20 rounded-2xl shadow-xl hover:shadow-yellow-400/30 transition-all overflow-hidden relative"
>
<div className="flex items-center gap-4">
<div className="p-2.5 bg-black/10 rounded-lg group-hover:bg-black group-hover:text-yellow-400 transition-colors">${icon}</div>
<span className="text-black font-black uppercase tracking-tight text-[11px] leading-tight">${name}</span>
</div>
<${ArrowUpRight} className="w-5 h-5 text-black group-hover:rotate-45 transition-transform" />
</${motion.div}>
`;
const AgentFinder = () => {
const [input, setInput] = React.useState('');
const [loading, setLoading] = React.useState(false);
const [result, setResult] = React.useState(null);
const industries = ['E-commerce', 'SaaS', 'Real Estate', 'Logistics', 'Healthcare', 'Retail', 'Education', 'Legal', 'Accountants'];
const triggerStrategy = async (val) => {
if (loading || !val.trim()) return;
setLoading(true);
const res = await consultAgent(val);
setResult(res);
setLoading(false);
};
return html`
<div className="w-full bg-zinc-950/60 backdrop-blur-2xl border border-white/5 rounded-[3rem] p-8 md:p-12 shadow-2xl overflow-hidden relative">
<form onSubmit=${(e) => { e.preventDefault(); triggerStrategy(input); }}>
<div className="flex flex-col md:flex-row gap-5 mb-8">
<input type="text" value=${input} onChange=${e => setInput(e.target.value)} placeholder="Describe your business challenge..." className="flex-1 bg-zinc-900/50 border border-white/10 rounded-[1.5rem] px-8 py-5 text-white focus:border-yellow-400 outline-none text-lg" />
<button type="submit" disabled=${loading} className="bg-yellow-400 hover:bg-white text-black font-black uppercase tracking-widest text-xs px-10 py-5 rounded-[1.5rem] flex items-center justify-center gap-3 transition-all active:scale-95 shadow-lg">
${loading ? html`<${Loader2} className="w-5 h-5 animate-spin" />` : html`<${Sparkles} className="w-5 h-5" />`}
${loading ? 'Architecting...' : 'Build My Strategy'}
</button>
</div>
</form>
<div className="flex flex-wrap gap-3 justify-center mb-4">
${industries.map(ind => html`
<button key=${ind} onClick=${() => { setInput(`Strategy for ${ind}`); triggerStrategy(`Create a strategy for a ${ind} business.`); }} className="px-4 py-2 border border-zinc-800 rounded-full text-[10px] font-bold uppercase tracking-widest text-zinc-500 hover:border-yellow-400 hover:text-yellow-400 transition-all">
${ind}
</button>
`)}
</div>
<${AnimatePresence}>
${result && html`
<${motion.div} initial=${{ opacity: 0, height: 0 }} animate=${{ opacity: 1, height: 'auto' }} className="mt-12 pt-12 border-t border-white/5">
<div className="prose prose-invert max-w-none whitespace-pre-wrap text-zinc-300 mb-10">${result}</div>
<div className="p-10 bg-zinc-900/80 rounded-[2.5rem] text-center border border-yellow-400/10 shadow-2xl">
<h4 className="text-xl font-semibold mb-3">Ready to deploy these agents?</h4>
<p className="text-zinc-500 text-sm mb-8">Discuss this custom architecture with a human expert today.</p>
<a href="https://humanizit.co/consultation-call/" target="_blank" className="inline-block bg-yellow-400 text-black font-black uppercase tracking-widest text-xs px-12 py-4 rounded-full hover:bg-white transition-all shadow-xl">Book Free Consultation</a>
</div>
</${motion.div}>
`}
</${AnimatePresence}>
</div>
`;
};
const App = () => {
const capabilities = [
{ name: "Text & Voice Enquiry", icon: html`<${Mic} className="w-5 h-5" />` },
{ name: "Marketing Activities", icon: html`<${Megaphone} className="w-5 h-5" />` },
{ name: "Content Creation", icon: html`<${PenTool} className="w-5 h-5" />` },
{ name: "Booking Management", icon: html`<${Calendar} className="w-5 h-5" />` },
{ name: "Data & Research", icon: html`<${Search} className="w-5 h-5" />` },
{ name: "Sales Management", icon: html`<${Database} className="w-5 h-5" />` },
{ name: "CRM Management", icon: html`<${FileSearch} className="w-5 h-5" />` },
{ name: "Enquiry Handling", icon: html`<${MessageCircle} className="w-5 h-5" />` },
];
return html`
<div className="relative z-10 min-h-screen">
<${FuturisticBackground} />
<main className="max-w-7xl mx-auto px-6 py-24">
<!-- HEADER -->
<header className="text-center mb-24">
<span className="text-yellow-400 font-black tracking-[0.4em] text-[10px] uppercase mb-6 block">Intelligent Workflow Systems</span>
<h2 className="text-5xl md:text-8xl font-semibold tracking-tighter mb-8 leading-tight">
The Future of Work is <br className="hidden md:block"/><span className="text-yellow-400">Automated.</span>
</h2>
<p className="text-zinc-500 text-xl max-w-2xl mx-auto leading-relaxed">Scaling your operations without scaling your overhead using custom-built Digital Agents.</p>
</header>
<!-- 3 BOXES SIDE BY SIDE -->
<div className="grid grid-cols-1 md:grid-cols-3 gap-10 mb-32 items-stretch">
<${AgentCard} title="Front End AI Agents" description="Direct interaction with your customers across chat, SMS, and voice to qualify leads and secure bookings 24/7." tag="Engagement" features=${["Lead Qualification", "24/7 Multi-channel", "Instant Response"]} icon=${html`<${MessageSquare} className="w-8 h-8" />`} delay=${0.1} />
<${AgentCard} title="Back End AI Agents" description="The engine room of your business. Seamlessly connecting your data, workflows, and admin systems." tag="Operations" features=${["ERP/CRM Sync", "Workflow Automation", "Autonomous Admin"]} icon=${html`<${Cpu} className="w-8 h-8" />`} delay=${0.2} />
<${AgentCard} title="Complex Growth Agents" description="Sophisticated AI that drives LTV, reduces churn, and converts past customers through smart nurturing." tag="Revenue" features=${["Predictive Churn", "Smart Retargeting", "Personalized CRM"]} icon=${html`<${TrendingUp} className="w-8 h-8" />`} delay=${0.3} />
</div>
<!-- CORE CAPABILITIES -->
<section className="mb-32">
<div className="text-center mb-16">
<h3 className="text-3xl font-semibold uppercase tracking-[0.2em] mb-4">Native Capabilities</h3>
<div className="w-20 h-1 bg-yellow-400 mx-auto rounded-full shadow-[0_0_15px_rgba(250,204,21,0.5)]" />
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
${capabilities.map((cap, i) => html`<${CapabilityItem} key=${i} ...${cap} delay=${i * 0.05} />`)}
</div>
</section>
<!-- AI STRATEGY ARCHITECT -->
<section id="strategy-architect">
<div className="text-center mb-16">
<h2 className="text-4xl md:text-5xl font-semibold mb-6">Need a custom blueprint?</h2>
<p className="text-zinc-500 text-lg">Our AI Strategist will build a custom architecture for your business in seconds.</p>
</div>
<${AgentFinder} />
</section>
</main>
</div>
`;
};
// CRITICAL: Ensure we mount to the correct element ID
const rootElement = document.getElementById('humanizit-app');
if (rootElement) {
ReactDOM.createRoot(rootElement).render(React.createElement(App));
} else {
console.error("Mount element not found! Make sure id='humanizit-app' exists.");
}
</script>
</body>
</html>
Leave a Reply