From d2caaefa9b2330b56767ba7f969bc40817875c5c Mon Sep 17 00:00:00 2001 From: Andrey Cheptsov Date: Mon, 21 Sep 2026 17:52:18 +0200 Subject: [PATCH 01/14] [Website] Update dstack Sky page --- mkdocs/assets/stylesheets/cloudscape-docs.css | 5 - mkdocs/overrides/header-2.html | 16 +- website/products/sky/index.html | 12 +- website/src/App/index.tsx | 4 +- website/src/components/ComputeSourcesTabs.tsx | 91 ++++++++++ website/src/components/SiteNavigation.tsx | 30 ++-- website/src/pages/Home/ExploreSection.tsx | 77 +------- website/src/pages/Home/FaqSection.tsx | 28 +-- website/src/pages/Home/GetStartedSection.tsx | 4 +- website/src/pages/Sky/MarketplaceTabs.tsx | 125 +++++++++++++ website/src/pages/Sky/SkyPage.tsx | 166 ++++-------------- website/src/styles.css | 34 ++-- 12 files changed, 331 insertions(+), 261 deletions(-) create mode 100644 website/src/components/ComputeSourcesTabs.tsx create mode 100644 website/src/pages/Sky/MarketplaceTabs.tsx diff --git a/mkdocs/assets/stylesheets/cloudscape-docs.css b/mkdocs/assets/stylesheets/cloudscape-docs.css index 2a9caf228..7bc0e3eaf 100644 --- a/mkdocs/assets/stylesheets/cloudscape-docs.css +++ b/mkdocs/assets/stylesheets/cloudscape-docs.css @@ -329,11 +329,6 @@ border-bottom-left-radius: 0; border-bottom-right-radius: 0; } -.gs-opt.gs-opt--on { - border-radius: 8px; - background: var(--cs-bg); - box-shadow: inset 0 0 0 1px var(--cs-text); -} .gs-opt--feat { padding: 13px 14px; gap: 14px; diff --git a/mkdocs/overrides/header-2.html b/mkdocs/overrides/header-2.html index cdea2fe8a..9f6f61c53 100644 --- a/mkdocs/overrides/header-2.html +++ b/mkdocs/overrides/header-2.html @@ -83,7 +83,7 @@
-

The AI cloud with AI-native orchestration

+

The GPU cloud marketplace

{highlightTerms( - 'dstack Sky is a heterogeneous AI cloud with NVIDIA Blackwell, Hopper, and AMD Instinct GPUs. ' + - 'Built on dstack, it combines compute management, training, inference, ' + - 'and observability in one interface.', + 'dstack Sky offers on-demand compute from a variety of GPU clouds, ' + + 'with AI-native orchestration powered by dstack. ' + + 'You can also bring your own compute.', )}

@@ -68,122 +50,52 @@ export function SkyPage() {
-
- {computeTabs.map((label, index) => ( - - ))} -
-
- {computeTab === 0 && ( - - - - - - - - - - {gpuPrices.map(gpu => ( - - - - - - ))} - -
GPUOn-demandSpot
- - - {gpu.name}{' '}{gpu.memory} - - {gpu.onDemand}{gpu.spot ?? '—'}
- )} - {computeTab === 1 && ( - , title: 'GPU clusters', sub: 'Reserve for a fixed period at a price agreed in advance' }, - ]} /> - )} - {computeTab === 2 && ( - , title: 'GPU clouds', sub: 'AWS, GCP, Azure, Nebius, Runpod, and more' }, - { icon: , title: 'SSH fleets', sub: 'Pre-provisioned VMs or bare-metal' }, - { icon: , title: 'Kubernetes', sub: 'Existing Kubernetes clusters' }, - ]} /> - )} -
-
- {computeTab !== 1 && ( - - {computeTab === 0 ? 'Prices in USD per GPU-hour' : 'Bring your own compute'} - - )} - {computeTab === 1 && ( - - )} -
-
- } - title="On-demand GPUs for AI workloads" + visual={} + title="One account across GPU clouds" imageFirst > - Access affordable on-demand and spot GPUs with pay-as-you-go pricing. + dstack Sky offers on-demand and spot GPUs from a wide set of partners. You get + competitive pricing and capacity across regions, without depending on a single cloud. +
+
+ One dstack Sky account gives you access to all marketplace partners. Billing is unified, + with no separate cloud accounts to manage. + + + } + title="Bring your own compute" + > + dstack Sky provisions and manages compute in your own GPU cloud accounts using your + credentials. Compute is billed directly to those accounts.

- You can also bring compute from your own cloud accounts or on-prem infrastructure - and use it alongside Sky GPUs. + You can also bring on-prem compute, including Kubernetes clusters, pre-provisioned + VMs, and bare-metal clusters. We host and maintain the dstack server for you.
- + dstack Sky provides first-class primitives for compute management, training, - inference, and observability across heterogeneous AI compute. Use one interface - to efficiently utilize cloud GPUs, manage your own clusters, or run your own - AI token factory at scale. + inference, and observability across heterogeneous AI compute.

