Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse files- README.md +9 -0
- frontend/src/app/architecture/page.tsx +57 -33
- frontend/src/app/layout.tsx +2 -0
README.md
CHANGED
|
@@ -11,6 +11,15 @@ pinned: false
|
|
| 11 |
<h1>HeartFlow OS</h1>
|
| 12 |
<p><strong>Cardiovascular Telemetry & Edge MLOps Engine</strong></p>
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
<p>
|
| 15 |
<img src="https://img.shields.io/badge/Next.js-16+-black.svg?style=for-the-badge&logo=next.js" alt="Next.js" />
|
| 16 |
<img src="https://img.shields.io/badge/React-19-61DAFB.svg?style=for-the-badge&logo=react&logoColor=black" alt="React" />
|
|
|
|
| 11 |
<h1>HeartFlow OS</h1>
|
| 12 |
<p><strong>Cardiovascular Telemetry & Edge MLOps Engine</strong></p>
|
| 13 |
|
| 14 |
+
<p>
|
| 15 |
+
<a href="https://huggingface.co/spaces/IDKHowToCodeFR/HEARTFLOW_OS" target="_blank">
|
| 16 |
+
<img src="https://img.shields.io/badge/🤗_HuggingFace-Live_Demo-FFD21E.svg?style=for-the-badge" alt="Hugging Face Space" />
|
| 17 |
+
</a>
|
| 18 |
+
<a href="https://heartflow-os.vercel.app" target="_blank">
|
| 19 |
+
<img src="https://img.shields.io/badge/🌐_Website-Live_App-black.svg?style=for-the-badge&logo=vercel" alt="Live Website" />
|
| 20 |
+
</a>
|
| 21 |
+
</p>
|
| 22 |
+
|
| 23 |
<p>
|
| 24 |
<img src="https://img.shields.io/badge/Next.js-16+-black.svg?style=for-the-badge&logo=next.js" alt="Next.js" />
|
| 25 |
<img src="https://img.shields.io/badge/React-19-61DAFB.svg?style=for-the-badge&logo=react&logoColor=black" alt="React" />
|
frontend/src/app/architecture/page.tsx
CHANGED
|
@@ -17,14 +17,34 @@ const fadeUp = {
|
|
| 17 |
show: { opacity: 1, y: 0, transition: { duration: 0.8, ease: easeFluid } }
|
| 18 |
};
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
export default function Architecture() {
|
| 21 |
return (
|
| 22 |
-
<main className="min-h-[100dvh] bg-canvas-cream flex flex-col font-mono selection:bg-hazard selection:text-white pb-16">
|
| 23 |
<motion.div
|
| 24 |
variants={staggerContainer}
|
| 25 |
initial="hidden"
|
| 26 |
animate="show"
|
| 27 |
-
className="max-w-[
|
| 28 |
>
|
| 29 |
<motion.header variants={fadeUp} className="mb-8 md:mb-12 border-b-4 border-ink pb-8 flex justify-between items-end">
|
| 30 |
<div>
|
|
@@ -37,40 +57,44 @@ export default function Architecture() {
|
|
| 37 |
</div>
|
| 38 |
</motion.header>
|
| 39 |
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
<
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
</motion.div>
|
| 57 |
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
|
| 67 |
-
|
| 68 |
-
<h2 className="text-[16px] md:text-[18px] font-sans font-black tracking-[-0.02em] uppercase text-ink mb-6 border-b-2 border-ink pb-4">
|
| 69 |
-
[ 04 ] Edge Compilation (TinyML)
|
| 70 |
-
</h2>
|
| 71 |
-
<p className="text-[13px] md:text-[14px] text-slate uppercase leading-relaxed mb-4">
|
| 72 |
-
The backend transpiles trained SciKit-Learn tree models directly into standalone zero-dependency C-headers (`model.h`). Floating-point thresholds are quantized to INT8, shrinking payload footprints by ~75%. A PlatformIO firmware wrapper handles deployment to ESP32/Arduino, guaranteed by an automated structural integrity testing script.
|
| 73 |
-
</p>
|
| 74 |
</motion.div>
|
| 75 |
</motion.div>
|
| 76 |
</main>
|
|
|
|
| 17 |
show: { opacity: 1, y: 0, transition: { duration: 0.8, ease: easeFluid } }
|
| 18 |
};
|
| 19 |
|
| 20 |
+
const BlueprintNode = ({ title, desc, pulse = false }: { title: string, desc: string, pulse?: boolean }) => (
|
| 21 |
+
<motion.div
|
| 22 |
+
whileHover={{ x: 5 }}
|
| 23 |
+
className="border border-slate/30 bg-ink/50 p-4 relative group hover:border-hazard transition-colors cursor-default"
|
| 24 |
+
>
|
| 25 |
+
{pulse && (
|
| 26 |
+
<div className="absolute right-4 top-1/2 -translate-y-1/2 flex items-center justify-center">
|
| 27 |
+
<motion.div
|
| 28 |
+
animate={{ scale: [1, 2, 1], opacity: [0.8, 0, 0.8] }}
|
| 29 |
+
transition={{ duration: 1.5, repeat: Infinity, ease: "easeInOut" }}
|
| 30 |
+
className="absolute w-3 h-3 bg-hazard rounded-full"
|
| 31 |
+
/>
|
| 32 |
+
<div className="w-1.5 h-1.5 bg-hazard rounded-full relative z-10" />
|
| 33 |
+
</div>
|
| 34 |
+
)}
|
| 35 |
+
<div className="text-[10px] text-slate tracking-[0.1em] mb-1 uppercase">{desc}</div>
|
| 36 |
+
<div className="text-[14px] text-white font-bold tracking-tight uppercase">{title}</div>
|
| 37 |
+
</motion.div>
|
| 38 |
+
);
|
| 39 |
+
|
| 40 |
export default function Architecture() {
|
| 41 |
return (
|
| 42 |
+
<main className="min-h-[100dvh] bg-canvas-cream flex flex-col font-mono selection:bg-hazard selection:text-white pb-16 overflow-x-hidden">
|
| 43 |
<motion.div
|
| 44 |
variants={staggerContainer}
|
| 45 |
initial="hidden"
|
| 46 |
animate="show"
|
| 47 |
+
className="max-w-[1200px] mx-auto w-full px-4 md:px-8 py-8 md:py-16 flex-1 flex flex-col"
|
| 48 |
>
|
| 49 |
<motion.header variants={fadeUp} className="mb-8 md:mb-12 border-b-4 border-ink pb-8 flex justify-between items-end">
|
| 50 |
<div>
|
|
|
|
| 57 |
</div>
|
| 58 |
</motion.header>
|
| 59 |
|
| 60 |
+
{/* Live Hardware Blueprint */}
|
| 61 |
+
<motion.div variants={fadeUp} className="w-full bg-ink p-8 md:p-12 mb-16 relative font-mono overflow-hidden border-2 border-ink shadow-[8px_8px_0px_0px_rgba(242,56,39,1)]">
|
| 62 |
+
{/* Animated Scanning Line */}
|
| 63 |
+
<motion.div
|
| 64 |
+
animate={{ top: ["-10%", "110%"] }}
|
| 65 |
+
transition={{ duration: 8, ease: "linear", repeat: Infinity }}
|
| 66 |
+
className="absolute left-0 right-0 h-32 bg-gradient-to-b from-transparent via-hazard/10 to-transparent pointer-events-none z-0"
|
| 67 |
+
/>
|
| 68 |
+
|
| 69 |
+
<div className="relative z-10 flex flex-col lg:flex-row gap-12 lg:gap-16 items-stretch">
|
| 70 |
+
|
| 71 |
+
{/* Stage 1: Ingestion */}
|
| 72 |
+
<div className="flex-1 flex flex-col gap-6 border-l-2 border-slate/30 pl-6 relative">
|
| 73 |
+
<div className="absolute -left-[5px] top-0 w-2 h-2 bg-hazard" />
|
| 74 |
+
<div className="text-[10px] text-hazard tracking-[0.2em] font-bold">PHASE_01 // INGESTION</div>
|
| 75 |
+
<BlueprintNode title="PATIENT SENSORS" desc="60Hz Telemetry Stream" pulse />
|
| 76 |
+
<BlueprintNode title="CLIENT UI" desc="Next.js 16 / React 19" />
|
| 77 |
+
<BlueprintNode title="CSV BATCH" desc="Offline Dataset Upload" />
|
| 78 |
+
</div>
|
| 79 |
|
| 80 |
+
{/* Stage 2: Processing */}
|
| 81 |
+
<div className="flex-1 flex flex-col gap-6 border-l-2 border-slate/30 pl-6 relative">
|
| 82 |
+
<div className="absolute -left-[5px] top-0 w-2 h-2 bg-hazard" />
|
| 83 |
+
<div className="text-[10px] text-hazard tracking-[0.2em] font-bold">PHASE_02 // CORE_ROUTER</div>
|
| 84 |
+
<BlueprintNode title="FASTAPI SERVER" desc="Async WebSockets & REST" pulse />
|
| 85 |
+
<BlueprintNode title="SQLITE DB" desc="Aiosqlite Async Storage" />
|
| 86 |
+
</div>
|
|
|
|
| 87 |
|
| 88 |
+
{/* Stage 3: Inference & Compilation */}
|
| 89 |
+
<div className="flex-1 flex flex-col gap-6 border-l-2 border-slate/30 pl-6 relative">
|
| 90 |
+
<div className="absolute -left-[5px] top-0 w-2 h-2 bg-hazard" />
|
| 91 |
+
<div className="text-[10px] text-hazard tracking-[0.2em] font-bold">PHASE_03 // EDGE_INTELLIGENCE</div>
|
| 92 |
+
<BlueprintNode title="SCIKIT-LEARN" desc="Soft-Voting Ensemble" pulse />
|
| 93 |
+
<BlueprintNode title="AST COMPILER" desc="Python to C Transpiler" />
|
| 94 |
+
<BlueprintNode title="ESP32 HARDWARE" desc="Zero-Dep C Firmware" pulse />
|
| 95 |
+
</div>
|
| 96 |
|
| 97 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
</motion.div>
|
| 99 |
</motion.div>
|
| 100 |
</main>
|
frontend/src/app/layout.tsx
CHANGED
|
@@ -56,6 +56,8 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
| 56 |
© 2026 HEARTFLOW_OS. TELEMETRY_SYS.
|
| 57 |
</div>
|
| 58 |
<div className="flex flex-wrap items-center justify-center gap-4 md:gap-8">
|
|
|
|
|
|
|
| 59 |
<Link href="/architecture" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">ARCHITECTURE.MD</Link>
|
| 60 |
<a href={`${process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000"}/docs`} target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">API_DOCS</a>
|
| 61 |
<a href="https://github.com/IDKHowToCodeFR/HEARTFLOW_OS" target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">GITHUB_REPO</a>
|
|
|
|
| 56 |
© 2026 HEARTFLOW_OS. TELEMETRY_SYS.
|
| 57 |
</div>
|
| 58 |
<div className="flex flex-wrap items-center justify-center gap-4 md:gap-8">
|
| 59 |
+
<a href="https://huggingface.co/spaces/IDKHowToCodeFR/HEARTFLOW_OS" target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">HUGGING_FACE</a>
|
| 60 |
+
<a href="https://heartflow-os.vercel.app" target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">LIVE_APP</a>
|
| 61 |
<Link href="/architecture" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">ARCHITECTURE.MD</Link>
|
| 62 |
<a href={`${process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000"}/docs`} target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">API_DOCS</a>
|
| 63 |
<a href="https://github.com/IDKHowToCodeFR/HEARTFLOW_OS" target="_blank" rel="noopener noreferrer" className="text-[12px] font-bold tracking-[0.05em] uppercase text-ink hover:text-hazard transition-colors">GITHUB_REPO</a>
|