+ Embedded within the data plane, eBPF programs enable
+ high-performance, granular control over service requests.
+
+
+ */}
@@ -214,11 +202,7 @@ const Catalog = () => {
-
+
@@ -227,4 +211,4 @@ const Catalog = () => {
);
};
-export default Catalog;
+export default Catalog;
\ No newline at end of file
diff --git a/src/sections/Pricing/feature_data.json b/src/sections/Pricing/feature_data.json
index d216e3991956e..c776453f50141 100644
--- a/src/sections/Pricing/feature_data.json
+++ b/src/sections/Pricing/feature_data.json
@@ -429,7 +429,7 @@
"teamOperator": "x",
"enterprise": "x"
},
- "docs": "https://docs.layer5.io/kanvas/designer/whiteboarding/#step-3-utilizing-whiteboard-tools"
+ "docs": ""
},
{
"theme": "",
@@ -1181,7 +1181,7 @@
"teamOperator": "",
"enterprise": "x"
},
- "docs": "https://docs.layer5.io/cloud/self-hosted/planning/peer-to-peer-communication/"
+ "docs": ""
},
{
"theme": "",
From 09796f306b080ee0af668c7b71b63546893b1e79 Mon Sep 17 00:00:00 2001
From: AasthathecoderX
Date: Wed, 31 Dec 2025 19:08:45 +0530
Subject: [PATCH 4/6] Reverted changes in index.js and introduced new SEO
changes
Signed-off-by: AasthathecoderX
---
src/sections/Home/Banner/index.js | 62 +++-----
.../Kanvas-design/kanvas-design-hero.js | 138 ++++++++++--------
.../kanvas-design-integrations.js | 82 ++++-------
3 files changed, 122 insertions(+), 160 deletions(-)
diff --git a/src/sections/Home/Banner/index.js b/src/sections/Home/Banner/index.js
index 5e9919432fd01..3bcc21d06d9de 100644
--- a/src/sections/Home/Banner/index.js
+++ b/src/sections/Home/Banner/index.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from "react";
+import React, { useEffect } from "react";
import Banner4 from "../Banner-4";
import Banner3 from "../Banner-3";
import Banner2 from "../Banner-2";
@@ -7,54 +7,34 @@ import Banner1 from "../Banner-1";
const BannersCount = 4;
const RotationalBanner = () => {
- const [initialValue, setInitialValue] = useState(1);
+ let initialValue;
+ try {
+ initialValue = sessionStorage.getItem("banner") || 1;
+ } catch (error) {
+ console.error("Error in sessionStorage.getItem('banner'):", error);
+ initialValue = 1;
+ }
- // Initialize banner value only in browser, not during SSR
useEffect(() => {
- if (typeof window !== 'undefined') {
- try {
- const bannerValue = window.sessionStorage.getItem("banner") || 1;
- setInitialValue(bannerValue);
- } catch (error) {
- console.error("Error in sessionStorage.getItem('banner'):", error);
- setInitialValue(1);
- }
+ let val = sessionStorage.getItem("banner");
+ let currentClass = `banner${val}`;
+ let replaceClass = `banner${val - 1 == 0 ? 4 : val - 1}`;
+ if (!document.body.classList.contains(currentClass)) {
+ document.body.classList.replace(replaceClass, currentClass);
}
- }, []);
-
- // Handle banner rotation in browser only
- useEffect(() => {
- if (typeof window !== 'undefined') {
- try {
- let val = window.sessionStorage.getItem("banner");
- let currentClass = `banner${val}`;
- let replaceClass = `banner${val - 1 == 0 ? 4 : val - 1}`;
-
- if (!document.body.classList.contains(currentClass)) {
- document.body.classList.replace(replaceClass, currentClass);
- }
-
- if (window.sessionStorage.getItem("banner")) {
- window.sessionStorage.setItem(
- "banner",
- (Number(initialValue) % BannersCount) + 1
- );
- } else {
- window.sessionStorage.setItem("banner", 2);
- }
- } catch (error) {
- console.error("Error managing banners:", error);
- }
+ if (sessionStorage.getItem("banner")) {
+ sessionStorage.setItem("banner", (Number(initialValue) % BannersCount) + 1);
+ } else {
+ sessionStorage.setItem("banner", 2);
}
- }, [initialValue]);
+ }, []);
/*
NOTE:
- When adding a new banner to the below list, update the "BannersCount" value at line: 7 and add a className prop with the value updated to reflect the new count.
- That sanitizeShrinkWidth, if the current count is 4 and a new banner is added then the className for the new banner should be "banner5", have the default `display`
- as `none` in the stylesheet for the banner and add a style definition in `src/sections/app.styles.js` to show the banner based on class assigned to `body` tag.
+ When adding a new banner to the below list, update the "BannersCount" value at line: 7 and add a className prop with the value updated to reflect the new count.
+ That sanitizeShrinkWidth, if the current count is 4 and a new banner is added then the className for the new banner should be "banner5", have the default `display`
+ as `none` in the stylesheet for the banner and add a style definition in `src/sections/app.styles.js` to show the banner based on class assigned to `body` tag.
*/
-
return (
<>
diff --git a/src/sections/Kanvas/Kanvas-design/kanvas-design-hero.js b/src/sections/Kanvas/Kanvas-design/kanvas-design-hero.js
index 0fbdacf50a9cc..883aec8c6f7ef 100644
--- a/src/sections/Kanvas/Kanvas-design/kanvas-design-hero.js
+++ b/src/sections/Kanvas/Kanvas-design/kanvas-design-hero.js
@@ -9,95 +9,105 @@ import { useState } from "react";
import { useStyledDarkMode } from "../../../theme/app/useStyledDarkMode";
const HeroSectionWrapper = styled.div`
+ display: flex;
+ flex-direction: row;
+ background-color: ${(props) => props.theme.grey121212ToWhite};
+ width: 100%;
+ justify-content: space-evenly;
+ align-items: center;
+ padding: 3% 5% 8%;
+ transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1);
+ @media only screen and (max-width: 767px) {
+ text-align: center;
+ flex-direction: column-reverse;
+ }
+
+ .hero-text {
display: flex;
- flex-direction: row;
- background-color: ${props => props.theme.grey121212ToWhite};;
- width: 100%;
- justify-content: space-evenly;
- align-items: center;
- padding: 3% 5% 8%;
- transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1);
+ flex-direction: column;
+ flex: 0 0 35%;
+ margin-top: 5%;
@media only screen and (max-width: 767px) {
- text-align: center;
- flex-direction: column-reverse;
+ max-width: 100%;
+ margin-top: 15%;
}
+ }
+
+ h2 {
+ padding-bottom: 2%;
+ }
+
+ .hero-image {
+ display: grid;
+ grid-template-rows: 5rem 5rem;
+ place-items: center;
+ margin: 5% 0;
+ flex: 0 0 50%;
+ max-width: 60%;
- .hero-text {
- display: flex;
- flex-direction: column;
- flex: 0 0 35%;
- margin-top: 5%;
- @media only screen and (max-width: 767px) {
- max-width: 100%;
- margin-top: 15%;
- }
+ @media only screen and (max-width: 767px) {
+ max-width: 100%;
}
- h2 {
- padding-bottom: 2%;
+ .locator {
+ /* transform: translateY(-5rem); */
+ transition: 1s;
+ z-index: 1;
}
- .hero-image {
- display: grid;
- grid-template-rows: 5rem 5rem;
- place-items: center;
- margin: 5% 0;
- flex: 0 0 50%;
- max-width: 60%;
- @media only screen and (max-width: 767px) {
- max-width: 100%;
- }
-
- .locator {
- /* transform: translateY(-5rem); */
- transition: 1s;
- z-index: 1;
- }
- .locator-moving {
- transform: translateY(5rem);
- transition: 1s;
- z-index: 1;
- }
-
- .map {
- opacity: 0;
- transition: opacity ease 0.5s;
- z-index: 0;
- }
- .map-visible {
- opacity: 1;
- transition: opacity 1s ease 0.5s;
- }
+ .locator-moving {
+ transform: translateY(5rem);
+ transition: 1s;
+ z-index: 1;
+ }
+ .map {
+ opacity: 0;
+ transition: opacity ease 0.5s;
+ z-index: 0;
}
-`;
+ .map-visible {
+ opacity: 1;
+ transition: opacity 1s ease 0.5s;
+ }
+ }
+`;
const KanvasHeroSection = () => {
- const [locatorRef, inView] = useInView({ threshold: 0.8 });
+ const [locatorRef, inView] = useInView({
+ threshold: 0.8,
+ });
+
const [imageInView, setimageInView] = useState(false);
- if (inView && !imageInView)
- setimageInView(true);
- else if (imageInView && !inView)
- setimageInView(false);
+
+ if (inView && !imageInView) setimageInView(true);
+ else if (imageInView && !inView) setimageInView(false);
const { isDark } = useStyledDarkMode();
return (
-
Design your infrastructure
-
Kanvasis the world’s only visual designer for Kubernetes and cloud native applications. Design, deploy, and manage your Kubernetes-based, cloud native deployments allowing you to speed up infrastructure configuration.
+
Design Your Kubernetes & Cloud Native Infrastructure
+
Kanvas is the world's only visual designer for Kubernetes and cloud native applications. Design, deploy, and manage your Kubernetes-based, cloud native deployments allowing you to speed up infrastructure configuration.