Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .cache/pages.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
"prometheus/2",
"python",
"python/2",
"react",
"reliability-and-testing",
"ruby",
"system-modernization",
Expand Down
19 changes: 19 additions & 0 deletions src/components/CallToAction/Download/__tests__/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion src/components/CallToAction/Download/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const {
listItems,
buttonText = 'Download Now',
secondaryLink = {
href: '/services/consulting',
href: '/services',
text: 'Learn More',
},
} = Astro.props
Expand Down
8 changes: 4 additions & 4 deletions src/content/articles/demo/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2531,8 +2531,8 @@ Download PDF files
},
]}
secondaryLink={{
href: "/services/consulting",
text: "View consulting services",
href: "/services",
text: "View services",
}}
/>
```
Expand All @@ -2556,8 +2556,8 @@ Download PDF files
},
]}
secondaryLink={{
href: "/services/consulting",
text: "View consulting services",
href: "/services",
text: "View services",
}}
/>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
---

Expand Down
16 changes: 16 additions & 0 deletions src/content/tags/react/index.mdx
Original file line number Diff line number Diff line change
@@ -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.
Loading