From cd7e25df7f723794bef6b22a8adcd9e8ba20dcff Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:05:31 +0530 Subject: [PATCH 01/13] update IRIS.tsx --- client/app/Landing/IRIS.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index de3ca14..df5afd5 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -367,4 +367,4 @@ const IRIS = () => { ); }; -export default IRIS; +export default IRIS; \ No newline at end of file From b3bbf1cd234c67a2d2487a4a72dd52b3ec3ce604 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:05:45 +0530 Subject: [PATCH 02/13] feat: implement IRIS landing page with GSAP animations and scroll-triggered suspense components --- client/app/Landing/IRIS.tsx | 536 ++++++++++++++++++++++-------------- 1 file changed, 332 insertions(+), 204 deletions(-) diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index df5afd5..10f9a02 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -3,7 +3,6 @@ import gsap from "gsap"; import { useGSAP } from "@gsap/react"; import { ScrollTrigger } from "gsap/ScrollTrigger"; import Header from "../Components/Header"; -import { useRef, useState, useEffect } from "react"; import Footer from "../Components/Footer"; import Image from "next/image"; import LogoLoop from "../utils/LogoLoop"; @@ -25,10 +24,127 @@ import { RiGeminiFill } from "react-icons/ri"; import { BsAnthropic } from "react-icons/bs"; import { TbBrandSocketIo } from "react-icons/tb"; import IrisHero from "../Components/UI/IrisHero"; -import { MacbookScroll } from "../constants/MacbookScroll"; -import { ContainerScroll } from "../constants/ContainerScroll"; -import { IRISCompare } from "../Components/UI/IRISCompare"; -import SystemsSection from "../Components/UI/SystemSection"; +import React, { useRef, useState, useEffect, Suspense } from "react"; +import dynamic from "next/dynamic"; + +const MacbookScroll = dynamic( + () => import("../constants/MacbookScroll").then((m) => m.MacbookScroll), + { ssr: false }, +); +const ContainerScroll = dynamic( + () => import("../constants/ContainerScroll").then((m) => m.ContainerScroll), + { ssr: false }, +); +const IRISCompare = dynamic( + () => import("../Components/UI/IRISCompare").then((m) => m.IRISCompare), + { ssr: false }, +); +const SystemsSection = dynamic(() => import("../Components/UI/SystemSection"), { + ssr: false, +}); + +const NeonLoadingFallback = () => { + return ( +
+ + {/* Cool animated matrix grid background */} +
+ + {/* Scanline */} +
+ + {/* Loader */} +
+
+
+
+
+ +
+ LOADING COGNITIVE_LAYER... + + Buffer state: suspended + +
+
+
+ ); +}; + +interface SuspenseInViewProps { + children: React.ReactNode; + minHeight?: string; +} + +const SuspenseInView: React.FC = ({ + children, + minHeight = "min-h-screen", +}) => { + const ref = useRef(null); + const [inView, setInView] = useState(false); + + useEffect(() => { + const el = ref.current; + if (!el) return; + + const observer = new IntersectionObserver( + ([entry]) => { + setInView(entry.isIntersecting); + }, + { + threshold: 0.5, + rootMargin: "0px", + }, + ); + + observer.observe(el); + return () => { + observer.unobserve(el); + }; + }, []); + + useEffect(() => { + const timer = setTimeout(() => { + ScrollTrigger.refresh(); + }, 150); + return () => clearTimeout(timer); + }, [inView]); + + return ( +
+ {inView ? ( + }> +
{children}
+
+ ) : ( + + )} +
+ ); +}; gsap.registerPlugin(ScrollTrigger); @@ -149,217 +265,229 @@ const IRIS = () => { ref={contentRef} className="relative z-10 bg-black shadow-[0_-20px_50px_rgba(0,0,0,0.8)]" > -
- -

- Total System Control. -

-

- Run terminals, automate UI, link your phone, and execute deep - OS tasks hands-free. -

-
- } - badge={ - - Badge - - } - src={`/iris.png`} - showGradient={false} - /> - - -
- -

- Total command over your
- +
+ +

- Mobile Device. - -

-

- Read notifications, push files, and launch Android - applications directly from your desktop. -

