Skip to content
Open
2 changes: 1 addition & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ plugins:
categories_url_format: "{slug}"
archive: false
categories_name: Blog
categories_sort_reverse: true
# categories_sort_reverse: true
- social:
cards_layout_options:
background_color: "black"
Expand Down
31 changes: 7 additions & 24 deletions mkdocs/assets/stylesheets/cloudscape-docs.css
Original file line number Diff line number Diff line change
Expand Up @@ -1861,6 +1861,7 @@
}
.md-typeset :is(h1, h2, h3, h4, h5, h6) a:hover {
text-decoration: underline;
color: inherit; /* keep the heading color — don't pick up Material's accent (lilac) on hover */
}

/* Blog excerpt header (author avatars + date · category · read time) removed entirely on the
Expand All @@ -1875,31 +1876,13 @@
}

/* ===== Blog post (article) layout ========================================== */
/* Blog posts render NO left sidebar (overrides/blog-post.html) — only the article + right rail.
The content div carries .md-content--blog (NOT Material's .md-content--post, which is a
column-reverse flex meant to pair the post sidebar with the article). It's a CSS hook to widen
the article to the same "collapsed left menu" layout as a docs page with the nav hidden: a
1280px region (960 body + 40 gap + 280 rail) centered in the viewport. :has() reaches ancestors. */
/* Blog posts use the same desktop layout as the blog index/category pages: left nav sidebar +
article + right rail (On this page, then the relocated post metadata). The content div carries
.md-content--blog purely as a hook for that metadata relocation (see .cs-post-meta); layout-wise
it now matches a normal page, so no width/sidebar overrides are needed here. */
@media screen and (min-width: 76.1875em) {
.md-main__inner.md-grid:has(.md-content--blog) {
max-width: 1280px;
margin-left: auto;
margin-right: auto;
}
.md-main__inner:has(.md-content--blog) .md-content {
margin-left: 0;
}
.md-main__inner:has(.md-content--blog) .md-sidebar--secondary {
margin-right: 0;
}
/* Blog posts render the primary nav only so the mobile drawer (burger) has it; on desktop the
article spans the full width, so hide the left sidebar here. */
.md-main__inner:has(.md-content--blog) .md-sidebar--primary {
display: none;
}
/* No left sidebar → drop the full-height vertical divider drawn at left:280px. Applies to blog
posts and to any page that hides the nav (e.g. /terms, /privacy → .md-sidebar--primary[hidden]). */
body:has(.md-content--blog)::before,
/* Pages that hide the nav entirely (/terms, /privacy → .md-sidebar--primary[hidden]) have no
left sidebar, so drop the full-height vertical divider drawn at left:280px. */
body:has(.md-sidebar--primary[hidden])::before {
display: none;
}
Expand Down
4 changes: 2 additions & 2 deletions mkdocs/blog/posts/state-of-cloud-gpu-2025.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ date: 2025-09-10
description: "TBA"
slug: state-of-cloud-gpu-2025
image: https://dstack.ai/static-assets/static-assets/images/cloud-gpu-providers.png
# categories:
# - Benchmarks
categories:
- Reports
---

# The state of cloud GPUs in 2025: costs, performance, playbooks
Expand Down
177 changes: 177 additions & 0 deletions mkdocs/blog/posts/state-of-heterogeneous-compute-2026.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion mkdocs/overrides/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
{% endblock %}

{% block announce %}
<a href="/blog/agentic-orchestration/" target="_blank">Infrastructure orchestration is an agent skill<span class="icon"><svg viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12h15"/><path d="m12.5 5.5 6.5 6.5-6.5 6.5"/></svg></span></a>
<a href="/blog/state-of-heterogeneous-compute-2026/">The state of heterogeneous AI compute in 2026<span class="icon"><svg viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12h15"/><path d="m12.5 5.5 6.5 6.5-6.5 6.5"/></svg></span></a>
{% endblock %}

{# Footer is rendered INSIDE .md-content (above, after the article) — NOT as a full-width sibling —
Expand Down
4 changes: 2 additions & 2 deletions website/src/components/SiteBanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { BLOG_URL } from '../routes';
// Top announcement banner, mirroring the one on the MkDocs docs site. It sits above the top
// nav; the two stick to the top together (see .site-header). Update the copy/href here when
// the announcement changes.
const BANNER_TEXT = 'Infrastructure orchestration is an agent skill';
const BANNER_HREF = `${BLOG_URL}/agentic-orchestration/`;
const BANNER_TEXT = 'The state of heterogeneous AI compute in 2026';
const BANNER_HREF = `${BLOG_URL}/state-of-heterogeneous-compute-2026/`;

export function SiteBanner() {
return (
Expand Down
6 changes: 3 additions & 3 deletions website/src/components/SiteNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ const dstackGithubUrl = 'https://github.com/dstackai/dstack';
const externalIconAriaLabel = 'External link icon';

// Primary links in the desktop top navigation (plain same-origin MkDocs links). The blog
// categories are listed individually (Case studies / Benchmarks / Blog) to mirror the docs
// categories are listed individually (Case studies / Reports / Blog) to mirror the docs
// header tabs — no "Resources" dropdown.
const audienceNavItems: Array<{ label: string; href: string }> = [
{ label: 'Docs', href: DOCS_URL },
{ label: 'Case studies', href: `${BLOG_URL}/case-studies/` },
{ label: 'Benchmarks', href: `${BLOG_URL}/benchmarks/` },
{ label: 'Reports', href: `${BLOG_URL}/reports/` },
{ label: 'Blog', href: BLOG_URL },
];

Expand All @@ -46,7 +46,7 @@ const productDropdownItems: ButtonDropdownProps.Items = [
const mobileNavigationItems: SideNavigationProps.Item[] = [
{ type: 'link', text: 'Docs', href: DOCS_URL },
{ type: 'link', text: 'Case studies', href: `${BLOG_URL}/case-studies/` },
{ type: 'link', text: 'Benchmarks', href: `${BLOG_URL}/benchmarks/` },
{ type: 'link', text: 'Reports', href: `${BLOG_URL}/reports/` },
{ type: 'link', text: 'Blog', href: BLOG_URL },
{ type: 'link', text: 'GitHub', href: dstackGithubUrl, external: true, externalIconAriaLabel },
{
Expand Down
Loading