diff --git a/.gitignore b/.gitignore
index b7faf40..7e56479 100644
--- a/.gitignore
+++ b/.gitignore
@@ -202,6 +202,10 @@ cython_debug/
.cursorindexingignore
# Marimo
-marimo/_static/
-marimo/_lsp/
__marimo__/
+
+# Node.js / Frontend
+node_modules/
+dist/
+package-lock.json
+
diff --git a/landing/index.html b/landing/index.html
index 4668a8d..2d5ff95 100644
--- a/landing/index.html
+++ b/landing/index.html
@@ -3,7 +3,26 @@
- TENET AI โ LLM Firewall
+
+
+ TENET AI โ Real-Time Open Source LLM Firewall & Security Middleware
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/landing/src/App.tsx b/landing/src/App.tsx
index 1165794..4748c1e 100644
--- a/landing/src/App.tsx
+++ b/landing/src/App.tsx
@@ -1,672 +1,59 @@
-import { useState, useEffect, useRef } from "react";
-
-const CSS = `
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@300;400;500;600&display=swap');
-*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
-:root{
- --bg:#080a0e;--surface:#0f1116;--surface2:#14171f;--surface3:#1a1d28;
- --border:#1e2130;--border2:#252a3a;
- --cyan:#00d4ff;--cyan-dim:rgba(0,212,255,0.08);--cyan-glow:rgba(0,212,255,0.2);
- --red:#e63946;--red-dim:rgba(230,57,70,0.1);
- --amber:#ffb703;--amber-dim:rgba(255,183,3,0.1);
- --green:#2dd4bf;--green-dim:rgba(45,212,191,0.1);
- --purple:#a78bfa;--purple-dim:rgba(167,139,250,0.1);
- --text:#dde1ef;--text2:#8890a8;--text3:#484f66;
- --font:'Inter',sans-serif;--mono:'JetBrains Mono',monospace;
- --radius:10px;
-}
-html{scroll-behavior:smooth}
-body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;overflow-x:hidden}
-::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:4px}
-::-webkit-scrollbar-thumb:hover{background:var(--cyan)}
-
-.page{display:flex;flex-direction:column;min-height:100vh}
-
-/* TOPBAR */
-.topbar{position:fixed;top:0;left:0;right:0;z-index:100;height:60px;background:rgba(8,10,14,0.9);border-bottom:1px solid var(--border);backdrop-filter:blur(20px);display:flex;align-items:center;padding:0 32px;gap:0}
-.brand{display:flex;align-items:center;gap:12px;text-decoration:none;min-width:220px}
-.brand-logo{display:flex;align-items:center;justify-content:center}
-.brand-name{font-weight:800;font-size:16px;color:var(--cyan);letter-spacing:-0.01em}
-.brand-badge{font-size:9px;background:var(--cyan-dim);color:var(--cyan);border:1px solid rgba(0,212,255,0.2);border-radius:4px;padding:2px 6px;font-family:var(--mono);margin-left:2px}
-.nav{display:flex;align-items:center;height:100%;gap:0;margin-left:16px;flex:1}
-.nav-link{display:flex;align-items:center;gap:6px;height:100%;padding:0 16px;font-size:12.5px;font-weight:500;color:var(--text3);text-decoration:none;cursor:pointer;border-bottom:2px solid transparent;transition:all 0.15s;white-space:nowrap}
-.nav-link:hover{color:var(--text2);background:rgba(255,255,255,0.02)}
-.nav-link.active{color:var(--cyan);border-bottom-color:var(--cyan)}
-.topbar-right{display:flex;align-items:center;gap:10px;margin-left:auto}
-.live-badge{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--green);font-family:var(--mono);background:var(--green-dim);border:1px solid rgba(45,212,191,0.2);padding:4px 10px;border-radius:20px}
-.dot{width:6px;height:6px;border-radius:50%;background:var(--green);animation:pulse 2s infinite}
-.btn{display:inline-flex;align-items:center;gap:7px;border:none;cursor:pointer;font-family:var(--font);font-weight:600;border-radius:7px;text-decoration:none;transition:all 0.18s;white-space:nowrap;letter-spacing:-0.01em}
-.btn-sm{font-size:12px;padding:7px 14px}
-.btn-md{font-size:13px;padding:10px 20px}
-.btn-lg{font-size:14px;padding:13px 26px}
-.btn-xl{font-size:15px;padding:15px 32px}
-.btn-primary{background:var(--cyan);color:#080a0e}
-.btn-primary:hover{background:#1adeff;box-shadow:0 0 28px var(--cyan-glow);transform:translateY(-1px)}
-.btn-outline{background:transparent;color:var(--text);border:1px solid var(--border2)}
-.btn-outline:hover{border-color:var(--cyan);color:var(--cyan)}
-.btn-ghost{background:transparent;color:var(--text2);border:1px solid var(--border)}
-.btn-ghost:hover{color:var(--cyan);border-color:rgba(0,212,255,0.3)}
-
-.main{margin-top:60px;flex:1}
-.container{max-width:1180px;margin:0 auto;padding:0 28px}
-.section{padding:80px 0}
-.section-alt{background:var(--surface)}
-.eyebrow{display:flex;align-items:center;gap:8px;font-size:10.5px;font-family:var(--mono);color:var(--cyan);letter-spacing:0.14em;text-transform:uppercase;margin-bottom:14px}
-.eyebrow::before{content:'';width:18px;height:1px;background:var(--cyan);flex-shrink:0}
-.section-title{font-size:32px;font-weight:800;letter-spacing:-0.025em;line-height:1.15;margin-bottom:12px}
-.section-sub{font-size:14px;color:var(--text2);max-width:540px;line-height:1.75}
-.grad{background:linear-gradient(110deg,#fff 0%,var(--cyan) 50%,#0088aa 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
-
-/* HERO */
-.hero{padding:100px 0 80px;position:relative;overflow:hidden;background:var(--bg)}
-.hero-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,212,255,0.04) 1px,transparent 1px),linear-gradient(90deg,rgba(0,212,255,0.04) 1px,transparent 1px);background-size:52px 52px;pointer-events:none}
-.hero-glow1{position:absolute;top:-160px;left:50%;transform:translateX(-50%);width:900px;height:500px;background:radial-gradient(ellipse,rgba(0,212,255,0.055) 0%,transparent 65%);pointer-events:none}
-.hero-glow2{position:absolute;bottom:-100px;right:-100px;width:500px;height:500px;background:radial-gradient(ellipse,rgba(167,139,250,0.04) 0%,transparent 70%);pointer-events:none}
-.hero-inner{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:center}
-.hero-kicker{display:inline-flex;align-items:center;gap:8px;background:var(--surface2);border:1px solid var(--border2);border-radius:24px;padding:6px 16px 6px 10px;font-size:11.5px;color:var(--text2);margin-bottom:28px}
-.hero-kicker-pill{background:var(--cyan);color:#080a0e;font-size:9px;font-weight:700;padding:2px 8px;border-radius:10px;letter-spacing:0.06em}
-.hero-title{font-size:54px;font-weight:900;letter-spacing:-0.035em;line-height:1.05;margin-bottom:22px}
-.hero-desc{font-size:15px;color:var(--text2);line-height:1.8;margin-bottom:36px;max-width:460px}
-.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:44px}
-.hero-pills{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
-.hero-pill{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text3);font-family:var(--mono)}
-.hero-pill-dot{width:5px;height:5px;border-radius:50%;background:var(--cyan);flex-shrink:0}
-
-/* PREVIEW CARD */
-.preview{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;box-shadow:0 40px 100px rgba(0,0,0,0.6),0 0 0 1px rgba(0,212,255,0.04)}
-.preview-bar{background:var(--surface2);border-bottom:1px solid var(--border);padding:11px 16px;display:flex;align-items:center;gap:7px}
-.preview-dot{width:11px;height:11px;border-radius:50%}
-.preview-title{font-size:11px;color:var(--text3);margin-left:8px;font-family:var(--mono);flex:1}
-.preview-live{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--green);font-family:var(--mono)}
-.preview-body{padding:14px;display:flex;flex-direction:column;gap:10px}
-.p-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
-.p-stat{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}
-.p-stat-v{font-size:24px;font-weight:700;font-family:var(--mono);line-height:1;margin-bottom:4px}
-.p-stat-l{font-size:9.5px;color:var(--text3);text-transform:uppercase;letter-spacing:0.1em}
-.p-log{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-family:var(--mono);font-size:10.5px;display:flex;flex-direction:column;gap:5px;min-height:88px}
-.p-log-row{display:flex;gap:8px;align-items:center;opacity:0;animation:fadeRow 0.3s ease forwards}
-.p-log-time{color:var(--text3);min-width:58px;font-size:10px}
-.p-log-tag{font-size:8.5px;font-weight:700;padding:1px 6px;border-radius:3px;min-width:52px;text-align:center;letter-spacing:0.04em}
-.p-log-msg{color:#4e5568;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}
-.p-bars{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:7px}
-.p-bar-head{font-size:9px;color:var(--text3);font-family:var(--mono);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:2px}
-.p-bar-row{display:flex;align-items:center;gap:8px}
-.p-bar-lbl{font-size:9.5px;color:var(--text3);min-width:96px;font-family:var(--mono)}
-.p-bar-track{flex:1;height:3px;background:var(--border);border-radius:2px;overflow:hidden}
-.p-bar-fill{height:100%;border-radius:2px;transition:width 1.8s cubic-bezier(0.4,0,0.2,1)}
-.p-bar-val{font-size:9.5px;color:var(--text2);font-family:var(--mono);min-width:30px;text-align:right}
-
-/* STATS STRIP */
-.stats-strip{background:var(--surface);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:0}
-.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);divide-x:1px solid var(--border)}
-.stat-block{padding:28px 32px;border-right:1px solid var(--border)}
-.stat-block:last-child{border-right:none}
-.stat-val{font-size:38px;font-weight:800;font-family:var(--mono);letter-spacing:-0.03em;line-height:1;margin-bottom:6px}
-.stat-lbl{font-size:11.5px;color:var(--text3);text-transform:uppercase;letter-spacing:0.09em;font-weight:500}
-.stat-sub{font-size:10.5px;color:var(--text3);margin-top:3px;font-family:var(--mono)}
-
-/* HOW */
-.how-grid{display:grid;grid-template-columns:repeat(4,1fr);position:relative;gap:0}
-.how-line{position:absolute;top:27px;left:calc(12.5% + 13px);right:calc(12.5% + 13px);height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent)}
-.how-step{padding:0 20px;text-align:center}
-.how-num{width:54px;height:54px;border-radius:50%;background:var(--surface);border:1px solid var(--border2);display:flex;align-items:center;justify-content:center;font-size:20px;margin:0 auto 20px;position:relative;z-index:1;transition:all 0.22s}
-.how-step:hover .how-num{border-color:var(--cyan);box-shadow:0 0 24px var(--cyan-glow);background:var(--cyan-dim)}
-.how-tag{font-size:9.5px;font-family:var(--mono);color:var(--cyan);letter-spacing:0.14em;margin-bottom:8px}
-.how-title{font-size:14px;font-weight:700;margin-bottom:8px}
-.how-desc{font-size:12px;color:var(--text2);line-height:1.65}
-
-/* FEATURES */
-.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
-.feat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:26px;transition:all 0.22s;position:relative;overflow:hidden;cursor:default}
-.feat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);opacity:0;transition:opacity 0.22s}
-.feat-card:hover{border-color:var(--border2);transform:translateY(-3px);box-shadow:0 16px 48px rgba(0,0,0,0.35)}
-.feat-card:hover::before{opacity:1}
-.feat-icon{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:16px}
-.feat-title{font-size:14.5px;font-weight:700;margin-bottom:8px}
-.feat-desc{font-size:12.5px;color:var(--text2);line-height:1.7}
-.feat-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
-.tag{font-size:10px;font-family:var(--mono);padding:3px 9px;border-radius:4px;border:1px solid transparent}
-
-/* THREATS */
-.threat-list{display:flex;flex-direction:column;gap:14px}
-.threat{background:var(--surface);border:1px solid var(--border);border-left:3px solid;border-radius:var(--radius);padding:22px;display:grid;grid-template-columns:160px 1fr 90px;gap:20px;align-items:start;transition:all 0.2s;cursor:default}
-.threat:hover{background:var(--surface2);transform:translateX(4px)}
-.threat-meta{display:flex;flex-direction:column;gap:6px}
-.threat-date{font-size:10px;font-family:var(--mono);color:var(--text3)}
-.threat-sev{font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;width:fit-content}
-.threat-type{font-size:9.5px;font-family:var(--mono);color:var(--text3);background:var(--surface3);padding:2px 7px;border-radius:3px;width:fit-content}
-.threat-title{font-size:14px;font-weight:700;margin-bottom:6px}
-.threat-desc{font-size:12px;color:var(--text2);line-height:1.65;margin-bottom:10px}
-.threat-resp{background:rgba(0,212,255,0.04);border:1px solid rgba(0,212,255,0.12);border-radius:6px;padding:10px 13px}
-.threat-resp-lbl{font-size:9px;font-family:var(--mono);color:var(--cyan);letter-spacing:0.12em;margin-bottom:4px;font-weight:700}
-.threat-resp-text{font-size:11.5px;color:var(--text2);line-height:1.6}
-.threat-num{text-align:right}
-.threat-num-val{font-size:22px;font-weight:800;font-family:var(--mono);line-height:1}
-.threat-num-lbl{font-size:9.5px;color:var(--text3);margin-top:3px}
-
-/* INSTALL */
-.install-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
-.install-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:all 0.22s}
-.install-card:hover{border-color:var(--border2);transform:translateY(-3px);box-shadow:0 20px 56px rgba(0,0,0,0.35)}
-.install-head{padding:20px 20px 0;display:flex;align-items:flex-start;justify-content:space-between}
-.install-icon{font-size:30px;margin-bottom:10px}
-.install-plat{font-size:9.5px;font-family:var(--mono);color:var(--text3);background:var(--surface3);padding:2px 8px;border-radius:4px}
-.install-title{font-size:15px;font-weight:700;margin-bottom:4px}
-.install-sub{font-size:12px;color:var(--text2);margin-bottom:14px}
-.install-cmd{background:var(--bg);border-top:1px solid var(--border);padding:12px 20px;font-family:var(--mono);font-size:12px;color:var(--cyan);display:flex;align-items:center;gap:8px}
-.install-prompt{color:var(--text3)}
-.install-body{padding:16px 20px 20px}
-.install-features{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}
-.install-feat{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text2)}
-.install-feat::before{content:'';width:4px;height:4px;border-radius:50%;background:var(--cyan);flex-shrink:0}
-
-/* CODE */
-.code-block{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
-.code-head{background:var(--surface);border-bottom:1px solid var(--border);padding:11px 18px;display:flex;align-items:center;gap:8px}
-.code-dot2{width:11px;height:11px;border-radius:50%;flex-shrink:0}
-.code-file{font-size:12px;color:var(--text3);font-family:var(--mono);margin-left:8px}
-.code-lang-badge{font-size:9.5px;font-family:var(--mono);color:var(--text3);background:var(--surface3);padding:2px 8px;border-radius:3px;margin-left:auto}
-.code-body{padding:22px 26px;font-family:var(--mono);font-size:12.5px;line-height:2;overflow-x:auto}
-.cc{color:#3d4560}.ck{color:#c792ea}.cs{color:#c3e88d}.cf{color:#82aaff}.cy{color:var(--cyan)}.cd{color:#3d4560}
-
-/* CTA */
-.cta{padding:96px 0;text-align:center;position:relative;overflow:hidden}
-.cta-glow{position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(0,212,255,0.055) 0%,transparent 65%);pointer-events:none}
-.cta-title{font-size:44px;font-weight:900;letter-spacing:-0.03em;margin-bottom:16px}
-.cta-sub{font-size:15px;color:var(--text2);margin-bottom:40px}
-.cta-btns{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:36px}
-.cta-chips{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
-.cta-chip{font-size:11.5px;color:var(--text3);background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:5px 15px;display:flex;align-items:center;gap:6px}
-.cta-chip::before{content:'โ';color:var(--cyan);font-size:10px}
-
-/* FOOTER */
-.footer{background:var(--surface);border-top:1px solid var(--border);padding:36px 0}
-.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap}
-.footer-brand{display:flex;align-items:center;gap:10px}
-.footer-name{font-weight:700;font-size:14px;color:var(--cyan)}
-.footer-links{display:flex;gap:24px}
-.footer-link{font-size:12.5px;color:var(--text3);text-decoration:none;transition:color 0.15s}
-.footer-link:hover{color:var(--cyan)}
-.footer-copy{font-size:11px;color:var(--text3);font-family:var(--mono)}
-
-@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:0.5;transform:scale(0.8)}}
-@keyframes fadeRow{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:translateX(0)}}
-@keyframes fadeUp{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
-.au{animation:fadeUp 0.6s ease both}
-.au1{animation:fadeUp 0.6s 0.1s ease both}
-.au2{animation:fadeUp 0.6s 0.2s ease both}
-.au3{animation:fadeUp 0.6s 0.3s ease both}
-.au4{animation:fadeUp 0.6s 0.4s ease both}
-
-@media(max-width:1024px){.hero-inner{grid-template-columns:1fr}.preview{display:none}.feat-grid{grid-template-columns:1fr 1fr}.how-grid{grid-template-columns:1fr 1fr;gap:28px}.how-line{display:none}.stats-grid{grid-template-columns:1fr 1fr}}
-@media(max-width:768px){.hero-title{font-size:38px}.install-grid{grid-template-columns:1fr}.feat-grid{grid-template-columns:1fr}.threat{grid-template-columns:1fr;gap:12px}.threat-num{text-align:left}.stats-grid{grid-template-columns:1fr 1fr}}
-@media(max-width:480px){.stats-grid{grid-template-columns:1fr}.cta-title{font-size:30px}}
-`;
-
-// โโ LOGO (matches the real cubic TENET AI Dev logo style)
-const TenetLogo = ({ size = 32 }) => (
-
-);
-
-const Icons = {
- Shield:()=>,
- Zap:()=>,
- Download:()=>,
- GitHub:()=>,
- Terminal:()=>,
- Activity:()=>,
- Eye:()=>,
-};
-
-const LOGS = [
- {tag:"BLOCKED",tc:"#e63946",tb:"rgba(230,57,70,0.15)",msg:"prompt_injection ยท ignore_instructions",src:"api.prod"},
- {tag:"ALLOWED",tc:"#2dd4bf",tb:"rgba(45,212,191,0.12)",msg:"normal_query ยท risk_score:0.02",src:"chat.app"},
- {tag:"BLOCKED",tc:"#e63946",tb:"rgba(230,57,70,0.15)",msg:"jailbreak ยท DAN_mode variant",src:"agt.01"},
- {tag:"FLAGGED",tc:"#ffb703",tb:"rgba(255,183,3,0.12)",msg:"data_extraction ยท system_prompt probe",src:"api.dev"},
- {tag:"BLOCKED",tc:"#e63946",tb:"rgba(230,57,70,0.15)",msg:"role_manipulation ยท persona_override",src:"embed.01"},
- {tag:"ALLOWED",tc:"#2dd4bf",tb:"rgba(45,212,191,0.12)",msg:"normal_query ยท risk_score:0.01",src:"chat.app"},
-];
-
-function LiveLog() {
- const [lines, setLines] = useState(LOGS.slice(0,4));
- const [idx, setIdx] = useState(4);
- useEffect(()=>{
- const t = setInterval(()=>{
- setLines(p=>[...p.slice(-3), LOGS[idx%LOGS.length]]);
- setIdx(i=>i+1);
- },2400);
- return ()=>clearInterval(t);
- },[idx]);
- const now = new Date();
- const fmt = off => { const d=new Date(now-off*1000); return `${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}:${String(d.getSeconds()).padStart(2,'0')}`; };
- return (
-
- {lines.map((l,i)=>(
-
- {fmt((lines.length-1-i)*3)}
- {l.tag}
- {l.msg}
- {l.src}
-
- ))}
-
- );
-}
-
-function AnimNum({to,dur=1400}){
- const [v,setV]=useState(0); const ref=useRef(); const started=useRef(false);
- useEffect(()=>{
- const obs=new IntersectionObserver(([e])=>{
- if(e.isIntersecting&&!started.current){
- started.current=true;
- const steps=50;let s=0;
- const t=setInterval(()=>{ s++;setV(Math.round(to*Math.min(s/steps,1)));if(s>=steps)clearInterval(t); },dur/steps);
- }
- },{threshold:0.4});
- if(ref.current)obs.observe(ref.current);
- return()=>obs.disconnect();
- },[to]);
- return {v.toLocaleString()};
-}
-
-function FadeUp({children,delay=0,style={}}){
- const ref=useRef();const[vis,setVis]=useState(false);
- useEffect(()=>{
- const obs=new IntersectionObserver(([e])=>{if(e.isIntersecting){setVis(true);obs.disconnect();}},{threshold:0.08});
- if(ref.current)obs.observe(ref.current);
- return()=>obs.disconnect();
- },[]);
- return(
-
- {children}
-
- );
-}
-
-const THREATS = [
- {date:"FEB 2026",type:"JAILBREAK",title:"Mexican Government AI Breach",sev:"CRITICAL",sc:"#e63946",sb:"rgba(230,57,70,0.12)",stat:"195M",sl:"Records",desc:"Attacker chained jailbreak prompts through Claude to exfiltrate government records across 47 federal agencies. Role-play injection bypassed standard content filters over multiple sessions.",resp:"Detected 'act as elite hacker' + role-play chain. Blocked at 4ms. Session fingerprinted and terminated.",lc:"#e63946"},
- {date:"JAN 2026",type:"PROMPT INJECTION",title:"Fortune 500 Chatbot Compromise",sev:"HIGH",sc:"#ffb703",sb:"rgba(255,183,3,0.12)",stat:"$4.2M",sl:"Loss",desc:"Customer chatbot exploited via iterative prompt injection exposing internal pricing models and PII across 47 payload variations.",resp:"Detected structural similarity across 47 attempts. Auto-blocked after threshold. Risk score elevated progressively.",lc:"#ffb703"},
- {date:"DEC 2025",type:"JAILBREAK",title:"Healthcare Enterprise Breach",sev:"HIGH",sc:"#ffb703",sb:"rgba(255,183,3,0.12)",stat:"HIPAA",sl:"Violation",desc:"Internal clinical AI jailbroken via DAN mode granting unrestricted access to patient record queries across a hospital network.",resp:"Blocked jailbreak on attempt #1. Behavioral fingerprint added to shared threat feed in real-time.",lc:"#a78bfa"},
- {date:"NOV 2025",type:"IP EXTRACTION",title:"Corporate Algorithm Exfiltration",sev:"MEDIUM",sc:"#2dd4bf",sb:"rgba(45,212,191,0.12)",stat:"12",sl:"Sessions",desc:"Nation-state actor used 12 sessions of multi-turn context manipulation to gradually extract proprietary encryption algorithms from a coding assistant.",resp:"ML model detected anomaly at session 4. Full 12-session attack chain reconstructed for forensics.",lc:"#2dd4bf"},
-];
-
-const FEATURES = [
- {icon:"๐",bg:"var(--cyan-dim)",title:"Heuristic Detection",desc:"Zero-config pattern matching for known attack signatures โ prompt injection, jailbreaks, role manipulation out of the box.",tags:[{l:"<5ms",c:"cyan"},{l:"zero-config",c:"dim"}]},
- {icon:"๐ง ",bg:"var(--purple-dim)",title:"ML-Based Analysis",desc:"Trained classifier achieving >90% accuracy on adversarial datasets. Continuously improves from analyst feedback.",tags:[{l:">90% accuracy",c:"purple"},{l:"adaptive",c:"dim"}]},
- {icon:"๐",bg:"var(--amber-dim)",title:"Behavioral Analysis",desc:"Cross-session pattern tracking detects coordinated attacks and multi-turn manipulation chains that single-shot models miss.",tags:[{l:"cross-session",c:"amber"},{l:"anomaly detection",c:"dim"}]},
- {icon:"โก",bg:"var(--green-dim)",title:"Real-Time Policy Engine",desc:"Block, sanitize, flag, or allow โ configurable rules execute in under 10ms total overhead with zero LLM integration changes.",tags:[{l:"<10ms",c:"green"},{l:"configurable",c:"dim"}]},
- {icon:"๐",bg:"var(--cyan-dim)",title:"SOC Dashboard",desc:"Live threat feeds, attack timelines, risk score trends, and analyst workflows. Audit-ready for compliance teams.",tags:[{l:"real-time",c:"cyan"},{l:"SOC-ready",c:"dim"}]},
- {icon:"๐",bg:"var(--purple-dim)",title:"Universal Integration",desc:"LLM-agnostic middleware for OpenAI, Anthropic, Cohere, Ollama, and any local model. One API call in your existing stack.",tags:[{l:"any LLM",c:"purple"},{l:"one API call",c:"dim"}]},
-];
-
-const INSTALLS = [
- {icon:"๐",plat:"Python",title:"Python SDK",sub:"Async-first middleware for Python apps",cmd:"pip install tenet-ai",feats:["FastAPI / Django / Flask","LangChain & LlamaIndex","Full async/await support","Complete type hints"]},
- {icon:"๐ฆ",plat:"Node.js",title:"Node.js Package",sub:"TypeScript-native NPM package",cmd:"npm install @tenet-ai/sdk",feats:["Express / Next.js middleware","Cloudflare Workers support","TypeScript out of the box","Edge runtime compatible"]},
- {icon:"๐ณ",plat:"Docker",title:"Docker Image",sub:"Self-hosted REST API + SOC dashboard",cmd:"docker pull tenetai/core",feats:["One-command deployment","SOC dashboard included","Prometheus + Grafana ready","PostgreSQL + Redis bundled"]},
- {icon:"โ๏ธ",plat:"Cloud",title:"Cloud Templates",sub:"Infrastructure-as-code for all major clouds",cmd:"helm install tenet-ai ./chart",feats:["AWS Lambda layer","Azure Functions extension","GCP Cloud Run template","Kubernetes Helm chart"]},
-];
-
-const GITHUB = "https://github.com/TENET-DEV-AI/TENET-AI";
+import React from 'react';
+import Navbar from './components/Navbar';
+import Hero from './components/Hero';
+import StatsSection from './components/StatsSection';
+import UnifiedArchitectureSection from './components/UnifiedArchitectureSection';
+import FeaturesSection from './components/FeaturesSection';
+import DemoSection from './components/DemoSection';
+import ComparisonTable from './components/ComparisonTable';
+import BreachCards from './components/BreachCards';
+import InstallSection from './components/InstallSection';
+import CtaSection from './components/CtaSection';
+import Footer from './components/Footer';
export default function App() {
- const [tab,setTab] = useState("home");
- const [stars,setStars] = useState("3");
- const [bars,setBars] = useState([0,0,0,0]);
-
- useEffect(()=>{
- fetch("https://api.github.com/repos/TENET-DEV-AI/TENET-AI")
- .then(r=>r.json()).then(d=>{if(d.stargazers_count!=null)setStars(d.stargazers_count);}).catch(()=>{});
- setTimeout(()=>setBars([92,7,1,0.4]),700);
- },[]);
-
- const tagCss = c => ({
- color: c==="cyan"?"var(--cyan)":c==="purple"?"var(--purple)":c==="amber"?"var(--amber)":c==="green"?"var(--green)":"var(--text3)",
- background: c==="cyan"?"var(--cyan-dim)":c==="purple"?"var(--purple-dim)":c==="amber"?"var(--amber-dim)":c==="green"?"var(--green-dim)":"var(--surface3)",
- borderColor: c==="cyan"?"rgba(0,212,255,0.2)":c==="purple"?"rgba(167,139,250,0.2)":c==="amber"?"rgba(255,183,3,0.2)":c==="green"?"rgba(45,212,191,0.2)":"var(--border)",
- });
-
return (
- <>
-