- - } - > - IRIS Mobile Telekinesis +

+ Run terminals, automate UI, link your phone, and execute + deep OS tasks hands-free. +

+

+ } + badge={ + + Badge + + } + src={`/iris.png`} + showGradient={false} /> - - - -
-

- Built with a bleeding-edge modern stack -

- -
- -
-
-

- Rewritten for Speed. -

-

- v1.3 was a buggy prototype. The new engine is instantaneous, - stable, and completely native. -

-
- -
- -
-
- -
-
- -
-
- -
-
-
- -
-

+ + + +
+ +

+ Total command over your
+ + Mobile Device. + +

+

+ Read notifications, push files, and launch Android + applications directly from your desktop. +

+ + } > - Built to Execute. -

-

- Lightning-fast voice response and massive context memory. -

-
-
- Try IRIS AI -
- -
- 3D tech elements + +
+ + + +
+

+ Built with a bleeding-edge modern stack +

+ -
- -
-
-
- - IRIS - - - Wake Word - -
+ + -
- - <1s - - - Voice Latency - -
+ +
+
+

+ Rewritten for Speed. +

+

+ v1.3 was a buggy prototype. The new engine is instantaneous, + stable, and completely native. +

+
-
- - 1M+ - - - Context Window - -
+
+ +
+
+
+ + +
+
+ +
+
+
+ + +
+
+
+ +
+

+ Built to Execute. +

+

+ Lightning-fast voice response and massive context memory. +

+
+
+ Try IRIS AI +
-
- Try IRIS AI +
+ 3D tech elements +
+ +
+
+
+ + IRIS + + + Wake Word + +
+ +
+ + <1s + + + Voice Latency + +
+ +
+ + 1M+ + + + Context Window + +
+ +
+ Try IRIS AI +
-
-
+ +
@@ -367,4 +495,4 @@ const IRIS = () => { ); }; -export default IRIS; \ No newline at end of file +export default IRIS; From f49105072a45e7ab13322cb11b441f492c0e1105 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:06:30 +0530 Subject: [PATCH 03/13] feat: implement new IRIS landing page with GSAP animations and feature showcases --- client/app/Landing/IRIS.tsx | 536 ++++++++++++++---------------------- 1 file changed, 204 insertions(+), 332 deletions(-) diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index 10f9a02..df5afd5 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -3,6 +3,7 @@ import gsap from "gsap"; import { useGSAP } from "@gsap/react"; import { ScrollTrigger } from "gsap/ScrollTrigger"; import Header from "../Components/Header"; +import { useRef, useState, useEffect } from "react"; import Footer from "../Components/Footer"; import Image from "next/image"; import LogoLoop from "../utils/LogoLoop"; @@ -24,127 +25,10 @@ import { RiGeminiFill } from "react-icons/ri"; import { BsAnthropic } from "react-icons/bs"; import { TbBrandSocketIo } from "react-icons/tb"; import IrisHero from "../Components/UI/IrisHero"; -import React, { useRef, useState, useEffect, Suspense } from "react"; -import dynamic from "next/dynamic"; - -const MacbookScroll = dynamic( - () => import("../constants/MacbookScroll").then((m) => m.MacbookScroll), - { ssr: false }, -); -const ContainerScroll = dynamic( - () => import("../constants/ContainerScroll").then((m) => m.ContainerScroll), - { ssr: false }, -); -const IRISCompare = dynamic( - () => import("../Components/UI/IRISCompare").then((m) => m.IRISCompare), - { ssr: false }, -); -const SystemsSection = dynamic(() => import("../Components/UI/SystemSection"), { - ssr: false, -}); - -const NeonLoadingFallback = () => { - return ( -
- - {/* Cool animated matrix grid background */} -
- - {/* Scanline */} -
- - {/* Loader */} -
-
-
-
-
- -
- LOADING COGNITIVE_LAYER... - - Buffer state: suspended - -
-
-
- ); -}; - -interface SuspenseInViewProps { - children: React.ReactNode; - minHeight?: string; -} - -const SuspenseInView: React.FC = ({ - children, - minHeight = "min-h-screen", -}) => { - const ref = useRef(null); - const [inView, setInView] = useState(false); - - useEffect(() => { - const el = ref.current; - if (!el) return; - - const observer = new IntersectionObserver( - ([entry]) => { - setInView(entry.isIntersecting); - }, - { - threshold: 0.5, - rootMargin: "0px", - }, - ); - - observer.observe(el); - return () => { - observer.unobserve(el); - }; - }, []); - - useEffect(() => { - const timer = setTimeout(() => { - ScrollTrigger.refresh(); - }, 150); - return () => clearTimeout(timer); - }, [inView]); - - return ( -
- {inView ? ( - }> -
{children}
-
- ) : ( - - )} -
- ); -}; +import { MacbookScroll } from "../constants/MacbookScroll"; +import { ContainerScroll } from "../constants/ContainerScroll"; +import { IRISCompare } from "../Components/UI/IRISCompare"; +import SystemsSection from "../Components/UI/SystemSection"; gsap.registerPlugin(ScrollTrigger); @@ -265,229 +149,217 @@ const IRIS = () => { ref={contentRef} className="relative z-10 bg-black shadow-[0_-20px_50px_rgba(0,0,0,0.8)]" > - -
- -

+ +

+ Total System Control. +

+

+ Run terminals, automate UI, link your phone, and execute deep + OS tasks hands-free. +

+

+ } + badge={ + + Badge + + } + src={`/iris.png`} + showGradient={false} + /> + + +
+ +

