diff --git a/fern/assets/styles.css b/fern/assets/styles.css
index 07b5a1bf8..97090c8a1 100644
--- a/fern/assets/styles.css
+++ b/fern/assets/styles.css
@@ -284,78 +284,78 @@
/*** END -- DOCS HOMEPAGE STYLING ***/
/*** START -- SDKS HOMEPAGE STYLING ***/
- .sdks-homepage {
- position: relative;
+.sdks-homepage {
+ position: relative;
- .fern-card {
- text-decoration: none !important;
- }
+ .fern-card {
+ text-decoration: none !important;
+ }
- .dashed-pattern-left {
- position: absolute;
- left: -4rem;
- top: -8.5rem;
- height: calc(100% + 26rem);
- width: 1rem;
- opacity: 1;
- pointer-events: none;
- border-right: 1px solid var(--grayscale-5);
- mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0 ) 100%);
- -webkit-mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
+ .dashed-pattern-left {
+ position: absolute;
+ left: -4rem;
+ top: -8.5rem;
+ height: calc(100% + 26rem);
+ width: 1rem;
+ opacity: 1;
+ pointer-events: none;
+ border-right: 1px solid var(--grayscale-5);
+ mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0 ) 100%);
+ -webkit-mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
+ }
+
+ .dashed-pattern-right {
+ position: absolute;
+ right: -4rem;
+ top: -8.5rem;
+ height: calc(100% + 26rem);
+ width: 1rem;
+ opacity: 1;
+ pointer-events: none;
+ border-left: 1px solid var(--grayscale-5);
+ mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
+ -webkit-mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
+ }
+
+ .fern-card {
+ border: none !important;
+ padding: 0 !important;
+ box-shadow: none !important;
+ background-color: transparent !important;
+
+ .external-link-icon {
+ display: none !important;
}
- .dashed-pattern-right {
- position: absolute;
- right: -4rem;
- top: -8.5rem;
- height: calc(100% + 26rem);
- width: 1rem;
- opacity: 1;
- pointer-events: none;
- border-left: 1px solid var(--grayscale-5);
- mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
- -webkit-mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
- }
-
- .fern-card {
- border: none !important;
- padding: 0 !important;
- box-shadow: none !important;
- background-color: transparent !important;
-
- .external-link-icon {
- display: none !important;
- }
+ .card-title {
+ display: flex;
+ gap: 0.25rem;
+ align-items: center;
+ }
- .card-title {
- display: flex;
- gap: 0.25rem;
- align-items: center;
- }
+ img {
+ transition: transform 0.15s ease-in-out;
+ }
+ .arrow-right {
+ height: 1rem;
+ opacity: 0;
+ transition: opacity 0.15s ease-in-out, transform 0.15s ease-in-out;
+ transform: translateX(0px);
+ }
+
+ &:hover {
img {
- transition: transform 0.15s ease-in-out;
+ transform: scale(1.01);
}
.arrow-right {
- height: 1rem;
- opacity: 0;
- transition: opacity 0.15s ease-in-out, transform 0.15s ease-in-out;
- transform: translateX(0px);
- }
-
- &:hover {
- img {
- transform: scale(1.01);
- }
-
- .arrow-right {
- opacity: 1;
- transform: translateX(2px);
- }
+ opacity: 1;
+ transform: translateX(2px);
}
}
}
+}
/*** START -- SDKS HOMEPAGE STYLING ***/
/*** START -- LANDING PAGE STYLING ***/
@@ -429,7 +429,7 @@
.dashed-pattern-left {
position: absolute;
- left: -24px;
+ left: -1rem;
top: 0;
height: 100%;
width: 1rem;
@@ -442,13 +442,13 @@
.dashed-pattern-right {
position: absolute;
- right: -24px;
+ right: -1rem;
top: 0;
height: 100%;
width: 1rem;
opacity: 1;
pointer-events: none;
- border-right: 1px solid var(--grayscale-5);
+ border-left: 1px solid var(--grayscale-5);
mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
-webkit-mask: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,1) 10%, rgba(0,0,0,1) 90%, rgba(0,0,0,0) 100%);
}
diff --git a/fern/docs.yml b/fern/docs.yml
index f9ff0993c..fefc24ad6 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -150,12 +150,18 @@ analytics:
# Redirects for new docs structure migration
redirects:
- - source: /learn/welcome
- destination: /learn
- permanent: true
+
+ # ============================================================================
+ # GENERAL REDIRECTS
+ # ============================================================================
+
+ # Main learn page redirect
- source: /learn
destination: /learn/home
permanent: true
+ - source: /learn/welcome
+ destination: /learn/home
+ permanent: true
- source: /learn/api-definition/fern/api-yml-reference
destination: /learn/api-definition/fern/api-yml/overview
permanent: true
@@ -167,9 +173,17 @@ redirects:
- source: /learn/docs/api-references/api-playground
destination: /learn/docs/api-references/api-explorer/overview
permanent: true
+
+ # ============================================================================
+ # SDK REDIRECTS
+ # ============================================================================
+
+ # SDK Features/Capabilities redirects
- source: /learn/sdks/features/:slug*
destination: /learn/sdks/capabilities/:slug*
permanent: true
+
+ # SDK Deep Dives - specific overrides for newer destinations
- source: /learn/sdks/capabilities/method-names
destination: /learn/sdks/deep-dives/customize-method-names
permanent: true
@@ -182,6 +196,8 @@ redirects:
- source: /learn/sdks/capabilities/idempotency-headers
destination: /learn/sdks/deep-dives/configure-idempotency
permanent: true
+
+ # SDK Package Managers redirects
- source: /learn/sdks/package-managers/:slug*
destination: /learn/sdks/guides/publish-to-package-managers/:slug*
permanent: true
@@ -206,43 +222,25 @@ redirects:
- source: /learn/sdks/guides/publish-to-package-managers/packagist
destination: /learn/sdks/generators/php/publishing-to-packagist
permanent: true
+
+ # SDK Introduction redirects
- source: /learn/sdks/introduction/configuration
destination: /learn/sdks/introduction/language-support
permanent: true
- source: /learn/sdks/introduction/language-support
destination: /learn/sdks/overview/introduction
permanent: true
- ## PAUSED HERE
- - source: /learn/sdks/getting-started/:slug*
- destination: /learn/sdks/guides/:slug*
- permanent: true
- - source: /learn/docs/building-your-docs/:slug*
- destination: /learn/docs/building-and-customizing-your-docs/:slug*
- permanent: true
- - source: /learn/cli-api/cli-reference/get-started-with-fern-cli
- destination: /learn/cli-reference/overview
- permanent: true
- - source: /learn/cli-api/cli-reference/cli-overview
- destination: /learn/cli-reference/overview
- permanent: true
- - source: /learn/cli-reference/cli-overview
- destination: /learn/cli-reference/overview
- permanent: true
- - source: /learn/cli-api/cli-reference/global-options
- destination: /learn/cli-reference/options
+ - source: /learn/sdks/introduction/overview
+ destination: /learn/sdks/overview/introduction
permanent: true
- - source: /learn/cli-api/cli-reference/:slug*
- destination: /learn/cli-reference/:slug*
+ - source: /learn/sdks/introduction/customer-showcase
+ destination: /learn/sdks/customer-showcase
permanent: true
- - source: /learn/cli-api/cli/:slug*
- destination: /learn/cli-reference/:slug*
- permanent: true
- - source: /learn/cli-api/:slug*
- destination: /learn/cli-reference/:slug*
- permanent: true
- - source: /learn/api-definition/fern/web-sockets
- destination: /learn/api-definition/fern/websockets
+ - source: /learn/sdks/introduction/changelog/:slug*
+ destination: /learn/sdks/overview/changelog/:slug*
permanent: true
+
+ # SDK Capabilities - remaining general redirects (after specific overrides above)
- source: /learn/sdks/capabilities/idiomatic-method-names
destination: /learn/sdks/capabilities/method-names
permanent: true
@@ -261,104 +259,339 @@ redirects:
- source: /learn/sdks/capabilities/merging-multiple-apis
destination: /learn/sdks/capabilities/merging-apis
permanent: true
- - source: /learn/ai-search/getting-started/:slug*
- destination: /learn/ask-fern/:slug*
- permanent: true
- - source: /learn/ai-search/features/:slug*
- destination: /learn/ask-fern/:slug*
- permanent: true
- - source: /learn/ai-search/customer-showcase
- destination: /learn/ask-fern/customer-showcase
+ # General SDK capabilities pattern (will catch any not specifically overridden above)
+ - source: /learn/sdks/capabilities/:slug*
+ destination: /learn/sdks/overview/capabilities/:slug*
permanent: true
- - source: /learn/docs/getting-started/changelog/2025/5/23
- destination: /learn/docs/getting-started/changelog/2025/6/5
+
+ # SDK Reference redirects
+ - source: /learn/sdks/reference/:slug*
+ destination: /learn/sdks/overview/reference/:slug*
permanent: true
- - source: /learn/ai-search/overview
- destination: /learn/ask-fern/overview
+
+ # SDK Guides - specific cases first, then general pattern
+ - source: /learn/sdks/guides/generate-your-first-sdk
+ destination: /learn/sdks/getting-started/generate-your-first-sdk
permanent: true
- - source: /learn/ai-search/custom-prompting
- destination: /learn/ask-fern/custom-prompting
+ - source: /learn/sdks/guides/publish-a-public-facing-sdk
+ destination: /learn/sdks/guides/publish-your-sdk
permanent: true
- - source: /learn/ai-search/citations
- destination: /learn/ask-fern/citations
+ - source: /learn/sdks/guides/publish-to-package-managers/:slug*
+ destination: /learn/sdks/generators/:slug*
permanent: true
- - source: /learn/ai-search/customer-showcase
- destination: /learn/ask-fern/customer-showcase
+ # General SDK guides pattern
+ - source: /learn/sdks/getting-started/:slug*
+ destination: /learn/sdks/guides/:slug*
permanent: true
- - source: /learn/docs/writing-content/visual-editor-beta
- destination: /learn/docs/writing-content/visual-editor
+ - source: /learn/sdks/guides/:slug*
+ destination: /learn/sdks/getting-started/:slug*
permanent: true
-
- # NEW REDIRECTS for docs structure changes:
+ # ============================================================================
+ # DOCS REDIRECTS
+ # ============================================================================
- # Getting Started -> guides/getting-started
+ # Building Your Docs redirects (older naming)
+ - source: /learn/docs/building-your-docs/:slug*
+ destination: /learn/docs/building-and-customizing-your-docs/:slug*
+ permanent: true
+
+ # Getting Started page redirects - specific cases first
+ - source: /learn/docs/getting-started/customer-showcase
+ destination: https://buildwithfern.com/customers
+ permanent: true
+ - source: /learn/docs/getting-started/global-configuration
+ destination: /learn/docs/guides/configuration/what-is-docs-yml
+ permanent: true
+ - source: /learn/docs/getting-started/project-structure
+ destination: /learn/docs/guides/configuration/project-structure
+ permanent: true
+ - source: /learn/docs/getting-started/development
+ destination: /learn/docs/preview-publish/previewing-changes-locally
+ permanent: true
+ - source: /learn/docs/getting-started/publish-your-docs
+ destination: /learn/docs/preview-publish/publishing-your-docs
+ permanent: true
+ # General getting started pattern
- source: /learn/docs/getting-started/:slug*
destination: /learn/docs/guides/getting-started/:slug*
permanent: true
- # Writing Content -> component-library/writing-content
- - source: /learn/docs/writing-content/:slug*
- destination: /learn/docs/component-library/writing-content/:slug*
+ # Building and Customizing Your Docs redirects - specific cases first
+ - source: /learn/docs/building-and-customizing-your-docs/navigation
+ destination: /learn/docs/navigation/overview
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/versioning
+ destination: /learn/docs/navigation/versions
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/announcements
+ destination: /learn/docs/navigation/announcement-banner
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/links-and-redirects
+ destination: /learn/docs/seo/redirects
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/customizing-slugs
+ destination: /learn/docs/seo/configuring-slugs
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/hiding-content
+ destination: /learn/docs/navigation/hiding-content
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/pull-request-preview
+ destination: /learn/docs/preview-publish/previewing-changes-in-a-pr
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/product-switching
+ destination: /learn/docs/navigation/products
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/custom-css-global-js
+ destination: /learn/docs/component-library/custom-components/custom-css-js
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/custom-domain
+ destination: /learn/docs/getting-started/setting-up-your-domain
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/rbac
+ destination: /learn/docs/authentication/rbac
+ permanent: true
+ - source: /learn/docs/building-and-customizing-your-docs/search
+ destination: /learn/docs/configuration/search
permanent: true
- # Components -> component-library/default-components
+ # Content Section redirects - specific cases first
+ - source: /learn/docs/content/write-markdown
+ destination: /learn/docs/component-library/writing-content/markdown
+ permanent: true
+ - source: /learn/docs/content/components/button
+ destination: /learn/docs/component-library/default-components/callouts
+ permanent: true
+ - source: /learn/docs/content/components/request-snippet
+ destination: /learn/docs/component-library/default-components/endpoint-request-snippet
+ permanent: true
+ - source: /learn/docs/content/components/response-snippet
+ destination: /learn/docs/component-library/default-components/endpoint-response-snippet
+ permanent: true
+ - source: /learn/docs/content/components/schema-snippet
+ destination: /learn/docs/component-library/default-components/endpoint-schema-snippet
+ permanent: true
+ - source: /learn/docs/content/components/paramfield
+ destination: /learn/docs/component-library/default-components/parameter-fields
+ permanent: true
+ - source: /learn/docs/content/custom-react-components
+ destination: /learn/docs/component-library/custom-components/custom-react-components
+ permanent: true
+ - source: /learn/docs/content/frontmatter
+ destination: /learn/docs/configuration/frontmatter
+ permanent: true
+ - source: /learn/docs/content/reusable-snippets
+ destination: /learn/docs/component-library/custom-components/reusable-snippets
+ permanent: true
+ - source: /learn/docs/content/changelog
+ destination: /learn/docs/navigation/changelogs
+ permanent: true
+ - source: /learn/docs/content/visual-editor
+ destination: /learn/docs/component-library/writing-content/visual-editor
+ permanent: true
+ # General content components pattern
- source: /learn/docs/content/components/:slug*
destination: /learn/docs/component-library/default-components/:slug*
permanent: true
+
+ # Components redirects
- source: /learn/docs/components/:slug*
destination: /learn/docs/component-library/default-components/:slug*
permanent: true
- # Configuration files that moved to guides/configuration
- - source: /learn/docs/getting-started/global-configuration
- destination: /learn/docs/guides/configuration/global-configuration
+ # API References specific page redirects - specific cases first
+ - source: /learn/docs/api-references/api-explorer/auto-populate-api-keys
+ destination: /learn/docs/api-references/autopopulate-api-key
permanent: true
- - source: /learn/docs/getting-started/project-structure
- destination: /learn/docs/guides/configuration/project-structure
+ - source: /learn/docs/api-references/customize-api-reference-layout
+ destination: /learn/docs/api-references/customize-api-ref
+ permanent: true
+ - source: /learn/docs/api-references/write-markdown-in-api-reference
+ destination: /learn/docs/api-references/api-ref-content
+ permanent: true
+ - source: /learn/docs/api-references/generate-webhook-reference
+ destination: /learn/docs/api-references/generate-webhook-ref
+ permanent: true
+ # General API references pattern
+ - source: /learn/docs/api-references/:slug*
+ destination: /learn/docs/guides/reference/:slug*
permanent: true
- # Navigation-related files that moved to guides/navigation
- - source: /learn/docs/building-your-docs/navigation
- destination: /learn/docs/guides/navigation/navigation
+ # Docs Integrations redirects - specific case first
+ - source: /learn/docs/integrations/feature-flags
+ destination: /learn/docs/integrations/launchdarkly
permanent: true
- - source: /learn/docs/building-your-docs/product-switcher
- destination: /learn/docs/guides/navigation/product-switcher
+ # General integrations pattern
+ - source: /learn/docs/integrations/:slug*
+ destination: /learn/docs/guides/integrations/:slug*
permanent: true
- - source: /learn/docs/building-your-docs/versioning
- destination: /learn/docs/guides/navigation/versioning
+
+ # Developer tools redirects
+ - source: /learn/docs/developer-tools/:slug*
+ destination: /learn/docs/guides/developer-tools/:slug*
permanent: true
- # SEO-related files that moved to guides/seo
- - source: /learn/docs/building-your-docs/links-and-redirects
- destination: /learn/docs/guides/seo/redirects
+ # Writing content redirects
+ - source: /learn/docs/writing-content/visual-editor-beta
+ destination: /learn/docs/writing-content/visual-editor
permanent: true
- - source: /learn/docs/building-your-docs/customizing-slugs
- destination: /learn/docs/guides/seo/configuring-slugs
+
+ # Specific changelog redirect
+ - source: /learn/docs/getting-started/changelog/2025/5/23
+ destination: /learn/docs/getting-started/changelog/2025/6/5
permanent: true
- # Configuration files that moved to guides/configuration
- - source: /learn/docs/building-your-docs/custom-css-js
- destination: /learn/docs/guides/configuration/custom-css-js
+ # ============================================================================
+ # CLI & API REFERENCE REDIRECTS
+ # ============================================================================
+
+ # CLI & API Reference specific redirects first
+ - source: /learn/cli-api/cli-reference/get-started-with-fern-cli
+ destination: /learn/cli-reference/overview
+ permanent: true
+ - source: /learn/cli-api/cli-reference/cli-overview
+ destination: /learn/cli-reference/overview
+ permanent: true
+ - source: /learn/cli-reference/cli-overview
+ destination: /learn/cli-reference/overview
+ permanent: true
+ - source: /learn/cli-api/cli-reference/global-options
+ destination: /learn/cli-reference/options
+ permanent: true
+ - source: /learn/cli-reference/get-started
+ destination: /learn/cli-reference/overview
+ permanent: true
+ # CLI patterns
+ - source: /learn/cli-api/cli-reference/:slug*
+ destination: /learn/cli-reference/:slug*
+ permanent: true
+ - source: /learn/cli-api/cli/:slug*
+ destination: /learn/cli-reference/:slug*
+ permanent: true
+ - source: /learn/cli-api/:slug*
+ destination: /learn/cli-reference/:slug*
permanent: true
- # Authentication files that moved to guides/authentication
- - source: /learn/docs/building-your-docs/rbac
- destination: /learn/docs/guides/authentication/rbac
+ # ============================================================================
+ # API DEFINITION REDIRECTS
+ # ============================================================================
+
+ # API Definition Fern specific redirects first
+ - source: /learn/api-definition/fern/web-sockets
+ destination: /learn/fern-definition/websockets
+ permanent: true
+ - source: /learn/api-definition/fern/websockets
+ destination: /learn/fern-definition/websockets
+ permanent: true
+ - source: /learn/api-definition/fern/overview
+ destination: /learn/fern-definition/overview
+ permanent: true
+ - source: /learn/api-definition/fern/authentication
+ destination: /learn/fern-definition/auth
+ permanent: true
+ - source: /learn/api-definition/fern/depending-on-other-ap-is
+ destination: /learn/fern-definition/depending-on-other-apis
+ permanent: true
+ - source: /learn/api-definition/fern/endpoints/:slug*
+ destination: /learn/fern-definition/endpoints/:slug*
+ permanent: true
+ - source: /learn/api-definition/fern/api-yml/:slug*
+ destination: /learn/fern-definition/api-yml/:slug*
+ permanent: true
+ # General Fern pattern
+ - source: /learn/api-definition/fern/:slug*
+ destination: /learn/fern-definition/:slug*
permanent: true
- # Integrations that moved to guides/integrations
- - source: /learn/docs/integrations/:slug*
- destination: /learn/docs/guides/integrations/:slug*
+ # API Definition Introduction redirects
+ - source: /learn/api-definition/introduction/what-is-an-api-definition
+ destination: /learn/api-definition/what-is-an-api-definition
+ permanent: true
+ - source: /learn/api-definition/introduction/what-is-the-fern-folder
+ destination: /learn/api-definition/what-is-the-fern-folder
+ permanent: true
+ - source: /learn/api-definition/introduction/:slug*
+ destination: /learn/api-definition/:slug*
permanent: true
- # Developer tools that moved to guides/developer-tools
- - source: /learn/docs/developer-tools/:slug*
- destination: /learn/docs/guides/developer-tools/:slug*
+ # API Definition OpenAPI specific redirects first
+ - source: /learn/api-definition/openapi/overview
+ destination: /learn/openapi-definition/overview
+ permanent: true
+ - source: /learn/api-definition/openapi/authentication
+ destination: /learn/openapi-definition/auth
+ permanent: true
+ - source: /learn/api-definition/openapi/servers
+ destination: /learn/openapi-definition/servers
+ permanent: true
+ - source: /learn/api-definition/openapi/webhooks
+ destination: /learn/openapi-definition/webhooks
+ permanent: true
+ - source: /learn/api-definition/openapi/audiences
+ destination: /learn/openapi-definition/audiences
+ permanent: true
+ - source: /learn/api-definition/openapi/overlay-customizations
+ destination: /learn/openapi-definition/overlay-customizations
+ permanent: true
+ - source: /learn/api-definition/openapi/automatic-updates
+ destination: /learn/openapi-definition/automation
+ permanent: true
+ - source: /learn/api-definition/openapi/endpoints/:slug*
+ destination: /learn/openapi-definition/endpoints/:slug*
+ permanent: true
+ - source: /learn/api-definition/openapi/extensions/:slug*
+ destination: /learn/openapi-definition/extensions/:slug*
+ permanent: true
+ - source: /learn/api-definition/openapi/frameworks/:slug*
+ destination: /learn/openapi-definition/server-frameworks/:slug*
+ permanent: true
+ # General OpenAPI pattern
+ - source: /learn/api-definition/openapi/:slug*
+ destination: /learn/openapi-definition/:slug*
permanent: true
- # API References (if any specific ones need mapping)
- - source: /learn/docs/api-references/:slug*
- destination: /learn/docs/guides/reference/:slug*
+ # ============================================================================
+ # ASK FERN (AI SEARCH) REDIRECTS
+ # ============================================================================
+
+ # Ask Fern specific redirects first
+ - source: /learn/ai-search/customer-showcase
+ destination: /learn/ask-fern/customer-showcase
+ permanent: true
+ - source: /learn/ai-search/overview
+ destination: /learn/ask-fern/overview
+ permanent: true
+ - source: /learn/ai-search/custom-prompting
+ destination: /learn/ask-fern/custom-prompting
+ permanent: true
+ - source: /learn/ai-search/citations
+ destination: /learn/ask-fern/citations
+ permanent: true
+ # General Ask Fern patterns
+ - source: /learn/ai-search/getting-started/:slug*
+ destination: /learn/ask-fern/:slug*
+ permanent: true
+ - source: /learn/ai-search/features/:slug*
+ destination: /learn/ask-fern/:slug*
+ permanent: true
+ - source: /learn/ai-search/:slug*
+ destination: /learn/ask-fern/:slug*
permanent: true
+ # ============================================================================
+ # API REFERENCE REDIRECTS (Fern Public API)
+ # ============================================================================
+
+ # Fern Public API Reference redirects
+ - source: /learn/api-reference/overview
+ destination: /learn/public-api/overview
+ permanent: true
+ - source: /learn/api-reference/snippets/:slug*
+ destination: /learn/public-api/snippets/:slug*
+ permanent: true
+ - source: /learn/api-reference/tokens/:slug*
+ destination: /learn/public-api/tokens/:slug*
+ permanent: true
+ - source: /learn/api-reference/:slug*
+ destination: /learn/public-api/:slug*
+ permanent: true
\ No newline at end of file
diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml
index b9573e2b0..8f5b84bc1 100644
--- a/fern/products/docs/docs.yml
+++ b/fern/products/docs/docs.yml
@@ -5,12 +5,6 @@ navigation:
path: ./pages/getting-started/overview.mdx
- page: Quickstart
path: ./pages/getting-started/quickstart.mdx
- - page: Migrating from an existing site
- path: ./pages/getting-started/migrate-from-existing-site.mdx
- - page: Previewing your docs
- path: ./pages/getting-started/previewing-your-docs.mdx
- - page: Setting up your domain
- path: ./pages/getting-started/setting-up-your-domain.mdx
- link: Customer Showcase
href: https://buildwithfern.com/customers
- section: Component Library
@@ -81,6 +75,8 @@ navigation:
path: ./pages/component-library/custom-components/reusable-snippets.mdx
- page: Custom React Components
path: ./pages/component-library/custom-components/custom-react-components.mdx
+ - page: Custom CSS & JS
+ path: ./pages/component-library/custom-components/custom-css-js.mdx
- section: Configuration
collapsed: true
contents:
@@ -90,6 +86,19 @@ navigation:
path: ./pages/configuration/project-structure.mdx
- page: Frontmatter
path: ./pages/configuration/frontmatter.mdx
+ - page: Search
+ path: ./pages/configuration/search.mdx
+ - section: Preview & Publish
+ collapsed: true
+ contents:
+ - page: Previewing changes locally
+ path: ./pages/getting-started/preview-changes-locally.mdx
+ - page: Previewing changes in a PR
+ path: ./pages/getting-started/pr-preview.mdx
+ - page: Publishing your docs
+ path: ./pages/getting-started/publishing-your-docs.mdx
+ - page: Setting up your domain
+ path: ./pages/getting-started/setting-up-your-domain.mdx
- section: Navigation
collapsed: true
contents:
@@ -99,6 +108,8 @@ navigation:
path: ./pages/navigation/versions.mdx
- page: Products
path: ./pages/navigation/products.mdx
+ - page: Announcement Banner
+ path: ./pages/navigation/announcement-banner.mdx
- page: Changelogs
path: ./pages/navigation/changelogs.mdx
- page: Hiding Content
diff --git a/fern/products/docs/pages/configuration/custom-css-js.mdx b/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx
similarity index 97%
rename from fern/products/docs/pages/configuration/custom-css-js.mdx
rename to fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx
index 0916f6e78..49dbd5e0c 100644
--- a/fern/products/docs/pages/configuration/custom-css-js.mdx
+++ b/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx
@@ -211,7 +211,7 @@ for an example of how to replace the Fern `header` and `footer` with custom Reac
#### Example custom header
-
+
```JavaScript
@@ -224,7 +224,7 @@ ReactDOM.render(
#### Example custom footer
-
+
```JavaScript
diff --git a/fern/images/custom-footer.png b/fern/products/docs/pages/component-library/custom-components/custom-footer.png
similarity index 100%
rename from fern/images/custom-footer.png
rename to fern/products/docs/pages/component-library/custom-components/custom-footer.png
diff --git a/fern/images/custom-header.png b/fern/products/docs/pages/component-library/custom-components/custom-header.png
similarity index 100%
rename from fern/images/custom-header.png
rename to fern/products/docs/pages/component-library/custom-components/custom-header.png
diff --git a/fern/products/docs/pages/configuration/search.mdx b/fern/products/docs/pages/configuration/search.mdx
new file mode 100644
index 000000000..450348a73
--- /dev/null
+++ b/fern/products/docs/pages/configuration/search.mdx
@@ -0,0 +1,29 @@
+---
+title: Search
+
+---
+
+Fern uses [Algolia DocSearch](https://docsearch.algolia.com/) to power search for your documentation.
+DocSearch is designed specifically for documentation sites to help users quickly find what they need.
+
+## How search works
+
+DocSearch scans your Fern site's content and builds an index to generate search results.
+It includes built-in filters that let users refine their searches by content type:
+
+- **Versions:** For sites with separate documentation for different API versions.
+- **Endpoints:** Filters results by API reference documentation.
+- **Guides:** Filters results by non-API reference documentation.
+- **Changelog:** Filters results by changelog updates.
+
+If you are using the AI Search feature, the search box also functions as your site’s chat window.
+
+
+ **Note:** If an article includes the `nofollow` or `noindex` [frontmatter](/learn/docs/content/frontmatter#indexing-properties), it will not be indexed by Algolia DocSearch and won't appear in search results.
+
+
+## Using an alternative search
+
+You can override Fern's search with your own solution.
+[Here](https://github.com/deepgram/deepgram-docs/blob/main/fern/assets/component.js) is an example of custom JavaScript a customer used to replace the default search with their own implementation and additional features.
+To learn more, see [Custom JavaScript](/learn/docs/building-and-customizing-your-docs/custom-css-global-js#custom-javascript).
diff --git a/fern/products/docs/pages/getting-started/pr-preview.mdx b/fern/products/docs/pages/getting-started/pr-preview.mdx
new file mode 100644
index 000000000..19493cf04
--- /dev/null
+++ b/fern/products/docs/pages/getting-started/pr-preview.mdx
@@ -0,0 +1,118 @@
+---
+title: Pull request previews
+description: Fern's PR previews feature lets you preview changes to your docs from pull requests before merging to the live docs site. Use manually or in GitHub Actions.
+---
+
+`PR previews` offer a way to preview changes from pull requests (PRs) before merging code to a production branch. This is useful for reviewing documentation changes before publishing them to your live documentation site. Use manually or in GitHub Actions.
+
+## Usage
+
+```bash
+fern generate --docs --preview
+```
+
+## Example
+
+```bash
+fern generate --docs --preview
+
+[docs]: Found 0 errors and 1 warnings. Run fern check --warnings to print out the warnings.
+[docs]: Published docs to https://fern-preview-a1da0157-93ca-4b1f-b310-8dd34fb891ca.docs.buildwithfern.com
+┌─
+│ ✓ docs.example.com
+└─
+```
+
+## Usage in GitHub Actions
+
+The following is a GitHub Action workflow that generates a preview URL for every pull request. [Be sure to add the `FERN_TOKEN` for your organization to the repository](/learn/cli-api/cli-reference/commands#fern-token).
+
+
+```yaml
+name: Preview Docs
+
+on:
+ pull_request
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ permissions: write-all
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Install Fern
+ run: npm install -g fern-api
+
+ - name: Generate preview URL
+ id: generate-docs
+ env:
+ FERN_TOKEN: ${{ secrets.FERN_TOKEN }}
+ run: |
+ OUTPUT=$(fern generate --docs --preview 2>&1) || true
+ echo "$OUTPUT"
+ URL=$(echo "$OUTPUT" | grep -oP 'Published docs to \K.*(?= \()')
+ echo "Preview URL: $URL"
+ echo "🌿 Preview your docs: $URL" > preview_url.txt
+
+ - name: Comment URL in PR
+ uses: thollander/actions-comment-pull-request@v2.4.3
+ with:
+ filePath: preview_url.txt
+```
+
+
+
+ Fern's PR previews GitHub Action requires a Fern token to run. Depending on your repository's permissions, you may need to use the following workflow to allow PR previews from forks to access this token.
+
+
+ ```yaml .github/workflows/preview-docs.yml
+ name: preview-docs
+
+ on:
+ pull_request_target:
+ branches:
+ - main
+
+ jobs:
+ run:
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write # Only for commenting
+ contents: read # For checking out code
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Install Fern
+ run: npm install -g fern-api
+
+ - name: Checkout PR
+ if: github.event_name == 'pull_request_target'
+ run: |
+ git fetch origin pull/${{ github.event.pull_request.number }}/head:pr-${{ github.event.pull_request.number }}
+ git checkout pr-${{ github.event.pull_request.number }}
+
+ - name: Generate preview URL
+ id: generate-docs
+ env:
+ FERN_TOKEN: ${{ secrets.FERN_TOKEN }}
+ run: |
+ OUTPUT=$(fern generate --docs --preview 2>&1) || true
+ echo "$OUTPUT"
+ URL=$(echo "$OUTPUT" | grep -oP 'Published docs to \K.*(?= \()')
+ echo "Preview URL: $URL"
+ echo "🌿 Preview your docs: $URL" > preview_url.txt
+
+ - name: Comment URL in PR
+ uses: thollander/actions-comment-pull-request@v2.4.3
+ with:
+ filePath: preview_url.txt
+ ```
+
+
+
+## Link expiration
+
+Preview links do not expire. However, the time to live (TTL) is subject to change in the future.
diff --git a/fern/products/docs/pages/getting-started/development.mdx b/fern/products/docs/pages/getting-started/preview-changes-locally.mdx
similarity index 100%
rename from fern/products/docs/pages/getting-started/development.mdx
rename to fern/products/docs/pages/getting-started/preview-changes-locally.mdx
diff --git a/fern/products/docs/pages/getting-started/previewing-your-docs.mdx b/fern/products/docs/pages/getting-started/previewing-your-docs.mdx
deleted file mode 100644
index 0e1188949..000000000
--- a/fern/products/docs/pages/getting-started/previewing-your-docs.mdx
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title: Preview your SDK
-subtitle: Use Fern's CLI tool to preview your SDK locally.
----
-
-[Once you configure your SDK](/learn/sdks/getting-started/generate-your-first-sdk), you can preview the generated SDK code using Fern's CLI.
-
-Simply append the `--preview` flag to the command used to generate the SDK and you will see the generated code populated in a `.preview` folder within your `fern` folder.
-
-
- [If you have added custom code to your SDK](/learn/sdks/capabilities/augment-with-custom-code), `--preview` will
- preserve those changes.
-
-
-Here's an example of how you can preview your SDK:
-
-
-### Generator configuration
-```yaml generators.yml
-api:
- path: ./path/to/openapi.yml
-groups:
- python-sdk:
- generators:
- - name: fernapi/fern-python-sdk
- version: 3.0.0
- output:
- location: pypi
- package-name: imdb
- token: ${PYPI_TOKEN}
- github:
- repository: imdb/imdb-python
- config:
- client_class_name: imdb
-```
-
-### Invoke the Fern CLI
-
-```shell
-fern generate --group python-sdk --preview
-```
-
-### Preview your SDK
-
-The resulting folder structure will look like this:
-
-
-
-```shell {3-5}
-fern/
- ├─ fern.config.json
- ├─ .preview/
- └─ fern-python-sdk/
- └─ ...
- ├─ generators.yml
- └─ openapi/
- └─ openapi.yml
-```
-
-
-```shell {3-5}
-fern/
- ├─ fern.config.json
- ├─ .preview/
- └─ fern-python-sdk/
- └─ ...
- ├─ generators.yml
- └─ definition/
- ├─ api.yml
- └─ imdb.yml
-```
-
-
-
diff --git a/fern/products/docs/pages/navigation/announcement-banner.mdx b/fern/products/docs/pages/navigation/announcement-banner.mdx
new file mode 100644
index 000000000..a0b2cb805
--- /dev/null
+++ b/fern/products/docs/pages/navigation/announcement-banner.mdx
@@ -0,0 +1,13 @@
+---
+title: Add an announcement banner to your docs
+subtitle: Prominently highlight new features, updates, or important information
+---
+
+An announcement banner is a great way to draw attention to new features and product launches. When configured, the announcement bar appears at the top of your docs site. After the user dismisses the bar, it will reappear the next time you update the announcement.
+
+```yaml docs.yml
+announcement:
+ message: "🚀 New feature: Announcements are available! (Learn more) 🚀"
+```
+
+Markdown and HTML is supported in the announcement message. You can include links, images, and other formatting. [Custom css](/learn/docs/building-your-docs/custom-css-global-js#custom-css) can be used to customize the style of the announcement.
diff --git a/fern/products/fern-def/fern-def.yml b/fern/products/fern-def/fern-def.yml
index b68f4f182..6180c90a4 100644
--- a/fern/products/fern-def/fern-def.yml
+++ b/fern/products/fern-def/fern-def.yml
@@ -6,8 +6,9 @@ navigation:
- page: Types
path: ./pages/types.mdx
- section: Endpoints
- path: ./pages/endpoints.mdx
contents:
+ - page: Overview
+ path: ./pages/endpoints.mdx
- page: HTTP JSON Endpoints
path: ./pages/endpoints/rest.mdx
slug: http
@@ -20,21 +21,23 @@ navigation:
- page: Server-Sent Events
path: ./pages/endpoints/sse.mdx
slug: sse
- - page: Webhooks
- path: ./pages/webhooks.mdx
- - page: WebSockets
- path: ./pages/websockets.mdx
- slug: websockets
- - page: Errors
- path: ./pages/errors.mdx
- - page: Imports
- path: ./pages/imports.mdx
- - page: Examples
- path: ./pages/examples.mdx
- - page: Audiences
- path: ./pages/audiences.mdx
- - page: Availability
- path: ./pages/availability.mdx
+ - section: Advanced
+ contents:
+ - page: Webhooks
+ path: ./pages/webhooks.mdx
+ - page: WebSockets
+ path: ./pages/websockets.mdx
+ slug: websockets
+ - page: Errors
+ path: ./pages/errors.mdx
+ - page: Imports
+ path: ./pages/imports.mdx
+ - page: Examples
+ path: ./pages/examples.mdx
+ - page: Audiences
+ path: ./pages/audiences.mdx
+ - page: Availability
+ path: ./pages/availability.mdx
- section: api.yml Reference
slug: api-yml
contents:
@@ -46,10 +49,12 @@ navigation:
path: ./pages/api-yml/global-configuration.mdx
- page: Errors
path: ./pages/api-yml/errors.mdx
- - page: Packages
- path: ./pages/packages.mdx
- - page: Depending on Other APIs
- path: ./pages/depending-on-other-apis.mdx
- - page: Export to OpenAPI
- slug: export-openapi
- path: ./pages/export-openapi.mdx
\ No newline at end of file
+ - section: Integrations
+ contents:
+ - page: Packages
+ path: ./pages/packages.mdx
+ - page: Depending on Other APIs
+ path: ./pages/depending-on-other-apis.mdx
+ - page: Export to OpenAPI
+ slug: export-openapi
+ path: ./pages/export-openapi.mdx
diff --git a/fern/products/openapi-def/openapi-def.yml b/fern/products/openapi-def/openapi-def.yml
index df5fe5969..bd8dabf89 100644
--- a/fern/products/openapi-def/openapi-def.yml
+++ b/fern/products/openapi-def/openapi-def.yml
@@ -17,14 +17,13 @@ navigation:
- page: Server-Sent Events
path: ./pages/endpoints/sse.mdx
slug: sse
- - page: Webhooks
- path: ./pages/webhooks.mdx
- - page: Audiences
- path: ./pages/extensions/audiences.mdx
- slug: audiences
- section: Extensions
slug: extensions
contents:
+ - page: Webhooks
+ path: ./pages/webhooks.mdx
+ - page: Audiences
+ path: ./pages/extensions/audiences.mdx
- page: SDK Method Names
path: ./pages/extensions/method-names.mdx
slug: method-names
@@ -33,10 +32,12 @@ navigation:
- page: Other
path: ./pages/extensions/others.mdx
slug: others
- - page: Overlay Customizations
- path: ./pages/overrides.mdx
- - page: Sync your OpenAPI Specification
- path: ./pages/automation.mdx
+ - section: Workflow & Automation
+ contents:
+ - page: Overlay Customizations
+ path: ./pages/overrides.mdx
+ - page: Sync your OpenAPI Specification
+ path: ./pages/automation.mdx
- section: Integrate your Server Framework
slug: frameworks
contents: