diff --git a/app/components/QuickStartTabs.tsx b/app/components/QuickStartTabs.tsx
new file mode 100644
index 0000000..bf0a1df
--- /dev/null
+++ b/app/components/QuickStartTabs.tsx
@@ -0,0 +1,159 @@
+"use client";
+
+import Link from "next/link";
+import { useRef, useState } from "react";
+import CommandSnippet from "./CommandSnippet";
+
+export type QuickStartStep = {
+ step: string;
+ description: string;
+};
+
+type QuickStartTabsProps = {
+ dockerCommand: string;
+ dockerSteps: QuickStartStep[];
+ vscodeSteps: QuickStartStep[];
+ /** Deep link that opens the extension's DocumentDB Local setup wizard. */
+ vscodeDeepLinkUrl: string;
+ /** Marketplace page, for visitors who do not have the extension yet. */
+ vscodeMarketplaceUrl: string;
+};
+
+const TABS = [
+ { id: "docker", label: "Docker" },
+ { id: "vscode", label: "VS Code" },
+] as const;
+
+type TabId = (typeof TABS)[number]["id"];
+
+function StepList({ steps }: { steps: QuickStartStep[] }) {
+ return (
+
+ {steps.map((item) => (
+
+
+ {item.step}
+
+
{item.description}
+
+ ))}
+
+ );
+}
+
+/**
+ * The home page quick start, offering the two ways to get a local DocumentDB running.
+ *
+ * Docker stays first because it is the path that works everywhere and needs nothing installed
+ * beyond Docker itself. The VS Code path is newer and shorter — the extension provisions the
+ * container itself — but only pays off for people who already work in VS Code, so it is offered
+ * rather than assumed.
+ */
+export default function QuickStartTabs({
+ dockerCommand,
+ dockerSteps,
+ vscodeSteps,
+ vscodeDeepLinkUrl,
+ vscodeMarketplaceUrl,
+}: QuickStartTabsProps) {
+ const [activeTab, setActiveTab] = useState("docker");
+ const tabRefs = useRef>({});
+
+ // Arrow keys move between tabs, which is what a tablist is expected to do; without it the
+ // only way through is Tab, and that leaves the panel.
+ const onTabKeyDown = (event: React.KeyboardEvent) => {
+ if (event.key !== "ArrowRight" && event.key !== "ArrowLeft") {
+ return;
+ }
+
+ event.preventDefault();
+ const currentIndex = TABS.findIndex((tab) => tab.id === activeTab);
+ const delta = event.key === "ArrowRight" ? 1 : -1;
+ const next = TABS[(currentIndex + delta + TABS.length) % TABS.length];
+
+ setActiveTab(next.id);
+ tabRefs.current[next.id]?.focus();
+ };
+
+ return (
+
+
+ Get the extension
+
+ {/*
+ * A `vscode://` link does nothing at all when VS Code is not installed — no error, no
+ * navigation — so it is offered second and never on its own. Someone arriving without
+ * the extension gets the install link first and this becomes the obvious next step.
+ */}
+
+ Open in VS Code
+
+
+
+
+
+ );
+}
diff --git a/app/page.tsx b/app/page.tsx
index a8a7098..54306ea 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,7 +1,11 @@
import Image from "next/image";
import Link from "next/link";
-import CommandSnippet from "./components/CommandSnippet";
-import { documentdbKubernetesOperatorQuickStartUrl } from "./services/externalLinks";
+import QuickStartTabs from "./components/QuickStartTabs";
+import {
+ documentdbKubernetesOperatorQuickStartUrl,
+ documentdbVsCodeExtensionMarketplaceUrl,
+ documentdbVsCodeLocalQuickStartDeepLink,
+} from "./services/externalLinks";
import { getMetadata } from "./services/metadataService";
import {
documentdbGitHubForks,
@@ -39,7 +43,7 @@ const quickRunCommand = `docker run -dt --name documentdb \\
--username \\
--password `;
-const quickStartSteps = [
+const dockerQuickStartSteps = [
{
step: "01",
description: "Run DocumentDB Local with Docker.",
@@ -54,6 +58,23 @@ const quickStartSteps = [
},
];
+const vscodeQuickStartSteps = [
+ {
+ step: "01",
+ description: "Install the DocumentDB extension for Visual Studio Code.",
+ },
+ {
+ step: "02",
+ description:
+ "Open the DocumentDB Local setup and let the extension create and start the container for you.",
+ },
+ {
+ step: "03",
+ description:
+ "Browse databases, run queries, and edit documents without leaving the editor.",
+ },
+];
+
const kubernetesOperatorEntryPoints = [
{
title: "Local clusters",
@@ -372,29 +393,20 @@ export default function Home() {
Quick start
- Run locally with Docker
+ Run DocumentDB locally
- Start DocumentDB Local with Docker, then connect on port
- 10260.
+ Start DocumentDB Local with Docker, or let the VS Code
+ extension set it up for you.