+ Total command over your
+ - Total System Control. -

-

- Run terminals, automate UI, link your phone, and execute - deep OS tasks hands-free. -

-
- } - badge={ - - Badge - - } - src={`/iris.png`} - showGradient={false} + Mobile Device. + + +

+ Read notifications, push files, and launch Android + applications directly from your desktop. +

+ + } + > + IRIS Mobile Telekinesis - - - - -
- -

- Total command over your
- - Mobile Device. - -

-

- Read notifications, push files, and launch Android - applications directly from your desktop. -

- - } +
+
+ +
+

+ Built with a bleeding-edge modern stack +

+ +
+ +
+
+

- IRIS Mobile Telekinesis - -

-
- - -
-

- Built with a bleeding-edge modern stack -

- +

+ v1.3 was a buggy prototype. The new engine is instantaneous, + stable, and completely native. +

+
+ +
+ +
+ + +
+
+ +
+
+ +
+
+
+ +
+

+ Built to Execute. +

+

+ Lightning-fast voice response and massive context memory. +

+
+
+ Try IRIS AI -
- - - -
-
-

- Rewritten for Speed. -

-

- v1.3 was a buggy prototype. The new engine is instantaneous, - stable, and completely native. -

-
- -
- -
-
-
- - -
-
- -
-
-
- - -
-
-
- -
-

- Built to Execute. -

-

- Lightning-fast voice response and massive context memory. -

