+ {/* Row 1: ClickHouse Cloud (col-span-2) + 3 stacked cards (col-span-1) */}
+
-
Set up docs MCP server
-
Query the ClickHouse documentation directly from your AI tools using the Model Context Protocol.
-
+
+
Set up docs MCP server
+
Query the ClickHouse documentation directly from your AI tools using the Model Context Protocol.
+
>
);
diff --git a/ja/index.mdx b/ja/index.mdx
index 61a136d2a..7b0304490 100644
--- a/ja/index.mdx
+++ b/ja/index.mdx
@@ -44,7 +44,34 @@ export const ButtonGroup = ({options = [], selected, onClick, fillWidth = false,
);
}
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, href, links, icon }) => {
+export const FullWidthDivider = ({ style }) => {
+ const ref = useRef(null);
+ useEffect(() => {
+ if (!ref.current) return;
+ const el = ref.current;
+ const update = () => {
+ requestAnimationFrame(() => {
+ el.style.marginLeft = '';
+ el.style.width = '';
+ const elRect = el.getBoundingClientRect();
+ const sidebar = document.getElementById('sidebar');
+ const sidebarRect = sidebar?.getBoundingClientRect();
+ const leftEdge = (sidebarRect && sidebarRect.width > 0) ? sidebarRect.right : 0;
+ const rightEdge = document.documentElement.clientWidth;
+ const ml = Math.max(0, elRect.left - leftEdge);
+ const mr = Math.max(0, rightEdge - elRect.right);
+ el.style.marginLeft = `-${ml}px`;
+ el.style.width = `calc(100% + ${ml + mr}px)`;
+ });
+ };
+ update();
+ window.addEventListener('resize', update);
+ return () => window.removeEventListener('resize', update);
+ }, []);
+ return
;
+};
+
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
@@ -68,7 +95,10 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
border: isDark ? '1px solid #3c3c3c' : '1px solid #e5e7eb',
display: 'block',
textDecoration: 'none',
- color: 'inherit'
+ color: 'inherit',
+ position: 'relative',
+ overflow: 'hidden',
+ transition: 'background-color 0.12s ease, border-color 0.12s ease'
};
const content = (
@@ -107,7 +137,7 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
>
)}
{title}
-
{description}
+ {body ? body : (
+
{description}
+ )}
{links && links.length > 0 && (
{links.map((link, index) => (
@@ -145,14 +177,21 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
))}
)}
+ {showArrow && (
+
+ )}
>
);
if (links && links.length > 0) {
- return
{content}
;
+ return
{content}
;
}
- return
{content};
+ return
{ e.preventDefault(); window.location.href = href; }}>{content};
};
{/*
@@ -186,8 +225,7 @@ export const ContentSwitcher = () => {
{selected === 'goal' && 'Explore by goal'}
- {selected === 'usecase' && 'Explore by use case'}
- {selected === 'product' && 'Explore by product area'}
+ {selected === 'product' && 'Explore by product area'}
{
{showUsecase && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by use case
-
- )}
-
+
+
Explore by use case
+
Discover how ClickHouse powers real-time analytics, observability, data warehousing, and agentic AI at any scale.
+
{
href="/get-started/use_cases/real-time-analytics"
/>
{
{showProduct && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by product area
-
- )}
{
title="Agentic Data Stack"
description="The open-source stack for agentic analytics. Your chat, your models, your data. Powered by ClickHouse, LibreChat and Langfuse."
href="/products/agentic-data-stack/overview"
+ showArrow
/>
>
diff --git a/ko/index.mdx b/ko/index.mdx
index 61a136d2a..7b0304490 100644
--- a/ko/index.mdx
+++ b/ko/index.mdx
@@ -44,7 +44,34 @@ export const ButtonGroup = ({options = [], selected, onClick, fillWidth = false,
);
}
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, href, links, icon }) => {
+export const FullWidthDivider = ({ style }) => {
+ const ref = useRef(null);
+ useEffect(() => {
+ if (!ref.current) return;
+ const el = ref.current;
+ const update = () => {
+ requestAnimationFrame(() => {
+ el.style.marginLeft = '';
+ el.style.width = '';
+ const elRect = el.getBoundingClientRect();
+ const sidebar = document.getElementById('sidebar');
+ const sidebarRect = sidebar?.getBoundingClientRect();
+ const leftEdge = (sidebarRect && sidebarRect.width > 0) ? sidebarRect.right : 0;
+ const rightEdge = document.documentElement.clientWidth;
+ const ml = Math.max(0, elRect.left - leftEdge);
+ const mr = Math.max(0, rightEdge - elRect.right);
+ el.style.marginLeft = `-${ml}px`;
+ el.style.width = `calc(100% + ${ml + mr}px)`;
+ });
+ };
+ update();
+ window.addEventListener('resize', update);
+ return () => window.removeEventListener('resize', update);
+ }, []);
+ return
;
+};
+
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
@@ -68,7 +95,10 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
border: isDark ? '1px solid #3c3c3c' : '1px solid #e5e7eb',
display: 'block',
textDecoration: 'none',
- color: 'inherit'
+ color: 'inherit',
+ position: 'relative',
+ overflow: 'hidden',
+ transition: 'background-color 0.12s ease, border-color 0.12s ease'
};
const content = (
@@ -107,7 +137,7 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
>
)}
{title}
- {description}
+ {body ? body : (
+ {description}
+ )}
{links && links.length > 0 && (
{links.map((link, index) => (
@@ -145,14 +177,21 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
))}
)}
+ {showArrow && (
+
+ )}
>
);
if (links && links.length > 0) {
- return {content}
;
+ return {content}
;
}
- return {content};
+ return { e.preventDefault(); window.location.href = href; }}>{content};
};
{/*
@@ -186,8 +225,7 @@ export const ContentSwitcher = () => {
{selected === 'goal' && 'Explore by goal'}
- {selected === 'usecase' && 'Explore by use case'}
- {selected === 'product' && 'Explore by product area'}
+ {selected === 'product' && 'Explore by product area'}
{
{showUsecase && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by use case
-
- )}
-
+
+
Explore by use case
+
Discover how ClickHouse powers real-time analytics, observability, data warehousing, and agentic AI at any scale.
+
{
href="/get-started/use_cases/real-time-analytics"
/>
{
{showProduct && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by product area
-
- )}
{
title="Agentic Data Stack"
description="The open-source stack for agentic analytics. Your chat, your models, your data. Powered by ClickHouse, LibreChat and Langfuse."
href="/products/agentic-data-stack/overview"
+ showArrow
/>
>
diff --git a/pt-br/index.mdx b/pt-br/index.mdx
index 61a136d2a..7b0304490 100644
--- a/pt-br/index.mdx
+++ b/pt-br/index.mdx
@@ -44,7 +44,34 @@ export const ButtonGroup = ({options = [], selected, onClick, fillWidth = false,
);
}
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, href, links, icon }) => {
+export const FullWidthDivider = ({ style }) => {
+ const ref = useRef(null);
+ useEffect(() => {
+ if (!ref.current) return;
+ const el = ref.current;
+ const update = () => {
+ requestAnimationFrame(() => {
+ el.style.marginLeft = '';
+ el.style.width = '';
+ const elRect = el.getBoundingClientRect();
+ const sidebar = document.getElementById('sidebar');
+ const sidebarRect = sidebar?.getBoundingClientRect();
+ const leftEdge = (sidebarRect && sidebarRect.width > 0) ? sidebarRect.right : 0;
+ const rightEdge = document.documentElement.clientWidth;
+ const ml = Math.max(0, elRect.left - leftEdge);
+ const mr = Math.max(0, rightEdge - elRect.right);
+ el.style.marginLeft = `-${ml}px`;
+ el.style.width = `calc(100% + ${ml + mr}px)`;
+ });
+ };
+ update();
+ window.addEventListener('resize', update);
+ return () => window.removeEventListener('resize', update);
+ }, []);
+ return
;
+};
+
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
@@ -68,7 +95,10 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
border: isDark ? '1px solid #3c3c3c' : '1px solid #e5e7eb',
display: 'block',
textDecoration: 'none',
- color: 'inherit'
+ color: 'inherit',
+ position: 'relative',
+ overflow: 'hidden',
+ transition: 'background-color 0.12s ease, border-color 0.12s ease'
};
const content = (
@@ -107,7 +137,7 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
>
)}
{title}
- {description}
+ {body ? body : (
+ {description}
+ )}
{links && links.length > 0 && (
{links.map((link, index) => (
@@ -145,14 +177,21 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
))}
)}
+ {showArrow && (
+
+ )}
>
);
if (links && links.length > 0) {
- return {content}
;
+ return {content}
;
}
- return {content};
+ return { e.preventDefault(); window.location.href = href; }}>{content};
};
{/*
@@ -186,8 +225,7 @@ export const ContentSwitcher = () => {
{selected === 'goal' && 'Explore by goal'}
- {selected === 'usecase' && 'Explore by use case'}
- {selected === 'product' && 'Explore by product area'}
+ {selected === 'product' && 'Explore by product area'}
{
{showUsecase && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by use case
-
- )}
-
+
+
Explore by use case
+
Discover how ClickHouse powers real-time analytics, observability, data warehousing, and agentic AI at any scale.
+
{
href="/get-started/use_cases/real-time-analytics"
/>
{
{showProduct && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by product area
-
- )}
{
title="Agentic Data Stack"
description="The open-source stack for agentic analytics. Your chat, your models, your data. Powered by ClickHouse, LibreChat and Langfuse."
href="/products/agentic-data-stack/overview"
+ showArrow
/>
>
diff --git a/ru/index.mdx b/ru/index.mdx
index 61a136d2a..7b0304490 100644
--- a/ru/index.mdx
+++ b/ru/index.mdx
@@ -44,7 +44,34 @@ export const ButtonGroup = ({options = [], selected, onClick, fillWidth = false,
);
}
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, href, links, icon }) => {
+export const FullWidthDivider = ({ style }) => {
+ const ref = useRef(null);
+ useEffect(() => {
+ if (!ref.current) return;
+ const el = ref.current;
+ const update = () => {
+ requestAnimationFrame(() => {
+ el.style.marginLeft = '';
+ el.style.width = '';
+ const elRect = el.getBoundingClientRect();
+ const sidebar = document.getElementById('sidebar');
+ const sidebarRect = sidebar?.getBoundingClientRect();
+ const leftEdge = (sidebarRect && sidebarRect.width > 0) ? sidebarRect.right : 0;
+ const rightEdge = document.documentElement.clientWidth;
+ const ml = Math.max(0, elRect.left - leftEdge);
+ const mr = Math.max(0, rightEdge - elRect.right);
+ el.style.marginLeft = `-${ml}px`;
+ el.style.width = `calc(100% + ${ml + mr}px)`;
+ });
+ };
+ update();
+ window.addEventListener('resize', update);
+ return () => window.removeEventListener('resize', update);
+ }, []);
+ return
;
+};
+
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
@@ -68,7 +95,10 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
border: isDark ? '1px solid #3c3c3c' : '1px solid #e5e7eb',
display: 'block',
textDecoration: 'none',
- color: 'inherit'
+ color: 'inherit',
+ position: 'relative',
+ overflow: 'hidden',
+ transition: 'background-color 0.12s ease, border-color 0.12s ease'
};
const content = (
@@ -107,7 +137,7 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
>
)}
{title}
- {description}
+ {body ? body : (
+ {description}
+ )}
{links && links.length > 0 && (
{links.map((link, index) => (
@@ -145,14 +177,21 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
))}
)}
+ {showArrow && (
+
+ )}
>
);
if (links && links.length > 0) {
- return {content}
;
+ return {content}
;
}
- return {content};
+ return { e.preventDefault(); window.location.href = href; }}>{content};
};
{/*
@@ -186,8 +225,7 @@ export const ContentSwitcher = () => {
{selected === 'goal' && 'Explore by goal'}
- {selected === 'usecase' && 'Explore by use case'}
- {selected === 'product' && 'Explore by product area'}
+ {selected === 'product' && 'Explore by product area'}
{
{showUsecase && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by use case
-
- )}
-
+
+
Explore by use case
+
Discover how ClickHouse powers real-time analytics, observability, data warehousing, and agentic AI at any scale.
+
{
href="/get-started/use_cases/real-time-analytics"
/>
{
{showProduct && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by product area
-
- )}
{
title="Agentic Data Stack"
description="The open-source stack for agentic analytics. Your chat, your models, your data. Powered by ClickHouse, LibreChat and Langfuse."
href="/products/agentic-data-stack/overview"
+ showArrow
/>
>
diff --git a/zh/index.mdx b/zh/index.mdx
index 61a136d2a..7b0304490 100644
--- a/zh/index.mdx
+++ b/zh/index.mdx
@@ -44,7 +44,34 @@ export const ButtonGroup = ({options = [], selected, onClick, fillWidth = false,
);
}
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, href, links, icon }) => {
+export const FullWidthDivider = ({ style }) => {
+ const ref = useRef(null);
+ useEffect(() => {
+ if (!ref.current) return;
+ const el = ref.current;
+ const update = () => {
+ requestAnimationFrame(() => {
+ el.style.marginLeft = '';
+ el.style.width = '';
+ const elRect = el.getBoundingClientRect();
+ const sidebar = document.getElementById('sidebar');
+ const sidebarRect = sidebar?.getBoundingClientRect();
+ const leftEdge = (sidebarRect && sidebarRect.width > 0) ? sidebarRect.right : 0;
+ const rightEdge = document.documentElement.clientWidth;
+ const ml = Math.max(0, elRect.left - leftEdge);
+ const mr = Math.max(0, rightEdge - elRect.right);
+ el.style.marginLeft = `-${ml}px`;
+ el.style.width = `calc(100% + ${ml + mr}px)`;
+ });
+ };
+ update();
+ window.addEventListener('resize', update);
+ return () => window.removeEventListener('resize', update);
+ }, []);
+ return
;
+};
+
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
@@ -68,7 +95,10 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
border: isDark ? '1px solid #3c3c3c' : '1px solid #e5e7eb',
display: 'block',
textDecoration: 'none',
- color: 'inherit'
+ color: 'inherit',
+ position: 'relative',
+ overflow: 'hidden',
+ transition: 'background-color 0.12s ease, border-color 0.12s ease'
};
const content = (
@@ -107,7 +137,7 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
>
)}
{title}
- {description}
+ {body ? body : (
+ {description}
+ )}
{links && links.length > 0 && (
{links.map((link, index) => (
@@ -145,14 +177,21 @@ export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, desc
))}
)}
+ {showArrow && (
+
+ )}
>
);
if (links && links.length > 0) {
- return {content}
;
+ return {content}
;
}
- return {content};
+ return { e.preventDefault(); window.location.href = href; }}>{content};
};
{/*
@@ -186,8 +225,7 @@ export const ContentSwitcher = () => {
{selected === 'goal' && 'Explore by goal'}
- {selected === 'usecase' && 'Explore by use case'}
- {selected === 'product' && 'Explore by product area'}
+ {selected === 'product' && 'Explore by product area'}
{
{showUsecase && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by use case
-
- )}
-
+
+
Explore by use case
+
Discover how ClickHouse powers real-time analytics, observability, data warehousing, and agentic AI at any scale.
+
{
href="/get-started/use_cases/real-time-analytics"
/>
{
{showProduct && (
<>
- {CONTENT_MODE === 'stacked' && (
-
-
Explore by product area
-
- )}
{
title="Agentic Data Stack"
description="The open-source stack for agentic analytics. Your chat, your models, your data. Powered by ClickHouse, LibreChat and Langfuse."
href="/products/agentic-data-stack/overview"
+ showArrow
/>
>