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 - Custom header + Custom header ```JavaScript @@ -224,7 +224,7 @@ ReactDOM.render( #### Example custom footer - Custom footer + 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: