From 2a43da9531575d0bf06d06a61e0a16caaf3280ca Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Tue, 25 Aug 2026 22:49:50 +0000 Subject: [PATCH 1/7] chore(site/src): move deployment docs links inline as View docs text links --- .../SettingsHeader/SettingsHeader.tsx | 16 ++++----- .../AppearanceSettingsPageView.stories.tsx | 2 +- .../AppearanceSettingsPageView.tsx | 9 ++--- .../ExternalAuthSettingsPageView.stories.tsx | 4 +++ .../ExternalAuthSettingsPageView.tsx | 7 ++-- .../IdpOrgSyncPage/IdpOrgSyncPage.tsx | 14 +++----- .../NetworkSettingsPageView.stories.tsx | 18 +++++++++- .../NetworkSettingsPageView.tsx | 20 +++++------ .../NotificationEvents.stories.tsx | 18 +++++++++- .../NotificationsPage/NotificationEvents.tsx | 34 ++++++++----------- .../NotificationsPage.stories.tsx | 17 +++++++++- .../NotificationsPage/NotificationsPage.tsx | 11 +++--- .../OAuth2AppsSettingsPageView.stories.tsx | 4 +-- .../OAuth2AppsSettingsPageView.tsx | 24 +++++-------- .../ObservabilitySettingsPageView.stories.tsx | 17 ++++++++-- .../ObservabilitySettingsPageView.tsx | 16 +++++---- .../OverviewPage/OverviewPageView.stories.tsx | 11 +++++- .../OverviewPage/OverviewPageView.tsx | 7 ++-- .../SecuritySettingsPageView.stories.tsx | 15 +++++++- .../SecuritySettingsPageView.tsx | 16 ++++----- .../UserAuthSettingsPageView.stories.tsx | 18 +++++++++- .../UserAuthSettingsPageView.tsx | 18 ++++------ .../WorkspaceProxyView.stories.tsx | 7 ++++ .../WorkspaceProxyPage/WorkspaceProxyView.tsx | 13 +++---- 24 files changed, 201 insertions(+), 135 deletions(-) diff --git a/site/src/components/SettingsHeader/SettingsHeader.tsx b/site/src/components/SettingsHeader/SettingsHeader.tsx index fcac611aa85d4..c6f9319c68a8a 100644 --- a/site/src/components/SettingsHeader/SettingsHeader.tsx +++ b/site/src/components/SettingsHeader/SettingsHeader.tsx @@ -1,7 +1,6 @@ import { cva, type VariantProps } from "class-variance-authority"; -import { SquareArrowOutUpRightIcon } from "lucide-react"; import type { FC, PropsWithChildren, ReactNode } from "react"; -import { Button } from "#/components/Button/Button"; +import { Link } from "#/components/Link/Link"; import { cn } from "#/utils/cn"; type SettingsHeaderProps = Readonly< @@ -30,16 +29,13 @@ type SettingsHeaderDocsLinkProps = Readonly< >; export const SettingsHeaderDocsLink: FC = ({ href, - children = "Read the docs", + children = "View docs", }) => { return ( - + + {children} + (opens in new tab) + ); }; diff --git a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.stories.tsx index bc81d061c798f..dbdb2aba3ae89 100644 --- a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.stories.tsx @@ -58,7 +58,7 @@ export const NotEntitled: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/setup/appearance")); await expect( canvas.queryByRole("form", { name: "Appearance settings" }), diff --git a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx index 7c5484aa31814..f17a113a983fb 100644 --- a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx @@ -49,14 +49,11 @@ export const AppearanceSettingsPageView: FC< return (
- - } - > + Appearance - Customize the look and feel of your Coder deployment. + Customize the look and feel of your Coder deployment.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.stories.tsx index 0b5ac04cd8c78..8880f583ea382 100644 --- a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.stories.tsx @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, within } from "storybook/test"; +import { docs } from "#/utils/docs"; import { ExternalAuthSettingsPageView } from "./ExternalAuthSettingsPageView"; const meta: Meta = { @@ -49,6 +50,9 @@ export const Page: Story = { await expect( canvas.getByRole("link", { name: "Start trial for free" }), ).toHaveAttribute("href", "/deployment/premium"); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute("href", docs("/admin/external-auth")); }, }; diff --git a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx index c27648515e27a..8c5cb354762e1 100644 --- a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx @@ -33,13 +33,12 @@ export const ExternalAuthSettingsPageView: FC< > = ({ config, isEntitled, canViewPremium }) => { return ( <> - } - > + External Authentication Coder integrates with GitHub, GitLab, BitBucket, Azure Repos, and - OpenID Connect to authenticate developers with external services. + OpenID Connect to authenticate developers with external services.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx index 56f5ef031cec1..48163500d239e 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx @@ -70,19 +70,15 @@ const IdpOrgSyncPage: FC = () => {
- - -
- } + actions={} > Organization IdP Sync Automatically assign users to an organization based on their IdP - claims. + claims.{" "} +
{!isIdpSyncEnabled ? ( diff --git a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.stories.tsx index 6aa7dc2c5c915..9c8f1c9465d31 100644 --- a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.stories.tsx @@ -1,5 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, within } from "storybook/test"; import type { SerpentGroup } from "#/api/typesGenerated"; +import { docs } from "#/utils/docs"; import { NetworkSettingsPageView } from "./NetworkSettingsPageView"; const group: SerpentGroup = { @@ -67,4 +69,18 @@ const meta: Meta = { export default meta; type Story = StoryObj; -export const Page: Story = {}; +export const Page: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); + await expect(docsLinks).toHaveLength(2); + await expect(docsLinks[0]).toHaveAttribute( + "href", + docs("/admin/networking"), + ); + await expect(docsLinks[1]).toHaveAttribute( + "href", + docs("/admin/networking/port-forwarding"), + ); + }, +}; diff --git a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx index aa218f6f88d4c..f8726ce4a1695 100644 --- a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx @@ -27,12 +27,11 @@ export const NetworkSettingsPageView: FC = ({ }) => (
- } - > + Network - Configure your deployment connectivity. + Configure your deployment connectivity.{" "} + @@ -44,19 +43,16 @@ export const NetworkSettingsPageView: FC = ({
- - } - > + Port Forwarding Port forwarding lets developers securely access processes on their - Coder workspace from a local machine. + Coder workspace from a local machine.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx index 131e29f12234a..58bf9fdf4e2b2 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { spyOn, userEvent, within } from "storybook/test"; +import { expect, spyOn, userEvent, within } from "storybook/test"; import { API } from "#/api/api"; import { selectTemplatesByGroup } from "#/api/queries/notifications"; import type { DeploymentValues } from "#/api/typesGenerated"; import { MockSystemNotificationTemplates } from "#/testHelpers/entities"; +import { docs } from "#/utils/docs"; import { NotificationEvents } from "./NotificationEvents"; import { baseMeta } from "./storybookUtils"; @@ -36,6 +37,15 @@ export const SMTPNotConfigured: Story = { }, } as DeploymentValues, }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute( + "href", + docs("/admin/monitoring/notifications#smtp-email"), + ); + }, }; export const WebhookNotConfigured: Story = { @@ -53,6 +63,12 @@ export const WebhookNotConfigured: Story = { }, } as DeploymentValues, }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute("href", docs("/admin/monitoring/notifications#webhook")); + }, }; export const ChangeMethod: Story = { diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx index a0000ea57224b..3987fae1709ef 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx @@ -8,7 +8,7 @@ import { } from "#/api/queries/notifications"; import type { DeploymentValues } from "#/api/typesGenerated"; import { Alert } from "#/components/Alert/Alert"; -import { Button } from "#/components/Button/Button"; +import { Link } from "#/components/Link/Link"; import { Select, SelectContent, @@ -66,15 +66,13 @@ export const NotificationEvents: FC = ({ severity="warning" prominent actions={ - + + View docs + } > Webhook notifications are enabled, but not properly configured. @@ -86,15 +84,13 @@ export const NotificationEvents: FC = ({ severity="warning" prominent actions={ - + + View docs + } > SMTP notifications are enabled but not properly configured. diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx index 4cc9b242df286..504edd2375c7a 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { userEvent, within } from "storybook/test"; +import { expect, userEvent, within } from "storybook/test"; import { customNotificationTemplatesKey, notificationDispatchMethodsKey, @@ -10,6 +10,7 @@ import { MockNotificationMethodsResponse, MockSystemNotificationTemplates, } from "#/testHelpers/entities"; +import { docs } from "#/utils/docs"; import NotificationsPage from "./NotificationsPage"; import { baseMeta } from "./storybookUtils"; @@ -64,6 +65,20 @@ export const LoadingDispatchMethods: Story = { export const Events: Story = { play: async ({ canvasElement }) => { const canvas = within(canvasElement); + const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); + await expect(docsLinks).toHaveLength(3); + await expect(docsLinks[0]).toHaveAttribute( + "href", + docs("/admin/monitoring/notifications"), + ); + await expect(docsLinks[1]).toHaveAttribute( + "href", + docs("/admin/monitoring/notifications#webhook"), + ); + await expect(docsLinks[2]).toHaveAttribute( + "href", + docs("/admin/monitoring/notifications#smtp-email"), + ); // System notification templates await canvas.findByText("Template Events"); diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx index 2214d8ac10610..c31a5dde6416e 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx @@ -78,16 +78,13 @@ const NotificationsPage: FC = () => { <> Codestin Search App - + Notifications + + Control delivery methods for notifications on this deployment.{" "} - } - > - Notifications - - Control delivery methods for notifications on this deployment. diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx index 031b3fcc070a0..0c7a2c6666aff 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx @@ -167,7 +167,7 @@ export const AddApplicationIsScopedToApplicationsTab: Story = { // The docs link is tab-agnostic and stays put, which is what makes the // other one's disappearance a scoping decision rather than a quirk. - const docsLink = canvas.getByRole("link", { name: /read the docs/i }); + const docsLink = canvas.getByRole("link", { name: /view docs/i }); await expect(docsLink).toBeVisible(); await userEvent.click(canvas.getByRole("tab", { name: "Settings" })); @@ -175,7 +175,7 @@ export const AddApplicationIsScopedToApplicationsTab: Story = { canvas.queryByRole("link", { name: "Add application" }), ).not.toBeInTheDocument(); await expect( - canvas.getByRole("link", { name: /read the docs/i }), + canvas.getByRole("link", { name: /view docs/i }), ).toBeVisible(); await userEvent.click(canvas.getByRole("tab", { name: "Applications" })); diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx index 13556be813045..91d948f1ea1ee 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx @@ -141,23 +141,10 @@ const OAuth2AppsSettingsPageView: FC = ({ return (
- {/* - * The header sits outside the tabs, so a tab-specific action here would - * promise to act on content it navigates away from. The docs link is - * tab-agnostic, so it stays on both. - */} - {canCreateApp && activeTab === "applications" && ( - - )} - - + canCreateApp && + activeTab === "applications" && } > OAuth2 applications @@ -168,7 +155,12 @@ const OAuth2AppsSettingsPageView: FC = ({ */} Register applications to use Coder as an OAuth2 provider - {settings && ", and configure how this deployment behaves as one"}. + {settings && ", and configure how this deployment behaves as one"}.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx index 87ef677ef320c..2057e0ea5d478 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx @@ -82,9 +82,20 @@ export const OSS: Story = { await expect( canvas.getByRole("link", { name: "Start trial for free" }), ).toHaveAttribute("href", "/deployment/premium"); - await expect( - canvas.getByRole("link", { name: /Read the docs/ }), - ).toHaveAttribute("href", docs("/admin/security/audit-logs")); + const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); + await expect(docsLinks).toHaveLength(3); + await expect(docsLinks[0]).toHaveAttribute( + "href", + docs("/admin/monitoring"), + ); + await expect(docsLinks[1]).toHaveAttribute( + "href", + docs("/admin/security/audit-logs"), + ); + await expect(docsLinks[2]).toHaveAttribute( + "href", + docs("/admin/monitoring"), + ); await expect( canvas.queryByText("Audit Logs Retention"), ).not.toBeInTheDocument(); diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 62b53185445d7..8ebd9aa180a52 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -23,12 +23,12 @@ export const ObservabilitySettingsPageView: FC< return (
- - } - > + Observability + + Monitor logs, metrics, and audit events for your Coder deployment.{" "} + + @@ -36,7 +36,8 @@ export const ObservabilitySettingsPageView: FC< Audit Logging - Allow auditors to monitor user operations in your deployment. + Allow auditors to monitor user operations in your deployment.{" "} + @@ -66,7 +67,8 @@ export const ObservabilitySettingsPageView: FC< Monitoring - Monitoring your Coder application with logs and metrics. + Monitoring your Coder application with logs and metrics.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx index f6f84b222c19c..d07aa4255ead5 100644 --- a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx @@ -1,5 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, within } from "storybook/test"; import { MockDeploymentDAUResponse } from "#/testHelpers/entities"; +import { docs } from "#/utils/docs"; import { OverviewPageView } from "./OverviewPageView"; const meta: Meta = { @@ -44,7 +46,14 @@ const meta: Meta = { export default meta; type Story = StoryObj; -export const Page: Story = {}; +export const Page: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute("href", docs("/admin/setup")); + }, +}; export const allExperimentsEnabled: Story = { args: { diff --git a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx index 4a2c75fa4b466..87dfc033e5c79 100644 --- a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.tsx @@ -32,12 +32,11 @@ export const OverviewPageView: FC = ({ }) => { return ( <> - } - > + General - Information about your Coder deployment. + Information about your Coder deployment.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.stories.tsx index a27250bf2674a..654ba812359aa 100644 --- a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.stories.tsx @@ -1,5 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, within } from "storybook/test"; import type { SerpentGroup, SerpentOption } from "#/api/typesGenerated"; +import { docs } from "#/utils/docs"; import { SecuritySettingsPageView } from "./SecuritySettingsPageView"; const group: SerpentGroup = { @@ -54,7 +56,18 @@ const meta: Meta = { export default meta; type Story = StoryObj; -export const Page: Story = {}; +export const Page: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); + await expect(docsLinks).toHaveLength(2); + await expect(docsLinks[0]).toHaveAttribute("href", docs("/admin/security")); + await expect(docsLinks[1]).toHaveAttribute( + "href", + docs("/admin/networking#browser-only-connections"), + ); + }, +}; export const NoTLS = { args: { diff --git a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx index 82e1a64465d22..2e964f2c3d8bf 100644 --- a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx @@ -38,7 +38,8 @@ export const SecuritySettingsPageView: FC = ({ Security - Ensure your Coder deployment is secure. + Ensure your Coder deployment is secure.{" "} + @@ -53,13 +54,7 @@ export const SecuritySettingsPageView: FC = ({
- - } - > + Browser-Only Connections{" "} @@ -68,7 +63,10 @@ export const SecuritySettingsPageView: FC = ({ Block all workspace access via SSH, port forward, and other - non-browser connections. + non-browser connections.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.stories.tsx index 62fa622046fa6..edb4e9f40aa73 100644 --- a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.stories.tsx @@ -1,5 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, within } from "storybook/test"; import type { SerpentGroup } from "#/api/typesGenerated"; +import { docs } from "#/utils/docs"; import { UserAuthSettingsPageView } from "./UserAuthSettingsPageView"; const oidcGroup: SerpentGroup = { @@ -139,4 +141,18 @@ const meta: Meta = { export default meta; type Story = StoryObj; -export const Page: Story = {}; +export const Page: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); + await expect(docsLinks).toHaveLength(2); + await expect(docsLinks[0]).toHaveAttribute( + "href", + docs("/admin/users/oidc-auth"), + ); + await expect(docsLinks[1]).toHaveAttribute( + "href", + docs("/admin/users/github-auth"), + ); + }, +}; diff --git a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx index 1a5087d95cb4f..f5f5df63f84a3 100644 --- a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx @@ -39,16 +39,13 @@ export const UserAuthSettingsPageView = ({ User Authentication - - } - > + Login with OpenID Connect - Set up authentication to login with OpenID Connect. + Set up authentication to login with OpenID Connect.{" "} + @@ -64,16 +61,13 @@ export const UserAuthSettingsPageView = ({
- - } - > + Login with GitHub - Set up authentication to login with GitHub. + Set up authentication to login with GitHub.{" "} + diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx index fd782de8a033c..f95f3269bb3d6 100644 --- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx +++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx @@ -8,6 +8,7 @@ import { MockWorkspaceProxies, mockApiError, } from "#/testHelpers/entities"; +import { docs } from "#/utils/docs"; import { WorkspaceProxyView } from "./WorkspaceProxyView"; const meta: Meta = { @@ -30,6 +31,12 @@ export const PrimarySelected: Story = { proxyLatencies: MockProxyLatencies, preferredProxy: MockPrimaryWorkspaceProxy, }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute("href", docs("/admin/networking/workspace-proxies")); + }, }; export const Example: Story = { diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx index db6402b671788..e3636135008d9 100644 --- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx +++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx @@ -46,17 +46,14 @@ export const WorkspaceProxyView: FC = ({ }) => { return (
- - } - > + Workspace Proxies Workspace proxies improve terminal and web app connections to - workspaces. + workspaces.{" "} + From 56a52a8256708d75319e06f27ae19d594cada104 Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Tue, 25 Aug 2026 23:17:49 +0000 Subject: [PATCH 2/7] fix(site/src): adjust deployment docs link follow-ups --- .../ObservabilitySettingsPageView.stories.tsx | 8 ++------ .../ObservabilitySettingsPageView.tsx | 4 ---- .../SecuritySettingsPage/SecuritySettingsPageView.tsx | 9 +++++---- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx index 2057e0ea5d478..bc152e37bc6c9 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx @@ -83,16 +83,12 @@ export const OSS: Story = { canvas.getByRole("link", { name: "Start trial for free" }), ).toHaveAttribute("href", "/deployment/premium"); const docsLinks = canvas.getAllByRole("link", { name: /View docs/ }); - await expect(docsLinks).toHaveLength(3); + await expect(docsLinks).toHaveLength(2); await expect(docsLinks[0]).toHaveAttribute( - "href", - docs("/admin/monitoring"), - ); - await expect(docsLinks[1]).toHaveAttribute( "href", docs("/admin/security/audit-logs"), ); - await expect(docsLinks[2]).toHaveAttribute( + await expect(docsLinks[1]).toHaveAttribute( "href", docs("/admin/monitoring"), ); diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 8ebd9aa180a52..5fced19f9ba85 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -25,10 +25,6 @@ export const ObservabilitySettingsPageView: FC<
Observability - - Monitor logs, metrics, and audit events for your Coder deployment.{" "} - - diff --git a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx index 2e964f2c3d8bf..e27ad547faa53 100644 --- a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx @@ -55,7 +55,11 @@ export const SecuritySettingsPageView: FC = ({
- + Browser-Only Connections{" "} {featureBrowserOnlyEnabled ? : } @@ -70,9 +74,6 @@ export const SecuritySettingsPageView: FC = ({ - - {featureBrowserOnlyEnabled ? : } - {!featureBrowserOnlyEnabled ? ( Date: Wed, 26 Aug 2026 06:02:34 +0000 Subject: [PATCH 3/7] fix(site/src): move remaining header docs links inline --- .../GatewayKeysPageView.stories.tsx | 2 +- .../GatewayKeysPage/GatewayKeysPageView.tsx | 24 ++++++++----------- .../pages/AuditPage/AuditPageView.stories.tsx | 2 +- site/src/pages/AuditPage/AuditPageView.tsx | 11 ++++----- .../ConnectionLogPageView.stories.tsx | 2 +- .../ConnectionLogPageView.tsx | 13 ++++------ .../AIGovernanceSettingsPageView.tsx | 9 +++---- .../PremiumPage/PremiumPage.tsx | 13 ++++------ site/src/pages/GroupsPage/GroupsPage.tsx | 9 +++---- .../CreateOrganizationPageView.stories.tsx | 2 +- .../CreateOrganizationPageView.tsx | 8 +++---- .../CustomRolesPage/CustomRolesPage.tsx | 9 +++---- .../IdpSyncPage/IdpSyncPage.tsx | 9 +++---- ...izationProvisionerKeysPageView.stories.tsx | 2 +- .../OrganizationProvisionerKeysPageView.tsx | 7 +++--- ...ganizationProvisionersPageView.stories.tsx | 2 +- .../OrganizationProvisionersPageView.tsx | 7 +++--- .../TemplatePermissionsPage.tsx | 11 ++++----- .../WorkspaceSharingPageView.tsx | 11 ++++----- 19 files changed, 61 insertions(+), 92 deletions(-) diff --git a/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.stories.tsx b/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.stories.tsx index cf2d61697703d..6b94315e25286 100644 --- a/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.stories.tsx +++ b/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.stories.tsx @@ -83,7 +83,7 @@ export const Paywall: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute( "href", docs("/ai-coder/ai-gateway/standalone#create-a-gateway-key"), diff --git a/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.tsx b/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.tsx index 2b12c6d2c2750..9d5f269d32949 100644 --- a/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.tsx +++ b/site/src/pages/AISettingsPage/GatewayKeysPage/GatewayKeysPageView.tsx @@ -47,25 +47,21 @@ export const GatewayKeysPageView: FC = ({
- - {!showPaywall && ( - - )} -
+ !showPaywall && ( + + ) } > AI Gateway Keys Keys authenticate standalone AI Gateway replicas to this deployment. - The key value is shown only once when created. + The key value is shown only once when created.{" "} + diff --git a/site/src/pages/AuditPage/AuditPageView.stories.tsx b/site/src/pages/AuditPage/AuditPageView.stories.tsx index cba54475f79c1..929161e0ea035 100644 --- a/site/src/pages/AuditPage/AuditPageView.stories.tsx +++ b/site/src/pages/AuditPage/AuditPageView.stories.tsx @@ -103,7 +103,7 @@ export const NotVisible: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/security/audit-logs")); }, }; diff --git a/site/src/pages/AuditPage/AuditPageView.tsx b/site/src/pages/AuditPage/AuditPageView.tsx index 0ed109f0ec0dd..21502b02abab2 100644 --- a/site/src/pages/AuditPage/AuditPageView.tsx +++ b/site/src/pages/AuditPage/AuditPageView.tsx @@ -51,18 +51,17 @@ export const AuditPageView: FC = ({ return ( - - } - > +
Audit
- View events in your audit log. + + View events in your audit log.{" "} + +
{isAuditLogVisible ? ( diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx index ff238731a5cb6..f3c5028017099 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx @@ -102,7 +102,7 @@ export const NotVisible: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/monitoring/connection-logs")); }, }; diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx index 520aaddbdbaee..5f4282470d036 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.tsx @@ -50,13 +50,7 @@ export const ConnectionLogPageView: FC = ({ return ( - - } - > +
Connection Log @@ -64,7 +58,10 @@ export const ConnectionLogPageView: FC = ({
- View workspace connection events. + View workspace connection events.{" "} +
diff --git a/site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx index f83663e684ec9..b7d69818b675a 100644 --- a/site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx @@ -29,16 +29,13 @@ export const AIGovernanceSettingsPageView: FC<
- - } - > + AI Gateway - Monitor and manage AI requests across your deployment. + Monitor and manage AI requests across your deployment.{" "} + diff --git a/site/src/pages/DeploymentSettingsPage/PremiumPage/PremiumPage.tsx b/site/src/pages/DeploymentSettingsPage/PremiumPage/PremiumPage.tsx index cfef257a06e91..98a239b7df38d 100644 --- a/site/src/pages/DeploymentSettingsPage/PremiumPage/PremiumPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/PremiumPage/PremiumPage.tsx @@ -49,17 +49,14 @@ const PremiumPage: FC = () => { <> Codestin Search App - - Review Coder system requirements - - } - > + Start a Coder trial For enterprises ready to achieve world-class security, scalability, - and developer experience. + and developer experience.{" "} + + Review Coder system requirements + {
{title} - - } - > + Groups Manage groups for this{" "} - {showOrganizations ? "organization" : "deployment"}. + {showOrganizations ? "organization" : "deployment"}.{" "} + diff --git a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx index 453db8c8acaf2..206e31f1b3fb2 100644 --- a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx @@ -36,7 +36,7 @@ export const NotEntitled: Story = { const canvas = within(canvasElement); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/users/organizations")); const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); diff --git a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx index 5e17adcce6d53..76667e5cdecc1 100644 --- a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx @@ -76,9 +76,6 @@ export const CreateOrganizationPageView: FC< Go Back
-
- -
{Boolean(error) && !isApiValidationError(error) && ( @@ -97,7 +94,10 @@ export const CreateOrganizationPageView: FC<

New Organization

Organize your deployment into multiple platform teams with unique - provisioners, templates, groups, and members. + provisioners, templates, groups, and members.{" "} +

diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx index 611117319c401..059fe7cd8a420 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPage.tsx @@ -82,14 +82,11 @@ const CustomRolesPage: FC = () => { - - } - > + Roles - Manage roles for this organization. + Manage roles for this organization.{" "} + diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx index 3fb537523c1e0..46511527dda74 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx @@ -123,15 +123,12 @@ const IdpSyncPage: FC = () => {
{title} - - } - > + IdP Sync Automatically assign groups or roles to a user based on their IdP - claims. + claims.{" "} + {!isIdpSyncEnabled ? ( diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx index ce34141fe9401..1b905046cf88d 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx @@ -101,7 +101,7 @@ export const Paywalled: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/provisioners")); }, }; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx index da9be24980a93..4800dc1a1015e 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.tsx @@ -51,12 +51,11 @@ export const OrganizationProvisionerKeysPageView: FC< return (
- } - > + Provisioner Keys - Manage provisioner keys used to authenticate provisioner instances. + Manage provisioner keys used to authenticate provisioner instances.{" "} + diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx index 340a75608bd7d..36f38e98d2a30 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx @@ -77,7 +77,7 @@ export const Paywall: Story = { const cta = canvas.getByRole("link", { name: "Start trial for free" }); await expect(cta).toHaveAttribute("href", "/deployment/premium"); await expect( - canvas.getByRole("link", { name: /Read the docs/ }), + canvas.getByRole("link", { name: /View docs/ }), ).toHaveAttribute("href", docs("/admin/provisioners")); }, }; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx index 916765ef8a8cd..8389ca33a7cde 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.tsx @@ -61,13 +61,12 @@ export const OrganizationProvisionersPageView: FC< }) => { return (
- } - > + Provisioners Coder server runs provisioner daemons which execute terraform during - workspace and template builds. + workspace and template builds.{" "} + diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx index aaef36b28968c..99ad3485e07c3 100644 --- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx @@ -41,16 +41,13 @@ const TemplatePermissionsPage: FC = () => { Codestin Search App
- + Permissions + + Manage which members and groups can use this template.{" "} - } - > - Permissions - - Manage which members and groups can use this template. diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSharingPage/WorkspaceSharingPageView.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSharingPage/WorkspaceSharingPageView.tsx index 6329d2f73cb98..b719afb1272b5 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSharingPage/WorkspaceSharingPageView.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSharingPage/WorkspaceSharingPageView.tsx @@ -59,16 +59,13 @@ export const WorkspaceSharingPageView: FC = ({ }) => { return (
- + Sharing + + Share this workspace with other users and groups.{" "} - } - > - Sharing - - Share this workspace with other users and groups. From c989bcf811412407cc7d62d38529136e8eb0091c Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Wed, 26 Aug 2026 13:43:15 +0000 Subject: [PATCH 4/7] fix(site/src): use provisioner jobs docs link --- .../OrganizationProvisionerJobsPageView.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx index 8d09ad1b6e305..42bd3437ea47c 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.tsx @@ -110,7 +110,9 @@ const OrganizationProvisionerJobsPageView: FC< Provisioner Jobs are the individual tasks assigned to Provisioners when the workspaces are being built.{" "} - View docs + + View docs + From e51c9ffbf0385945810369a03495bd66bbea9d14 Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Wed, 26 Aug 2026 13:47:34 +0000 Subject: [PATCH 5/7] fix(site/src): move secrets docs link inline --- .../SecretsPage/SecretsPageView.stories.tsx | 2 +- .../SecretsPage/SecretsPageView.tsx | 26 ++++++------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.stories.tsx b/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.stories.tsx index 6c440a44365b6..d6c5c5688e094 100644 --- a/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.stories.tsx @@ -109,7 +109,7 @@ export const Loaded: Story = { await expect(canvas.getByText("env var + file")).toBeInTheDocument(); await expect(canvas.getByText("not injected")).toBeInTheDocument(); - const docsLink = canvas.getByRole("link", { name: "Read the docs" }); + const docsLink = canvas.getByRole("link", { name: /View docs/ }); await expect(docsLink).toHaveAttribute( "href", expect.stringContaining("/user-guides/user-secrets"), diff --git a/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.tsx b/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.tsx index cfac6530ab98f..5d356592e8ee6 100644 --- a/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.tsx +++ b/site/src/pages/UserSettingsPage/SecretsPage/SecretsPageView.tsx @@ -1,4 +1,4 @@ -import { PlusIcon, SquareArrowOutUpRightIcon } from "lucide-react"; +import { PlusIcon } from "lucide-react"; import { type FC, useRef, useState } from "react"; import type { CreateUserSecretRequest, @@ -11,6 +11,7 @@ import { Button } from "#/components/Button/Button"; import { SettingsHeader, SettingsHeaderDescription, + SettingsHeaderDocsLink, SettingsHeaderTitle, } from "#/components/SettingsHeader/SettingsHeader"; import { docs } from "#/utils/docs"; @@ -86,29 +87,18 @@ export const SecretsPageView: FC = ({
- - -
+ } > Secrets Secrets with an environment variable or file path are injected into workspaces you own when they start. Each environment variable and file - path must be unique. + path must be unique.{" "} + From 738e1981d336167ede921fe51e14b5dfffe5a3d7 Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Wed, 26 Aug 2026 15:13:19 +0000 Subject: [PATCH 6/7] fix(site/src): address docs link accessibility review --- .../components/SettingsHeader/SettingsHeader.tsx | 7 ++++++- .../NetworkSettingsPage/NetworkSettingsPageView.tsx | 6 +++++- .../NotificationsPage/NotificationEvents.tsx | 2 ++ .../NotificationsPage/NotificationsPage.tsx | 1 + .../ObservabilitySettingsPageView.tsx | 10 ++++++++-- .../SecuritySettingsPageView.tsx | 6 +++++- .../UserAuthSettingsPageView.tsx | 10 ++++++++-- .../OrganizationProvisionerJobsPageView.stories.tsx | 13 ++++++++++++- 8 files changed, 47 insertions(+), 8 deletions(-) diff --git a/site/src/components/SettingsHeader/SettingsHeader.tsx b/site/src/components/SettingsHeader/SettingsHeader.tsx index c6f9319c68a8a..cd5015a9bc756 100644 --- a/site/src/components/SettingsHeader/SettingsHeader.tsx +++ b/site/src/components/SettingsHeader/SettingsHeader.tsx @@ -25,15 +25,20 @@ export const SettingsHeader: FC = ({ }; type SettingsHeaderDocsLinkProps = Readonly< - PropsWithChildren<{ href: string }> + PropsWithChildren<{ + href: string; + context?: string; + }> >; export const SettingsHeaderDocsLink: FC = ({ href, + context, children = "View docs", }) => { return ( {children} + {context && {context}} (opens in new tab) ); diff --git a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx index f8726ce4a1695..b545af5497a71 100644 --- a/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/NetworkSettingsPage/NetworkSettingsPageView.tsx @@ -31,7 +31,10 @@ export const NetworkSettingsPageView: FC = ({ Network Configure your deployment connectivity.{" "} - + @@ -52,6 +55,7 @@ export const NetworkSettingsPageView: FC = ({ Coder workspace from a local machine.{" "} diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx index 3987fae1709ef..e12199edae6a0 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx @@ -72,6 +72,7 @@ export const NotificationEvents: FC = ({ rel="noreferrer" > View docs + (opens in new tab) } > @@ -90,6 +91,7 @@ export const NotificationEvents: FC = ({ rel="noreferrer" > View docs + (opens in new tab) } > diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx index c31a5dde6416e..55c492e557c94 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx @@ -84,6 +84,7 @@ const NotificationsPage: FC = () => { Control delivery methods for notifications on this deployment.{" "} diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 5fced19f9ba85..6c7f8a9ba0935 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -33,7 +33,10 @@ export const ObservabilitySettingsPageView: FC< Allow auditors to monitor user operations in your deployment.{" "} - + @@ -64,7 +67,10 @@ export const ObservabilitySettingsPageView: FC< Monitoring your Coder application with logs and metrics.{" "} - + diff --git a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx index e27ad547faa53..2e30086a1662f 100644 --- a/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/SecuritySettingsPage/SecuritySettingsPageView.tsx @@ -39,7 +39,10 @@ export const SecuritySettingsPageView: FC = ({ Security Ensure your Coder deployment is secure.{" "} - + @@ -70,6 +73,7 @@ export const SecuritySettingsPageView: FC = ({ non-browser connections.{" "} diff --git a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx index f5f5df63f84a3..c460292d9c632 100644 --- a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx @@ -45,7 +45,10 @@ export const UserAuthSettingsPageView = ({ Set up authentication to login with OpenID Connect.{" "} - + @@ -67,7 +70,10 @@ export const UserAuthSettingsPageView = ({ Set up authentication to login with GitHub.{" "} - + diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx index a7854060d3d82..2c573f2f45c61 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx @@ -3,6 +3,7 @@ import { useState } from "react"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; import type { ProvisionerJob } from "#/api/typesGenerated"; import { MockOrganization, MockProvisionerJob } from "#/testHelpers/entities"; +import { docs } from "#/utils/docs"; import { daysAgo } from "#/utils/time"; import OrganizationProvisionerJobsPageView from "./OrganizationProvisionerJobsPageView"; @@ -29,7 +30,17 @@ const meta: Meta = { export default meta; type Story = StoryObj; -export const Default: Story = {}; +export const Default: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect( + canvas.getByRole("link", { name: /View docs/ }), + ).toHaveAttribute( + "href", + docs("/admin/provisioners/manage-provisioner-jobs"), + ); + }, +}; export const OrganizationNotFound: Story = { args: { From e6d77fddffcc2eba7a1d3454c7c65f56e87aa5e9 Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Wed, 26 Aug 2026 16:40:47 +0000 Subject: [PATCH 7/7] chore(site/src): retrigger PR checks