- Sky is built on dstack and uses the same CLI and YAML configurations as a - self-hosted dstack server. + dstack Sky includes all the features of open-source dstack and uses the same CLI and + YAML configurations. It adds a built-in gateway with an HTTPS domain, advanced + observability, and usage metering.
- diff --git a/website/src/styles.css b/website/src/styles.css index 13d8fa919..9ba6bbc79 100644 --- a/website/src/styles.css +++ b/website/src/styles.css @@ -582,6 +582,7 @@ p { Higher specificity than `.docs-article a` so the reset wins regardless of source order. */ .docs-article .doc-action a, .docs-article .figma-card a, +.docs-article .gs-boxfoot a, .docs-article .gs-deploy a { text-decoration: none !important; } @@ -992,6 +993,14 @@ p { color: var(--cs-text) !important; } +.faq-list p { + font-size: inherit; +} + +.faq-list p + p { + margin-top: 1em; +} + .testimonial-person { display: flex; @@ -1184,15 +1193,15 @@ p { border-radius: 12px; overflow: hidden; } -.gs-box--compute { - height: auto; - min-height: 360px; -} -.gs-box--compute.gs-box--offers { +.gs-box.gs-box--compute, +.gs-box.gs-box--compute-sources { height: 360px; } -.gs-box--offers .gs-skybody { +.gs-box--compute .gs-skybody, +.gs-box--compute-sources .gs-skybody { overflow-y: auto; +} +.gs-box--offers .gs-skybody { padding-top: 0; } .sky-gpu-prices { @@ -1236,10 +1245,6 @@ p { .sky-gpu-prices td { padding-left: 8px; } - .gs-box--compute .gs-tabs, - .gs-box--compute .gs-tab { - padding-inline: 4px; - } } .gs-boxfoot { display: flex; @@ -1261,6 +1266,15 @@ p { flex: 0 0 auto; } +@media (max-width: 480px) { + .gs-box--compute .gs-boxfoot { + flex-wrap: wrap; + } + .gs-box--compute .gs-foot__note { + flex-basis: 100%; + } +} + /* Shared tabs for installation methods and Sky compute options. */ .gs-tabs { display: flex; From 7281fa7c28f4bcc4ec5a1aa460379fc88e3cb0d9 Mon Sep 17 00:00:00 2001 From: Andrey Cheptsov Date: Tue, 22 Sep 2026 09:03:06 +0200 Subject: [PATCH 02/14] [Website] Enable React Router transition flag --- website/src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/index.tsx b/website/src/index.tsx index c03484046..86b443a2e 100644 --- a/website/src/index.tsx +++ b/website/src/index.tsx @@ -9,6 +9,6 @@ import { router } from './router'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + , ); From 67b336163b75abf900b549d91f735f51ae0dc1fc Mon Sep 17 00:00:00 2001 From: Andrey Cheptsov Date: Tue, 22 Sep 2026 09:16:43 +0200 Subject: [PATCH 03/14] [Website] Use thinner product selection outline --- website/src/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/styles.css b/website/src/styles.css index 9ba6bbc79..c56b6d7c5 100644 --- a/website/src/styles.css +++ b/website/src/styles.css @@ -1074,7 +1074,7 @@ p { .gs-opt.gs-opt--on { border-radius: 8px; background: var(--cs-bg); - box-shadow: inset 0 0 0 1px var(--cs-text); + box-shadow: inset 0 0 0 0.5px var(--cs-text); } /* Row names mirror the tab typography: 16px / 700. */ From 8c25ee19b952763709e25071960b5f07fbb0c6f7 Mon Sep 17 00:00:00 2001 From: Andrey Cheptsov Date: Tue, 22 Sep 2026 09:21:05 +0200 Subject: [PATCH 04/14] [Website] Align product links and docs hover states --- mkdocs/assets/stylesheets/cloudscape-docs.css | 11 ++++++++--- mkdocs/overrides/header-2.html | 2 +- website/src/components/SiteNavigation.tsx | 10 +++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/mkdocs/assets/stylesheets/cloudscape-docs.css b/mkdocs/assets/stylesheets/cloudscape-docs.css index 7bc0e3eaf..3f4105ad1 100644 --- a/mkdocs/assets/stylesheets/cloudscape-docs.css +++ b/mkdocs/assets/stylesheets/cloudscape-docs.css @@ -292,9 +292,8 @@ margin-top: 0; } -/* The switcher rail — copied from the landing (website/src/styles.css, .gs-rail block): grouped - rows under solid bars, with a selected card. The docs and the landing are separate - builds, so changes to the rail styles must be mirrored here (and vice versa). */ +/* Shared rail visuals match website/src/styles.css. Docs have no current product, + so rows are highlighted only on hover or keyboard focus. */ .gs-rail { display: flex; flex-direction: column; @@ -329,6 +328,12 @@ border-bottom-left-radius: 0; border-bottom-right-radius: 0; } +.gs-opt:hover, +.gs-opt:focus-visible { + border-radius: 8px; + background: var(--cs-bg); + box-shadow: inset 0 0 0 0.5px var(--cs-text); +} .gs-opt--feat { padding: 13px 14px; gap: 14px; diff --git a/mkdocs/overrides/header-2.html b/mkdocs/overrides/header-2.html index 9f6f61c53..a157365f7 100644 --- a/mkdocs/overrides/header-2.html +++ b/mkdocs/overrides/header-2.html @@ -83,7 +83,7 @@