-
-
- Try IRIS AI -
- -
- 3D tech elements -
- -
-
-
- - IRIS - - - Wake Word - -
+
+ +
+ 3D tech elements +
+ +
+
+
+ + IRIS + + + Wake Word + +
-
- - <1s - - - Voice Latency - -
+
+ + <1s + + + Voice Latency + +
-
- - 1M+ - - - Context Window - -
+
+ + 1M+ + + + Context Window + +
-
- Try IRIS AI -
+
+ Try IRIS AI
-
-
+
+
@@ -495,4 +367,4 @@ const IRIS = () => { ); }; -export default IRIS; +export default IRIS; \ No newline at end of file From a9a93356868c5e3ce5af529b2f334c56d77f6016 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:06:52 +0530 Subject: [PATCH 04/13] feat: add new landing page with GSAP animations and tech stack overview --- client/app/Landing/IRIS.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index df5afd5..de3ca14 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -367,4 +367,4 @@ const IRIS = () => { ); }; -export default IRIS; \ No newline at end of file +export default IRIS; From b133fb16d84b1e6d7fde735f745e232488733f79 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:14:16 +0530 Subject: [PATCH 05/13] feat: implement IRIS landing page with GSAP animations and feature showcases --- client/app/Landing/IRIS.tsx | 43 ++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index de3ca14..4b505bd 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -3,7 +3,7 @@ import gsap from "gsap"; import { useGSAP } from "@gsap/react"; import { ScrollTrigger } from "gsap/ScrollTrigger"; import Header from "../Components/Header"; -import { useRef, useState, useEffect } from "react"; +import { useRef, useState, lazy, Suspense } from "react"; import Footer from "../Components/Footer"; import Image from "next/image"; import LogoLoop from "../utils/LogoLoop"; @@ -24,7 +24,7 @@ import { PiOpenAiLogo } from "react-icons/pi"; import { RiGeminiFill } from "react-icons/ri"; import { BsAnthropic } from "react-icons/bs"; import { TbBrandSocketIo } from "react-icons/tb"; -import IrisHero from "../Components/UI/IrisHero"; +const IrisHero = lazy(() => import("../Components/UI/IrisHero")); import { MacbookScroll } from "../constants/MacbookScroll"; import { ContainerScroll } from "../constants/ContainerScroll"; import { IRISCompare } from "../Components/UI/IRISCompare"; @@ -40,16 +40,6 @@ const IRIS = () => { const [isHeroVisible, setIsHeroVisible] = useState(true); const [isHeroActive, setIsHeroActive] = useState(true); - useEffect(() => { - let timeout: NodeJS.Timeout; - if (isHeroVisible) { - setIsHeroActive(true); - } else { - timeout = setTimeout(() => setIsHeroActive(false), 700); - } - return () => clearTimeout(timeout); - }, [isHeroVisible]); - const actualTechLogos = [ { node: , @@ -131,6 +121,19 @@ const IRIS = () => { start: "top top", onEnter: () => setIsHeroVisible(false), onLeaveBack: () => setIsHeroVisible(true), + onRefresh: (self) => { + setIsHeroVisible(self.scroll() < self.start); + }, + }); + + ScrollTrigger.create({ + trigger: contentRef.current, + start: "top -100%", + onEnter: () => setIsHeroActive(false), + onLeaveBack: () => setIsHeroActive(true), + onRefresh: (self) => { + setIsHeroActive(self.scroll() < self.start); + }, }); }, { scope: containerRef }, @@ -139,11 +142,17 @@ const IRIS = () => { return (
- + {isHeroActive && ( + } + > + + + )}
Date: Sat, 20 Jun 2026 20:04:09 +0530 Subject: [PATCH 06/13] feat: implement IRIS landing page and hero section with voice control UI and tech stack display --- client/app/Components/UI/IrisHero.tsx | 26 ++++++++++++++------------ client/app/Landing/IRIS.tsx | 20 +++++++------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/client/app/Components/UI/IrisHero.tsx b/client/app/Components/UI/IrisHero.tsx index 7d96853..98307eb 100644 --- a/client/app/Components/UI/IrisHero.tsx +++ b/client/app/Components/UI/IrisHero.tsx @@ -24,17 +24,19 @@ export default function IrisHero({ className="hero-section sticky top-0 h-screen w-full flex flex-col justify-center items-center z-0 overflow-hidden bg-black" >
- + {isHeroActive && ( + + )}
- + {isHeroActive && }
diff --git a/client/app/Landing/IRIS.tsx b/client/app/Landing/IRIS.tsx index 4b505bd..51f965a 100644 --- a/client/app/Landing/IRIS.tsx +++ b/client/app/Landing/IRIS.tsx @@ -3,7 +3,7 @@ import gsap from "gsap"; import { useGSAP } from "@gsap/react"; import { ScrollTrigger } from "gsap/ScrollTrigger"; import Header from "../Components/Header"; -import { useRef, useState, lazy, Suspense } from "react"; +import { useRef, useState } from "react"; import Footer from "../Components/Footer"; import Image from "next/image"; import LogoLoop from "../utils/LogoLoop"; @@ -24,7 +24,7 @@ import { PiOpenAiLogo } from "react-icons/pi"; import { RiGeminiFill } from "react-icons/ri"; import { BsAnthropic } from "react-icons/bs"; import { TbBrandSocketIo } from "react-icons/tb"; -const IrisHero = lazy(() => import("../Components/UI/IrisHero")); +import IrisHero from "../Components/UI/IrisHero"; import { MacbookScroll } from "../constants/MacbookScroll"; import { ContainerScroll } from "../constants/ContainerScroll"; import { IRISCompare } from "../Components/UI/IRISCompare"; @@ -142,17 +142,11 @@ const IRIS = () => { return (
- {isHeroActive && ( - } - > - - - )} +
Date: Sat, 20 Jun 2026 20:04:43 +0530 Subject: [PATCH 07/13] update IrisHero.tsx --- client/app/Components/UI/IrisHero.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/app/Components/UI/IrisHero.tsx b/client/app/Components/UI/IrisHero.tsx index 98307eb..bda9a94 100644 --- a/client/app/Components/UI/IrisHero.tsx +++ b/client/app/Components/UI/IrisHero.tsx @@ -107,7 +107,7 @@ export default function IrisHero({
} iconRight={ From 303c9a7cca0b181ffa357229e92da2c081fe68f6 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:05:23 +0530 Subject: [PATCH 08/13] docs: update SECURITY.md --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index f3d44c9..ffd09be 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -82,4 +82,4 @@ We are highly interested in reports regarding: ## Bug Bounties -IRIS is a labor of love and an open-source initiative. There is currently no bug bounty program and no budget for paid reports. Please still disclose responsibly so we can secure the engine for the community. The best way to help the project right now is by responsibly disclosing and submitting PRs. \ No newline at end of file +IRIS is a labor of love and an open-source initiative. There is currently no bug bounty program and no budget for paid reports. Please still disclose responsibly so we can secure the engine for the community. The best way to help the project right now is by responsibly disclosing and submitting PRs. From 10b0f488dc08fa0e3e3b675f31b27f9f94445856 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:05:43 +0530 Subject: [PATCH 09/13] chore: add server directory to gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6da34fd..db770ba 100644 --- a/.gitignore +++ b/.gitignore @@ -169,4 +169,5 @@ yarn-error.log* .vercel *.tsbuildinfo -next-env.d.ts \ No newline at end of file +next-env.d.ts +server \ No newline at end of file From 9a5d8728bcd08dcfeef6304904e1410093d224c1 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:05:59 +0530 Subject: [PATCH 10/13] update server/api/index.ts --- server/api/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/api/index.ts b/server/api/index.ts index eb4248e..8a8c2a4 100644 --- a/server/api/index.ts +++ b/server/api/index.ts @@ -3,5 +3,4 @@ import app from "../src/index.js"; export default function handler(req: Request, res: Response) { return app(req, res); -} - +} \ No newline at end of file From 9a5b4ee53a6d128be065481d9e97b70689c9d75b Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:06:12 +0530 Subject: [PATCH 11/13] update AxiosInstacne.ts --- client/config/AxiosInstacne.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/AxiosInstacne.ts b/client/config/AxiosInstacne.ts index 98232dd..2547928 100644 --- a/client/config/AxiosInstacne.ts +++ b/client/config/AxiosInstacne.ts @@ -5,4 +5,4 @@ const AxiosInstance = axios.create({ withCredentials: true, }); -export default AxiosInstance; \ No newline at end of file +export default AxiosInstance; From ef67a0d9323dbe434ca689a43b351f5a58f2c1be Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:06:32 +0530 Subject: [PATCH 12/13] chore: delete docs_banner.jpeg --- assets/{docs_banner.jpeg => docs_banner-old.jpeg} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{docs_banner.jpeg => docs_banner-old.jpeg} (100%) diff --git a/assets/docs_banner.jpeg b/assets/docs_banner-old.jpeg similarity index 100% rename from assets/docs_banner.jpeg rename to assets/docs_banner-old.jpeg From b99e33e985f5a6e31fd7bf619d869c549568a634 Mon Sep 17 00:00:00 2001 From: Harsh Pandey <160850571+201Harsh@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:06:45 +0530 Subject: [PATCH 13/13] chore: update documentation banner image path in README Co-authored-by: IRIS Ops --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fa44263..de9673d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
-![IRIS Neural OS Documentation Banner](./assets/docs_banner.jpeg) +![IRIS Neural OS Documentation Banner](./assets/docs_banner-old.jpeg) ## The Autonomous Neural OS Agent