diff --git a/.cache/pages.json b/.cache/pages.json index 1be2d7e3d..2e68fb73c 100644 --- a/.cache/pages.json +++ b/.cache/pages.json @@ -126,6 +126,7 @@ "prometheus/2", "python", "python/2", + "react", "reliability-and-testing", "ruby", "system-modernization", diff --git a/src/components/CallToAction/Download/__tests__/index.spec.ts b/src/components/CallToAction/Download/__tests__/index.spec.ts index f64e1732a..ff213648c 100644 --- a/src/components/CallToAction/Download/__tests__/index.spec.ts +++ b/src/components/CallToAction/Download/__tests__/index.spec.ts @@ -137,6 +137,25 @@ describe('Download CallToAction (Astro)', () => { }) }) + test('uses the services landing page for the default secondary link', async () => { + const Download = (await import('@components/CallToAction/Download/index.astro')).default + + const renderedHtml = await container.renderToString(Download, { + props: { + resource: 'example-resource', + }, + }) + + await withJsdomEnvironment(async ({ window }) => { + window.document.body.innerHTML = renderedHtml + + const links = [...window.document.querySelectorAll('a')] + const secondaryLink = links.find(link => link.textContent?.trim() === 'Learn More') + + expect(secondaryLink?.getAttribute('href')).toBe('/services') + }) + }) + test('throws BuildError when resource is blank', async () => { const Download = (await import('@components/CallToAction/Download/index.astro')).default diff --git a/src/components/CallToAction/Download/index.astro b/src/components/CallToAction/Download/index.astro index 358cdd2fd..a2d7cca05 100644 --- a/src/components/CallToAction/Download/index.astro +++ b/src/components/CallToAction/Download/index.astro @@ -41,7 +41,7 @@ const { listItems, buttonText = 'Download Now', secondaryLink = { - href: '/services/consulting', + href: '/services', text: 'Learn More', }, } = Astro.props diff --git a/src/content/articles/demo/index.mdx b/src/content/articles/demo/index.mdx index 92bd01f4b..a9593c1b3 100644 --- a/src/content/articles/demo/index.mdx +++ b/src/content/articles/demo/index.mdx @@ -2531,8 +2531,8 @@ Download PDF files }, ]} secondaryLink={{ - href: "/services/consulting", - text: "View consulting services", + href: "/services", + text: "View services", }} /> ``` @@ -2556,8 +2556,8 @@ Download PDF files }, ]} secondaryLink={{ - href: "/services/consulting", - text: "View consulting services", + href: "/services", + text: "View services", }} /> diff --git a/src/content/articles/openapi-spec-documentation-sdk-generation-validation/index.mdx b/src/content/articles/openapi-spec-documentation-sdk-generation-validation/index.mdx index d403c2cb2..03eabfef5 100644 --- a/src/content/articles/openapi-spec-documentation-sdk-generation-validation/index.mdx +++ b/src/content/articles/openapi-spec-documentation-sdk-generation-validation/index.mdx @@ -5,7 +5,7 @@ cover: "./cover.jpg" coverAlt: "Central glowing OpenAPI spec document with streams flowing to documentation pages, SDK code in multiple languages, and validation shields" author: "kevin-brown" publishDate: 2023-12-03 -tags: ["apis-and-gateways", "typescript", "python", "ruby", "go"] +tags: ["apis-and-gateways", "typescript", "python", "ruby", "go", "react"] featured: true --- diff --git a/src/content/articles/openapi-spec-documentation-sdk-generation-validation/pdf.mdx b/src/content/articles/openapi-spec-documentation-sdk-generation-validation/pdf.mdx index 0d380337b..074daf788 100644 --- a/src/content/articles/openapi-spec-documentation-sdk-generation-validation/pdf.mdx +++ b/src/content/articles/openapi-spec-documentation-sdk-generation-validation/pdf.mdx @@ -5,7 +5,7 @@ cover: "./cover.jpg" coverAlt: "Central glowing OpenAPI spec document with streams flowing to documentation pages, SDK code in multiple languages, and validation shields" author: "kevin-brown" publishDate: 2023-12-03 -tags: ["apis-and-gateways", "typescript", "python", "ruby", "go"] +tags: ["apis-and-gateways", "typescript", "python", "ruby", "go", "react"] featured: true --- diff --git a/src/content/tags/react/index.mdx b/src/content/tags/react/index.mdx new file mode 100644 index 000000000..90da34401 --- /dev/null +++ b/src/content/tags/react/index.mdx @@ -0,0 +1,16 @@ +--- +slug: "react" +displayName: "React" +intro: "Component-based UI library used for frontend applications, design systems, and typed client integrations" +description: "React for frontend platform work, component libraries, internal tools, typed API clients, and web application architecture that intersects with broader platform engineering concerns." +cover: "../../articles/openapi-spec-documentation-sdk-generation-validation/cover.jpg" +coverAlt: "Central glowing OpenAPI spec document with streams flowing to documentation pages, SDK code in multiple languages, and validation shields" +featured: false +isSkill: true +--- + +React shows up in platform engineering more often than pure backend teams expect. Internal developer portals, admin consoles, design systems, documentation surfaces, and SDK consumers frequently land in React because it remains the default UI layer for many TypeScript-heavy organizations. When platform teams need to expose workflows through a browser, React is usually part of the stack. + +The value is less about the framework itself and more about the surrounding ecosystem. React Query, form libraries, component primitives, and TypeScript support make it practical to build internal tools that sit on top of platform APIs without hand-rolling state management and client integration patterns. That matters when the job is turning platform capabilities into something developers can actually use. + +The tradeoff is complexity creep. React apps accumulate build tooling, state layers, and dependency churn quickly, and many teams reach for it when simpler server-rendered pages would do. Used deliberately, it is a strong fit for interactive operational tooling. Used by reflex, it adds a lot of surface area for marginal gain.