From 437223ec26c981dc53e16e7b26f2b38b1eb15074 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 30 Jun 2025 21:48:48 -0700 Subject: [PATCH 01/39] feat: adding homepage designs --- .../home/pages/images/ai-search-preview.svg | 86 ++ .../home/pages/images/csharp-logo.svg | 35 + .../home/pages/images/diagonal-line.svg | 26 + .../home/pages/images/docs-preview.svg | 140 +++ fern/products/home/pages/images/go-logo.svg | 14 + fern/products/home/pages/images/java-logo.svg | 7 + fern/products/home/pages/images/php-logo.svg | 12 + .../home/pages/images/python-logo.svg | 11 + fern/products/home/pages/images/ruby-logo.svg | 125 ++ .../home/pages/images/sdks-mockup.png | Bin 71254 -> 71474 bytes .../home/pages/images/sdks-preview.svg | 279 +++++ fern/products/home/pages/images/ts-logo.svg | 11 + fern/products/home/pages/welcome-new.mdx | 788 ------------- fern/products/home/pages/welcome-old.mdx | 265 +++++ fern/products/home/pages/welcome.mdx | 1041 +++++++++++++---- 15 files changed, 1837 insertions(+), 1003 deletions(-) create mode 100644 fern/products/home/pages/images/ai-search-preview.svg create mode 100644 fern/products/home/pages/images/csharp-logo.svg create mode 100644 fern/products/home/pages/images/diagonal-line.svg create mode 100644 fern/products/home/pages/images/docs-preview.svg create mode 100644 fern/products/home/pages/images/go-logo.svg create mode 100644 fern/products/home/pages/images/java-logo.svg create mode 100644 fern/products/home/pages/images/php-logo.svg create mode 100644 fern/products/home/pages/images/python-logo.svg create mode 100644 fern/products/home/pages/images/ruby-logo.svg create mode 100644 fern/products/home/pages/images/sdks-preview.svg create mode 100644 fern/products/home/pages/images/ts-logo.svg delete mode 100644 fern/products/home/pages/welcome-new.mdx create mode 100644 fern/products/home/pages/welcome-old.mdx diff --git a/fern/products/home/pages/images/ai-search-preview.svg b/fern/products/home/pages/images/ai-search-preview.svg new file mode 100644 index 000000000..11df14f97 --- /dev/null +++ b/fern/products/home/pages/images/ai-search-preview.svg @@ -0,0 +1,86 @@ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/fern/products/home/pages/images/csharp-logo.svg b/fern/products/home/pages/images/csharp-logo.svg new file mode 100644 index 000000000..65b352617 --- /dev/null +++ b/fern/products/home/pages/images/csharp-logo.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/diagonal-line.svg b/fern/products/home/pages/images/diagonal-line.svg new file mode 100644 index 000000000..b5050a041 --- /dev/null +++ b/fern/products/home/pages/images/diagonal-line.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/docs-preview.svg b/fern/products/home/pages/images/docs-preview.svg new file mode 100644 index 000000000..4d7e127b0 --- /dev/null +++ b/fern/products/home/pages/images/docs-preview.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/go-logo.svg b/fern/products/home/pages/images/go-logo.svg new file mode 100644 index 000000000..95a4cb25d --- /dev/null +++ b/fern/products/home/pages/images/go-logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/java-logo.svg b/fern/products/home/pages/images/java-logo.svg new file mode 100644 index 000000000..4b887f1d3 --- /dev/null +++ b/fern/products/home/pages/images/java-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/fern/products/home/pages/images/php-logo.svg b/fern/products/home/pages/images/php-logo.svg new file mode 100644 index 000000000..db74f79b3 --- /dev/null +++ b/fern/products/home/pages/images/php-logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/python-logo.svg b/fern/products/home/pages/images/python-logo.svg new file mode 100644 index 000000000..717f0d042 --- /dev/null +++ b/fern/products/home/pages/images/python-logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/fern/products/home/pages/images/ruby-logo.svg b/fern/products/home/pages/images/ruby-logo.svg new file mode 100644 index 000000000..83344aa59 --- /dev/null +++ b/fern/products/home/pages/images/ruby-logo.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/sdks-mockup.png b/fern/products/home/pages/images/sdks-mockup.png index dcd6371c5548fd091177442be520a688cb840ee8..b1d871792d609bf15f6c1395e135af2898bb190a 100644 GIT binary patch delta 70609 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 delta 70360 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≀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 IM6N<$f`Pu8_W%F@ diff --git a/fern/products/home/pages/images/sdks-preview.svg b/fern/products/home/pages/images/sdks-preview.svg new file mode 100644 index 000000000..b551e1301 --- /dev/null +++ b/fern/products/home/pages/images/sdks-preview.svg @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/ts-logo.svg b/fern/products/home/pages/images/ts-logo.svg new file mode 100644 index 000000000..71c9aec7a --- /dev/null +++ b/fern/products/home/pages/images/ts-logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/fern/products/home/pages/welcome-new.mdx b/fern/products/home/pages/welcome-new.mdx deleted file mode 100644 index 17777f11c..000000000 --- a/fern/products/home/pages/welcome-new.mdx +++ /dev/null @@ -1,788 +0,0 @@ ---- -title: The Fern Platform -description: Input OpenAPI. Output SDKs and Docs. -slug: / -hide-toc: true -layout: custom ---- - - - -

- {/* Dashed Pattern - Left Side */} -
-
-
- - {/* Dashed Pattern - Right Side */} -
-
-
- - {/* Main Content */} -
- {/* Hero Section */} -
-
-

- Build with Fern -

-
-
- - {/* Feature Grid */} -
- {/* SDKs Card */} -
-
-

SDKs

-

- Generate client libraries in multiple languages. -

-
- -
- SDK Generation Preview -
- - {/* Language Icons */} -
- Get started with: - {/* TypeScript */} -
- Ts -
- {/* Python */} -
- Py -
- {/* Go */} -
- Go -
- {/* Java */} -
- Ja -
- {/* Ruby */} -
- Ru -
- {/* C# */} -
- C# -
- {/* PHP */} -
- PH -
-
- - {/* Action Buttons */} -
- - - -
-
- - {/* Docs Card */} -
-
-

Docs

-

- A beautiful, interactive documentation website. -

-
- - Docs Mockup - -
- - - - - - - - -
-
- - {/* AI Search Card */} -
-
-

AI Search

-

- Let users find answers in your documentation instantly -

-
- - AI Search Mockup - -
- - -
-
-
- - {/* Community Section */} -
-
-

Community

-
- -
-
-

Changelog

-

- See our most recent product updates. -

-
- arrow -
-
- -
-

Github

-

- Follow progress and contribute to the codebase. -

-
- arrow -
-
- -
-

Discord

-

- Connect with the Fern community. -

-
- arrow -
-
- -
-

- Twitter X -

-

- Get updates on the Fern platform. -

-
- Arrow -
-
-
-
- - {/* Help Section */} -
-
-

Help

-

- We're lightning-fast with support - you'll typically hear back from us in hours, not days! -

-
- -
-
- File a Github issue -
- -
- Email us -
- -
- Slack (for customers only) -
-
-
- - {/* Footer */} - -
-
\ No newline at end of file diff --git a/fern/products/home/pages/welcome-old.mdx b/fern/products/home/pages/welcome-old.mdx new file mode 100644 index 000000000..a2916b74f --- /dev/null +++ b/fern/products/home/pages/welcome-old.mdx @@ -0,0 +1,265 @@ +--- +title: The Fern Platform +description: Input OpenAPI. Output SDKs and Docs. +slug: / +hide-toc: true +layout: overview +--- + + +{/* + +
+
+
+
+
+
+
*/} + +# Build with Fern +Start with Docs, SDKs, or both. + + +
+
+
+ SDKs +
+
Open source
+
Self hosted
+
+
+
+
SDKs
+
Generate client libraries in multiple languages
+
+
+ + +
+
+
+
+
+
+ Docs +
+
Open source
+
Cloud
+
On premises
+
+
+
+
Docs
+
A beautiful, interactive documentation website
+
+
+ + +
+
+
+
+
+
+ Ask Fern +
+
Cloud
+
On premises
+
+
+
+
Ask Fern
+
Use an AI search to let users find answers in your documentation instantly
+
+
+ + +
+
+
+
+
+
+
Start from your API spec
+
Work with one or more API definitions out of the box.
+
+
+ + + + + +
+
+
+
+ +## Community + +Stripe, Twilio, and AWS have the resources to invest in internal tooling for developer +experience. They provide SDKs (aka client libraries) in multiple languages and developer documentation +that stays up-to-date. + +We are building Fern to productize this process and make it accessible to all +software companies. + +## Help + +We’re lightning-fast with support - you’ll typically hear back from us in hours, not days! + +1. 💬 Message us in your Dedicated Slack Channel (for paid customers) +2. 🤝 [Join our community Slack](https://buildwithfern.com/slack) +3. 🐛 [File a GitHub Issue](https://github.com/fern-api/fern/issues) +4. ✉️ [Email us](mailto:support@buildwithfern.com) + +We're lightning-fast with support - you'll typically hear back from us in hours, not days! + + + + + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index a2916b74f..7337f4a2e 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -3,116 +3,570 @@ title: The Fern Platform description: Input OpenAPI. Output SDKs and Docs. slug: / hide-toc: true -layout: overview +layout: custom --- -{/*
@@ -120,146 +574,303 @@ layout: overview
-
*/} - -# Build with Fern -Start with Docs, SDKs, or both. - - -
-
-
- SDKs -
-
Open source
-
Self hosted
-
-
-
-
SDKs
-
Generate client libraries in multiple languages
-
-
- - -
+
+ +
+ {/* Main Content */} +
+ {/* Dashed Pattern - Left Side */} +
+
-
-
-
-
- Docs -
-
Open source
-
Cloud
-
On premises
-
-
-
-
Docs
-
A beautiful, interactive documentation website
-
-
- - + + {/* Dashed Pattern - Right Side */} +
+
+
+ {/* Hero Section */} +
+
+

+ Build with Fern +

+

+ Start with SDKs, Docs, or both. +

-
-
-
-
- Ask Fern -
-
Cloud
-
On premises
+ + {/* Feature Grid */} +
+ {/* SDKs Card */} +
+
+

SDKs

+

+ Generate client libraries in multiple languages. +

+
+ +
+ SDK Generation Preview +
+ + {/* Language Icons */} +
+ Get started with: + {/* TypeScript */} + + {/* Python */} + + {/* Go */} + + {/* Java */} + + {/* Ruby */} + + {/* C# */} + + {/* PHP */} + +
+ + {/* Action Buttons */} +
+ + +
-
-
Ask Fern
-
Use an AI search to let users find answers in your documentation instantly
+ + {/* Docs Card */} +
+
+

Docs

+

+ A beautiful, interactive documentation website. +

+
+ + Docs Mockup + +
+ + + + + + + + +
-
- - + + {/* AI Search Card */} +
+
+

AI Search

+

+ Let users find answers in your documentation instantly +

+
+ + AI Search Mockup + +
+ + +
-
-
-
-
-
Start from your API spec
-
Work with one or more API definitions out of the box.
+ + {/* Community Section */} +
+
+

Community

-
- - - - - + +
+
+

Changelog

+

+ See our most recent product updates. +

+
+ arrow +
+
+ +
+

Github

+

+ Follow progress and contribute to the codebase. +

+
+ arrow +
+
+ +
+

Discord

+

+ Connect with the Fern community. +

+
+ arrow +
+
+ +
+

+ Twitter X +

+

+ Get updates on the Fern platform. +

+
+ Arrow +
+
-
- -## Community - -Stripe, Twilio, and AWS have the resources to invest in internal tooling for developer -experience. They provide SDKs (aka client libraries) in multiple languages and developer documentation -that stays up-to-date. + {/* Help Section */} +
+
+

Help

+

+ We're lightning-fast with support - you'll typically hear back from us in hours, not days! +

+
+ +
+
+ File a Github issue +
-We are building Fern to productize this process and make it accessible to all -software companies. +
+ Email us +
-## Help +
+ Slack (for customers only) +
+
+
-We’re lightning-fast with support - you’ll typically hear back from us in hours, not days! + {/* Footer */} +
+
+ {/* Left Column - Logo and Status */} +
+
+ Fern +
+ +
+
+
+ All systems operational +
+ +
+ Soc 2 Type 1 +
+
+
-1. 💬 Message us in your Dedicated Slack Channel (for paid customers) -2. 🤝 [Join our community Slack](https://buildwithfern.com/slack) -3. 🐛 [File a GitHub Issue](https://github.com/fern-api/fern/issues) -4. ✉️ [Email us](mailto:support@buildwithfern.com) + {/* Right Column - Newsletter Signup */} +
+
+
Subscribe to our updates
+
+
+
marty.mcfly@hillvalley.edu
+
+ +
+
+
+
-We're lightning-fast with support - you'll typically hear back from us in hours, not days! + {/* Footer Links */} +
+
+

Documentation

+ +
- - +
+

Resources

+ +
- -
+ +
+
+
+
\ No newline at end of file From 6f60f17c7ec2a84cf6dd7a6a1b5c602a1305b1e9 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 30 Jun 2025 22:06:34 -0700 Subject: [PATCH 02/39] feat: adding homepage designs --- fern/products/home/pages/images/changelog.svg | 3 ++ fern/products/home/pages/images/discord.svg | 8 +++++ fern/products/home/pages/images/github.svg | 8 +++++ .../home/pages/images/sdks-preview.svg | 9 +----- fern/products/home/pages/images/x.svg | 3 ++ fern/products/home/pages/images/x.svg.svg | 3 ++ fern/products/home/pages/welcome.mdx | 30 +++++++++++-------- 7 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 fern/products/home/pages/images/changelog.svg create mode 100644 fern/products/home/pages/images/discord.svg create mode 100644 fern/products/home/pages/images/github.svg create mode 100644 fern/products/home/pages/images/x.svg create mode 100644 fern/products/home/pages/images/x.svg.svg diff --git a/fern/products/home/pages/images/changelog.svg b/fern/products/home/pages/images/changelog.svg new file mode 100644 index 000000000..c57ed1977 --- /dev/null +++ b/fern/products/home/pages/images/changelog.svg @@ -0,0 +1,3 @@ + + + diff --git a/fern/products/home/pages/images/discord.svg b/fern/products/home/pages/images/discord.svg new file mode 100644 index 000000000..60399fa8f --- /dev/null +++ b/fern/products/home/pages/images/discord.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/fern/products/home/pages/images/github.svg b/fern/products/home/pages/images/github.svg new file mode 100644 index 000000000..6ea021a66 --- /dev/null +++ b/fern/products/home/pages/images/github.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/fern/products/home/pages/images/sdks-preview.svg b/fern/products/home/pages/images/sdks-preview.svg index b551e1301..ad85e0700 100644 --- a/fern/products/home/pages/images/sdks-preview.svg +++ b/fern/products/home/pages/images/sdks-preview.svg @@ -4,8 +4,7 @@ - - + @@ -136,13 +135,7 @@ - - - - - - diff --git a/fern/products/home/pages/images/x.svg b/fern/products/home/pages/images/x.svg new file mode 100644 index 000000000..89eb63606 --- /dev/null +++ b/fern/products/home/pages/images/x.svg @@ -0,0 +1,3 @@ + + + diff --git a/fern/products/home/pages/images/x.svg.svg b/fern/products/home/pages/images/x.svg.svg new file mode 100644 index 000000000..89eb63606 --- /dev/null +++ b/fern/products/home/pages/images/x.svg.svg @@ -0,0 +1,3 @@ + + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 7337f4a2e..ab15094a5 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -736,45 +736,49 @@ layout: custom
+ Changelog Preview

Changelog

See our most recent product updates.

-
- arrow -
+
+ Github Preview

Github

Follow progress and contribute to the codebase.

-
- arrow -
+
+ Discord Preview

Discord

Connect with the Fern community.

-
- arrow -
+
+ Twitter Preview

- Twitter X + Twitter

Get updates on the Fern platform.

-
- Arrow -
+
From e90c46e98008ad94a515909d2b17c4d487b0a8fa Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 30 Jun 2025 22:11:22 -0700 Subject: [PATCH 03/39] feat: adding homepage designs --- fern/products/home/pages/images/x.svg.svg | 3 --- fern/products/home/pages/welcome.mdx | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 fern/products/home/pages/images/x.svg.svg diff --git a/fern/products/home/pages/images/x.svg.svg b/fern/products/home/pages/images/x.svg.svg deleted file mode 100644 index 89eb63606..000000000 --- a/fern/products/home/pages/images/x.svg.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index ab15094a5..51fbc9dd3 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -769,7 +769,7 @@ layout: custom
- Twitter Preview + Twitter Preview

Twitter

From c40092440948fdec3deba3829ab7406f94dcb2af Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 30 Jun 2025 22:20:46 -0700 Subject: [PATCH 04/39] feat: adding homepage designs --- .../home/pages/images/arrow-right-dark.svg | 3 +++ .../home/pages/images/arrow-right-light.svg | 3 +++ fern/products/home/pages/welcome.mdx | 22 ++++++++++++++----- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 fern/products/home/pages/images/arrow-right-dark.svg create mode 100644 fern/products/home/pages/images/arrow-right-light.svg diff --git a/fern/products/home/pages/images/arrow-right-dark.svg b/fern/products/home/pages/images/arrow-right-dark.svg new file mode 100644 index 000000000..99d264caa --- /dev/null +++ b/fern/products/home/pages/images/arrow-right-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/fern/products/home/pages/images/arrow-right-light.svg b/fern/products/home/pages/images/arrow-right-light.svg new file mode 100644 index 000000000..857b42e6d --- /dev/null +++ b/fern/products/home/pages/images/arrow-right-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 51fbc9dd3..73337ca21 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -279,7 +279,7 @@ layout: custom .btn-primary { border: 1px solid var(--accent-9); - border-radius: 1000px; + border-radius: 6px; background-color: var(--accent-9); color: var(--accent-contrast); text-align: center; @@ -309,12 +309,15 @@ layout: custom background-color: var(--grayscale-a3); color: var(--grayscale-a10); padding: 0.5rem 0.75rem; - border-radius: 9999px; + border-radius: 6px; font-size: 0.875rem; border: none; cursor: pointer; transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); width: fit-content; + display: flex; + align-items: center; + gap: 0.5rem; &:hover { background-color: var(--grayscale-a4); @@ -349,17 +352,19 @@ layout: custom flex-direction: column; gap: 0.5rem; padding: 0; + align-items: flex-start; } .community-card-title { font-size: 1rem; font-weight: bold; - color: #1e1f24; + color: var(--grayscale-12); } .community-card-description { font-size: 0.875rem; - color: #62636c; + color: var(--grayscale-10); + margin-bottom: 0.5rem; } .community-card-arrow { @@ -657,6 +662,7 @@ layout: custom
@@ -754,6 +763,7 @@ layout: custom

@@ -765,19 +775,21 @@ layout: custom

Twitter Preview

- Twitter + Twitter X

Get updates on the Fern platform.

From 9a4d6337a1a2d23b54333986992d1693499868a1 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 30 Jun 2025 22:22:59 -0700 Subject: [PATCH 05/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 73337ca21..ec28dc49f 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -297,6 +297,7 @@ layout: custom box-shadow: 0 1.5em 1.375em 0 #0087000a, 0 .5em .5em #0087000f, 0 .25em .25em #00870012, 0 .15625em .125rem #00870014, 0 .071875em .75em #0087001f; cursor: pointer; width: fit-content; + gap: 0.5rem; &:hover { border-color: var(--accent-10); @@ -682,7 +683,7 @@ layout: custom

- Docs Mockup + Docs Preview
- AI Search Mockup + AI Search Mockup
- -
@@ -686,30 +688,37 @@ layout: custom Docs Preview
- - - - - - - -
@@ -726,12 +735,13 @@ layout: custom AI Search Mockup
- -
@@ -750,7 +760,7 @@ layout: custom

See our most recent product updates.

- @@ -762,7 +772,7 @@ layout: custom

Follow progress and contribute to the codebase.

- @@ -774,7 +784,7 @@ layout: custom

Connect with the Fern community.

- @@ -788,7 +798,7 @@ layout: custom

Get updates on the Fern platform.

- @@ -806,17 +816,20 @@ layout: custom
-
- File a Github issue -
- -
- Email us -
- -
- Slack (for customers only) -
+ + + + +
From b9daceffdf4d65dd90da2015552e8dbca7b667dd Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 08:29:26 -0700 Subject: [PATCH 07/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 62 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 28c6dd59d..27d03f13c 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -622,7 +622,7 @@ layout: custom src="./images/sdks-preview.svg" alt="SDK Generation Preview" className="sdks-preview-img" - enableZoom={false} + noZoom /> @@ -631,31 +631,31 @@ layout: custom Get started with: {/* TypeScript */} {/* Python */} {/* Go */} {/* Java */} {/* Ruby */} {/* C# */} {/* PHP */} @@ -663,15 +663,15 @@ layout: custom
@@ -690,35 +690,35 @@ layout: custom
@@ -732,16 +732,16 @@ layout: custom

- AI Search Mockup + AI Search Mockup
@@ -755,14 +755,14 @@ layout: custom
- Changelog Preview + Changelog Preview

Changelog

See our most recent product updates.

@@ -774,7 +774,7 @@ layout: custom

@@ -786,7 +786,7 @@ layout: custom

@@ -800,7 +800,7 @@ layout: custom

@@ -817,17 +817,17 @@ layout: custom
@@ -839,7 +839,7 @@ layout: custom {/* Left Column - Logo and Status */}
- Fern + Fern
From a66ea01f6874e18dd123c18f38aeb3ae03eee294 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 09:50:14 -0700 Subject: [PATCH 08/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 27d03f13c..bca4fda84 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -718,7 +718,7 @@ layout: custom
From e54661d9af0dcea70d0c7665d1d8007567b326a0 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 12:34:43 -0700 Subject: [PATCH 09/39] feat: adding homepage designs --- fern/docs.yml | 4 +- fern/products/home/pages/welcome.mdx | 116 ++++++++++++++------------- 2 files changed, 61 insertions(+), 59 deletions(-) diff --git a/fern/docs.yml b/fern/docs.yml index 5934e9b61..bb7900873 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -11,7 +11,7 @@ products: slug: home subtitle: Products that delight your developers - - display-name: SDK + - display-name: SDKs path: ./products/sdks/sdks.yml icon: fa-brands fa-codepen image: ./images/product-switcher/sdks.png @@ -92,7 +92,7 @@ typography: weight: 600 700 logo: - href: /learn + href: / light: ./images/logo-primary.svg dark: ./images/logo-white.svg height: 20 diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index bca4fda84..1bd462f29 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -215,19 +215,16 @@ layout: custom .sdks-preview-img { width: 100%; - height: 100%; object-fit: cover; } .docs-preview-img { width: 100%; - height: 100%; object-fit: cover; } .ai-search-preview-img { width: 100%; - height: 100%; object-fit: cover; } @@ -571,6 +568,11 @@ layout: custom .footer-link:hover { color: #1e1f24; } + + .a-btn { + text-decoration: none !important; + font-weight: 400 !important; + } `} @@ -630,49 +632,49 @@ layout: custom
Get started with: {/* TypeScript */} - + {/* Python */} - + {/* Go */} - + {/* Java */} - + {/* Ruby */} - + {/* C# */} - + {/* PHP */} - +
{/* Action Buttons */} @@ -688,38 +690,38 @@ layout: custom Docs Preview @@ -735,14 +737,14 @@ layout: custom AI Search Mockup @@ -760,10 +762,10 @@ layout: custom

See our most recent product updates.

- +
@@ -772,10 +774,10 @@ layout: custom

Follow progress and contribute to the codebase.

- +
@@ -784,10 +786,10 @@ layout: custom

Connect with the Fern community.

- +
@@ -798,10 +800,10 @@ layout: custom

Get updates on the Fern platform.

- +
@@ -816,20 +818,20 @@ layout: custom From 6ba1c36dac9f21474af24f5e4321d7af5ba8b8ea Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 15:30:28 -0700 Subject: [PATCH 10/39] feat: adding homepage designs --- fern/.DS_Store | Bin 10244 -> 10244 bytes fern/products/.DS_Store | Bin 6148 -> 6148 bytes fern/products/home/pages/images/fern-leaf.svg | 8 ++++++++ fern/products/home/pages/welcome.mdx | 10 +++++----- 4 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 fern/products/home/pages/images/fern-leaf.svg diff --git a/fern/.DS_Store b/fern/.DS_Store index 65df61554b66ef517366f577c4b8c49c2c1ded69..50a51f8d658371500b0e68fe926c49128e7bd1ee 100644 GIT binary patch delta 39 vcmZn(XbG6$&&a(oU^hP__hue}l^mRDDaFZ2`T04Fn-@xWvTtTr_{$Ce0fY?O delta 32 ocmZn(XbG6$&&ahgU^hP_*Jd7pl^mNdNtm)vY>?f|uJD%~0JED4&Hw-a diff --git a/fern/products/.DS_Store b/fern/products/.DS_Store index 1e68400848f83ebc7e7f678596e804938a48bb8e..54919c15ae16db4a8a57592b0fa4f3fcae1ebd0a 100644 GIT binary patch delta 81 zcmZoMXfc=|#>B`mu~2NHo+2a5!~p9_j154#$5n`hA%h{GA(tUFEu}a)DL+4lapSoq iY@69R_&I<&Hh%ohJegm_kb{wdfuRA2H+zWeVFmzCJ*u~2NHo+2aj!~knX=E*#auA9>s7qU%Wz&Ld?I|n}pP{rnnjNh3j T^NScVGEBDNk=`65vVs`^HF6Pf diff --git a/fern/products/home/pages/images/fern-leaf.svg b/fern/products/home/pages/images/fern-leaf.svg new file mode 100644 index 000000000..546dd7e72 --- /dev/null +++ b/fern/products/home/pages/images/fern-leaf.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 1bd462f29..e0bf70e6a 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -757,7 +757,7 @@ layout: custom
- Changelog Preview + Changelog Preview

Changelog

See our most recent product updates. @@ -769,7 +769,7 @@ layout: custom

- Github Preview + Github Preview

Github

Follow progress and contribute to the codebase. @@ -781,7 +781,7 @@ layout: custom

- Discord Preview + Discord Preview

Discord

Connect with the Fern community. @@ -793,7 +793,7 @@ layout: custom

- Twitter Preview + Twitter Preview

Twitter X

@@ -841,7 +841,7 @@ layout: custom {/* Left Column - Logo and Status */}
- Fern + Fern
From 6d8c1f87b413c8a463040d25a705b54095a4a3b6 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 15:33:14 -0700 Subject: [PATCH 11/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 34 ++++++++++++---------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index e0bf70e6a..2a83ca565 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -443,13 +443,12 @@ layout: custom } .footer-logo-img { - height: 1.5rem; width: 1.5rem; } .footer-status { display: flex; - flex-direction: column; + flex-direction: row; gap: 1rem; } @@ -839,24 +838,25 @@ layout: custom
{/* Left Column - Logo and Status */} -
-
- Fern +
+ Fern +
+ +
+
+
+ All systems operational
-
-
-
- All systems operational -
- -
- Soc 2 Type 1 -
+
+ Soc 2 Type 1
+
- {/* Right Column - Newsletter Signup */} + {/* Footer Links */} +
+ {/* Newsletter Signup */}
Subscribe to our updates
@@ -869,10 +869,6 @@ layout: custom
-
- - {/* Footer Links */} -

Documentation

From 22d29d96e508d37287ae7858f0ebdeb176e7f5eb Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 17:43:07 -0700 Subject: [PATCH 12/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 59 ++++++++++++++++++---------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 2a83ca565..5ebe13618 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -420,12 +420,12 @@ layout: custom } .footer { - padding-top: 3rem; + padding: 3rem 2rem; } .footer-top { - display: grid; - grid-template-columns: repeat(2, 1fr); + display: flex; + justify-content: space-between; gap: 2rem; margin-bottom: 3rem; } @@ -443,7 +443,8 @@ layout: custom } .footer-logo-img { - width: 1.5rem; + height: 1.5rem; + margin: 0; } .footer-status { @@ -490,8 +491,8 @@ layout: custom } .newsletter-container { - background-color: #f9f9fb; - border: 1px solid #b9bbc6; + background-color: var(--grayscale-2); + border: 1px solid var(--grayscale-6); border-radius: 0.5rem; padding: 0.75rem; width: 20rem; @@ -499,8 +500,9 @@ layout: custom .newsletter-label { font-size: 0.75rem; - color: #8b8d98; + color: var(--grayscale-10); margin-bottom: 0.75rem; + font-family: var(--font-family-mono); } .newsletter-form { @@ -534,7 +536,7 @@ layout: custom display: flex; gap: 2rem; padding-top: 2rem; - border-top: 1px solid #e0e1e6; + align-items: flex-end; } .footer-column { @@ -546,8 +548,8 @@ layout: custom .footer-column-title { font-size: 0.875rem; - font-weight: 500; - color: #b9bbc6; + font-weight: 400; + color: var(--grayscale-10); letter-spacing: -0.025em; } @@ -558,8 +560,9 @@ layout: custom } .footer-link { + font-weight: 400; font-size: 0.875rem; - color: #62636c; + color: var(--grayscale-11); text-decoration: none; transition: color 0.15s ease-in-out; } @@ -568,6 +571,20 @@ layout: custom color: #1e1f24; } + .footer-bottom { + display: flex; + justify-content: space-between; + padding-top: 3rem; + } + + .footer-bottom-text { + font-weight: 400; + font-size: 0.875rem; + color: var(--grayscale-10); + text-decoration: none; + transition: color 0.15s ease-in-out; + } + .a-btn { text-decoration: none !important; font-weight: 400 !important; @@ -857,16 +874,14 @@ layout: custom {/* Footer Links */}
{/* Newsletter Signup */} -
-
-
Subscribe to our updates
-
-
-
marty.mcfly@hillvalley.edu
-
- +
+
Subscribe to our updates
+
+
+
marty.mcfly@hillvalley.edu
+
@@ -899,6 +914,10 @@ layout: custom
+ {/*
+
© 2025 Fern • Birch Solutions, Inc.
+
Located in Brooklyn, New York.
+
*/}
\ No newline at end of file From 0ee72e5933928dcca9cb56cbdb189d2d23c6d67d Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 23:15:46 -0700 Subject: [PATCH 13/39] feat: adding homepage designs --- fern/products/home/pages/welcome.mdx | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 5ebe13618..302ae797c 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -502,7 +502,7 @@ layout: custom font-size: 0.75rem; color: var(--grayscale-10); margin-bottom: 0.75rem; - font-family: var(--font-family-mono); + font-family: var(--font-code); } .newsletter-form { @@ -511,11 +511,21 @@ layout: custom } .newsletter-input { - background-color: #fcfcfd; - border: 1px solid #b9bbc6; - border-radius: 0.375rem; - padding: 0.5rem 0.75rem; - flex: 1; + display: flex; + padding: 12px; + flex-direction: column; + justify-content: center; + align-items: flex-start; + flex: 1 0 0; + border-radius: 8px; + border: 0.5px solid var(--grayscale-8); + background: var(--grayscale-1); + box-shadow: 0px 0px 0px 0.559px rgba(14, 63, 126, 0.04), 0px 0.559px 0.559px -0.28px rgba(42, 51, 69, 0.04), 0px 1.677px 1.677px -0.839px rgba(42, 51, 70, 0.04), 0px 3.354px 3.354px -1.677px rgba(42, 51, 70, 0.04), 0px 6.709px 6.709px -3.354px rgba(14, 63, 126, 0.04), 0px 13.417px 13.417px -6.709px rgba(14, 63, 126, 0.04), 4.472px 4.472px 32.336px 0px var(--radix-gray-2, #F9F9FB); + text-decoration: none; + font-family: var(--font-code); + font-size: 0.875rem; + font-style: normal; + font-weight: 400; } .newsletter-input-text { @@ -874,16 +884,16 @@ layout: custom {/* Footer Links */}
{/* Newsletter Signup */} -
+ {/*
Subscribe to our updates
-
marty.mcfly@hillvalley.edu
+ marty.mcfly@hillvalley.edu
-
+
*/}

Documentation

From 20202a5202cea09ed502626c0c36391f041a8109 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 1 Jul 2025 23:16:52 -0700 Subject: [PATCH 14/39] feat: adding homepage designs --- fern/.DS_Store | Bin 10244 -> 0 bytes fern/products/.DS_Store | Bin 6148 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fern/.DS_Store delete mode 100644 fern/products/.DS_Store diff --git a/fern/.DS_Store b/fern/.DS_Store deleted file mode 100644 index 50a51f8d658371500b0e68fe926c49128e7bd1ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMYit}>6~5otv1fN2XPj;x-KCpJoj4D>>G~1d+cfEV9p}|XPGTo^oKSanXW|T5 z&$v6gb|6@|fIzee%Ht0dC?Jra6{Ua>P-p-FDngUi2G<}0K?JHJz`4JUWtc~QR>k`LtJ$f%?G+P=XQ9;8uBfY5 z>s3vC{m@x=W~i7cmb`SPaEiBvT{oXC-)FKXY-?s*kMz4vF=IPcK^WMkMMF-H*pBJW zq}`HZdct-{cBmmWG_J3|aG^JuY%@BO$=NpJLb4;#W^{FT&CZ6@HO;r~IyQbTKk2yl zOE=(`0=BZktp_T7%6rrOa!;aWbJ?d$WuHRfa6@EdWc1|NxUQEx>zI|#6zyqiZ>DH@ zkl!B$^BKV-kj^2RdfhpqEPem`3DZ^k^g zQ0x~rqc%N;caH0;`J)D>ini-`C#-@;G8B4j<=S}jmbUipU8#YChmX!TuF{)U-w+9p zQHY$Pea5y5$7gJ_c=lw*%UOaE)%;bD&) z(KG(QTXuxQ!{_MR>Rw2ic65d#$Mc!2mDkOXH0$XNM@FWlxB8vF^7h@~$Y{=;oFo^$ zCbaqLzH}sVH-Gb88Lv1vWjXY#zVE+&AN7rSXEOzBaE9RJYY&lDd@j;+qXE+{y1Y{a z#E2YG)sy^zeWq!d^Ns6oTz71UTj;hkZ4;d76G&9+�=}oZ2o?B_i9LO2}5E0&1ML zVr&PI)B$#yO|U6;fxVr5h<%tn#2#T^Vi(zW+0*P<_H*`2_AB;l_DA+2`wIXCwOD~h ztivX>U<8vK8lay6Zj+^ z#S{1jp2S5wg=g?%%;Oihj2G}C{*Hg(C8bVTrQED+QZ_3s$`&P|>{RwhFO+fuom%Xb zGDz)3MS&8?-_%p)mQ0}7{{06I9(t`4=+a6*W!9|SuxZ#9LIXS9KA8ztWpZ-D`c}Jyj3Oe>vgi(8oNcM zbkh~l3@2h8AxbK}MmAex-62(nY$U_GLX=*5t!(azr9wR8btc-e{@8#@DWbnB*nNzB zg+0l>$9_cE{Vn?gdyc(CcwLDba1)vdvmCM8(TOf}qX$W((T@S_BlI4{F%084MsN?I zHwP1E;9?5*!o!;}O9-CBTM57K#(VJ~-j9dy5qt~}`$&EqU#r08or|%FA5>y$m1%EuWA1U z;}hL-f{VtY*U0!ytMo?Ah~6Bcva_h_&GVk95p7Y`h2>GGwQbQ>UYJC!l$sq{f|nyv zE2U|twv$&nS!t!JSG$c@yK>o;%H7%>qC#G&%~G9??&SrnvgC?im5v@z)dieiwzx}G zt2ti=#E34%_|fRKF@ER@np^}mp3=JP_s_V zd3ketYdo$ilz(D!8of0U*Yp}Om*%})t<;2^$wzyWnx@x^S#^}AtlAz;uztvA{d7M) ziDykE>t7RoFS4iD57|%HZwSACW`AY>L<3^KLCiiX znB5{~pCD%c_uTY8V)nNYv%iO!{e3>SKTNY!K1cl=K99%o1%c*o;oBAXT#DtZ@L9op z@)5!H6-S^(S{i&0VBqTi|9{2L4-A6{1QA&N5kT$Up}lGPo#p+2%Ad^l+6_AIp_3nc z+?+hY2`;@PnlTw(|7-3FQ?&kl`{~6#coZtrQ|LVP~ RVEr#Qwy$$Ddl|3){{@muh{^x} diff --git a/fern/products/.DS_Store b/fern/products/.DS_Store deleted file mode 100644 index 54919c15ae16db4a8a57592b0fa4f3fcae1ebd0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%TB{E5S)b^BDIGeIr;}U@CQ-VegQuKB;g?yQnlj1EuYSe*B}DnS|PM6*|YXO zVviKt3&7T|-4(C`P_qe5%8Y1w)^t{!E28BbEpD;L6E4xsB>Ia}TKkf#KH?28_`3cc z_uaAG-3`M|3$O8j12@;^&3!Xgc*KBb^a@b~>A-?hd-P2EYn&2?1Ovf9Fc1s`1E*y` zmlUO5I7S}~1OvgqCj&Yk5}U9oI6CH|gIz8Ghjvfvx#fOzIe-tm4zs~$AyTcmC=!1b^V9LO`4_CVXxBO*hi~MOwjDmq+ z;GZ#I)#iG$=BCQs`eS>#YZKcIn?!!26bkjpBY*>)BNy4|_9UHtO~KJoSu~%+iSZD~ LghUq%oPdFMuY4z@ From 4e531349e86e45f79730ab3bc4e746365f85b64b Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Wed, 2 Jul 2025 16:11:36 -0700 Subject: [PATCH 15/39] feat: added footer image --- fern/assets/styles.css | 2 ++ fern/images/.DS_Store | Bin 6148 -> 6148 bytes .../home/pages/images/builtwithfern-dark.svg | 31 ++++++++++++++++++ .../home/pages/images/builtwithfern-light.svg | 31 ++++++++++++++++++ fern/products/home/pages/welcome.mdx | 7 +++- 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 fern/products/home/pages/images/builtwithfern-dark.svg create mode 100644 fern/products/home/pages/images/builtwithfern-light.svg diff --git a/fern/assets/styles.css b/fern/assets/styles.css index a418cf13a..d732c1787 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -157,3 +157,5 @@ div:has(> .fern-product-selector-radio-group):before { } } } + + diff --git a/fern/images/.DS_Store b/fern/images/.DS_Store index 92c60a31f80d4acd2f2a7ad1f4e30844bbad92e7..85960f7aca289b5270169145f86257a834df7f7e 100644 GIT binary patch delta 72 zcmZoMXfc=|&e%4wP;8=}q9`K+0|O8XFff!dBr}vS=rR;Dluvx9zHxm7`@|0_o7p)8 ZI2hYDKK#x+nO{Vg6{P&YW?PZN%mAIR6LtUq delta 102 zcmZoMXfc=|&e%S&P;8=}q9_vs0|O%ig8&0VIzuW$4nsbWE}nQ$eX@ZFi!2vIGD8MK vB10asWLa=gUQT{q`o@lE_RZ`Z0vwF(8xMYGp3E + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/images/builtwithfern-light.svg b/fern/products/home/pages/images/builtwithfern-light.svg new file mode 100644 index 000000000..3ff963fd7 --- /dev/null +++ b/fern/products/home/pages/images/builtwithfern-light.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 302ae797c..42dfd1bae 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -8,6 +8,10 @@ layout: custom - @@ -831,7 +885,8 @@ layout: custom

View - Arrow right dark + Arrow right dark + Arrow right dark
@@ -845,7 +900,8 @@ layout: custom

View - Twitter Preview + Twitter Preview + Twitter Preview
@@ -861,7 +917,8 @@ layout: custom

View - Twitter Preview + Twitter Preview + Twitter Preview
@@ -869,9 +926,9 @@ layout: custom {/* Help Section */}
-
-

Help

-

+

+

Help

+

We're lightning-fast with support - you'll typically hear back from us in hours, not days!

From 4d30f743744b0eeb491543ee6cf40a5d57b8a2a4 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Thu, 3 Jul 2025 09:00:27 -0700 Subject: [PATCH 21/39] feat: added footer image --- fern/products/docs/docs.yml | 156 ++++++++++++++------------- fern/products/home/pages/welcome.mdx | 26 +++-- 2 files changed, 95 insertions(+), 87 deletions(-) diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index b69ae4c22..33ce58c3f 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -1,84 +1,88 @@ navigation: - - section: Guides + - section: Getting Started contents: - - section: Getting Started - contents: - - page: Overview - path: ./pages/guides/getting-started/overview.mdx - - page: Quickstart - path: ./pages/guides/getting-started/quickstart.mdx - - page: Migrate from an existing site - path: ./pages/guides/getting-started/migrate-from-existing-site.mdx - - page: Setting up your domain - path: ./pages/guides/getting-started/setting-up-your-domain.mdx - - page: Customer Showcase - path: ./pages/guides/getting-started/customer-showcase.mdx - - section: Reference - contents: - - page: What is docs.yml - path: ./pages/guides/reference/what-is-docs-yml.mdx - - page: Frontmatter - path: ./pages/guides/reference/frontmatter.mdx - - section: Navigation - contents: - - page: Overview - path: ./pages/guides/navigation/overview.mdx - - page: Tabs - path: ./pages/guides/navigation/tabs.mdx - - page: Versions - path: ./pages/guides/navigation/versions.mdx - - page: Products - path: ./pages/guides/navigation/products.mdx - - page: Changelogs - path: ./pages/guides/navigation/changelogs.mdx - - page: API References - path: ./pages/guides/navigation/api-references.mdx - - page: Hiding Content - path: ./pages/guides/navigation/hiding-content.mdx - - section: SEO - contents: - - page: Configuring Slugs - path: ./pages/guides/seo/configuring-slugs.mdx - - page: Redirects - path: ./pages/guides/seo/redirects.mdx - - page: SEO Metadata - path: ./pages/guides/seo/seo-metadata.mdx - - page: Ilms.txt - path: ./pages/guides/seo/ilms-txt.mdx - - section: Authentication - contents: - - page: SSO - path: ./pages/guides/authentication/sso.mdx - - page: RBAC - path: ./pages/guides/authentication/rbac.mdx - - page: API Key Injection - path: ./pages/guides/authentication/api-key-injection.mdx - - section: Enterprise + - page: Overview + path: ./pages/guides/getting-started/overview.mdx + - page: Quickstart + path: ./pages/guides/getting-started/quickstart.mdx + - page: Migrate from an existing site + path: ./pages/guides/getting-started/migrate-from-existing-site.mdx + - page: Setting up your domain + path: ./pages/guides/getting-started/setting-up-your-domain.mdx + - page: Customer Showcase + path: ./pages/guides/getting-started/customer-showcase.mdx + - section: Reference + collapsed: true + contents: + - page: What is docs.yml + path: ./pages/guides/reference/what-is-docs-yml.mdx + - page: Frontmatter + path: ./pages/guides/reference/frontmatter.mdx + - section: Navigation + collapsed: true + contents: + - page: Overview + path: ./pages/guides/navigation/overview.mdx + - page: Tabs + path: ./pages/guides/navigation/tabs.mdx + - page: Versions + path: ./pages/guides/navigation/versions.mdx + - page: Products + path: ./pages/guides/navigation/products.mdx + - page: Changelogs + path: ./pages/guides/navigation/changelogs.mdx + - page: API References + path: ./pages/guides/navigation/api-references.mdx + - page: Hiding Content + path: ./pages/guides/navigation/hiding-content.mdx + - section: SEO + collapsed: true + contents: + - page: Configuring Slugs + path: ./pages/guides/seo/configuring-slugs.mdx + - page: Redirects + path: ./pages/guides/seo/redirects.mdx + - page: SEO Metadata + path: ./pages/guides/seo/seo-metadata.mdx + - page: Ilms.txt + path: ./pages/guides/seo/ilms-txt.mdx + - section: Authentication + collapsed: true + contents: + - page: SSO + path: ./pages/guides/authentication/sso.mdx + - page: RBAC + path: ./pages/guides/authentication/rbac.mdx + - page: API Key Injection + path: ./pages/guides/authentication/api-key-injection.mdx + - section: Enterprise + collapsed: true + contents: + - page: Self-hosted + path: ./pages/guides/enterprise/self-hosted.mdx + - section: Integrations + collapsed: true + contents: + - section: Analytics contents: - - page: Self-hosted - path: ./pages/guides/enterprise/self-hosted.mdx - - section: Integrations + - page: Google + path: ./pages/guides/integrations/analytics/google.mdx + - page: PostHog + path: ./pages/guides/integrations/analytics/posthog.mdx + - page: Fullstory + path: ./pages/guides/integrations/analytics/fullstory.mdx + - page: Segment + path: ./pages/guides/integrations/analytics/segment.mdx + - section: Support contents: - - section: Analytics - contents: - - page: Google - path: ./pages/guides/integrations/analytics/google.mdx - - page: PostHog - path: ./pages/guides/integrations/analytics/posthog.mdx - - page: Fullstory - path: ./pages/guides/integrations/analytics/fullstory.mdx - - page: Segment - path: ./pages/guides/integrations/analytics/segment.mdx - - section: Support - contents: - - page: Postman - path: ./pages/guides/integrations/support/postman.mdx - page: Postman - path: ./pages/guides/integrations/postman.mdx - - page: Feature Flags - path: ./pages/guides/integrations/feature-flags.mdx - - page: Self-hosted - path: ./pages/guides/integrations/self-hosted.mdx + path: ./pages/guides/integrations/support/postman.mdx + - page: Postman + path: ./pages/guides/integrations/postman.mdx + - page: Feature Flags + path: ./pages/guides/integrations/feature-flags.mdx + - page: Self-hosted + path: ./pages/guides/integrations/self-hosted.mdx - section: Component Library contents: - page: Overview diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 0a3f14125..66829584a 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -621,6 +621,10 @@ layout: custom .a-btn { text-decoration: none !important; font-weight: 400 !important; + + svg { + display: none !important; + } } `} @@ -762,7 +766,7 @@ layout: custom Arrow right light Arrow right light - + Customers Arrow right light Arrow right light @@ -783,42 +787,42 @@ layout: custom Docs Preview
- + Quickstart Arrow right Arrow right - + Import your brand language Arrow right light Arrow right light - + Add multiple specs to your docs site Arrow right light Arrow right light - + Set up tabs Arrow right light Arrow right light - + Configure multiple products Arrow right light Arrow right light - + Create versions Arrow right light Arrow right light - + Customize slug from MDX Arrow right light Arrow right light - + See all available components Arrow right light Arrow right light @@ -839,12 +843,12 @@ layout: custom AI Search Mockup
- + Configure Arrow right light Arrow right light - + Customers Arrow right light Arrow right light From 6b30db983394a60cafd635e03c3ac375e62aedc7 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Thu, 3 Jul 2025 09:12:21 -0700 Subject: [PATCH 22/39] feat: added footer image --- fern/products/docs/docs.yml | 6 +-- .../products/home/pages/images/email-dark.svg | 2 +- .../home/pages/images/email-light.svg | 2 +- .../products/home/pages/images/slack-dark.svg | 24 ++++----- .../home/pages/images/slack-light.svg | 24 ++++----- fern/products/home/pages/welcome.mdx | 49 ++++++++++++------- 6 files changed, 58 insertions(+), 49 deletions(-) diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index 33ce58c3f..63c51229b 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -139,7 +139,5 @@ navigation: path: ./pages/component-library/custom-components/reusable-snippets.mdx - page: Custom React Components path: ./pages/component-library/custom-components/custom-react-components.mdx - - section: Changelog - contents: - - page: Overview - path: ./pages/changelog/overview.mdx + - page: Changelog + path: ./pages/changelog/overview.mdx diff --git a/fern/products/home/pages/images/email-dark.svg b/fern/products/home/pages/images/email-dark.svg index a68cd6950..8984dd243 100644 --- a/fern/products/home/pages/images/email-dark.svg +++ b/fern/products/home/pages/images/email-dark.svg @@ -1,3 +1,3 @@ - + diff --git a/fern/products/home/pages/images/email-light.svg b/fern/products/home/pages/images/email-light.svg index 7a90a88aa..ec63dfa15 100644 --- a/fern/products/home/pages/images/email-light.svg +++ b/fern/products/home/pages/images/email-light.svg @@ -1,3 +1,3 @@ - + diff --git a/fern/products/home/pages/images/slack-dark.svg b/fern/products/home/pages/images/slack-dark.svg index ba2cbb726..9709a62bd 100644 --- a/fern/products/home/pages/images/slack-dark.svg +++ b/fern/products/home/pages/images/slack-dark.svg @@ -1,17 +1,17 @@ - - - - - - - - - - + + + + + + + + + + - - + + diff --git a/fern/products/home/pages/images/slack-light.svg b/fern/products/home/pages/images/slack-light.svg index 6b2145ca6..15b4c02b3 100644 --- a/fern/products/home/pages/images/slack-light.svg +++ b/fern/products/home/pages/images/slack-light.svg @@ -1,17 +1,17 @@ - - - - - - - - - - + + + + + + + + + + - - + + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 66829584a..fa8aa6694 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -598,10 +598,14 @@ layout: custom color: var(--grayscale-11); text-decoration: none; transition: color 0.15s ease-in-out; + + svg { + display: none !important; + } } .footer-link:hover { - color: #1e1f24; + color: var(--grayscale-12); } .footer-bottom { @@ -625,6 +629,14 @@ layout: custom svg { display: none !important; } + + &.no-hover { + cursor: default; + &:hover { + background: none !important; + color: var(--grayscale-a11) !important; + } + } } `} @@ -872,8 +884,8 @@ layout: custom

See our most recent product updates.

-
- View + + Docs Arrow right dark Arrow right dark @@ -895,10 +907,10 @@ layout: custom
- Discord Preview - Discord Preview + Discord Preview + Discord Preview -

Discord

+

Slack

Connect with the Fern community.

@@ -938,25 +950,25 @@ layout: custom
@@ -1001,7 +1013,6 @@ layout: custom

Documentation

From df8c15fe82b8a92cc4dca86f3b3d1dbc46348414 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Thu, 3 Jul 2025 12:47:06 -0700 Subject: [PATCH 23/39] feat: added footer image --- fern/assets/styles.css | 634 +++++++++++++++++++++++ fern/products/docs/docs.yml | 1 + fern/products/home/pages/images/soc2.svg | 112 ++++ fern/products/home/pages/welcome.mdx | 346 +++---------- 4 files changed, 808 insertions(+), 285 deletions(-) create mode 100644 fern/products/home/pages/images/soc2.svg diff --git a/fern/assets/styles.css b/fern/assets/styles.css index d732c1787..b164f2fe0 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -159,3 +159,637 @@ div:has(> .fern-product-selector-radio-group):before { } +/* LANDING PAGE */ + +{` + #builtwithfern { + display: none !important; + } + + /*** BACKGROUND ***/ + .background-wrapper { + filter: blur(13.5rem); + will-change: transform, filter; + transform-style: preserve-3d; + transform: translateZ(0); + z-index: -1; + width: 100%; + max-width: 86rem; + display: flex; + position: fixed; + inset: 0%; + margin-right: auto; + margin-left: auto; + pointer-events: none; + top: 0; + left: 0; + opacity: 0.5; + } + .gradient-radial.is-green { + background-color: #dbfdd3; + } + .gradient-radial.is-blue { + background-color: #a7bff7; + } + :is(.dark) .gradient-radial.is-green { + background-color: #17450A; + } + :is(.dark) .gradient-radial.is-blue { + background-color: #1E2E5A; + } + .gradient-radial { + will-change: transform; + transform-style: preserve-3d; + border-radius: 50%; + width: 12rem; + height: 19rem; + display: block; + position: absolute; + transform: translateZ(0); + } + .gradient-radial.hero-1 { + transform-style: preserve-3d; + transform: rotate(-34deg)scale(1.4,.5) + position: absolute; + top: 54%; + left: 0%; + } + .gradient-radial.hero-2 { + transform-style: preserve-3d; + transform: rotate(-74deg)scale(1.7,1.1); + position: absolute; + top: 40%; + left: -2%; + } + .gradient-radial.hero-3 { + transform-style: preserve-3d; + transform: rotate(-20deg)scaleY(1.4) + position: absolute; + top: 20%; + left: 8%; + } + .gradient-radial.hero-4 { + transform-style: preserve-3d; + transform: rotate(37deg)scale(1.1,1.5) + position: absolute; + top: 37%; + right: 11%; + } + .gradient-radial.hero-5 { + transform-style: preserve-3d; + transform: rotate(37deg)scale(.9,1.8) + position: absolute; + top: 52%; + right: -7%; + } + + /*** PAGE ***/ + .page-container { + min-height: 100vh; + position: relative; + } + + .dashed-pattern-left { + position: absolute; + left: -24px; + top: 0; + height: 100%; + width: 24px; + opacity: 1; + pointer-events: none; + border-right: 1px solid var(--grayscale-5); + border-left: 1px solid var(--grayscale-5); + } + + .dashed-pattern-right { + position: absolute; + right: -24px; + top: 0; + height: 100%; + width: 24px; + opacity: 1; + pointer-events: none; + border-right: 1px solid var(--grayscale-5); + border-left: 1px solid var(--grayscale-5); + } + + .dashed-gradient { + height: 100%; + width: 100%; + background-image: url('data:image/svg+xml;utf8,'); + background-repeat: repeat; + background-size: 12px 12px; + } + + :is(.dark) .dashed-gradient { + background-image: url('data:image/svg+xml;utf8,'); + } + + .main-content { + max-width: 60rem; + margin: 0 auto; + position: relative; + padding: 3rem 0; + } + + /*** HERO ***/ + .hero-section { + margin-bottom: 3rem; + } + + .hero-title-container { + margin-bottom: 2rem; + padding: 0 2rem; + } + + .hero-title { + font-size: 2.25rem; + font-weight: bold; + letter-spacing: -0.025em; + color: var(--grayscale-12); + } + + .hero-description { + font-size: 1rem; + color: var(--grayscale-10); + } + + .feature-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 1fr); + } + + .sdks-card { + border-top: 1px solid var(--grayscale-5); + padding: 2rem; + display: flex; + flex-direction: column; + gap: 1.5rem; + grid-column: 1 / 2; + grid-row: 1 / 2; + } + + .docs-card { + border-top: 1px solid var(--grayscale-5); + border-left: 1px solid var(--grayscale-5); + padding: 2rem; + display: flex; + flex-direction: column; + gap: 1rem; + grid-row: 1 / 3; + } + + .ai-search-card { + border-top: 1px solid var(--grayscale-5); + padding: 2rem; + display: flex; + flex-direction: column; + gap: 1.5rem; + } + + .card-header { + display: flex; + flex-direction: column; + gap: 0.25rem; + } + + .card-title { + font-size: 1.25rem; + font-weight: bold; + color: var(--grayscale-12); + } + + .card-description { + font-size: 1rem; + color: var(--grayscale-10); + } + + .card-description-alt { + font-size: 1rem; + color: rgba(0,7,20,0.62); + } + + .sdks-preview { + width: 100%; + position: relative; + } + + .sdks-preview-img { + width: 100%; + object-fit: cover; + } + + .docs-preview-img { + width: 100%; + object-fit: cover; + } + + .ai-search-preview-img { + width: 100%; + object-fit: cover; + } + + .language-icons { + display: flex; + align-items: center; + gap: 0.75rem; + } + + .language-icons-label { + font-size: 0.875rem; + color: #62636c; + } + + .language-icon { + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border: none; + background: none; + cursor: pointer; + padding: 0; + border-radius: 0.25rem; + + &:hover { + background-color: var(--grayscale-a3); + } + } + + .language-icon-img { + width: 16px; + height: 16px; + object-fit: contain; + } + + .action-buttons { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + } + + .action-buttons-vertical { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + + .btn-primary { + border: 1px solid var(--accent-9); + border-radius: 6px; + background-color: var(--accent-9); + color: var(--accent-contrast); + text-align: center; + letter-spacing: var(--_typography---letter-spacing--button); + white-space: nowrap; + justify-content: center; + align-items: center; + padding: .5rem 0.75rem; + font-size: .875rem; + font-weight: 400; + line-height: 1.2; + text-decoration: none; + transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); + display: flex; + box-shadow: 0 1.5em 1.375em 0 #0087000a, 0 .5em .5em #0087000f, 0 .25em .25em #00870012, 0 .15625em .125rem #00870014, 0 .071875em .75em #0087001f; + cursor: pointer; + width: fit-content; + gap: 0.5rem; + + &:hover { + border-color: var(--accent-10); + background-color: var(--accent-10); + box-shadow: 0 1.5em 1.375em 0 #0000000a, 0 .5em .5em #0000000f, 0 .25em .25em #00000012, 0 .15625em .125rem #00000014, 0 .071875em .75em #0000001f; + } + } + + .btn-secondary { + background-color: var(--grayscale-a3); + color: var(--grayscale-a10); + padding: 0.5rem 0.75rem; + border-radius: 6px; + font-size: 0.875rem; + border: none; + cursor: pointer; + transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); + width: fit-content; + display: flex; + align-items: center; + gap: 0.5rem; + + &:hover { + background-color: var(--grayscale-a4); + color: var(--grayscale-a12); + } + } + + .community-section { + border-top: 1px solid var(--grayscale-5); + border-bottom: 1px solid var(--grayscale-5); + padding: 3rem 2rem;; + } + + .community-title-container { + margin-bottom: 2rem; + } + + .section-title { + font-size: 1.5rem; + font-weight: bold; + color: #1e1f24; + } + + .community-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 2rem; + } + + .community-card { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 0; + align-items: flex-start; + } + + .community-card-title { + font-size: 1rem; + font-weight: bold; + color: var(--grayscale-12); + } + + .community-card-description { + font-size: 0.875rem; + color: var(--grayscale-10); + margin-bottom: 0.5rem; + } + + .community-card-arrow { + background-color: rgba(61,37,20,0.05); + border-radius: 0.5rem; + padding: 0.5rem; + align-self: flex-start; + } + + .twitter-strikethrough { + text-decoration: line-through; + } + + .help-section { + border-bottom: 1px solid var(--grayscale-5); + padding: 3rem 2rem; + margin-bottom: 3rem; + display: flex; + flex-direction: column; + gap: 1rem; + } + + .help-header { + margin-bottom: 1.5rem; + } + + .help-title { + font-size: 1.5rem; + font-weight: bold; + color: #1e1f24; + margin-bottom: 0.5rem; + } + + .help-description { + font-size: 1rem; + color: #62636c; + } + + .help-buttons { + display: flex; + gap: 1.5rem; + } + + .help-button { + border: 1px solid #e0e1e6; + border-radius: 0.75rem; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + padding: 0.75rem; + display: flex; + align-items: center; + gap: 0.5rem; + cursor: pointer; + } + + .help-button-text { + font-size: 1rem; + color: var(--grayscale-12); + } + + .footer { + padding: 3rem 2rem; + } + + .footer-top { + display: flex; + justify-content: space-between; + gap: 2rem; + margin-bottom: 3rem; + position: relative; + } + + .footer-left { + display: flex; + flex-direction: column; + gap: 1.5rem; + } + + .footer-logo { + display: flex; + align-items: center; + gap: 0.25rem; + + svg { + display: none !important; + } + } + + .footer-logo-img { + height: 1rem; + margin: 0; + } + + .footer-logo-frame { + position: absolute; + top: 50%; + left: 0; + transform: translate(-32px, calc(-50% - 4px)); + } + + .footer-status { + display: flex; + flex-direction: row; + gap: 1rem; + } + + .status-badge { + display: flex; + align-items: center; + gap: 0.5rem; + background-color: rgba(255,255,255,0.05); + border-radius: 9999px; + padding: 0.25rem 0.75rem; + align-self: flex-start; + } + + .status-indicator { + width: 0.375rem; + height: 0.375rem; + background-color: #008700; + border-radius: 50%; + border: 4px solid #e2f4e2; + } + + .status-text { + font-size: 0.875rem; + color: #8b8d98; + } + + .soc2-badge { + display: flex; + align-items: center; + gap: 0.5rem; + border-radius: 9999px; + padding: 0.25rem 0.75rem; + align-self: flex-start; + } + + .footer-right { + display: flex; + justify-content: flex-end; + } + + .newsletter-container { + background-color: var(--grayscale-2); + border: 1px solid var(--grayscale-6); + border-radius: 0.5rem; + padding: 0.75rem; + width: 20rem; + } + + .newsletter-label { + font-size: 0.75rem; + color: var(--grayscale-10); + margin-bottom: 0.75rem; + font-family: var(--font-code); + } + + .newsletter-form { + display: flex; + gap: 0.5rem; + } + + .newsletter-input { + display: flex; + padding: 12px; + flex-direction: column; + justify-content: center; + align-items: flex-start; + flex: 1 0 0; + border-radius: 8px; + border: 0.5px solid var(--grayscale-8); + background: var(--grayscale-1); + box-shadow: 0px 0px 0px 0.559px rgba(14, 63, 126, 0.04), 0px 0.559px 0.559px -0.28px rgba(42, 51, 69, 0.04), 0px 1.677px 1.677px -0.839px rgba(42, 51, 70, 0.04), 0px 3.354px 3.354px -1.677px rgba(42, 51, 70, 0.04), 0px 6.709px 6.709px -3.354px rgba(14, 63, 126, 0.04), 0px 13.417px 13.417px -6.709px rgba(14, 63, 126, 0.04), 4.472px 4.472px 32.336px 0px var(--radix-gray-2, #F9F9FB); + text-decoration: none; + font-family: var(--font-code); + font-size: 0.875rem; + font-style: normal; + font-weight: 400; + } + + .newsletter-input-text { + font-size: 0.75rem; + color: #80828d; + } + + .newsletter-button { + background-color: #008700; + color: white; + padding: 0.5rem; + border-radius: 0.5rem; + border: none; + cursor: pointer; + } + + .footer-links { + display: flex; + gap: 2rem; + padding-top: 2rem; + align-items: flex-end; + } + + .footer-column { + display: flex; + flex-direction: column; + gap: 1rem; + width: 170px; + } + + .footer-column-title { + font-size: 0.875rem; + font-weight: 400; + color: var(--grayscale-9); + letter-spacing: -0.025em; + } + + .footer-column-links { + display: flex; + flex-direction: column; + gap: 1rem; + } + + .footer-link { + font-weight: 400; + font-size: 0.875rem; + color: var(--grayscale-11); + text-decoration: none; + transition: color 0.15s ease-in-out; + + svg { + display: none !important; + } + } + + .footer-link:hover { + color: var(--grayscale-12); + } + + .footer-bottom { + display: flex; + justify-content: space-between; + padding-top: 3rem; + } + + .footer-bottom-text { + font-weight: 400; + font-size: 0.875rem; + color: var(--grayscale-10); + text-decoration: none; + transition: color 0.15s ease-in-out; + } + + .a-btn { + text-decoration: none !important; + font-weight: 400 !important; + + svg { + display: none !important; + } + + &.no-hover { + cursor: default; + &:hover { + background: none !important; + color: var(--grayscale-a11) !important; + } + } + } +} diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index 63c51229b..2fffe92c5 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -141,3 +141,4 @@ navigation: path: ./pages/component-library/custom-components/custom-react-components.mdx - page: Changelog path: ./pages/changelog/overview.mdx + \ No newline at end of file diff --git a/fern/products/home/pages/images/soc2.svg b/fern/products/home/pages/images/soc2.svg new file mode 100644 index 000000000..950ce1025 --- /dev/null +++ b/fern/products/home/pages/images/soc2.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index fa8aa6694..87d728fe5 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -12,84 +12,6 @@ layout: custom display: none !important; } - /*** BACKGROUND ***/ - .background-wrapper { - filter: blur(13.5rem); - will-change: transform, filter; - transform-style: preserve-3d; - transform: translateZ(0); - z-index: -1; - width: 100%; - max-width: 86rem; - display: flex; - position: fixed; - inset: 0%; - margin-right: auto; - margin-left: auto; - pointer-events: none; - top: 0; - left: 0; - opacity: 0.5; - } - .gradient-radial.is-green { - background-color: #dbfdd3; - } - .gradient-radial.is-blue { - background-color: #a7bff7; - } - :is(.dark) .gradient-radial.is-green { - background-color: #17450A; - } - :is(.dark) .gradient-radial.is-blue { - background-color: #1E2E5A; - } - .gradient-radial { - will-change: transform; - transform-style: preserve-3d; - border-radius: 50%; - width: 12rem; - height: 19rem; - display: block; - position: absolute; - transform: translateZ(0); - } - .gradient-radial.hero-1 { - transform-style: preserve-3d; - transform: rotate(-34deg)scale(1.4,.5) - position: absolute; - top: 54%; - left: 0%; - } - .gradient-radial.hero-2 { - transform-style: preserve-3d; - transform: rotate(-74deg)scale(1.7,1.1); - position: absolute; - top: 40%; - left: -2%; - } - .gradient-radial.hero-3 { - transform-style: preserve-3d; - transform: rotate(-20deg)scaleY(1.4) - position: absolute; - top: 20%; - left: 8%; - } - .gradient-radial.hero-4 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(1.1,1.5) - position: absolute; - top: 37%; - right: 11%; - } - .gradient-radial.hero-5 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(.9,1.8) - position: absolute; - top: 52%; - right: -7%; - } - - /*** PAGE ***/ .page-container { min-height: 100vh; position: relative; @@ -138,7 +60,6 @@ layout: custom padding: 3rem 0; } - /*** HERO ***/ .hero-section { margin-bottom: 3rem; } @@ -211,11 +132,6 @@ layout: custom color: var(--grayscale-10); } - .card-description-alt { - font-size: 1rem; - color: rgba(0,7,20,0.62); - } - .sdks-preview { width: 100%; position: relative; @@ -282,71 +198,16 @@ layout: custom gap: 0.75rem; } - .btn-primary { - border: 1px solid var(--accent-9); - border-radius: 6px; - background-color: var(--accent-9); - color: var(--accent-contrast); - text-align: center; - letter-spacing: var(--_typography---letter-spacing--button); - white-space: nowrap; - justify-content: center; - align-items: center; - padding: .5rem 0.75rem; - font-size: .875rem; - font-weight: 400; - line-height: 1.2; - text-decoration: none; - transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); - display: flex; - box-shadow: 0 1.5em 1.375em 0 #0087000a, 0 .5em .5em #0087000f, 0 .25em .25em #00870012, 0 .15625em .125rem #00870014, 0 .071875em .75em #0087001f; - cursor: pointer; - width: fit-content; - gap: 0.5rem; - - &:hover { - border-color: var(--accent-10); - background-color: var(--accent-10); - box-shadow: 0 1.5em 1.375em 0 #0000000a, 0 .5em .5em #0000000f, 0 .25em .25em #00000012, 0 .15625em .125rem #00000014, 0 .071875em .75em #0000001f; - } - } - - .btn-secondary { - background-color: var(--grayscale-a3); - color: var(--grayscale-a10); - padding: 0.5rem 0.75rem; - border-radius: 6px; - font-size: 0.875rem; - border: none; - cursor: pointer; - transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); - width: fit-content; - display: flex; - align-items: center; - gap: 0.5rem; - - &:hover { - background-color: var(--grayscale-a4); - color: var(--grayscale-a12); - } - } - .community-section { border-top: 1px solid var(--grayscale-5); border-bottom: 1px solid var(--grayscale-5); - padding: 3rem 2rem;; + padding: 3rem 2rem; } .community-title-container { margin-bottom: 2rem; } - .section-title { - font-size: 1.5rem; - font-weight: bold; - color: #1e1f24; - } - .community-grid { display: grid; grid-template-columns: repeat(4, 1fr); @@ -373,13 +234,6 @@ layout: custom margin-bottom: 0.5rem; } - .community-card-arrow { - background-color: rgba(61,37,20,0.05); - border-radius: 0.5rem; - padding: 0.5rem; - align-self: flex-start; - } - .twitter-strikethrough { text-decoration: line-through; } @@ -393,43 +247,11 @@ layout: custom gap: 1rem; } - .help-header { - margin-bottom: 1.5rem; - } - - .help-title { - font-size: 1.5rem; - font-weight: bold; - color: #1e1f24; - margin-bottom: 0.5rem; - } - - .help-description { - font-size: 1rem; - color: #62636c; - } - .help-buttons { display: flex; gap: 1.5rem; } - .help-button { - border: 1px solid #e0e1e6; - border-radius: 0.75rem; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - padding: 0.75rem; - display: flex; - align-items: center; - gap: 0.5rem; - cursor: pointer; - } - - .help-button-text { - font-size: 1rem; - color: var(--grayscale-12); - } - .footer { padding: 3rem 2rem; } @@ -442,18 +264,12 @@ layout: custom position: relative; } - .footer-left { - display: flex; - flex-direction: column; - gap: 1.5rem; - } - .footer-logo { display: flex; align-items: center; gap: 0.25rem; - svg { + svg { display: none !important; } } @@ -480,23 +296,37 @@ layout: custom display: flex; align-items: center; gap: 0.5rem; - background-color: rgba(255,255,255,0.05); border-radius: 9999px; padding: 0.25rem 0.75rem; align-self: flex-start; + cursor: pointer; + text-decoration: none; + + svg { + display: none !important; + } + + &:hover { + background-color: var(--grayscale-a4); + + .status-text { + color: var(--grayscale-12); + } + } } .status-indicator { width: 0.375rem; height: 0.375rem; - background-color: #008700; + background-color: var(--green-a10); border-radius: 50%; - border: 4px solid #e2f4e2; + box-shadow: 0 0 0 4px var(--green-a4); } .status-text { font-size: 0.875rem; - color: #8b8d98; + color: var(--grayscale-10); + font-weight: 400; } .soc2-badge { @@ -508,61 +338,8 @@ layout: custom align-self: flex-start; } - .footer-right { - display: flex; - justify-content: flex-end; - } - - .newsletter-container { - background-color: var(--grayscale-2); - border: 1px solid var(--grayscale-6); - border-radius: 0.5rem; - padding: 0.75rem; - width: 20rem; - } - - .newsletter-label { - font-size: 0.75rem; - color: var(--grayscale-10); - margin-bottom: 0.75rem; - font-family: var(--font-code); - } - - .newsletter-form { - display: flex; - gap: 0.5rem; - } - - .newsletter-input { - display: flex; - padding: 12px; - flex-direction: column; - justify-content: center; - align-items: flex-start; - flex: 1 0 0; - border-radius: 8px; - border: 0.5px solid var(--grayscale-8); - background: var(--grayscale-1); - box-shadow: 0px 0px 0px 0.559px rgba(14, 63, 126, 0.04), 0px 0.559px 0.559px -0.28px rgba(42, 51, 69, 0.04), 0px 1.677px 1.677px -0.839px rgba(42, 51, 70, 0.04), 0px 3.354px 3.354px -1.677px rgba(42, 51, 70, 0.04), 0px 6.709px 6.709px -3.354px rgba(14, 63, 126, 0.04), 0px 13.417px 13.417px -6.709px rgba(14, 63, 126, 0.04), 4.472px 4.472px 32.336px 0px var(--radix-gray-2, #F9F9FB); - text-decoration: none; - font-family: var(--font-code); - font-size: 0.875rem; - font-style: normal; - font-weight: 400; - } - - .newsletter-input-text { - font-size: 0.75rem; - color: #80828d; - } - - .newsletter-button { - background-color: #008700; - color: white; - padding: 0.5rem; - border-radius: 0.5rem; - border: none; - cursor: pointer; + .soc2-badge-img { + width: 1.5rem; } .footer-links { @@ -570,6 +347,12 @@ layout: custom gap: 2rem; padding-top: 2rem; align-items: flex-end; + justify-content: space-between; + } + + .footer-columns { + display: flex; + gap: 2rem; } .footer-column { @@ -608,12 +391,6 @@ layout: custom color: var(--grayscale-12); } - .footer-bottom { - display: flex; - justify-content: space-between; - padding-top: 3rem; - } - .footer-bottom-text { font-weight: 400; font-size: 0.875rem; @@ -899,7 +676,7 @@ layout: custom

Follow progress and contribute to the codebase.

- + View Arrow right dark Arrow right dark @@ -914,7 +691,7 @@ layout: custom

Connect with the Fern community.

-
+ View Twitter Preview Twitter Preview @@ -931,7 +708,7 @@ layout: custom

Get updates on the Fern platform.

-
+ View Twitter Preview Twitter Preview @@ -950,7 +727,7 @@ layout: custom
@@ -985,13 +762,14 @@ layout: custom
- +
- Soc 2 Type 1 + Soc 2 Type II + Soc 2 Type II
@@ -1010,39 +788,37 @@ layout: custom
*/} -
-

Documentation

-
- OpenAPI Compatibility - SDKs - Docs +
+
+

Documentation

+
-
-
-

Resources

-
- Blog - Support - Pricing - Slack +
+

Resources

+
-
- - {/*
-
© 2025 Fern • Birch Solutions, Inc.
-
Located in Brooklyn, New York.
-
*/}
\ No newline at end of file From c01541052b33ff014f1512e5d796183b9ef68617 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Thu, 3 Jul 2025 12:50:00 -0700 Subject: [PATCH 24/39] feat: added footer image --- fern/products/home/pages/welcome.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index f5fbf5807..1672b48e0 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -857,7 +857,7 @@ layout: custom
- Soc 2 Type II + Soc 2 Type II Soc 2 Type II
From 6616c1bc5360ae579bb1cecf87478896161e85b0 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Sun, 6 Jul 2025 22:19:45 -0700 Subject: [PATCH 25/39] feat: added footer image --- .../home/pages/images/recruiting-flyer.svg | 1275 +++++++++++++++++ fern/products/home/pages/welcome.mdx | 342 +++-- 2 files changed, 1516 insertions(+), 101 deletions(-) create mode 100644 fern/products/home/pages/images/recruiting-flyer.svg diff --git a/fern/products/home/pages/images/recruiting-flyer.svg b/fern/products/home/pages/images/recruiting-flyer.svg new file mode 100644 index 000000000..44d2b0f16 --- /dev/null +++ b/fern/products/home/pages/images/recruiting-flyer.svg @@ -0,0 +1,1275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 1672b48e0..6f6b14cbd 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -10,86 +10,6 @@ layout: custom {` #builtwithfern { display: none !important; -<<<<<<< HEAD -======= - } - - /*** BACKGROUND ***/ - .background-wrapper { - filter: blur(13.5rem); - will-change: transform, filter; - transform-style: preserve-3d; - transform: translateZ(0); - z-index: -1; - width: 100%; - max-width: 86rem; - display: flex; - position: fixed; - inset: 0%; - margin-right: auto; - margin-left: auto; - pointer-events: none; - top: 0; - left: 0; - opacity: 0.5; - } - .gradient-radial.is-green { - background-color: #dbfdd3; - } - .gradient-radial.is-blue { - background-color: #a7bff7; - } - :is(.dark) .gradient-radial.is-green { - background-color: #17450A; - } - :is(.dark) .gradient-radial.is-blue { - background-color: #1E2E5A; - } - .gradient-radial { - will-change: transform; - transform-style: preserve-3d; - border-radius: 50%; - width: 12rem; - height: 19rem; - display: block; - position: absolute; - transform: translateZ(0); - } - .gradient-radial.hero-1 { - transform-style: preserve-3d; - transform: rotate(-34deg)scale(1.4,.5) - position: absolute; - top: 54%; - left: 0%; - } - .gradient-radial.hero-2 { - transform-style: preserve-3d; - transform: rotate(-74deg)scale(1.7,1.1); - position: absolute; - top: 40%; - left: -2%; - } - .gradient-radial.hero-3 { - transform-style: preserve-3d; - transform: rotate(-20deg)scaleY(1.4) - position: absolute; - top: 20%; - left: 8%; - } - .gradient-radial.hero-4 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(1.1,1.5) - position: absolute; - top: 37%; - right: 11%; - } - .gradient-radial.hero-5 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(.9,1.8) - position: absolute; - top: 52%; - right: -7%; ->>>>>>> origin/main } .page-container { @@ -102,7 +22,7 @@ layout: custom left: -24px; top: 0; height: 100%; - width: 24px; + width: 1.5rem; opacity: 1; pointer-events: none; border-right: 1px solid var(--grayscale-5); @@ -114,7 +34,7 @@ layout: custom right: -24px; top: 0; height: 100%; - width: 24px; + width: 1.5rem; opacity: 1; pointer-events: none; border-right: 1px solid var(--grayscale-5); @@ -352,11 +272,22 @@ layout: custom svg { display: none !important; } + + img { + transition: filter 150ms ease; + } + + &:hover { + img { + filter: saturate(1) opacity(1); + } + } } .footer-logo-img { height: 1rem; margin: 0; + filter: saturate(0) opacity(0.7); } .footer-logo-frame { @@ -381,6 +312,7 @@ layout: custom align-self: flex-start; cursor: pointer; text-decoration: none; + transition: background-color 150ms ease, color 150ms ease; svg { display: none !important; @@ -414,8 +346,22 @@ layout: custom align-items: center; gap: 0.5rem; border-radius: 9999px; - padding: 0.25rem 0.75rem; + padding: 0.25rem 0.75rem 0.25rem 0.25rem; align-self: flex-start; + text-decoration: none; + transition: background-color 150ms ease, color 150ms ease; + + svg { + display: none !important; + } + + &:hover { + background-color: var(--grayscale-a4); + + .status-text { + color: var(--grayscale-12); + } + } } .soc2-badge-img { @@ -469,15 +415,6 @@ layout: custom .footer-link:hover { color: var(--grayscale-12); -<<<<<<< HEAD -======= - } - - .footer-bottom { - display: flex; - justify-content: space-between; - padding-top: 3rem; ->>>>>>> origin/main } .footer-bottom-text { @@ -491,6 +428,7 @@ layout: custom .a-btn { text-decoration: none !important; font-weight: 400 !important; + width: fit-content !important; svg { display: none !important; @@ -504,6 +442,214 @@ layout: custom } } } + + /* Responsive Design - Mobile First */ + @media (max-width: 640px) { + .main-content { + padding: 2rem 1.5rem; + } + + .dashed-pattern-left { + left: 0px; + } + + .dashed-pattern-right { + right: 0px; + } + + .hero-section { + margin-bottom: 2rem; + } + + .hero-title-container { + padding: 0 1.5rem; + } + + .feature-grid { + grid-template-columns: 1fr; + grid-template-rows: auto; + gap: 0; + } + + .sdks-card { + padding: 1.5rem; + } + + .docs-card { + padding: 1.5rem; + border-left: none; + grid-column: 1; + grid-row: auto; + } + + .ai-search-card { + padding: 1.5rem; + } + + .card-title { + font-size: 1.375rem; + } + + .card-description { + font-size: 1.0625rem; + } + + .language-icons { + flex-wrap: wrap; + gap: 1rem; + } + + .language-icons-label { + width: 100%; + } + + .language-icon { + width: 2rem; + height: 2rem; + margin: -0.25rem; + + &:hover { + background-color: var(--grayscale-a4); + transform: scale(1.1); + transition: all 0.2s ease; + } + } + + .language-icon-img { + width: 20px; + height: 20px; + } + + .action-buttons { + flex-direction: row; + gap: 0.75rem; + align-items: stretch; + flex-wrap: wrap; + + } + + .action-buttons-vertical { + gap: 0.75rem; + } + + .community-section { + padding: 2rem 1.5rem; + } + + .community-grid { + grid-template-columns: 1fr; + gap: 2rem; + } + + .community-card { + border-radius: 0.5rem; + transition: all 0.2s ease; + + &:hover { + border-color: var(--grayscale-6); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + } + } + + .help-section { + padding: 2rem 1.5rem; + } + + .help-buttons { + flex-direction: column; + gap: 1rem; + } + + .footer { + padding: 2rem 1rem; + } + + .footer-top { + flex-direction: column; + gap: 1.5rem; + margin-bottom: 2rem; + } + + .footer-logo-frame { + transform: translate(-24px, calc(-50% - 4px)); + } + + .footer-status { + flex-direction: column; + gap: 0.75rem; + } + + .footer-links { + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + padding-top: 2rem; + align-items: flex-start; + } + + .footer-columns { + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + width: 100%; + order: 1; + } + + .footer-column { + width: 100%; + } + + .footer-bottom-text { + order: 2; + } + } + + /* Tablet breakpoint - Better use of space */ + @media (max-width: 720px) and (min-width: 481px) { + .community-grid { + grid-template-columns: repeat(2, 1fr); + } + + .hero-title { + font-size: 2rem; + } + + .feature-grid { + gap: 1px; + } + + .footer-columns { + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + } + + .footer-column { + width: calc(50% - 1rem); + min-width: 200px; + } + } + + /* Very small screens */ + @media (max-width: 480px) { + .hero-title { + font-size: 1.75rem; + } + + .card-title { + font-size: 1.25rem; + } + + .language-icon { + width: 28px; + height: 28px; + } + + .language-icon-img { + width: 16px; + height: 16px; + } + } `} @@ -811,7 +957,7 @@ layout: custom

Help

- We're lightning-fast with support - you'll typically hear back from us in hours, not days! + We're lightning-fast with support! If you're a customer, reach out via your dedicated Slack channel.

@@ -829,12 +975,6 @@ layout: custom Email us - -
- Slack - Slack - Fern Slack (for customers only) -
@@ -856,10 +996,10 @@ layout: custom All systems operational - + From d82979a9896f99308986cb8d7625c80a8cc975db Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 7 Jul 2025 07:32:47 -0700 Subject: [PATCH 26/39] feat: added mobile styling --- fern/products/home/pages/welcome.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 6f6b14cbd..0a08c9afa 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -366,6 +366,8 @@ layout: custom .soc2-badge-img { width: 1.5rem; + background-color: #62636C; + border-radius: 1000px; } .footer-links { @@ -561,7 +563,7 @@ layout: custom } .footer { - padding: 2rem 1rem; + padding: 2rem 1.5rem; } .footer-top { @@ -571,20 +573,21 @@ layout: custom } .footer-logo-frame { - transform: translate(-24px, calc(-50% - 4px)); + transform: translate(-32px, calc(-50% - 68px)); } .footer-status { flex-direction: column; gap: 0.75rem; + padding-top: 2rem; } .footer-links { display: grid; grid-template-columns: 1fr; gap: 1.5rem; - padding-top: 2rem; align-items: flex-start; + padding-top: 1rem; } .footer-columns { From 57f312a1139aa8bb5b30faf57f353bde0b5e621a Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 7 Jul 2025 07:41:47 -0700 Subject: [PATCH 27/39] feat: added mobile styling --- fern/assets/styles.css | 537 +++++++++++----------- fern/products/home/pages/welcome.mdx | 652 +-------------------------- 2 files changed, 272 insertions(+), 917 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index 98b29e2dc..9b9d5b4d5 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -159,103 +159,17 @@ div:has(> .fern-product-selector-radio-group):before { } -<<<<<<< HEAD -/* LANDING PAGE */ - -{` - #builtwithfern { - display: none !important; - } - - /*** BACKGROUND ***/ - .background-wrapper { - filter: blur(13.5rem); - will-change: transform, filter; - transform-style: preserve-3d; - transform: translateZ(0); - z-index: -1; - width: 100%; - max-width: 86rem; - display: flex; - position: fixed; - inset: 0%; - margin-right: auto; - margin-left: auto; - pointer-events: none; - top: 0; - left: 0; - opacity: 0.5; - } - .gradient-radial.is-green { - background-color: #dbfdd3; - } - .gradient-radial.is-blue { - background-color: #a7bff7; - } - :is(.dark) .gradient-radial.is-green { - background-color: #17450A; - } - :is(.dark) .gradient-radial.is-blue { - background-color: #1E2E5A; - } - .gradient-radial { - will-change: transform; - transform-style: preserve-3d; - border-radius: 50%; - width: 12rem; - height: 19rem; - display: block; - position: absolute; - transform: translateZ(0); - } - .gradient-radial.hero-1 { - transform-style: preserve-3d; - transform: rotate(-34deg)scale(1.4,.5) - position: absolute; - top: 54%; - left: 0%; - } - .gradient-radial.hero-2 { - transform-style: preserve-3d; - transform: rotate(-74deg)scale(1.7,1.1); - position: absolute; - top: 40%; - left: -2%; - } - .gradient-radial.hero-3 { - transform-style: preserve-3d; - transform: rotate(-20deg)scaleY(1.4) - position: absolute; - top: 20%; - left: 8%; - } - .gradient-radial.hero-4 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(1.1,1.5) - position: absolute; - top: 37%; - right: 11%; - } - .gradient-radial.hero-5 { - transform-style: preserve-3d; - transform: rotate(37deg)scale(.9,1.8) - position: absolute; - top: 52%; - right: -7%; - } - - /*** PAGE ***/ - .page-container { - min-height: 100vh; - position: relative; - } +/* LANDING */ +.lp-page-container { + min-height: 100vh; + position: relative; .dashed-pattern-left { position: absolute; left: -24px; top: 0; height: 100%; - width: 24px; + width: 1.5rem; opacity: 1; pointer-events: none; border-right: 1px solid var(--grayscale-5); @@ -267,7 +181,7 @@ div:has(> .fern-product-selector-radio-group):before { right: -24px; top: 0; height: 100%; - width: 24px; + width: 1.5rem; opacity: 1; pointer-events: none; border-right: 1px solid var(--grayscale-5); @@ -282,7 +196,7 @@ div:has(> .fern-product-selector-radio-group):before { background-size: 12px 12px; } - :is(.dark) .dashed-gradient { + &:is(.dark) .dashed-gradient { background-image: url('data:image/svg+xml;utf8,'); } @@ -293,7 +207,6 @@ div:has(> .fern-product-selector-radio-group):before { padding: 3rem 0; } - /*** HERO ***/ .hero-section { margin-bottom: 3rem; } @@ -366,11 +279,6 @@ div:has(> .fern-product-selector-radio-group):before { color: var(--grayscale-10); } - .card-description-alt { - font-size: 1rem; - color: rgba(0,7,20,0.62); - } - .sdks-preview { width: 100%; position: relative; @@ -437,71 +345,16 @@ div:has(> .fern-product-selector-radio-group):before { gap: 0.75rem; } - .btn-primary { - border: 1px solid var(--accent-9); - border-radius: 6px; - background-color: var(--accent-9); - color: var(--accent-contrast); - text-align: center; - letter-spacing: var(--_typography---letter-spacing--button); - white-space: nowrap; - justify-content: center; - align-items: center; - padding: .5rem 0.75rem; - font-size: .875rem; - font-weight: 400; - line-height: 1.2; - text-decoration: none; - transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); - display: flex; - box-shadow: 0 1.5em 1.375em 0 #0087000a, 0 .5em .5em #0087000f, 0 .25em .25em #00870012, 0 .15625em .125rem #00870014, 0 .071875em .75em #0087001f; - cursor: pointer; - width: fit-content; - gap: 0.5rem; - - &:hover { - border-color: var(--accent-10); - background-color: var(--accent-10); - box-shadow: 0 1.5em 1.375em 0 #0000000a, 0 .5em .5em #0000000f, 0 .25em .25em #00000012, 0 .15625em .125rem #00000014, 0 .071875em .75em #0000001f; - } - } - - .btn-secondary { - background-color: var(--grayscale-a3); - color: var(--grayscale-a10); - padding: 0.5rem 0.75rem; - border-radius: 6px; - font-size: 0.875rem; - border: none; - cursor: pointer; - transition: box-shadow .3s cubic-bezier(.19,1,.22,1), color .3s cubic-bezier(.19,1,.22,1), background-color .3s cubic-bezier(.19,1,.22,1); - width: fit-content; - display: flex; - align-items: center; - gap: 0.5rem; - - &:hover { - background-color: var(--grayscale-a4); - color: var(--grayscale-a12); - } - } - .community-section { border-top: 1px solid var(--grayscale-5); border-bottom: 1px solid var(--grayscale-5); - padding: 3rem 2rem;; + padding: 3rem 2rem; } .community-title-container { margin-bottom: 2rem; } - .section-title { - font-size: 1.5rem; - font-weight: bold; - color: #1e1f24; - } - .community-grid { display: grid; grid-template-columns: repeat(4, 1fr); @@ -528,13 +381,6 @@ div:has(> .fern-product-selector-radio-group):before { margin-bottom: 0.5rem; } - .community-card-arrow { - background-color: rgba(61,37,20,0.05); - border-radius: 0.5rem; - padding: 0.5rem; - align-self: flex-start; - } - .twitter-strikethrough { text-decoration: line-through; } @@ -548,43 +394,11 @@ div:has(> .fern-product-selector-radio-group):before { gap: 1rem; } - .help-header { - margin-bottom: 1.5rem; - } - - .help-title { - font-size: 1.5rem; - font-weight: bold; - color: #1e1f24; - margin-bottom: 0.5rem; - } - - .help-description { - font-size: 1rem; - color: #62636c; - } - .help-buttons { display: flex; gap: 1.5rem; } - .help-button { - border: 1px solid #e0e1e6; - border-radius: 0.75rem; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - padding: 0.75rem; - display: flex; - align-items: center; - gap: 0.5rem; - cursor: pointer; - } - - .help-button-text { - font-size: 1rem; - color: var(--grayscale-12); - } - .footer { padding: 3rem 2rem; } @@ -597,25 +411,30 @@ div:has(> .fern-product-selector-radio-group):before { position: relative; } - .footer-left { - display: flex; - flex-direction: column; - gap: 1.5rem; - } - .footer-logo { display: flex; align-items: center; gap: 0.25rem; - svg { + svg { display: none !important; } + + img { + transition: filter 150ms ease; + } + + &:hover { + img { + filter: saturate(1) opacity(1); + } + } } .footer-logo-img { height: 1rem; margin: 0; + filter: saturate(0) opacity(0.7); } .footer-logo-frame { @@ -635,23 +454,38 @@ div:has(> .fern-product-selector-radio-group):before { display: flex; align-items: center; gap: 0.5rem; - background-color: rgba(255,255,255,0.05); border-radius: 9999px; padding: 0.25rem 0.75rem; align-self: flex-start; + cursor: pointer; + text-decoration: none; + transition: background-color 150ms ease, color 150ms ease; + + svg { + display: none !important; + } + + &:hover { + background-color: var(--grayscale-a4); + + .status-text { + color: var(--grayscale-12); + } + } } .status-indicator { width: 0.375rem; height: 0.375rem; - background-color: #008700; + background-color: var(--green-a10); border-radius: 50%; - border: 4px solid #e2f4e2; + box-shadow: 0 0 0 4px var(--green-a4); } .status-text { font-size: 0.875rem; - color: #8b8d98; + color: var(--grayscale-10); + font-weight: 400; } .soc2-badge { @@ -659,65 +493,28 @@ div:has(> .fern-product-selector-radio-group):before { align-items: center; gap: 0.5rem; border-radius: 9999px; - padding: 0.25rem 0.75rem; + padding: 0.25rem 0.75rem 0.25rem 0.25rem; align-self: flex-start; - } - - .footer-right { - display: flex; - justify-content: flex-end; - } - - .newsletter-container { - background-color: var(--grayscale-2); - border: 1px solid var(--grayscale-6); - border-radius: 0.5rem; - padding: 0.75rem; - width: 20rem; - } - - .newsletter-label { - font-size: 0.75rem; - color: var(--grayscale-10); - margin-bottom: 0.75rem; - font-family: var(--font-code); - } + text-decoration: none; + transition: background-color 150ms ease, color 150ms ease; - .newsletter-form { - display: flex; - gap: 0.5rem; - } + svg { + display: none !important; + } - .newsletter-input { - display: flex; - padding: 12px; - flex-direction: column; - justify-content: center; - align-items: flex-start; - flex: 1 0 0; - border-radius: 8px; - border: 0.5px solid var(--grayscale-8); - background: var(--grayscale-1); - box-shadow: 0px 0px 0px 0.559px rgba(14, 63, 126, 0.04), 0px 0.559px 0.559px -0.28px rgba(42, 51, 69, 0.04), 0px 1.677px 1.677px -0.839px rgba(42, 51, 70, 0.04), 0px 3.354px 3.354px -1.677px rgba(42, 51, 70, 0.04), 0px 6.709px 6.709px -3.354px rgba(14, 63, 126, 0.04), 0px 13.417px 13.417px -6.709px rgba(14, 63, 126, 0.04), 4.472px 4.472px 32.336px 0px var(--radix-gray-2, #F9F9FB); - text-decoration: none; - font-family: var(--font-code); - font-size: 0.875rem; - font-style: normal; - font-weight: 400; - } + &:hover { + background-color: var(--grayscale-a4); - .newsletter-input-text { - font-size: 0.75rem; - color: #80828d; + .status-text { + color: var(--grayscale-12); + } + } } - .newsletter-button { - background-color: #008700; - color: white; - padding: 0.5rem; - border-radius: 0.5rem; - border: none; - cursor: pointer; + .soc2-badge-img { + width: 1.5rem; + background-color: #62636C; + border-radius: 1000px; } .footer-links { @@ -725,6 +522,12 @@ div:has(> .fern-product-selector-radio-group):before { gap: 2rem; padding-top: 2rem; align-items: flex-end; + justify-content: space-between; + } + + .footer-columns { + display: flex; + gap: 2rem; } .footer-column { @@ -763,12 +566,6 @@ div:has(> .fern-product-selector-radio-group):before { color: var(--grayscale-12); } - .footer-bottom { - display: flex; - justify-content: space-between; - padding-top: 3rem; - } - .footer-bottom-text { font-weight: 400; font-size: 0.875rem; @@ -780,6 +577,7 @@ div:has(> .fern-product-selector-radio-group):before { .a-btn { text-decoration: none !important; font-weight: 400 !important; + width: fit-content !important; svg { display: none !important; @@ -793,6 +591,213 @@ div:has(> .fern-product-selector-radio-group):before { } } } + + /* Responsive Design - Mobile First */ + @media (max-width: 640px) { + .main-content { + padding: 2rem 1.5rem; + } + + .dashed-pattern-left { + left: 0px; + } + + .dashed-pattern-right { + right: 0px; + } + + .hero-section { + margin-bottom: 2rem; + } + + .hero-title-container { + padding: 0 1.5rem; + } + + .feature-grid { + grid-template-columns: 1fr; + grid-template-rows: auto; + gap: 0; + } + + .sdks-card { + padding: 1.5rem; + } + + .docs-card { + padding: 1.5rem; + border-left: none; + grid-column: 1; + grid-row: auto; + } + + .ai-search-card { + padding: 1.5rem; + } + + .card-title { + font-size: 1.375rem; + } + + .card-description { + font-size: 1.0625rem; + } + + .language-icons { + flex-wrap: wrap; + gap: 1rem; + } + + .language-icons-label { + width: 100%; + } + + .language-icon { + width: 2rem; + height: 2rem; + margin: -0.25rem; + + &:hover { + background-color: var(--grayscale-a4); + transform: scale(1.1); + transition: all 0.2s ease; + } + } + + .language-icon-img { + width: 20px; + height: 20px; + } + + .action-buttons { + flex-direction: row; + gap: 0.75rem; + align-items: stretch; + flex-wrap: wrap; + } + + .action-buttons-vertical { + gap: 0.75rem; + } + + .community-section { + padding: 2rem 1.5rem; + } + + .community-grid { + grid-template-columns: 1fr; + gap: 2rem; + } + + .community-card { + border-radius: 0.5rem; + transition: all 0.2s ease; + + &:hover { + border-color: var(--grayscale-6); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + } + } + + .help-section { + padding: 2rem 1.5rem; + } + + .help-buttons { + flex-direction: column; + gap: 1rem; + } + + .footer { + padding: 2rem 1.5rem; + } + + .footer-top { + flex-direction: column; + gap: 1.5rem; + margin-bottom: 2rem; + } + + .footer-logo-frame { + transform: translate(-32px, calc(-50% - 68px)); + } + + .footer-status { + flex-direction: column; + gap: 0.75rem; + padding-top: 2rem; + } + + .footer-links { + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + align-items: flex-start; + padding-top: 1rem; + } + + .footer-columns { + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + width: 100%; + order: 1; + } + + .footer-column { + width: 100%; + } + + .footer-bottom-text { + order: 2; + } + } + + /* Tablet breakpoint - Better use of space */ + @media (max-width: 720px) and (min-width: 481px) { + .community-grid { + grid-template-columns: repeat(2, 1fr); + } + + .hero-title { + font-size: 2rem; + } + + .feature-grid { + gap: 1px; + } + + .footer-columns { + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + } + + .footer-column { + width: calc(50% - 1rem); + min-width: 200px; + } + } + + /* Very small screens */ + @media (max-width: 480px) { + .hero-title { + font-size: 1.75rem; + } + + .card-title { + font-size: 1.25rem; + } + + .language-icon { + width: 28px; + height: 28px; + } + + .language-icon-img { + width: 16px; + height: 16px; + } + } } -======= ->>>>>>> origin/main + diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 0a08c9afa..0ae962146 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -11,659 +11,9 @@ layout: custom #builtwithfern { display: none !important; } - - .page-container { - min-height: 100vh; - position: relative; - } - - .dashed-pattern-left { - position: absolute; - left: -24px; - top: 0; - height: 100%; - width: 1.5rem; - opacity: 1; - pointer-events: none; - border-right: 1px solid var(--grayscale-5); - border-left: 1px solid var(--grayscale-5); - } - - .dashed-pattern-right { - position: absolute; - right: -24px; - top: 0; - height: 100%; - width: 1.5rem; - opacity: 1; - pointer-events: none; - border-right: 1px solid var(--grayscale-5); - border-left: 1px solid var(--grayscale-5); - } - - .dashed-gradient { - height: 100%; - width: 100%; - background-image: url('data:image/svg+xml;utf8,'); - background-repeat: repeat; - background-size: 12px 12px; - } - - :is(.dark) .dashed-gradient { - background-image: url('data:image/svg+xml;utf8,'); - } - - .main-content { - max-width: 60rem; - margin: 0 auto; - position: relative; - padding: 3rem 0; - } - - .hero-section { - margin-bottom: 3rem; - } - - .hero-title-container { - margin-bottom: 2rem; - padding: 0 2rem; - } - - .hero-title { - font-size: 2.25rem; - font-weight: bold; - letter-spacing: -0.025em; - color: var(--grayscale-12); - } - - .hero-description { - font-size: 1rem; - color: var(--grayscale-10); - } - - .feature-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - grid-template-rows: repeat(2, 1fr); - } - - .sdks-card { - border-top: 1px solid var(--grayscale-5); - padding: 2rem; - display: flex; - flex-direction: column; - gap: 1.5rem; - grid-column: 1 / 2; - grid-row: 1 / 2; - } - - .docs-card { - border-top: 1px solid var(--grayscale-5); - border-left: 1px solid var(--grayscale-5); - padding: 2rem; - display: flex; - flex-direction: column; - gap: 1rem; - grid-row: 1 / 3; - } - - .ai-search-card { - border-top: 1px solid var(--grayscale-5); - padding: 2rem; - display: flex; - flex-direction: column; - gap: 1.5rem; - } - - .card-header { - display: flex; - flex-direction: column; - gap: 0.25rem; - } - - .card-title { - font-size: 1.25rem; - font-weight: bold; - color: var(--grayscale-12); - } - - .card-description { - font-size: 1rem; - color: var(--grayscale-10); - } - - .sdks-preview { - width: 100%; - position: relative; - } - - .sdks-preview-img { - width: 100%; - object-fit: cover; - } - - .docs-preview-img { - width: 100%; - object-fit: cover; - } - - .ai-search-preview-img { - width: 100%; - object-fit: cover; - } - - .language-icons { - display: flex; - align-items: center; - gap: 0.75rem; - } - - .language-icons-label { - font-size: 0.875rem; - color: #62636c; - } - - .language-icon { - width: 24px; - height: 24px; - display: flex; - align-items: center; - justify-content: center; - border: none; - background: none; - cursor: pointer; - padding: 0; - border-radius: 0.25rem; - - &:hover { - background-color: var(--grayscale-a3); - } - } - - .language-icon-img { - width: 16px; - height: 16px; - object-fit: contain; - } - - .action-buttons { - display: flex; - flex-wrap: wrap; - gap: 0.75rem; - } - - .action-buttons-vertical { - display: flex; - flex-direction: column; - gap: 0.75rem; - } - - .community-section { - border-top: 1px solid var(--grayscale-5); - border-bottom: 1px solid var(--grayscale-5); - padding: 3rem 2rem; - } - - .community-title-container { - margin-bottom: 2rem; - } - - .community-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 2rem; - } - - .community-card { - display: flex; - flex-direction: column; - gap: 0.5rem; - padding: 0; - align-items: flex-start; - } - - .community-card-title { - font-size: 1rem; - font-weight: bold; - color: var(--grayscale-12); - } - - .community-card-description { - font-size: 0.875rem; - color: var(--grayscale-10); - margin-bottom: 0.5rem; - } - - .twitter-strikethrough { - text-decoration: line-through; - } - - .help-section { - border-bottom: 1px solid var(--grayscale-5); - padding: 3rem 2rem; - margin-bottom: 3rem; - display: flex; - flex-direction: column; - gap: 1rem; - } - - .help-buttons { - display: flex; - gap: 1.5rem; - } - - .footer { - padding: 3rem 2rem; - } - - .footer-top { - display: flex; - justify-content: space-between; - gap: 2rem; - margin-bottom: 3rem; - position: relative; - } - - .footer-logo { - display: flex; - align-items: center; - gap: 0.25rem; - - svg { - display: none !important; - } - - img { - transition: filter 150ms ease; - } - - &:hover { - img { - filter: saturate(1) opacity(1); - } - } - } - - .footer-logo-img { - height: 1rem; - margin: 0; - filter: saturate(0) opacity(0.7); - } - - .footer-logo-frame { - position: absolute; - top: 50%; - left: 0; - transform: translate(-32px, calc(-50% - 4px)); - } - - .footer-status { - display: flex; - flex-direction: row; - gap: 1rem; - } - - .status-badge { - display: flex; - align-items: center; - gap: 0.5rem; - border-radius: 9999px; - padding: 0.25rem 0.75rem; - align-self: flex-start; - cursor: pointer; - text-decoration: none; - transition: background-color 150ms ease, color 150ms ease; - - svg { - display: none !important; - } - - &:hover { - background-color: var(--grayscale-a4); - - .status-text { - color: var(--grayscale-12); - } - } - } - - .status-indicator { - width: 0.375rem; - height: 0.375rem; - background-color: var(--green-a10); - border-radius: 50%; - box-shadow: 0 0 0 4px var(--green-a4); - } - - .status-text { - font-size: 0.875rem; - color: var(--grayscale-10); - font-weight: 400; - } - - .soc2-badge { - display: flex; - align-items: center; - gap: 0.5rem; - border-radius: 9999px; - padding: 0.25rem 0.75rem 0.25rem 0.25rem; - align-self: flex-start; - text-decoration: none; - transition: background-color 150ms ease, color 150ms ease; - - svg { - display: none !important; - } - - &:hover { - background-color: var(--grayscale-a4); - - .status-text { - color: var(--grayscale-12); - } - } - } - - .soc2-badge-img { - width: 1.5rem; - background-color: #62636C; - border-radius: 1000px; - } - - .footer-links { - display: flex; - gap: 2rem; - padding-top: 2rem; - align-items: flex-end; - justify-content: space-between; - } - - .footer-columns { - display: flex; - gap: 2rem; - } - - .footer-column { - display: flex; - flex-direction: column; - gap: 1rem; - width: 170px; - } - - .footer-column-title { - font-size: 0.875rem; - font-weight: 400; - color: var(--grayscale-9); - letter-spacing: -0.025em; - } - - .footer-column-links { - display: flex; - flex-direction: column; - gap: 1rem; - } - - .footer-link { - font-weight: 400; - font-size: 0.875rem; - color: var(--grayscale-11); - text-decoration: none; - transition: color 0.15s ease-in-out; - - svg { - display: none !important; - } - } - - .footer-link:hover { - color: var(--grayscale-12); - } - - .footer-bottom-text { - font-weight: 400; - font-size: 0.875rem; - color: var(--grayscale-10); - text-decoration: none; - transition: color 0.15s ease-in-out; - } - - .a-btn { - text-decoration: none !important; - font-weight: 400 !important; - width: fit-content !important; - - svg { - display: none !important; - } - - &.no-hover { - cursor: default; - &:hover { - background: none !important; - color: var(--grayscale-a11) !important; - } - } - } - - /* Responsive Design - Mobile First */ - @media (max-width: 640px) { - .main-content { - padding: 2rem 1.5rem; - } - - .dashed-pattern-left { - left: 0px; - } - - .dashed-pattern-right { - right: 0px; - } - - .hero-section { - margin-bottom: 2rem; - } - - .hero-title-container { - padding: 0 1.5rem; - } - - .feature-grid { - grid-template-columns: 1fr; - grid-template-rows: auto; - gap: 0; - } - - .sdks-card { - padding: 1.5rem; - } - - .docs-card { - padding: 1.5rem; - border-left: none; - grid-column: 1; - grid-row: auto; - } - - .ai-search-card { - padding: 1.5rem; - } - - .card-title { - font-size: 1.375rem; - } - - .card-description { - font-size: 1.0625rem; - } - - .language-icons { - flex-wrap: wrap; - gap: 1rem; - } - - .language-icons-label { - width: 100%; - } - - .language-icon { - width: 2rem; - height: 2rem; - margin: -0.25rem; - - &:hover { - background-color: var(--grayscale-a4); - transform: scale(1.1); - transition: all 0.2s ease; - } - } - - .language-icon-img { - width: 20px; - height: 20px; - } - - .action-buttons { - flex-direction: row; - gap: 0.75rem; - align-items: stretch; - flex-wrap: wrap; - - } - - .action-buttons-vertical { - gap: 0.75rem; - } - - .community-section { - padding: 2rem 1.5rem; - } - - .community-grid { - grid-template-columns: 1fr; - gap: 2rem; - } - - .community-card { - border-radius: 0.5rem; - transition: all 0.2s ease; - - &:hover { - border-color: var(--grayscale-6); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - } - } - - .help-section { - padding: 2rem 1.5rem; - } - - .help-buttons { - flex-direction: column; - gap: 1rem; - } - - .footer { - padding: 2rem 1.5rem; - } - - .footer-top { - flex-direction: column; - gap: 1.5rem; - margin-bottom: 2rem; - } - - .footer-logo-frame { - transform: translate(-32px, calc(-50% - 68px)); - } - - .footer-status { - flex-direction: column; - gap: 0.75rem; - padding-top: 2rem; - } - - .footer-links { - display: grid; - grid-template-columns: 1fr; - gap: 1.5rem; - align-items: flex-start; - padding-top: 1rem; - } - - .footer-columns { - display: grid; - grid-template-columns: 1fr; - gap: 2rem; - width: 100%; - order: 1; - } - - .footer-column { - width: 100%; - } - - .footer-bottom-text { - order: 2; - } - } - - /* Tablet breakpoint - Better use of space */ - @media (max-width: 720px) and (min-width: 481px) { - .community-grid { - grid-template-columns: repeat(2, 1fr); - } - - .hero-title { - font-size: 2rem; - } - - .feature-grid { - gap: 1px; - } - - .footer-columns { - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - } - - .footer-column { - width: calc(50% - 1rem); - min-width: 200px; - } - } - - /* Very small screens */ - @media (max-width: 480px) { - .hero-title { - font-size: 1.75rem; - } - - .card-title { - font-size: 1.25rem; - } - - .language-icon { - width: 28px; - height: 28px; - } - - .language-icon-img { - width: 16px; - height: 16px; - } - } `} -{/*
-
-
-
-
-
-
*/} -
-
+
{/* Main Content */}
{/* Dashed Pattern - Left Side */} From e12e22bc8fcf02d457591fff956cf38fa7fd246b Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 7 Jul 2025 13:02:32 -0700 Subject: [PATCH 28/39] feat: updated some frame styling --- fern/assets/styles.css | 1 + fern/products/home/pages/welcome.mdx | 29 ++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index 9b9d5b4d5..8cc02c0d4 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -442,6 +442,7 @@ div:has(> .fern-product-selector-radio-group):before { top: 50%; left: 0; transform: translate(-32px, calc(-50% - 4px)); + filter: saturate(0) opacity(0.7); } .footer-status { diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 0ae962146..fe9da476b 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -30,7 +30,7 @@ layout: custom height: "1000px", position: "fixed", transform: "translate(-50%, -10%) rotate(30deg)", - backgroundImage: "radial-gradient(farthest-side, var(--green-2), transparent)" + backgroundImage: "radial-gradient(farthest-side, var(--green-3), transparent)" }} className="ox-border block" /> @@ -42,7 +42,32 @@ layout: custom position: "fixed", filter: "hue-rotate(30deg)", transform: "translate(-60%, 50%) rotate(-30deg)", - backgroundImage: "radial-gradient(farthest-side, var(--blue-2), transparent)" + backgroundImage: "radial-gradient(farthest-side, var(--blue-3), transparent)" + }} + className="box-border block" + /> +
+
From bc5fd660ddcee0eebe2593fbf9e6de76be0b75d6 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 7 Jul 2025 15:16:36 -0700 Subject: [PATCH 29/39] feat: cleaned up home page styling and added empty page callouts --- fern/assets/styles.css | 19 +++++++++++++++---- .../getting-started/customer-showcase.mdx | 4 ++-- .../pages/getting-started/get-to-openapi.mdx | 4 ++-- .../pages/getting-started/overview.mdx | 4 ++-- .../pages/getting-started/philosophy.mdx | 4 ++-- .../asyncapi-def/pages/schemas/allof.mdx | 4 ++-- .../asyncapi-def/pages/schemas/anyof.mdx | 4 ++-- .../asyncapi-def/pages/schemas/enums.mdx | 4 ++-- .../pages/schemas/inlined-schemas.mdx | 4 ++-- .../asyncapi-def/pages/schemas/objects.mdx | 4 ++-- .../asyncapi-def/pages/schemas/oneof.mdx | 4 ++-- .../pages/schemas/override-type.mdx | 4 ++-- .../multiple-security-schemes.mdx | 4 ++-- .../overriding-security-scheme.mdx | 4 ++-- .../pages/security-schemes/overview.mdx | 4 ++-- .../pages/servers/multiple-server-urls.mdx | 4 ++-- .../pages/servers/naming-your-servers.mdx | 4 ++-- .../pages/servers/overriding-servers.mdx | 4 ++-- .../asyncapi-def/pages/servers/overview.mdx | 4 ++-- .../products/grpc-def/pages/schemas/allof.mdx | 4 ++-- .../products/grpc-def/pages/schemas/anyof.mdx | 4 ++-- .../products/grpc-def/pages/schemas/enums.mdx | 4 ++-- .../pages/schemas/inlined-schemas.mdx | 4 ++-- .../grpc-def/pages/schemas/objects.mdx | 4 ++-- .../products/grpc-def/pages/schemas/oneof.mdx | 4 ++-- .../grpc-def/pages/schemas/override-type.mdx | 4 ++-- .../openapi-def/pages/schemas/allof.mdx | 4 ++-- .../openapi-def/pages/schemas/anyof.mdx | 4 ++-- .../pages/schemas/inlined-schemas.mdx | 4 ++-- .../openapi-def/pages/schemas/objects.mdx | 4 ++-- .../openapi-def/pages/schemas/oneof.mdx | 4 ++-- .../pages/schemas/override-type.mdx | 4 ++-- .../openrpc-def/pages/schemas/allof.mdx | 4 ++-- .../openrpc-def/pages/schemas/anyof.mdx | 4 ++-- .../openrpc-def/pages/schemas/enums.mdx | 4 ++-- .../pages/schemas/inlined-schemas.mdx | 4 ++-- .../openrpc-def/pages/schemas/objects.mdx | 4 ++-- .../openrpc-def/pages/schemas/oneof.mdx | 4 ++-- .../pages/schemas/override-type.mdx | 4 ++-- 39 files changed, 91 insertions(+), 80 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index 8cc02c0d4..e84fb837e 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -160,6 +160,15 @@ div:has(> .fern-product-selector-radio-group):before { /* LANDING */ + +:is(.dark) { + .lp-page-container { + .dashed-gradient { + background-image: url('data:image/svg+xml;utf8,'); + } + } +} + .lp-page-container { min-height: 100vh; position: relative; @@ -174,6 +183,8 @@ div:has(> .fern-product-selector-radio-group):before { 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%); } .dashed-pattern-right { @@ -186,6 +197,8 @@ div:has(> .fern-product-selector-radio-group):before { 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%); } .dashed-gradient { @@ -194,10 +207,8 @@ div:has(> .fern-product-selector-radio-group):before { background-image: url('data:image/svg+xml;utf8,'); background-repeat: repeat; background-size: 12px 12px; - } - - &:is(.dark) .dashed-gradient { - background-image: url('data:image/svg+xml;utf8,'); + 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%); } .main-content { diff --git a/fern/products/asyncapi-def/pages/getting-started/customer-showcase.mdx b/fern/products/asyncapi-def/pages/getting-started/customer-showcase.mdx index b8913aadc..39550d4c3 100644 --- a/fern/products/asyncapi-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/customer-showcase.mdx @@ -2,6 +2,6 @@ title: Customer Showcase --- -# Customer Showcase +Examples and case studies of customers using AsyncAPI definitions successfully. -See how other customers are using OpenAPI definitions to power their APIs and documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx index 65cd466c8..d946058dc 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx @@ -2,6 +2,6 @@ title: Get to OpenAPI --- -# Get to OpenAPI +How to transition from AsyncAPI to OpenAPI or integrate both specifications. -Learn how to create or obtain your OpenAPI definition. Explore different approaches including handwriting, generating from code, and more. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/overview.mdx b/fern/products/asyncapi-def/pages/getting-started/overview.mdx index 001442f88..0d6523698 100644 --- a/fern/products/asyncapi-def/pages/getting-started/overview.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/overview.mdx @@ -2,6 +2,6 @@ title: Overview --- -# Overview +This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. -This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx b/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx index 56f5a3b9a..233a87063 100644 --- a/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx @@ -2,6 +2,6 @@ title: Philosophy --- -# Philosophy +The philosophy and principles behind AsyncAPI definitions and how they enhance API development. -Understand the philosophy behind designing and maintaining your OpenAPI definitions. Learn best practices and guiding principles. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/allof.mdx b/fern/products/asyncapi-def/pages/schemas/allof.mdx index b2df5b757..319904842 100644 --- a/fern/products/asyncapi-def/pages/schemas/allof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/allof.mdx @@ -2,6 +2,6 @@ title: AllOf --- -# AllOf +How to use the `allOf` keyword to compose schemas in OpenAPI. -How to use the `allOf` keyword to compose schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/anyof.mdx b/fern/products/asyncapi-def/pages/schemas/anyof.mdx index 04690e099..d98c9c7c5 100644 --- a/fern/products/asyncapi-def/pages/schemas/anyof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/anyof.mdx @@ -2,6 +2,6 @@ title: AnyOf --- -# AnyOf +How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/enums.mdx b/fern/products/asyncapi-def/pages/schemas/enums.mdx index c50286ca0..0f071434b 100644 --- a/fern/products/asyncapi-def/pages/schemas/enums.mdx +++ b/fern/products/asyncapi-def/pages/schemas/enums.mdx @@ -2,6 +2,6 @@ title: Enums --- -# Enums +How to use enum types to define a fixed set of values in OpenAPI. -How to define and use enums in your OpenAPI schemas. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx b/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx index 68f31c620..ab179fb00 100644 --- a/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx @@ -2,6 +2,6 @@ title: Inlined Schemas --- -# Inlined Schemas +How to define schemas inline within your OpenAPI specification. -How to define inlined schemas directly within your OpenAPI definitions. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/objects.mdx b/fern/products/asyncapi-def/pages/schemas/objects.mdx index 3f4225bf2..a2308a231 100644 --- a/fern/products/asyncapi-def/pages/schemas/objects.mdx +++ b/fern/products/asyncapi-def/pages/schemas/objects.mdx @@ -2,6 +2,6 @@ title: Objects --- -# Objects +How to define object schemas with properties in OpenAPI. -Learn how to define object schemas in OpenAPI, including properties and required fields. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/oneof.mdx b/fern/products/asyncapi-def/pages/schemas/oneof.mdx index 95e26147d..f06ab43b4 100644 --- a/fern/products/asyncapi-def/pages/schemas/oneof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/oneof.mdx @@ -2,6 +2,6 @@ title: OneOf --- -# OneOf +How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -How to use the `oneOf` keyword to define alternative schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/override-type.mdx b/fern/products/asyncapi-def/pages/schemas/override-type.mdx index acf4791c2..9e94c50b8 100644 --- a/fern/products/asyncapi-def/pages/schemas/override-type.mdx +++ b/fern/products/asyncapi-def/pages/schemas/override-type.mdx @@ -2,6 +2,6 @@ title: Override the Type --- -# Override the Type +How to override the default type inference for schemas in OpenAPI. -How to override the type of a schema in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx b/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx index 286d0a352..3ae7886b2 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx @@ -2,6 +2,6 @@ title: Multiple Security Schemes --- -# Multiple Security Schemes +Learn how to define and use multiple security schemes in your OpenAPI definition. -Learn how to define and use multiple security schemes in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx b/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx index cf38307fc..74ff53c6e 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx @@ -2,6 +2,6 @@ title: Overriding the Security Scheme --- -# Overriding the Security Scheme +How to override security schemes in specific operations or contexts. -How to override the default security scheme in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/overview.mdx b/fern/products/asyncapi-def/pages/security-schemes/overview.mdx index c6be3e7c6..d509ec43e 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/overview.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/overview.mdx @@ -2,6 +2,6 @@ title: Security Schemes Overview --- -# Security Schemes Overview +Overview of security schemes and authentication methods in OpenAPI. -An introduction to security schemes in OpenAPI. Learn about authentication and authorization options. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx b/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx index 4f563e0ef..97e6b2fb4 100644 --- a/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx +++ b/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx @@ -2,6 +2,6 @@ title: Multiple Server URLs --- -# Multiple Server URLs +How to configure multiple server URLs for different environments. -How to define and use multiple server URLs in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx b/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx index ce65b26b6..1be4ae892 100644 --- a/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx +++ b/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx @@ -2,6 +2,6 @@ title: Naming Your Servers --- -# Naming Your Servers +Best practices for naming your server configurations. -Best practices for naming your server URLs in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx b/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx index 67ab82071..f3309e941 100644 --- a/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx +++ b/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx @@ -2,6 +2,6 @@ title: Overriding the Servers --- -# Overriding the Servers +How to override server configurations in specific contexts. -How to override the default servers in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/overview.mdx b/fern/products/asyncapi-def/pages/servers/overview.mdx index b45b551c9..7f5140173 100644 --- a/fern/products/asyncapi-def/pages/servers/overview.mdx +++ b/fern/products/asyncapi-def/pages/servers/overview.mdx @@ -2,6 +2,6 @@ title: Servers Overview --- -# Servers Overview +Overview of server configuration options in OpenAPI. -Introduction to server objects in OpenAPI. Learn how to define and manage server URLs. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/allof.mdx b/fern/products/grpc-def/pages/schemas/allof.mdx index b2df5b757..319904842 100644 --- a/fern/products/grpc-def/pages/schemas/allof.mdx +++ b/fern/products/grpc-def/pages/schemas/allof.mdx @@ -2,6 +2,6 @@ title: AllOf --- -# AllOf +How to use the `allOf` keyword to compose schemas in OpenAPI. -How to use the `allOf` keyword to compose schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/anyof.mdx b/fern/products/grpc-def/pages/schemas/anyof.mdx index 04690e099..d98c9c7c5 100644 --- a/fern/products/grpc-def/pages/schemas/anyof.mdx +++ b/fern/products/grpc-def/pages/schemas/anyof.mdx @@ -2,6 +2,6 @@ title: AnyOf --- -# AnyOf +How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/enums.mdx b/fern/products/grpc-def/pages/schemas/enums.mdx index c50286ca0..0f071434b 100644 --- a/fern/products/grpc-def/pages/schemas/enums.mdx +++ b/fern/products/grpc-def/pages/schemas/enums.mdx @@ -2,6 +2,6 @@ title: Enums --- -# Enums +How to use enum types to define a fixed set of values in OpenAPI. -How to define and use enums in your OpenAPI schemas. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx b/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx index 68f31c620..ab179fb00 100644 --- a/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx @@ -2,6 +2,6 @@ title: Inlined Schemas --- -# Inlined Schemas +How to define schemas inline within your OpenAPI specification. -How to define inlined schemas directly within your OpenAPI definitions. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/objects.mdx b/fern/products/grpc-def/pages/schemas/objects.mdx index 3f4225bf2..a2308a231 100644 --- a/fern/products/grpc-def/pages/schemas/objects.mdx +++ b/fern/products/grpc-def/pages/schemas/objects.mdx @@ -2,6 +2,6 @@ title: Objects --- -# Objects +How to define object schemas with properties in OpenAPI. -Learn how to define object schemas in OpenAPI, including properties and required fields. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/oneof.mdx b/fern/products/grpc-def/pages/schemas/oneof.mdx index 95e26147d..f06ab43b4 100644 --- a/fern/products/grpc-def/pages/schemas/oneof.mdx +++ b/fern/products/grpc-def/pages/schemas/oneof.mdx @@ -2,6 +2,6 @@ title: OneOf --- -# OneOf +How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -How to use the `oneOf` keyword to define alternative schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/override-type.mdx b/fern/products/grpc-def/pages/schemas/override-type.mdx index acf4791c2..9e94c50b8 100644 --- a/fern/products/grpc-def/pages/schemas/override-type.mdx +++ b/fern/products/grpc-def/pages/schemas/override-type.mdx @@ -2,6 +2,6 @@ title: Override the Type --- -# Override the Type +How to override the default type inference for schemas in OpenAPI. -How to override the type of a schema in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/allof.mdx b/fern/products/openapi-def/pages/schemas/allof.mdx index b2df5b757..319904842 100644 --- a/fern/products/openapi-def/pages/schemas/allof.mdx +++ b/fern/products/openapi-def/pages/schemas/allof.mdx @@ -2,6 +2,6 @@ title: AllOf --- -# AllOf +How to use the `allOf` keyword to compose schemas in OpenAPI. -How to use the `allOf` keyword to compose schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/anyof.mdx b/fern/products/openapi-def/pages/schemas/anyof.mdx index 04690e099..d98c9c7c5 100644 --- a/fern/products/openapi-def/pages/schemas/anyof.mdx +++ b/fern/products/openapi-def/pages/schemas/anyof.mdx @@ -2,6 +2,6 @@ title: AnyOf --- -# AnyOf +How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx b/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx index 68f31c620..ab179fb00 100644 --- a/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx @@ -2,6 +2,6 @@ title: Inlined Schemas --- -# Inlined Schemas +How to define schemas inline within your OpenAPI specification. -How to define inlined schemas directly within your OpenAPI definitions. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/objects.mdx b/fern/products/openapi-def/pages/schemas/objects.mdx index 3f4225bf2..a2308a231 100644 --- a/fern/products/openapi-def/pages/schemas/objects.mdx +++ b/fern/products/openapi-def/pages/schemas/objects.mdx @@ -2,6 +2,6 @@ title: Objects --- -# Objects +How to define object schemas with properties in OpenAPI. -Learn how to define object schemas in OpenAPI, including properties and required fields. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/oneof.mdx b/fern/products/openapi-def/pages/schemas/oneof.mdx index 95e26147d..f06ab43b4 100644 --- a/fern/products/openapi-def/pages/schemas/oneof.mdx +++ b/fern/products/openapi-def/pages/schemas/oneof.mdx @@ -2,6 +2,6 @@ title: OneOf --- -# OneOf +How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -How to use the `oneOf` keyword to define alternative schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/override-type.mdx b/fern/products/openapi-def/pages/schemas/override-type.mdx index acf4791c2..9e94c50b8 100644 --- a/fern/products/openapi-def/pages/schemas/override-type.mdx +++ b/fern/products/openapi-def/pages/schemas/override-type.mdx @@ -2,6 +2,6 @@ title: Override the Type --- -# Override the Type +How to override the default type inference for schemas in OpenAPI. -How to override the type of a schema in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/allof.mdx b/fern/products/openrpc-def/pages/schemas/allof.mdx index b2df5b757..319904842 100644 --- a/fern/products/openrpc-def/pages/schemas/allof.mdx +++ b/fern/products/openrpc-def/pages/schemas/allof.mdx @@ -2,6 +2,6 @@ title: AllOf --- -# AllOf +How to use the `allOf` keyword to compose schemas in OpenAPI. -How to use the `allOf` keyword to compose schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/anyof.mdx b/fern/products/openrpc-def/pages/schemas/anyof.mdx index 04690e099..d98c9c7c5 100644 --- a/fern/products/openrpc-def/pages/schemas/anyof.mdx +++ b/fern/products/openrpc-def/pages/schemas/anyof.mdx @@ -2,6 +2,6 @@ title: AnyOf --- -# AnyOf +How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/enums.mdx b/fern/products/openrpc-def/pages/schemas/enums.mdx index c50286ca0..0f071434b 100644 --- a/fern/products/openrpc-def/pages/schemas/enums.mdx +++ b/fern/products/openrpc-def/pages/schemas/enums.mdx @@ -2,6 +2,6 @@ title: Enums --- -# Enums +How to use enum types to define a fixed set of values in OpenAPI. -How to define and use enums in your OpenAPI schemas. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx b/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx index 68f31c620..ab179fb00 100644 --- a/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx @@ -2,6 +2,6 @@ title: Inlined Schemas --- -# Inlined Schemas +How to define schemas inline within your OpenAPI specification. -How to define inlined schemas directly within your OpenAPI definitions. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/objects.mdx b/fern/products/openrpc-def/pages/schemas/objects.mdx index 3f4225bf2..a2308a231 100644 --- a/fern/products/openrpc-def/pages/schemas/objects.mdx +++ b/fern/products/openrpc-def/pages/schemas/objects.mdx @@ -2,6 +2,6 @@ title: Objects --- -# Objects +How to define object schemas with properties in OpenAPI. -Learn how to define object schemas in OpenAPI, including properties and required fields. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/oneof.mdx b/fern/products/openrpc-def/pages/schemas/oneof.mdx index 95e26147d..f06ab43b4 100644 --- a/fern/products/openrpc-def/pages/schemas/oneof.mdx +++ b/fern/products/openrpc-def/pages/schemas/oneof.mdx @@ -2,6 +2,6 @@ title: OneOf --- -# OneOf +How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -How to use the `oneOf` keyword to define alternative schemas in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/override-type.mdx b/fern/products/openrpc-def/pages/schemas/override-type.mdx index acf4791c2..9e94c50b8 100644 --- a/fern/products/openrpc-def/pages/schemas/override-type.mdx +++ b/fern/products/openrpc-def/pages/schemas/override-type.mdx @@ -2,6 +2,6 @@ title: Override the Type --- -# Override the Type +How to override the default type inference for schemas in OpenAPI. -How to override the type of a schema in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file From c1df6636263d06e98f9a48362a3be81206a05efe Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Mon, 7 Jul 2025 16:04:12 -0700 Subject: [PATCH 30/39] feat: cleaned up home page styling and added empty page callouts --- fern/assets/styles.css | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index e84fb837e..defe573e3 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -75,27 +75,27 @@ div:has(> .fern-product-selector-radio-group):before { } } - > a[href="/home"] { + > a[href*="home"] { grid-column: 1; grid-row: 1; } - > a[href="/sdks"] { + > a[href*="sdks"] { grid-column: 2; grid-row: 1; } - > a[href="/docs"] { + > a[href*="docs"] { grid-column: 1; grid-row: 2; } - > a[href="/ask-fern"] { + > a[href*="ask-fern"] { grid-column: 2; grid-row: 2; } - > a[href="/openapi"]:before { + > a[href*="openapi"]:before { content: "Supported Specs"; font-weight: 500; position: absolute; @@ -103,7 +103,7 @@ div:has(> .fern-product-selector-radio-group):before { left: 0.5rem; } - > a[href="/openapi"] { + > a[href*="openapi"] { grid-column: 3; grid-row: 1; @@ -113,7 +113,7 @@ div:has(> .fern-product-selector-radio-group):before { } } - > a[href="/fern-def"] { + > a[href*="fern-def"] { grid-column: 3; grid-row: 2; transform: translateY(-32px); @@ -124,7 +124,7 @@ div:has(> .fern-product-selector-radio-group):before { } } - > a[href="/asyncapi"] { + > a[href*="asyncapi"] { grid-column: 3; grid-row: 3; transform: translateY(-64px); @@ -135,7 +135,7 @@ div:has(> .fern-product-selector-radio-group):before { } } - > a[href="/openrpc"] { + > a[href*="openrpc"] { grid-column: 3; grid-row: 4; transform: translateY(-64px); @@ -146,7 +146,7 @@ div:has(> .fern-product-selector-radio-group):before { } } - > a[href="/grpc"] { + > a[href*="grpc"] { grid-column: 3; grid-row: 5; transform: translateY(-64px); From ad866b28a7be359a2eafb5f72087f90510736f53 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 8 Jul 2025 13:59:05 -0400 Subject: [PATCH 31/39] feat: cleaned up home page styling and added empty page callouts --- fern/assets/styles.css | 109 +++++++++++++++--- fern/docs.yml | 8 +- .../product-switcher-askfern-dark.png | Bin 0 -> 9498 bytes .../product-switcher-askfern-light.png | Bin 0 -> 7565 bytes .../product-switcher-docs-dark.png | Bin 0 -> 11324 bytes .../product-switcher-docs-light.png | Bin 0 -> 9730 bytes .../product-switcher-home-dark.png | Bin 0 -> 7530 bytes .../product-switcher-home-light.png | Bin 0 -> 6497 bytes .../product-switcher-sdks-dark.png | Bin 0 -> 10539 bytes .../product-switcher-sdks-light.png | Bin 0 -> 8704 bytes .../getting-started/customer-showcase.mdx | 2 +- .../pages/getting-started/get-to-openapi.mdx | 2 +- .../get-to-openapi/generate-it/fastapi.mdx | 4 +- .../get-to-openapi/generate-it/nestjs.mdx | 4 +- .../generate-it/request-new-framework.mdx | 6 +- .../get-to-openapi/generate-it/swaggo.mdx | 4 +- .../get-to-openapi/handwrite-it.mdx | 6 +- .../overlay-customizations.mdx | 6 +- .../pages/getting-started/overview.mdx | 2 +- .../pages/getting-started/philosophy.mdx | 2 +- .../asyncapi-def/pages/schemas/allof.mdx | 4 +- .../asyncapi-def/pages/schemas/anyof.mdx | 4 +- .../asyncapi-def/pages/schemas/enums.mdx | 2 +- .../pages/schemas/inlined-schemas.mdx | 2 +- .../asyncapi-def/pages/schemas/objects.mdx | 2 +- .../asyncapi-def/pages/schemas/oneof.mdx | 4 +- .../pages/schemas/override-type.mdx | 4 +- .../multiple-security-schemes.mdx | 2 +- .../overriding-security-scheme.mdx | 4 +- .../pages/security-schemes/overview.mdx | 2 +- .../pages/servers/multiple-server-urls.mdx | 2 +- .../pages/servers/naming-your-servers.mdx | 2 +- .../pages/servers/overriding-servers.mdx | 4 +- .../asyncapi-def/pages/servers/overview.mdx | 2 +- .../pages/defining-your-api/audiences.mdx | 4 +- .../pages/defining-your-api/availability.mdx | 4 +- .../fern-def/pages/defining-your-api/doc.mdx | 4 +- .../pages/defining-your-api/endpoints.mdx | 4 +- .../pages/defining-your-api/errors.mdx | 4 +- .../pages/defining-your-api/examples.mdx | 4 +- .../pages/defining-your-api/imports.mdx | 4 +- .../pages/defining-your-api/types.mdx | 4 +- .../pages/defining-your-api/webhooks.mdx | 4 +- .../pages/defining-your-api/websockets.mdx | 4 +- .../getting-started/customer-showcase.mdx | 8 +- .../pages/getting-started/overview.mdx | 4 +- .../pages/getting-started/philosophy.mdx | 4 +- .../pages/getting-started/quickstart.mdx | 4 +- .../pages/global-settings/api-versions.mdx | 8 +- .../pages/global-settings/authentication.mdx | 4 +- .../pages/global-settings/environments.mdx | 4 +- .../pages/global-settings/global-headers.mdx | 8 +- .../pages/guides/creating-namespaces.mdx | 4 +- .../pages/guides/define-multiple-apis.mdx | 4 +- .../pages/guides/depending-on-other-apis.mdx | 4 +- .../pages/guides/export-to-openapi.mdx | 4 +- .../guides/validate-your-fern-definition.mdx | 8 +- .../getting-started/customer-showcase.mdx | 4 +- .../pages/getting-started/get-to-openapi.mdx | 4 +- .../get-to-openapi/generate-it/fastapi.mdx | 4 +- .../get-to-openapi/generate-it/nestjs.mdx | 4 +- .../generate-it/request-new-framework.mdx | 6 +- .../get-to-openapi/generate-it/swaggo.mdx | 4 +- .../get-to-openapi/handwrite-it.mdx | 6 +- .../overlay-customizations.mdx | 6 +- .../pages/getting-started/overview.mdx | 4 +- .../pages/getting-started/philosophy.mdx | 4 +- .../products/grpc-def/pages/schemas/allof.mdx | 4 +- .../products/grpc-def/pages/schemas/anyof.mdx | 4 +- .../products/grpc-def/pages/schemas/enums.mdx | 2 +- .../pages/schemas/inlined-schemas.mdx | 2 +- .../grpc-def/pages/schemas/objects.mdx | 2 +- .../products/grpc-def/pages/schemas/oneof.mdx | 4 +- .../grpc-def/pages/schemas/override-type.mdx | 4 +- .../multiple-security-schemes.mdx | 4 +- .../overriding-security-scheme.mdx | 6 +- .../pages/security-schemes/overview.mdx | 4 +- .../pages/servers/multiple-server-urls.mdx | 4 +- .../pages/servers/naming-your-servers.mdx | 4 +- .../pages/servers/overriding-servers.mdx | 6 +- .../grpc-def/pages/servers/overview.mdx | 4 +- fern/products/home/pages/welcome.mdx | 52 +-------- .../getting-started/customer-showcase.mdx | 4 +- .../pages/getting-started/get-to-openapi.mdx | 4 +- .../get-to-openapi/generate-it/fastapi.mdx | 4 +- .../get-to-openapi/generate-it/nestjs.mdx | 4 +- .../generate-it/request-new-framework.mdx | 6 +- .../get-to-openapi/generate-it/swaggo.mdx | 4 +- .../get-to-openapi/handwrite-it.mdx | 6 +- .../overlay-customizations.mdx | 6 +- .../pages/getting-started/overview.mdx | 4 +- .../pages/getting-started/philosophy.mdx | 4 +- .../openapi-def/pages/schemas/allof.mdx | 4 +- .../openapi-def/pages/schemas/anyof.mdx | 4 +- .../openapi-def/pages/schemas/enums.mdx | 4 +- .../pages/schemas/inlined-schemas.mdx | 2 +- .../openapi-def/pages/schemas/objects.mdx | 2 +- .../openapi-def/pages/schemas/oneof.mdx | 4 +- .../pages/schemas/override-type.mdx | 4 +- .../multiple-security-schemes.mdx | 4 +- .../overriding-security-scheme.mdx | 6 +- .../pages/security-schemes/overview.mdx | 4 +- .../pages/servers/multiple-server-urls.mdx | 4 +- .../pages/servers/naming-your-servers.mdx | 4 +- .../pages/servers/overriding-servers.mdx | 6 +- .../openapi-def/pages/servers/overview.mdx | 4 +- 106 files changed, 338 insertions(+), 219 deletions(-) create mode 100644 fern/images/product-switcher/product-switcher-askfern-dark.png create mode 100644 fern/images/product-switcher/product-switcher-askfern-light.png create mode 100644 fern/images/product-switcher/product-switcher-docs-dark.png create mode 100644 fern/images/product-switcher/product-switcher-docs-light.png create mode 100644 fern/images/product-switcher/product-switcher-home-dark.png create mode 100644 fern/images/product-switcher/product-switcher-home-light.png create mode 100644 fern/images/product-switcher/product-switcher-sdks-dark.png create mode 100644 fern/images/product-switcher/product-switcher-sdks-light.png diff --git a/fern/assets/styles.css b/fern/assets/styles.css index defe573e3..33933456a 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -33,17 +33,7 @@ background-color: transparent !important; } -/* Custom styline for code blocks to match Fern site */ -/* .code-block-root { - box-shadow: 0 0 0 .0625rem #0e3f7e0a,0 .0625rem .0625rem -.003125rem #2a33450a,.1875rem .1875rem .1875rem -.09375rem #2a33460a,0 .375rem .375rem -.1875rem #2a33460a,0 .75rem .75rem -.375rem #0e3f7e0a,0 1.5rem 1.5rem -.75rem #0e3f7e0a,.5rem .5rem 3.5625rem 0 #e7e8ec; - border-radius: 0 0 .5rem .5rem; -} - -.bg-tag-default-soft { - box-shadow: 0 0 0 .0625rem #0e3f7e0a,0 .0625rem .0625rem -.003125rem #2a33450a,.1875rem .1875rem .1875rem -.09375rem #2a33460a,0 .375rem .375rem -.1875rem #2a33460a,0 .75rem .75rem -.375rem #0e3f7e0a,0 1.5rem 1.5rem -.75rem #0e3f7e0a,.5rem .5rem 3.5625rem 0 #e7e8ec; -} */ - - +/*** START -- PRODUCT SELECTOR STYLING ***/ .fern-product-selector { transform: translate(-2px, 4px); } @@ -156,17 +146,109 @@ div:has(> .fern-product-selector-radio-group):before { height: 1.5rem; } } -} +} + +:is(.dark) .fern-product-selector-radio-group a[href*="home"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/data-api-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="sdks"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/designer-api-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="docs"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/browser-api-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="ask-fern"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/webflow-cloud-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="openapi"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/flowkit-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="fern-def"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/fern-def-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="asyncapi"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/asyncapi-image-dark.svg") !important; +} +:is(.dark) .fern-product-selector-radio-group a[href*="openrpc"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/openrpc-image-dark.svg") !important; +} + +:is(.dark) .fern-product-selector-radio-group a[href*="grpc"] img { + content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/grpc-image-dark.svg") !important; +} +/*** END -- PRODUCT SELECTOR STYLING ***/ -/* LANDING */ +/*** START -- LANDING PAGE STYLING ***/ :is(.dark) { .lp-page-container { .dashed-gradient { background-image: url('data:image/svg+xml;utf8,'); } } + + .bg-gradient-green-left { + background-image: radial-gradient(farthest-side, var(--green-2), transparent) !important; + } + + .bg-gradient-blue-left { + background-image: radial-gradient(farthest-side, var(--blue-2), transparent) !important; + } + + .bg-gradient-green-right { + background-image: radial-gradient(farthest-side, var(--green-2), transparent) !important; + } + + .bg-gradient-blue-right { + background-image: radial-gradient(farthest-side, var(--blue-2), transparent) !important; + } +} + +.bg-gradient-green-left { + top: 0; + width: 700px; + height: 1000px; + position: fixed; + transform: translate(-50%, -10%) rotate(30deg); + background-image: radial-gradient(farthest-side, var(--green-3), transparent); +} + +.bg-gradient-blue-left { + top: 0; + width: 800px; + height: 600px; + position: fixed; + filter: hue-rotate(30deg); + transform: translate(-60%, 50%) rotate(-30deg); + background-image: radial-gradient(farthest-side, var(--blue-3), transparent); +} + +.bg-gradient-green-right { + top: 0; + width: 700px; + height: 1000px; + position: fixed; + right: 0; + transform: translate(50%, -10%) rotate(-30deg); + background-image: radial-gradient(farthest-side, var(--green-3), transparent); +} + +.bg-gradient-blue-right { + top: 0; + width: 800px; + height: 600px; + position: fixed; + right: 0; + filter: hue-rotate(30deg); + transform: translate(60%, 50%) rotate(30deg); + background-image: radial-gradient(farthest-side, var(--blue-3), transparent); } .lp-page-container { @@ -813,3 +895,4 @@ div:has(> .fern-product-selector-radio-group):before { } } +/*** END -- LANDING PAGE STYLING ***/ diff --git a/fern/docs.yml b/fern/docs.yml index 21f75bfe8..440d5bce6 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -7,28 +7,28 @@ products: - display-name: Home path: ./products/home/home.yml # icon: fa-regular fa-home - image: ./images/product-switcher/home.svg + image: ./images/product-switcher/product-switcher-home-light.png slug: home subtitle: Products that delight your developers - display-name: SDKs path: ./products/sdks/sdks.yml icon: fa-brands fa-codepen - image: ./images/product-switcher/sdks.png + image: ./images/product-switcher/product-switcher-sdks-light.png slug: sdks subtitle: Generate client libraries in multiple languages - display-name: Docs path: ./products/docs/docs.yml icon: fa-regular fa-browser - image: ./images/product-switcher/docs.png + image: ./images/product-switcher/product-switcher-docs-light.png slug: docs subtitle: Generate beautiful, interactive documentation websites - display-name: Ask Fern path: ./products/ask-fern/ask-fern.yml icon: fa-regular fa-magnifying-glass - image: ./images/product-switcher/ask-fern.png + image: ./images/product-switcher/product-switcher-askfern-light.png slug: ask-fern subtitle: Let users find answers in your documentation instantly diff --git a/fern/images/product-switcher/product-switcher-askfern-dark.png b/fern/images/product-switcher/product-switcher-askfern-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9fec3aa402603cd934cf2827260a158b0f6bbd72 GIT binary patch literal 9498 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 literal 0 HcmV?d00001 diff --git a/fern/images/product-switcher/product-switcher-askfern-light.png b/fern/images/product-switcher/product-switcher-askfern-light.png new file mode 100644 index 0000000000000000000000000000000000000000..e780d89eb95fb7613befe449d168333e671a72c7 GIT binary patch literal 7565 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 literal 0 HcmV?d00001 diff --git a/fern/images/product-switcher/product-switcher-docs-light.png b/fern/images/product-switcher/product-switcher-docs-light.png new file mode 100644 index 0000000000000000000000000000000000000000..df5a1866ee067d0388b5cb104b1924fdd4fe4f50 GIT binary patch literal 9730 zcmV+dCjHroP)&oum@S`?=5fk-yt#;vUOIGW->iH@GC%E(OH17uk@{(4 z!+Oe&omd}MR2Q^ za4WMS*+r4w^3>GSvW(~>(VK7HJm!5p=}q#u6*&QJe4fn45cBU`mVG!QKahb-ORGHT z3wSxn_tu!R&iQjwQ@dtmL_c$yTUeN}rJRPKJgFMY$mQDA&mKAa@Qdo)Y9^* zkB{>~g^p+#G&i>}bLHyw^Ovt&_k3KvdgIhbI>FM)>Rsk7tvw?n+7`NedExZsD+^v9 zR~LRdCX#u}D{Bq&PRfY3mFBK2oQ#s_K9q?|OLv~wB6%leL_2~a6CKp5gL*yjo;%UT zfq`>@d8?;oL_3P+E?;{Fs?^P2zP>a!H#hmN9adJ>&NP5UMzkYo{>sAn`OCD4*Pm~; zsT-jP(^PXpN7PqG;nU5_h;|$iog$Djr@pv1M~)mhFmJ<0buf;`oEtH3=Mou)Sjt&_ zWBt?m#Q(gw6B=M~<#RHk9Zjy5b4Fu#a+0>tGTMR-GuU=eg>LvR3xwABuQUPZF26{zw~Rf z@)v|&f8$M-0eUh}gWG!_*jWtx+J)acVSIYZy7a`O4;+?*yB?Cnq(EL)(U+^7*7KEB zEi3D5a`nb_=@-Sk)aGn^Y~tMC|I#nd%g-^rG4~evMh4z-RG~XT0?*8yne45(r+p>Q zOt+>c5A8W9(__=bR*-i=kH!pwfgs=Rm%;qPKOwP!@v3)X;jVogakn7q@ViP>q!W1U| z5C{xRgel;5!^DaS+k0T->sQ~Bjehy;Kl+tl`HK7;Qe>cjfy-LI8DP7j4%0vedEPNsVuX{=6d#_6^6;fg;qwrFLYnkNI ztNJpYOh{Q*Qe!(mZ1Kl3>efe_h&1M^ck`?+lc5elbasul%zw z{eyF|g9!{&?4lrsRo%m4Al2mR#_IE_NlzZ=JS-3IdRV60)8cDtL?5NAaZO{s8P8p} zF5h1H?=n3;C8lMiWm{6<&w>qPZrgOE?@BN-Q^t@ss-B)Fmlhb5O5rN6?G8Aqae8b;`Y`V0m^%NtAQ4^13C`Pd_m z$!GU{RwlDaFu;f64ySo7NMI6r4Px^N>6PBglD9Kyk9AZ+OZXDjCt_U!mbFykQXiNH zM&Vpm8JAG%;O^E`x!9A;>(&J>WIdVJtNXGJ$*pQ{Fo{fs@cyBL56Sr0*vW-k>*vp0 zcwtg@FmZ}|KcsltS6_MlvY{zvID|2M{NVT_0vn_6m1&ADG5D#~ z?K+p#{?$>HdSz(WZAd5WNae#ISJ>7vZCR;SRUKB5v9xz!j!N64os@n}Nlne2a@~*F z4j2!GiOI8G_JC*&KCeA&ts%-S>u?Uf&M`suO;5@AuCbXLckZ13?HA6>$c`fO4kI%Z zg2OFES*RO8Ri+H0Plth{Uq@9+8^~=$ph1gTeNdvvxQ>iNeb&mnjk>3{Pn^+-uwHj{ zKQd1l0>)CpjLK$eN}UwEo;SPF393;_sDaA?{b|geYyu4AwQ6k=S}Xd#v#V{!c8|^M zAD=q^JKuU?Ms^H^9!4v}jAU2-JL^?9sLgxSHhnymL>nHPV1}>2P)YW`o4<%nGCN}19Dqc>>lu#J!Pvae{A&T!iXHOlwa(26Ezz37|FW@<}! z?-{2`ooU(R{MXO_;W616#L6Z*T0>N!u0DHhbwP@vP`js)zO3{!rbX%^yjF>f-LO8Y zP`VTWoEVj=M%CRZ*DwzgsMx+TToEVaY7L<_b^iGW=JvtJwr%S*xqlV_jVBnT0Mhr>p0m|K>NJknJZmHcPLfk7O%y8u3Nl`=Afj3jd($q&kb>_K@nKP1!Hv^<#a zl?SuEa;W`q03?tgs?y+Y5Xb}@$_YZX3e#x{sC4*|rdO3}TT@9@Iq`MP>x74&7#ovE z4(*?WsyK7{zr3)mk{DaVO&Z?}PYO5c-(9q~pE$hdu(|`r1u3L`R6x@(jspyaQu;`@ z`b#oZ?*+pX_36lvFN}XqJ~RID_r2Ea;-AP{-M3`}>XOIgm5A|&jlsyu=fs>Z|yP*X-#*#o1AE-O7Bzzie|07XM- z(4GjvB7TN*uR!WD*gZ0-3nnA92K$%8MmkeqPkwI#85Nx zZEL@>xORJ)5=Yxdr=2QP(?l+SmL`x*N#vlC8I-yNe^iNNNQKYHC~hZUh0v(P5p~kX zBih`9Ny6`{zyt%Yz8=8}{*a0?1T9QSAuwQcYT_+rMZlyEu(G+B(R{% zQ*CeZCN7JjK|?dFNK8Xd9e-;1Yd<)5ZsE?&rw>mbQmMo2)=Wa00?1&1(gcHz*rvJ? z;2)ju98hDWTo*dz8wi0N0Z=)Dz(C7pkts$aHFWC9Xc8U&G?;oNPLMPS5gR0dabByF zfG8Lf!thzi2RDS1>VM6@=JDF_oc)4;2X})>x1AJmi%*BmyoRd2dvS4NMHv{PFGkl} z(L}9Rmm_8&_+O>=i;SU*Ks(lgOYn*DN9B>ugEDA(Xnc>ky0Xmll#JyqAYQo9V8%<7h9sy?b?gJ6VR(!vv9I(XY&OXI$2Lg*y5cLnqrydVK{kew&J#FbFTbwR8gvoYL@GNY+|q98*N< zui=>t%`_5Yp+3iSzzJg35YMEKb_Zy47nrx$Thq@dp%dwt5M6?0Y6E#*P7YPKIL{jF zDAg`~z_F~Qj5C_~_i9^V_h{=pQ70pOyIURKD-i;U{^VG;y((1VLQv_j-H5GZTj|-Q z)jOwPk0!Gu3rxc>RzRg>T2P}Hd<42T%C4%~ejRdvg#0>%1j0dCT*sH?JlmBLgLbl3=Vn7764Vvken2zh5Nd_(Z#+x3E*_l z9wU#s+S^tY+VCxH*818GVzTt#efRgzU0b~I^dox@D2SoT)DW7;-2x_Xpd_$C`iOEu zDJik@=O>TK=chgSY8kDPycj>eqXv$uL16;HsKZ z%j^eX4`%>oJ0`(K2>`WG$TpLqMj4tP*s^0MkG4PFf3W?~8pb67>STDu5v+i5Z!K@E z9>u++8vmrEP|KN+sOTBJNk=|Cc|Zs@6#gTmmg#4H z6BMbdV1jBSP-&$>J(6)6KnT(aW?6mB5$OYQ_7EkyeCrPEuQzl#vLx{qAszynqLl3h zG15rjP$_R@t36B@V1P31_Yok-(j9?fVlaE~_u@+9i-N)HlA&e#!Wtw?5{rnj zaZpdU;h!y0=`ppWXi%MdQM(wHHP)3cWMA?JC7hn}IE2)z-V+sJ;5&ys_rv*fW2aqpguk?F;W!`29z1lMPeaz!U z_|NRcFYNyXSzg{f=(M)o25L>r z&|;y^a%mcuW@%j_!fyaRj5g_8#QIBXS|fwcb1)5H z$v_4@xO=Z0oO(#rEWr<%#FSHKY&>Kb7$Db*@bDuK!TyF4{=^0;_lkTIy&fl-)d?fg z?bpEuo0ufVJ>mTIuJP<`xP=uaQ+?&;^-s@Vzy6J{{^vjVjeq+0{?`AHp^))Ib0c8! z82VuYk}K&=+h7ONR$kRWrT{aJ$cAkad6vFbKJT2<|KR#xnmKwKljL{4`X9czTLw=)EVm_hA?ZM`21SX%ir~f22c!~n72OKhLQ8uH zJISdHiC6?UtvGmAfkPNv=R@Y1gBilN$m;>M7A*P&L&-pfIQi^}WZ4uN8AIUXwbnDJ z;(oukhU%O*s49gVWR9 z-DA7*q?3P2229OQ`q+?-7`#toOyKU$1SMpwM(wn?$+0*=Cqn506N#hr zI2Qs7w1FHhl}s0UH_EE?(El~T8C0>O^YZ*B4 zYfy9AVU>hp#s&s?9Y$4^WR;01j&HD+N+IqIX0a+JCfa`lfbe6e+vSwbb7Ul$Mdq;6 ztmqYrRu!};lXcFHwvYd$#PVetbmVUEP4Z}b}| z%pnHrBTxy3fm2 zsU$6bs}6_}*u^^7FL-r`%D~m=cDo6slIcQC^kgbAJcFt~~d62}t7=6B^xjPk@E(hK8(^D%a-%o4xZEyV;eQEzZnQm0)3 z3`W5IWeUW+>*Sq*k7)C=b`gcjzzO*~$50w0E@V)@UrG}~qb+pQLCC(QiG_PusU58N z4CM-@Ra)dkyB3qVF7^%*_VY7Gzs`mJK6W!vGMiu%rL|e@LTxAQq$YYpF|nSHQdWj- zDqYR`GyIF?`t%cNQ_0ITp<5)>=Z+YMhLv^@0L-!QYS2XML!A^Qa2SrD^|3A3vv`-T zgs4lEf<?(5!i_&3!t!Y*!;wI5CpgKx(23 z;$ydN_~rq6o`Vcjki+Zi5OH!uW)mGdTSI5ou$<5lbP27-b)`yV z&=g$1VWLoPHI3A2wGg?0t+19Os)mQ&UpvoB;>4N`B5WW*4Q!=8LtQz7kEViK8$Q*H zg?K1Q+qR9}RGXn)%*T>KtH4LI@-CE61kjRdqE^?W;VKqvs;Qz~#j*4!gDVo&<;@rNRZS5o0B{b5Q^J4hG8avU@GhJ8pMKJNGXa0yeF z0lX-hOjA{hw3V#;Ok%Hm6(!Ep0n#@GxmsZ!SG(ZkOrr$RR@va6L@9IH@w6Ggk6VSXZ0u5{wEg4Z);Kfu~2+>lHI@fA z8HHgM*)~D$%`Au61TCeiMZ`W4-C@Lq(HS07Yrlq523FC}glgxb@>(tvIylHZOTVz+ zm%&r`QRQ^Y@8S;ja+sd4X!PhP403gZBsX;gR#5%Y`9N6ge$^l=>mAC@PHkr>flhM3~;AuyfT(7T{}Mu$II%jnBBy@xRa;gk5O zXv=rAz(TOEp_HR6L*E7`I?tCS8e=UJI_)@u;Xi(tl+XAMReuPf7zws}Xf4)8D`{&Y zaj&j~nnR7m)Yc=YO?3*U!g;Q!IuYe|3787o$bd_|yWM_GZK8zyUgbj^Q_BF=;)E5J zf+Pi7$ia4Tkp!nf?pmc*)n;_o$&@;FGKCC=-Sh=@2@4k*W9VLJms4U@wN8xZZ@|`S zK|N3Yh}!xW)18qtGxJ`D7YL-6)d~G*GEZOdUgXbmoI!p-i-;+DTocB=IcvEv9$p zf7Z&)PoUbnMAMEPFSrdbkI^FsuvX71tTeD3d_R>!s8UtmO?VB`h>)ox z6GKeXJ6#!qv3|C6fsZQ>O-;-~GSsO=crE2(1PI-z2qDr#*h*Q!IgpW3z|qGOyK3ub zDq_b&g2_XW#J+f)2Sz6tT^QaQc?bz5P;uO@qov+RsfZfq_bD_7=UKwA7EObwYvD>? z4U2)zIx&N{g9-asa4Fh3#(Wu#!9aPj5i%l!%I(_go`gaH2dRQM5~r|7&=a-xdPPPA zVl}L(i@oBtHt1MP2#&Z_p1`((tfE5E)w$I0!EN!nco3w8X-J^TI>gh0Rmt+KR>3aS zE_z*bHY98*xd=G4YGrbkF`%pIVmh7)Ywm5L47d4EBv7vrn_Gr(HD=`1kZ9n`1F4&s z@zGFhp64|rij&>Z?V}XL)e8+#A0#A!pP1xXhP*J$BlGx{Oifu=18oRN^vnZWO;v#F z(0%q57dmj++E~g2%(?UYw?mYEv$G%-Z}bet=#pC0v5?q$pVOC z#)C-=y-|}v2NIea^;v69{P4r0Ok2SFPnf~y3j8Tulh`53`XtR8+e9K%HC#{+HVzig zD8q<6Ib#5fl$Ba|CA!oX1Lz^=WHYZJ1WieB9@dP;z?L&?=7UFrGpYL56@jhGTgh;M zVNjvN`QZ<$P^!&VD|PGL(yBB<0m6=GPBo$3seY5Ouv7OGHP`$BztE?-h%mxPStXj6tENxX+Ng!n=~hHJu9 zp=(3K{#v|5)Jm|T-Xr3kkYb!7b6T516|d{AdtX&DaB9*?L(4`m(MgseTVNVhDpl-p zOEbbhuS+Q_6Z5*)>!nny%)MzDL#-u$m;{hGpj7Ql)9*kns9AbewXxl>41E<~zHSSp zY>aZTCRNX&K4Ph@DwHOK&@ewR2QVS3Qfo>Hg*~lu3Ux^)LDEfNp7>Z->UiIb$faQ- zaETP9pAFX!I77M`2%4=y`=`19WZS=HAM63+c)!Is3mxcn{>f~Ns z2HZ$Tr5e%%NyB21x;$da&XsQ$_egp9MI#YpzmZf?f6C zfe)G>adq@XdA7Wz$P>q9n1Gq85Uu#uKwgNCYn9!QNE9x6?Y53bQr! zVNq7mrK|!70h)xZO4P2TTE$XT1$0}mWXg2LQVC>Ih5e4*zSeTRHBSMvoD3xs1EN}4 zf{h1C#J)@~smG_GO^0ncvLV(H*-)oaW#inwJ(d%oHidA$4aw8ODaRX0Y3~r64?TjA zMuvUpANo+>F?b``V9zuR?hwLhUfy0=-Z<(G)T>~U&RDIzjn;zi$v6cyHYR!q`MFcd z!BqLAv+pc`5I@$EQ7G7qKAmBljx85d)#_t-Z4@m_tK|}?c4zxJjKoVKKuhd~Hg zpP#>WYnn|+F!&~}#&lQuEq%cjN3O}2dxpY_qR=uks$7*8LxriKNBtIribSxYwb21F zGQ35Q!L(GCWCSkE>uWhbU%?)2awEjEvQiTT2_`Ox~iypR(LS^`X->vqN&2QIQt>#WeV97|2%5s0s(T zleelQ)#hzTmRIHhd{ktrZnIhz2hCf0oTFlujnPyfCxg|rgX+Sd4>eay_k!)=T+xjY zHiw)b)Pak3Ti$weW#W&2aQR_K?O7QjnafwMt1Lcx_@SZL!mt0wZ$E~R%ilx@`LHHp zHN#G(rRoo+X{)Xnzf2OHSX{fs#)V)*9f&ci!W>&I3{|UDb*X-d4?dq!SZ`t}3tJF% zo7NL^(pc^C)$`L2G$DIIN75AqS3t?MX9e~Umrk1Bs#PaG{49d@EqWVE96{^2%w@o? z-~Y$|@UIM|z3fLXzpD2I1}><*85RRa^s}K$KYG$MJIh`0>xo+9OAf zEQ6WnwBysdCuKxCnv5w=#b%vZeb4_Oc{9kI%!Li)>4A9}(T<}F7hah`u4OJPb>ogg z0_QcMONPND{w`m8sn5uWb|#rbc?0+F9GS=0n;Cg4?D^CEnJ`ck=6LvOdtxcXAF>)|;;lisYOyZyP&Yz5%mchI) z(_w$VV?H#QOCPbW%hQlTwTE%dHw3`_tn>06viMO$;~}O;`}+h`^r|N`9bvODyMk$)vG6Pk;id|#}L7p z!Pv~mJ>RDpuzL!oHow8WEp5%Z-Octe@Lt}(`NsG-20D0m2kc!8jNjACJ@@0A?cvyW zUng#p_n2gNPZB5D*5jMW70%x<@E!LZic7t}j13pPK6{|c_QemAxO?gU1NPz=4H1yD Q)c^nh07*qoM6N<$f)cIkwg3PC literal 0 HcmV?d00001 diff --git a/fern/images/product-switcher/product-switcher-home-dark.png b/fern/images/product-switcher/product-switcher-home-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e0822bc58202163d0575d3f4b05fafc8db968eca GIT binary patch literal 7530 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 AbpQYW literal 0 HcmV?d00001 diff --git a/fern/images/product-switcher/product-switcher-home-light.png b/fern/images/product-switcher/product-switcher-home-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa4f831376c60fd7450bbd7e4bae77e972271dc GIT binary patch literal 6497 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 literal 0 HcmV?d00001 diff --git a/fern/images/product-switcher/product-switcher-sdks-light.png b/fern/images/product-switcher/product-switcher-sdks-light.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ca09fddd10aa76a0fecfd096cf1e460d280ba8 GIT binary patch literal 8704 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 page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx index d946058dc..faf5d5d7a 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi.mdx @@ -4,4 +4,4 @@ title: Get to OpenAPI How to transition from AsyncAPI to OpenAPI or integrate both specifications. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx index c8095e8a7..6ba0217d6 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx @@ -4,4 +4,6 @@ title: FastAPI # Generate OpenAPI from FastAPI -Instructions for generating an OpenAPI definition from a FastAPI project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a FastAPI project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx index dfefb49b9..838467f79 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx @@ -4,4 +4,6 @@ title: NestJS # Generate OpenAPI from NestJS -Instructions for generating an OpenAPI definition from a NestJS project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a NestJS project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx index 2daa88917..0ba737a50 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx @@ -1,7 +1,9 @@ --- -title: Request a new framework +title: Request New Framework --- # Request a New Framework -Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. \ No newline at end of file +Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx index 5512b276a..da566a29e 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx @@ -4,4 +4,6 @@ title: Swaggo # Generate OpenAPI from Swaggo -Instructions for generating an OpenAPI definition from a Swaggo (Go) project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a Swaggo (Go) project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). diff --git a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx index 6db37bb5b..28571f07c 100644 --- a/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx @@ -1,7 +1,9 @@ --- -title: Handwrite it +title: Handwrite It --- # Handwrite Your OpenAPI Definition -Step-by-step guide to manually writing your OpenAPI definition from scratch. \ No newline at end of file +Step-by-step guide to manually writing your OpenAPI definition from scratch. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/overlay-customizations.mdx b/fern/products/asyncapi-def/pages/getting-started/overlay-customizations.mdx index 26b75af7e..00fd99ab9 100644 --- a/fern/products/asyncapi-def/pages/getting-started/overlay-customizations.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/overlay-customizations.mdx @@ -1,7 +1,7 @@ --- -title: Overlay customizations +title: Overlay Customizations --- -# Overlay Customizations +Learn how to customize your OpenAPI overlays to fit your unique requirements. -Learn how to customize your OpenAPI overlays to fit your unique requirements. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). diff --git a/fern/products/asyncapi-def/pages/getting-started/overview.mdx b/fern/products/asyncapi-def/pages/getting-started/overview.mdx index 0d6523698..d3b20d894 100644 --- a/fern/products/asyncapi-def/pages/getting-started/overview.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/overview.mdx @@ -4,4 +4,4 @@ title: Overview This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx b/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx index 233a87063..7b9f1f487 100644 --- a/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx +++ b/fern/products/asyncapi-def/pages/getting-started/philosophy.mdx @@ -4,4 +4,4 @@ title: Philosophy The philosophy and principles behind AsyncAPI definitions and how they enhance API development. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/allof.mdx b/fern/products/asyncapi-def/pages/schemas/allof.mdx index 319904842..16d657582 100644 --- a/fern/products/asyncapi-def/pages/schemas/allof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/allof.mdx @@ -1,7 +1,7 @@ --- -title: AllOf +title: All Of --- How to use the `allOf` keyword to compose schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/anyof.mdx b/fern/products/asyncapi-def/pages/schemas/anyof.mdx index d98c9c7c5..91fcdeab8 100644 --- a/fern/products/asyncapi-def/pages/schemas/anyof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/anyof.mdx @@ -1,7 +1,7 @@ --- -title: AnyOf +title: Any Of --- How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/enums.mdx b/fern/products/asyncapi-def/pages/schemas/enums.mdx index 0f071434b..c9c85709a 100644 --- a/fern/products/asyncapi-def/pages/schemas/enums.mdx +++ b/fern/products/asyncapi-def/pages/schemas/enums.mdx @@ -4,4 +4,4 @@ title: Enums How to use enum types to define a fixed set of values in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx b/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx index ab179fb00..9906fcf9d 100644 --- a/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/asyncapi-def/pages/schemas/inlined-schemas.mdx @@ -4,4 +4,4 @@ title: Inlined Schemas How to define schemas inline within your OpenAPI specification. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/objects.mdx b/fern/products/asyncapi-def/pages/schemas/objects.mdx index a2308a231..393909d69 100644 --- a/fern/products/asyncapi-def/pages/schemas/objects.mdx +++ b/fern/products/asyncapi-def/pages/schemas/objects.mdx @@ -4,4 +4,4 @@ title: Objects How to define object schemas with properties in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/oneof.mdx b/fern/products/asyncapi-def/pages/schemas/oneof.mdx index f06ab43b4..134e74233 100644 --- a/fern/products/asyncapi-def/pages/schemas/oneof.mdx +++ b/fern/products/asyncapi-def/pages/schemas/oneof.mdx @@ -1,7 +1,7 @@ --- -title: OneOf +title: One Of --- How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/schemas/override-type.mdx b/fern/products/asyncapi-def/pages/schemas/override-type.mdx index 9e94c50b8..109113ac7 100644 --- a/fern/products/asyncapi-def/pages/schemas/override-type.mdx +++ b/fern/products/asyncapi-def/pages/schemas/override-type.mdx @@ -1,7 +1,7 @@ --- -title: Override the Type +title: Override Type --- How to override the default type inference for schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx b/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx index 3ae7886b2..57df008d3 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/multiple-security-schemes.mdx @@ -4,4 +4,4 @@ title: Multiple Security Schemes Learn how to define and use multiple security schemes in your OpenAPI definition. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx b/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx index 74ff53c6e..a3c7c6bd7 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/overriding-security-scheme.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Security Scheme +title: Overriding Security Scheme --- How to override security schemes in specific operations or contexts. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/security-schemes/overview.mdx b/fern/products/asyncapi-def/pages/security-schemes/overview.mdx index d509ec43e..58347b318 100644 --- a/fern/products/asyncapi-def/pages/security-schemes/overview.mdx +++ b/fern/products/asyncapi-def/pages/security-schemes/overview.mdx @@ -4,4 +4,4 @@ title: Security Schemes Overview Overview of security schemes and authentication methods in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/authentication.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx b/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx index 97e6b2fb4..9842ed0a3 100644 --- a/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx +++ b/fern/products/asyncapi-def/pages/servers/multiple-server-urls.mdx @@ -4,4 +4,4 @@ title: Multiple Server URLs How to configure multiple server URLs for different environments. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx b/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx index 1be4ae892..a5d0d1172 100644 --- a/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx +++ b/fern/products/asyncapi-def/pages/servers/naming-your-servers.mdx @@ -4,4 +4,4 @@ title: Naming Your Servers Best practices for naming your server configurations. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx b/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx index f3309e941..0b5ecad00 100644 --- a/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx +++ b/fern/products/asyncapi-def/pages/servers/overriding-servers.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Servers +title: Overriding Servers --- How to override server configurations in specific contexts. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/asyncapi-def/pages/servers/overview.mdx b/fern/products/asyncapi-def/pages/servers/overview.mdx index 7f5140173..4986039ff 100644 --- a/fern/products/asyncapi-def/pages/servers/overview.mdx +++ b/fern/products/asyncapi-def/pages/servers/overview.mdx @@ -4,4 +4,4 @@ title: Servers Overview Overview of server configuration options in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/servers.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/audiences.mdx b/fern/products/fern-def/pages/defining-your-api/audiences.mdx index 11d55798b..0cf702790 100644 --- a/fern/products/fern-def/pages/defining-your-api/audiences.mdx +++ b/fern/products/fern-def/pages/defining-your-api/audiences.mdx @@ -4,4 +4,6 @@ title: Audiences # Audiences -Details about different audiences or user groups for the API. \ No newline at end of file +Define different audiences for your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/availability.mdx b/fern/products/fern-def/pages/defining-your-api/availability.mdx index cab7f2bd0..c8084c7a9 100644 --- a/fern/products/fern-def/pages/defining-your-api/availability.mdx +++ b/fern/products/fern-def/pages/defining-your-api/availability.mdx @@ -4,4 +4,6 @@ title: Availability # Availability -Information about the availability and uptime of the API. \ No newline at end of file +Configure availability settings for your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/doc.mdx b/fern/products/fern-def/pages/defining-your-api/doc.mdx index 949f93a49..30215a455 100644 --- a/fern/products/fern-def/pages/defining-your-api/doc.mdx +++ b/fern/products/fern-def/pages/defining-your-api/doc.mdx @@ -4,4 +4,6 @@ title: Doc # Doc -General documentation for your API. \ No newline at end of file +Documentation configuration. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/endpoints.mdx b/fern/products/fern-def/pages/defining-your-api/endpoints.mdx index ec000c42f..07e4678a1 100644 --- a/fern/products/fern-def/pages/defining-your-api/endpoints.mdx +++ b/fern/products/fern-def/pages/defining-your-api/endpoints.mdx @@ -4,4 +4,6 @@ title: Endpoints # Endpoints -A list and description of all available API endpoints. \ No newline at end of file +How to define API endpoints in your specification. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/errors.mdx b/fern/products/fern-def/pages/defining-your-api/errors.mdx index 2310d891d..394da9f32 100644 --- a/fern/products/fern-def/pages/defining-your-api/errors.mdx +++ b/fern/products/fern-def/pages/defining-your-api/errors.mdx @@ -4,4 +4,6 @@ title: Errors # Errors -Common errors and how to handle them. \ No newline at end of file +Define error responses for your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/examples.mdx b/fern/products/fern-def/pages/defining-your-api/examples.mdx index 94c010d53..eae47886c 100644 --- a/fern/products/fern-def/pages/defining-your-api/examples.mdx +++ b/fern/products/fern-def/pages/defining-your-api/examples.mdx @@ -4,4 +4,6 @@ title: Examples # Examples -Code samples and example requests/responses for the API. \ No newline at end of file +How to add examples to your API definition. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/imports.mdx b/fern/products/fern-def/pages/defining-your-api/imports.mdx index fe7cb9f9e..95cc1ac0a 100644 --- a/fern/products/fern-def/pages/defining-your-api/imports.mdx +++ b/fern/products/fern-def/pages/defining-your-api/imports.mdx @@ -4,4 +4,6 @@ title: Imports # Imports -How to import and reuse components in your API definition. \ No newline at end of file +How to import external definitions into your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/types.mdx b/fern/products/fern-def/pages/defining-your-api/types.mdx index db68cc8eb..a172a3fd6 100644 --- a/fern/products/fern-def/pages/defining-your-api/types.mdx +++ b/fern/products/fern-def/pages/defining-your-api/types.mdx @@ -4,4 +4,6 @@ title: Types # Types -Documentation on the data types used in the API. \ No newline at end of file +Documentation on the data types used in the API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/webhooks.mdx b/fern/products/fern-def/pages/defining-your-api/webhooks.mdx index ea2a23793..b0e658deb 100644 --- a/fern/products/fern-def/pages/defining-your-api/webhooks.mdx +++ b/fern/products/fern-def/pages/defining-your-api/webhooks.mdx @@ -4,4 +4,6 @@ title: Webhooks # Webhooks -Information about webhook support and configuration. \ No newline at end of file +How to define webhook endpoints in your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/websockets.mdx b/fern/products/fern-def/pages/defining-your-api/websockets.mdx index c568ce29f..27dd22132 100644 --- a/fern/products/fern-def/pages/defining-your-api/websockets.mdx +++ b/fern/products/fern-def/pages/defining-your-api/websockets.mdx @@ -4,4 +4,6 @@ title: WebSockets # WebSockets -Details on using WebSockets with the API. \ No newline at end of file +Configure WebSocket connections in your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/customer-showcase.mdx b/fern/products/fern-def/pages/getting-started/customer-showcase.mdx index 320ec6b7d..6b3d611bc 100644 --- a/fern/products/fern-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/fern-def/pages/getting-started/customer-showcase.mdx @@ -1,7 +1,9 @@ --- -title: Customer Showcase +title: Customer showcase --- -# Customer Showcase +# Customer showcase -See how customers are using our API to build amazing products. \ No newline at end of file +See how other customers are using Fern successfully. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/overview.mdx b/fern/products/fern-def/pages/getting-started/overview.mdx index 41b0cc32a..33538226b 100644 --- a/fern/products/fern-def/pages/getting-started/overview.mdx +++ b/fern/products/fern-def/pages/getting-started/overview.mdx @@ -4,4 +4,6 @@ title: Overview # Overview -Welcome to the Getting Started section! This page provides an introduction to the API and how to begin using it. \ No newline at end of file +Welcome to the Getting Started section! This page provides an introduction to the API and how to begin using it. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/philosophy.mdx b/fern/products/fern-def/pages/getting-started/philosophy.mdx index d12a25a0e..ca98496cd 100644 --- a/fern/products/fern-def/pages/getting-started/philosophy.mdx +++ b/fern/products/fern-def/pages/getting-started/philosophy.mdx @@ -4,4 +4,6 @@ title: Philosophy # Philosophy -Learn about the guiding principles and philosophy behind our API design. \ No newline at end of file +The principles and philosophy behind Fern API definitions. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/quickstart.mdx b/fern/products/fern-def/pages/getting-started/quickstart.mdx index e01b30d48..91cbf2c92 100644 --- a/fern/products/fern-def/pages/getting-started/quickstart.mdx +++ b/fern/products/fern-def/pages/getting-started/quickstart.mdx @@ -4,4 +4,6 @@ title: Quickstart # Quickstart -Follow these steps to quickly get up and running with the API. \ No newline at end of file +Get started with Fern quickly with this guide. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/api-versions.mdx b/fern/products/fern-def/pages/global-settings/api-versions.mdx index 5b323c02c..38aa14645 100644 --- a/fern/products/fern-def/pages/global-settings/api-versions.mdx +++ b/fern/products/fern-def/pages/global-settings/api-versions.mdx @@ -1,7 +1,9 @@ --- -title: API Versions +title: API versions --- -# API Versions +# API versions -Learn about versioning and how to select the appropriate API version. \ No newline at end of file +How to manage different versions of your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/authentication.mdx b/fern/products/fern-def/pages/global-settings/authentication.mdx index 479401d42..7d5a51d04 100644 --- a/fern/products/fern-def/pages/global-settings/authentication.mdx +++ b/fern/products/fern-def/pages/global-settings/authentication.mdx @@ -4,4 +4,6 @@ title: Authentication # Authentication -Learn how to authenticate with the API and manage credentials. \ No newline at end of file +Configure authentication methods for your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/environments.mdx b/fern/products/fern-def/pages/global-settings/environments.mdx index e24c1f696..ede95d53e 100644 --- a/fern/products/fern-def/pages/global-settings/environments.mdx +++ b/fern/products/fern-def/pages/global-settings/environments.mdx @@ -4,4 +4,6 @@ title: Environments # Environments -Details about the different environments available for the API (e.g., production, staging). \ No newline at end of file +Configure different environments for your API (development, staging, production). + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/global-headers.mdx b/fern/products/fern-def/pages/global-settings/global-headers.mdx index 168b028f1..1f47ad893 100644 --- a/fern/products/fern-def/pages/global-settings/global-headers.mdx +++ b/fern/products/fern-def/pages/global-settings/global-headers.mdx @@ -1,7 +1,9 @@ --- -title: Global Headers +title: Global headers --- -# Global Headers +# Global headers -Information about required and optional global headers for API requests. \ No newline at end of file +Define headers that apply to all API endpoints. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/creating-namespaces.mdx b/fern/products/fern-def/pages/guides/creating-namespaces.mdx index 6571b3666..e053d5563 100644 --- a/fern/products/fern-def/pages/guides/creating-namespaces.mdx +++ b/fern/products/fern-def/pages/guides/creating-namespaces.mdx @@ -4,4 +4,6 @@ title: Creating namespaces # Creating namespaces -Instructions for creating and organizing namespaces in your API. \ No newline at end of file +Instructions for creating and organizing namespaces in your API. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/define-multiple-apis.mdx b/fern/products/fern-def/pages/guides/define-multiple-apis.mdx index 03adf17c7..51eb7d3f2 100644 --- a/fern/products/fern-def/pages/guides/define-multiple-apis.mdx +++ b/fern/products/fern-def/pages/guides/define-multiple-apis.mdx @@ -4,4 +4,6 @@ title: Define multiple APIs # Define multiple APIs -Instructions for defining and managing multiple APIs. \ No newline at end of file +How to define and manage multiple APIs in one project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx b/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx index 47501b54a..dd61785b8 100644 --- a/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx +++ b/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx @@ -4,4 +4,6 @@ title: Depending on other APIs # Depending on other APIs -How to depend on and integrate with other APIs. \ No newline at end of file +How to manage dependencies between different APIs. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/export-to-openapi.mdx b/fern/products/fern-def/pages/guides/export-to-openapi.mdx index bc7b5c797..0822376e4 100644 --- a/fern/products/fern-def/pages/guides/export-to-openapi.mdx +++ b/fern/products/fern-def/pages/guides/export-to-openapi.mdx @@ -4,4 +4,6 @@ title: Export to OpenAPI # Export to OpenAPI -How to export your Fern API definition to OpenAPI format. \ No newline at end of file +How to export your API definition to OpenAPI format. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx b/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx index 952fddedd..852d15820 100644 --- a/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx +++ b/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx @@ -1,7 +1,9 @@ --- -title: Validate your Fern Definition +title: Validate your Fern definition --- -# Validate your Fern Definition +# Validate your Fern definition -How to validate your Fern API definition for correctness. \ No newline at end of file +Learn how to validate your Fern definition to ensure it's correct. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/customer-showcase.mdx b/fern/products/grpc-def/pages/getting-started/customer-showcase.mdx index b8913aadc..662e99e15 100644 --- a/fern/products/grpc-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/grpc-def/pages/getting-started/customer-showcase.mdx @@ -2,6 +2,6 @@ title: Customer Showcase --- -# Customer Showcase +Examples and case studies of customers using AsyncAPI definitions successfully. -See how other customers are using OpenAPI definitions to power their APIs and documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi.mdx index 65cd466c8..6a181a5a0 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi.mdx @@ -2,6 +2,6 @@ title: Get to OpenAPI --- -# Get to OpenAPI +How to transition from AsyncAPI to OpenAPI or integrate both specifications. -Learn how to create or obtain your OpenAPI definition. Explore different approaches including handwriting, generating from code, and more. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx index c8095e8a7..b00c016ac 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx @@ -4,4 +4,6 @@ title: FastAPI # Generate OpenAPI from FastAPI -Instructions for generating an OpenAPI definition from a FastAPI project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a FastAPI project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx index dfefb49b9..e8e90de30 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx @@ -4,4 +4,6 @@ title: NestJS # Generate OpenAPI from NestJS -Instructions for generating an OpenAPI definition from a NestJS project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a NestJS project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx index 2daa88917..e41f98ac0 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx @@ -1,7 +1,9 @@ --- -title: Request a new framework +title: Request New Framework --- # Request a New Framework -Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. \ No newline at end of file +Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx index 5512b276a..954b2d1d9 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx @@ -4,4 +4,6 @@ title: Swaggo # Generate OpenAPI from Swaggo -Instructions for generating an OpenAPI definition from a Swaggo (Go) project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a Swaggo (Go) project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx index 6db37bb5b..5a0f238ff 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx @@ -1,7 +1,9 @@ --- -title: Handwrite it +title: Handwrite It --- # Handwrite Your OpenAPI Definition -Step-by-step guide to manually writing your OpenAPI definition from scratch. \ No newline at end of file +Step-by-step guide to manually writing your OpenAPI definition from scratch. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/overlay-customizations.mdx b/fern/products/grpc-def/pages/getting-started/overlay-customizations.mdx index 26b75af7e..6fb9aad86 100644 --- a/fern/products/grpc-def/pages/getting-started/overlay-customizations.mdx +++ b/fern/products/grpc-def/pages/getting-started/overlay-customizations.mdx @@ -1,7 +1,7 @@ --- -title: Overlay customizations +title: Overlay Customizations --- -# Overlay Customizations +Learn how to customize your OpenAPI overlays to fit your unique requirements. -Learn how to customize your OpenAPI overlays to fit your unique requirements. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/overview.mdx b/fern/products/grpc-def/pages/getting-started/overview.mdx index 001442f88..97d40b566 100644 --- a/fern/products/grpc-def/pages/getting-started/overview.mdx +++ b/fern/products/grpc-def/pages/getting-started/overview.mdx @@ -4,4 +4,6 @@ title: Overview # Overview -This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. \ No newline at end of file +This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/philosophy.mdx b/fern/products/grpc-def/pages/getting-started/philosophy.mdx index 56f5a3b9a..0e52bc615 100644 --- a/fern/products/grpc-def/pages/getting-started/philosophy.mdx +++ b/fern/products/grpc-def/pages/getting-started/philosophy.mdx @@ -2,6 +2,6 @@ title: Philosophy --- -# Philosophy +The philosophy and principles behind AsyncAPI definitions and how they enhance API development. -Understand the philosophy behind designing and maintaining your OpenAPI definitions. Learn best practices and guiding principles. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/allof.mdx b/fern/products/grpc-def/pages/schemas/allof.mdx index 319904842..305b424b5 100644 --- a/fern/products/grpc-def/pages/schemas/allof.mdx +++ b/fern/products/grpc-def/pages/schemas/allof.mdx @@ -1,7 +1,7 @@ --- -title: AllOf +title: All Of --- How to use the `allOf` keyword to compose schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/anyof.mdx b/fern/products/grpc-def/pages/schemas/anyof.mdx index d98c9c7c5..bd293f9da 100644 --- a/fern/products/grpc-def/pages/schemas/anyof.mdx +++ b/fern/products/grpc-def/pages/schemas/anyof.mdx @@ -1,7 +1,7 @@ --- -title: AnyOf +title: Any Of --- How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/enums.mdx b/fern/products/grpc-def/pages/schemas/enums.mdx index 0f071434b..269806428 100644 --- a/fern/products/grpc-def/pages/schemas/enums.mdx +++ b/fern/products/grpc-def/pages/schemas/enums.mdx @@ -4,4 +4,4 @@ title: Enums How to use enum types to define a fixed set of values in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx b/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx index ab179fb00..50d864e10 100644 --- a/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/grpc-def/pages/schemas/inlined-schemas.mdx @@ -4,4 +4,4 @@ title: Inlined Schemas How to define schemas inline within your OpenAPI specification. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/objects.mdx b/fern/products/grpc-def/pages/schemas/objects.mdx index a2308a231..99c6a6e41 100644 --- a/fern/products/grpc-def/pages/schemas/objects.mdx +++ b/fern/products/grpc-def/pages/schemas/objects.mdx @@ -4,4 +4,4 @@ title: Objects How to define object schemas with properties in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/oneof.mdx b/fern/products/grpc-def/pages/schemas/oneof.mdx index f06ab43b4..c29355abe 100644 --- a/fern/products/grpc-def/pages/schemas/oneof.mdx +++ b/fern/products/grpc-def/pages/schemas/oneof.mdx @@ -1,7 +1,7 @@ --- -title: OneOf +title: One Of --- How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/schemas/override-type.mdx b/fern/products/grpc-def/pages/schemas/override-type.mdx index 9e94c50b8..44cac7698 100644 --- a/fern/products/grpc-def/pages/schemas/override-type.mdx +++ b/fern/products/grpc-def/pages/schemas/override-type.mdx @@ -1,7 +1,7 @@ --- -title: Override the Type +title: Override Type --- How to override the default type inference for schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/security-schemes/multiple-security-schemes.mdx b/fern/products/grpc-def/pages/security-schemes/multiple-security-schemes.mdx index 286d0a352..04a3407ed 100644 --- a/fern/products/grpc-def/pages/security-schemes/multiple-security-schemes.mdx +++ b/fern/products/grpc-def/pages/security-schemes/multiple-security-schemes.mdx @@ -2,6 +2,6 @@ title: Multiple Security Schemes --- -# Multiple Security Schemes +Learn how to define and use multiple security schemes in your OpenAPI definition. -Learn how to define and use multiple security schemes in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/security-schemes/overriding-security-scheme.mdx b/fern/products/grpc-def/pages/security-schemes/overriding-security-scheme.mdx index cf38307fc..905a45251 100644 --- a/fern/products/grpc-def/pages/security-schemes/overriding-security-scheme.mdx +++ b/fern/products/grpc-def/pages/security-schemes/overriding-security-scheme.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Security Scheme +title: Overriding Security Scheme --- -# Overriding the Security Scheme +How to override security schemes in specific operations or contexts. -How to override the default security scheme in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/security-schemes/overview.mdx b/fern/products/grpc-def/pages/security-schemes/overview.mdx index c6be3e7c6..7743f8089 100644 --- a/fern/products/grpc-def/pages/security-schemes/overview.mdx +++ b/fern/products/grpc-def/pages/security-schemes/overview.mdx @@ -2,6 +2,6 @@ title: Security Schemes Overview --- -# Security Schemes Overview +Overview of security schemes and authentication methods in OpenAPI. -An introduction to security schemes in OpenAPI. Learn about authentication and authorization options. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/servers/multiple-server-urls.mdx b/fern/products/grpc-def/pages/servers/multiple-server-urls.mdx index 4f563e0ef..94ba2c929 100644 --- a/fern/products/grpc-def/pages/servers/multiple-server-urls.mdx +++ b/fern/products/grpc-def/pages/servers/multiple-server-urls.mdx @@ -2,6 +2,6 @@ title: Multiple Server URLs --- -# Multiple Server URLs +How to configure multiple server URLs for different environments. -How to define and use multiple server URLs in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/servers/naming-your-servers.mdx b/fern/products/grpc-def/pages/servers/naming-your-servers.mdx index ce65b26b6..fd2a055bb 100644 --- a/fern/products/grpc-def/pages/servers/naming-your-servers.mdx +++ b/fern/products/grpc-def/pages/servers/naming-your-servers.mdx @@ -2,6 +2,6 @@ title: Naming Your Servers --- -# Naming Your Servers +Best practices for naming your server configurations. -Best practices for naming your server URLs in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/servers/overriding-servers.mdx b/fern/products/grpc-def/pages/servers/overriding-servers.mdx index 67ab82071..0c5cc5f6f 100644 --- a/fern/products/grpc-def/pages/servers/overriding-servers.mdx +++ b/fern/products/grpc-def/pages/servers/overriding-servers.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Servers +title: Overriding Servers --- -# Overriding the Servers +How to override server configurations in specific contexts. -How to override the default servers in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/servers/overview.mdx b/fern/products/grpc-def/pages/servers/overview.mdx index b45b551c9..761a9d085 100644 --- a/fern/products/grpc-def/pages/servers/overview.mdx +++ b/fern/products/grpc-def/pages/servers/overview.mdx @@ -2,6 +2,6 @@ title: Servers Overview --- -# Servers Overview +Overview of server configuration options in OpenAPI. -Introduction to server objects in OpenAPI. Learn how to define and manage server URLs. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index fe9da476b..04dca9482 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -23,54 +23,10 @@ layout: custom }} className="box-border block" /> -
-
-
-
+
+
+
+
diff --git a/fern/products/openapi-def/pages/getting-started/customer-showcase.mdx b/fern/products/openapi-def/pages/getting-started/customer-showcase.mdx index b8913aadc..c5b866835 100644 --- a/fern/products/openapi-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/openapi-def/pages/getting-started/customer-showcase.mdx @@ -2,6 +2,6 @@ title: Customer Showcase --- -# Customer Showcase +Examples and case studies of customers using OpenAPI definitions successfully. -See how other customers are using OpenAPI definitions to power their APIs and documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi.mdx index 65cd466c8..fb94e0757 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi.mdx @@ -2,6 +2,6 @@ title: Get to OpenAPI --- -# Get to OpenAPI +How to create or obtain your OpenAPI definition through various methods. -Learn how to create or obtain your OpenAPI definition. Explore different approaches including handwriting, generating from code, and more. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx index c8095e8a7..c86fc2990 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx @@ -4,4 +4,6 @@ title: FastAPI # Generate OpenAPI from FastAPI -Instructions for generating an OpenAPI definition from a FastAPI project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a FastAPI project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx index dfefb49b9..a8d652966 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx @@ -4,4 +4,6 @@ title: NestJS # Generate OpenAPI from NestJS -Instructions for generating an OpenAPI definition from a NestJS project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a NestJS project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx index 2daa88917..caff15386 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx @@ -1,7 +1,9 @@ --- -title: Request a new framework +title: Request New Framework --- # Request a New Framework -Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. \ No newline at end of file +Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx index 5512b276a..bfce61181 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx @@ -4,4 +4,6 @@ title: Swaggo # Generate OpenAPI from Swaggo -Instructions for generating an OpenAPI definition from a Swaggo (Go) project. \ No newline at end of file +Instructions for generating an OpenAPI definition from a Swaggo (Go) project. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx b/fern/products/openapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx index 6db37bb5b..369b2a221 100644 --- a/fern/products/openapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx +++ b/fern/products/openapi-def/pages/getting-started/get-to-openapi/handwrite-it.mdx @@ -1,7 +1,9 @@ --- -title: Handwrite it +title: Handwrite It --- # Handwrite Your OpenAPI Definition -Step-by-step guide to manually writing your OpenAPI definition from scratch. \ No newline at end of file +Step-by-step guide to manually writing your OpenAPI definition from scratch. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/overlay-customizations.mdx b/fern/products/openapi-def/pages/getting-started/overlay-customizations.mdx index 26b75af7e..014c14d01 100644 --- a/fern/products/openapi-def/pages/getting-started/overlay-customizations.mdx +++ b/fern/products/openapi-def/pages/getting-started/overlay-customizations.mdx @@ -1,7 +1,7 @@ --- -title: Overlay customizations +title: Overlay Customizations --- -# Overlay Customizations +Learn how to customize your OpenAPI overlays to fit your unique requirements. -Learn how to customize your OpenAPI overlays to fit your unique requirements. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/overview.mdx b/fern/products/openapi-def/pages/getting-started/overview.mdx index 001442f88..6be870a5d 100644 --- a/fern/products/openapi-def/pages/getting-started/overview.mdx +++ b/fern/products/openapi-def/pages/getting-started/overview.mdx @@ -4,4 +4,6 @@ title: Overview # Overview -This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. \ No newline at end of file +This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/getting-started/philosophy.mdx b/fern/products/openapi-def/pages/getting-started/philosophy.mdx index 56f5a3b9a..87806f749 100644 --- a/fern/products/openapi-def/pages/getting-started/philosophy.mdx +++ b/fern/products/openapi-def/pages/getting-started/philosophy.mdx @@ -2,6 +2,6 @@ title: Philosophy --- -# Philosophy +The philosophy and principles behind OpenAPI definitions and how they enhance API development. -Understand the philosophy behind designing and maintaining your OpenAPI definitions. Learn best practices and guiding principles. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/allof.mdx b/fern/products/openapi-def/pages/schemas/allof.mdx index 319904842..e358568a9 100644 --- a/fern/products/openapi-def/pages/schemas/allof.mdx +++ b/fern/products/openapi-def/pages/schemas/allof.mdx @@ -1,7 +1,7 @@ --- -title: AllOf +title: All Of --- How to use the `allOf` keyword to compose schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/anyof.mdx b/fern/products/openapi-def/pages/schemas/anyof.mdx index d98c9c7c5..49b1741a8 100644 --- a/fern/products/openapi-def/pages/schemas/anyof.mdx +++ b/fern/products/openapi-def/pages/schemas/anyof.mdx @@ -1,7 +1,7 @@ --- -title: AnyOf +title: Any Of --- How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/enums.mdx b/fern/products/openapi-def/pages/schemas/enums.mdx index c50286ca0..91e6534f9 100644 --- a/fern/products/openapi-def/pages/schemas/enums.mdx +++ b/fern/products/openapi-def/pages/schemas/enums.mdx @@ -2,6 +2,6 @@ title: Enums --- -# Enums +How to use enum types to define a fixed set of values in OpenAPI. -How to define and use enums in your OpenAPI schemas. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx b/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx index ab179fb00..ef85bd503 100644 --- a/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/openapi-def/pages/schemas/inlined-schemas.mdx @@ -4,4 +4,4 @@ title: Inlined Schemas How to define schemas inline within your OpenAPI specification. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/objects.mdx b/fern/products/openapi-def/pages/schemas/objects.mdx index a2308a231..11c642e50 100644 --- a/fern/products/openapi-def/pages/schemas/objects.mdx +++ b/fern/products/openapi-def/pages/schemas/objects.mdx @@ -4,4 +4,4 @@ title: Objects How to define object schemas with properties in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/oneof.mdx b/fern/products/openapi-def/pages/schemas/oneof.mdx index f06ab43b4..9cbd54b08 100644 --- a/fern/products/openapi-def/pages/schemas/oneof.mdx +++ b/fern/products/openapi-def/pages/schemas/oneof.mdx @@ -1,7 +1,7 @@ --- -title: OneOf +title: One Of --- How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/schemas/override-type.mdx b/fern/products/openapi-def/pages/schemas/override-type.mdx index 9e94c50b8..232be2f74 100644 --- a/fern/products/openapi-def/pages/schemas/override-type.mdx +++ b/fern/products/openapi-def/pages/schemas/override-type.mdx @@ -1,7 +1,7 @@ --- -title: Override the Type +title: Override Type --- How to override the default type inference for schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/security-schemes/multiple-security-schemes.mdx b/fern/products/openapi-def/pages/security-schemes/multiple-security-schemes.mdx index 286d0a352..e309f5c61 100644 --- a/fern/products/openapi-def/pages/security-schemes/multiple-security-schemes.mdx +++ b/fern/products/openapi-def/pages/security-schemes/multiple-security-schemes.mdx @@ -2,6 +2,6 @@ title: Multiple Security Schemes --- -# Multiple Security Schemes +Learn how to define and use multiple security schemes in your OpenAPI definition. -Learn how to define and use multiple security schemes in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/security-schemes/overriding-security-scheme.mdx b/fern/products/openapi-def/pages/security-schemes/overriding-security-scheme.mdx index cf38307fc..c15237faa 100644 --- a/fern/products/openapi-def/pages/security-schemes/overriding-security-scheme.mdx +++ b/fern/products/openapi-def/pages/security-schemes/overriding-security-scheme.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Security Scheme +title: Overriding Security Scheme --- -# Overriding the Security Scheme +How to override security schemes in specific operations or contexts. -How to override the default security scheme in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/security-schemes/overview.mdx b/fern/products/openapi-def/pages/security-schemes/overview.mdx index c6be3e7c6..aee1d93c0 100644 --- a/fern/products/openapi-def/pages/security-schemes/overview.mdx +++ b/fern/products/openapi-def/pages/security-schemes/overview.mdx @@ -2,6 +2,6 @@ title: Security Schemes Overview --- -# Security Schemes Overview +Overview of security schemes and authentication methods in OpenAPI. -An introduction to security schemes in OpenAPI. Learn about authentication and authorization options. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/servers/multiple-server-urls.mdx b/fern/products/openapi-def/pages/servers/multiple-server-urls.mdx index 4f563e0ef..75b1c9a73 100644 --- a/fern/products/openapi-def/pages/servers/multiple-server-urls.mdx +++ b/fern/products/openapi-def/pages/servers/multiple-server-urls.mdx @@ -2,6 +2,6 @@ title: Multiple Server URLs --- -# Multiple Server URLs +How to configure multiple server URLs for different environments. -How to define and use multiple server URLs in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/servers/naming-your-servers.mdx b/fern/products/openapi-def/pages/servers/naming-your-servers.mdx index ce65b26b6..e8156e654 100644 --- a/fern/products/openapi-def/pages/servers/naming-your-servers.mdx +++ b/fern/products/openapi-def/pages/servers/naming-your-servers.mdx @@ -2,6 +2,6 @@ title: Naming Your Servers --- -# Naming Your Servers +Best practices for naming your server configurations. -Best practices for naming your server URLs in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/servers/overriding-servers.mdx b/fern/products/openapi-def/pages/servers/overriding-servers.mdx index 67ab82071..b73791cd4 100644 --- a/fern/products/openapi-def/pages/servers/overriding-servers.mdx +++ b/fern/products/openapi-def/pages/servers/overriding-servers.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Servers +title: Overriding Servers --- -# Overriding the Servers +How to override server configurations in specific contexts. -How to override the default servers in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file diff --git a/fern/products/openapi-def/pages/servers/overview.mdx b/fern/products/openapi-def/pages/servers/overview.mdx index b45b551c9..57a9148b3 100644 --- a/fern/products/openapi-def/pages/servers/overview.mdx +++ b/fern/products/openapi-def/pages/servers/overview.mdx @@ -2,6 +2,6 @@ title: Servers Overview --- -# Servers Overview +Overview of server configuration options in OpenAPI. -Introduction to server objects in OpenAPI. Learn how to define and manage server URLs. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/openapi/overview). \ No newline at end of file From f425345e974fe8d42f5cd93482a8d98975fb00b5 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 8 Jul 2025 14:02:27 -0400 Subject: [PATCH 32/39] feat: cleaned up product selector icons --- fern/assets/styles.css | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index 33933456a..fd08267d5 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -149,39 +149,19 @@ div:has(> .fern-product-selector-radio-group):before { } :is(.dark) .fern-product-selector-radio-group a[href*="home"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/data-api-image-dark.svg") !important; + content: url("https://fern-docs.s3.us-east-2.amazonaws.com/product-switcher/product-switcher-home-dark.png") !important; } :is(.dark) .fern-product-selector-radio-group a[href*="sdks"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/designer-api-image-dark.svg") !important; -} + content: url("https://fern-docs.s3.us-east-2.amazonaws.com/product-switcher/product-switcher-sdks-dark.png") !important; +} :is(.dark) .fern-product-selector-radio-group a[href*="docs"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/browser-api-image-dark.svg") !important; + content: url("https://fern-docs.s3.us-east-2.amazonaws.com/product-switcher/product-switcher-docs-dark.png") !important; } :is(.dark) .fern-product-selector-radio-group a[href*="ask-fern"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/webflow-cloud-image-dark.svg") !important; -} - -:is(.dark) .fern-product-selector-radio-group a[href*="openapi"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/flowkit-image-dark.svg") !important; -} - -:is(.dark) .fern-product-selector-radio-group a[href*="fern-def"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/fern-def-image-dark.svg") !important; -} - -:is(.dark) .fern-product-selector-radio-group a[href*="asyncapi"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/asyncapi-image-dark.svg") !important; -} - -:is(.dark) .fern-product-selector-radio-group a[href*="openrpc"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/openrpc-image-dark.svg") !important; -} - -:is(.dark) .fern-product-selector-radio-group a[href*="grpc"] img { - content: url("https://webflow-docs-site.s3.us-east-2.amazonaws.com/grpc-image-dark.svg") !important; + content: url("https://fern-docs.s3.us-east-2.amazonaws.com/product-switcher/product-switcher-askfern-dark.png") !important; } /*** END -- PRODUCT SELECTOR STYLING ***/ From 9eac7ae429d8c54ec3a6b547bc4f4342e881636a Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 8 Jul 2025 14:35:21 -0400 Subject: [PATCH 33/39] feat: adding a custom component for the footer --- fern/components/FernStatus.tsx | 174 ++++++++++++++++++ fern/docs.yml | 4 + .../docs/pages/changelog/overview.mdx | 4 +- .../custom-react-components.mdx | 6 +- .../custom-components/reusable-snippets.mdx | 6 +- .../default-components/accordion-groups.mdx | 6 +- .../default-components/accordions.mdx | 6 +- .../default-components/aside.mdx | 6 +- .../default-components/callouts.mdx | 6 +- .../default-components/card-groups.mdx | 6 +- .../default-components/cards.mdx | 6 +- .../default-components/code-blocks.mdx | 6 +- .../default-components/embed.mdx | 6 +- .../endpoint-request-snippet.mdx | 6 +- .../endpoint-response-snippet.mdx | 6 +- .../endpoint-schema-snippet.mdx | 6 +- .../default-components/frames.mdx | 6 +- .../default-components/icons.mdx | 6 +- .../default-components/overview.mdx | 6 +- .../default-components/parameter-fields.mdx | 6 +- .../default-components/steps.mdx | 6 +- .../default-components/tabs.mdx | 6 +- .../default-components/tooltips.mdx | 6 +- .../docs/pages/component-library/overview.mdx | 4 +- .../writing-content/frontmatter.mdx | 6 +- .../writing-content/markdown.mdx | 28 +-- .../writing-content/visual-editor.mdx | 6 +- .../authentication/api-key-injection.mdx | 4 +- .../docs/pages/guides/authentication/rbac.mdx | 6 +- .../docs/pages/guides/authentication/sso.mdx | 6 +- .../pages/guides/enterprise/self-hosted.mdx | 6 +- .../getting-started/customer-showcase.mdx | 4 +- .../migrate-from-existing-site.mdx | 6 +- .../pages/guides/getting-started/overview.mdx | 4 +- .../guides/getting-started/quickstart.mdx | 4 +- .../setting-up-your-domain.mdx | 6 +- .../integrations/analytics/fullstory.mdx | 6 +- .../guides/integrations/analytics/google.mdx | 4 +- .../guides/integrations/analytics/posthog.mdx | 6 +- .../guides/integrations/analytics/segment.mdx | 6 +- .../guides/integrations/feature-flags.mdx | 4 +- .../pages/guides/integrations/postman.mdx | 6 +- .../pages/guides/integrations/self-hosted.mdx | 6 +- .../guides/integrations/support/postman.mdx | 6 +- .../guides/navigation/api-references.mdx | 4 +- .../pages/guides/navigation/changelogs.mdx | 4 +- .../guides/navigation/hiding-content.mdx | 4 +- .../docs/pages/guides/navigation/overview.mdx | 6 +- .../docs/pages/guides/navigation/products.mdx | 4 +- .../docs/pages/guides/navigation/tabs.mdx | 6 +- .../docs/pages/guides/navigation/versions.mdx | 4 +- .../pages/guides/reference/frontmatter.mdx | 6 +- .../guides/reference/what-is-docs-yml.mdx | 6 +- .../pages/guides/seo/configuring-slugs.mdx | 4 +- .../docs/pages/guides/seo/ilms-txt.mdx | 6 +- .../docs/pages/guides/seo/redirects.mdx | 4 +- .../docs/pages/guides/seo/seo-metadata.mdx | 4 +- .../pages/defining-your-api/audiences.mdx | 2 - .../pages/defining-your-api/availability.mdx | 2 - .../fern-def/pages/defining-your-api/doc.mdx | 2 - .../pages/defining-your-api/endpoints.mdx | 2 - .../pages/defining-your-api/errors.mdx | 2 - .../pages/defining-your-api/examples.mdx | 2 - .../pages/defining-your-api/imports.mdx | 2 - .../pages/defining-your-api/types.mdx | 2 - .../pages/defining-your-api/webhooks.mdx | 2 - .../pages/defining-your-api/websockets.mdx | 2 - .../getting-started/customer-showcase.mdx | 2 - .../pages/getting-started/overview.mdx | 2 - .../pages/getting-started/philosophy.mdx | 2 - .../pages/getting-started/quickstart.mdx | 2 - .../pages/global-settings/api-versions.mdx | 2 - .../pages/global-settings/authentication.mdx | 2 - .../pages/global-settings/environments.mdx | 2 - .../pages/global-settings/global-headers.mdx | 2 - .../pages/guides/creating-namespaces.mdx | 2 - .../pages/guides/define-multiple-apis.mdx | 2 - .../pages/guides/depending-on-other-apis.mdx | 2 - .../pages/guides/export-to-openapi.mdx | 2 - .../guides/validate-your-fern-definition.mdx | 2 - .../get-to-openapi/generate-it/fastapi.mdx | 2 - .../get-to-openapi/generate-it/nestjs.mdx | 2 - .../generate-it/request-new-framework.mdx | 2 - .../get-to-openapi/generate-it/swaggo.mdx | 2 - .../get-to-openapi/handwrite-it.mdx | 2 - .../pages/getting-started/overview.mdx | 2 - .../getting-started/customer-showcase.mdx | 4 +- .../pages/getting-started/get-to-openapi.mdx | 4 +- .../get-to-openapi/generate-it/fastapi.mdx | 4 +- .../get-to-openapi/generate-it/nestjs.mdx | 4 +- .../generate-it/request-new-framework.mdx | 6 +- .../get-to-openapi/generate-it/swaggo.mdx | 4 +- .../get-to-openapi/handwrite-it.mdx | 6 +- .../overlay-customizations.mdx | 6 +- .../pages/getting-started/overview.mdx | 4 +- .../pages/getting-started/philosophy.mdx | 4 +- .../openrpc-def/pages/schemas/allof.mdx | 4 +- .../openrpc-def/pages/schemas/anyof.mdx | 4 +- .../openrpc-def/pages/schemas/enums.mdx | 2 +- .../pages/schemas/inlined-schemas.mdx | 2 +- .../openrpc-def/pages/schemas/objects.mdx | 2 +- .../openrpc-def/pages/schemas/oneof.mdx | 4 +- .../pages/schemas/override-type.mdx | 4 +- .../multiple-security-schemes.mdx | 4 +- .../overriding-security-scheme.mdx | 6 +- .../pages/security-schemes/overview.mdx | 4 +- .../pages/servers/multiple-server-urls.mdx | 4 +- .../pages/servers/naming-your-servers.mdx | 4 +- .../pages/servers/overriding-servers.mdx | 6 +- .../openrpc-def/pages/servers/overview.mdx | 4 +- 110 files changed, 388 insertions(+), 268 deletions(-) create mode 100644 fern/components/FernStatus.tsx diff --git a/fern/components/FernStatus.tsx b/fern/components/FernStatus.tsx new file mode 100644 index 000000000..ebb9bc709 --- /dev/null +++ b/fern/components/FernStatus.tsx @@ -0,0 +1,174 @@ +import React, { useState, useEffect } from 'react'; + +interface StatusData { + ongoing_incidents?: Array<{ + current_worst_impact: string; + }>; + in_progress_maintenances?: Array; + scheduled_maintenances?: Array<{ + starts_at: string; + }>; +} + +interface StatusState { + dotClass: string; + statusMessage: string; +} + +export const FernStatusWidget = () => { + const [status, setStatus] = React.useState({ + dotClass: 'is-loading', + statusMessage: 'Checking status...' + }); + + const apiEndpoint = 'https://status.buildwithfern.com/api/v1/summary'; + const refreshInterval = 5 * 60 * 1000; // 5 minutes + + const updateStatus = (data: StatusData) => { + let dotClass = 'is-green'; + let statusMessage = 'All systems operational'; + + // Check for ongoing incidents + if (data.ongoing_incidents && data.ongoing_incidents.length > 0) { + let worstImpact = 0; + for (const incident of data.ongoing_incidents) { + let impactLevel = 0; + + if (incident.current_worst_impact === 'degraded_performance') { + impactLevel = 1; + } else if (incident.current_worst_impact === 'partial_outage') { + impactLevel = 2; + } else if (incident.current_worst_impact === 'full_outage') { + impactLevel = 3; + } + + if (impactLevel > worstImpact) { + worstImpact = impactLevel; + } + } + + // Set status based on severity + if (worstImpact === 3) { + dotClass = 'is-red'; + statusMessage = 'Service outage'; + } else if (worstImpact === 2) { + dotClass = 'is-orange'; + statusMessage = 'Partial outage'; + } else if (worstImpact === 1) { + dotClass = 'is-yellow'; + statusMessage = 'Degraded performance'; + } + } + + // Check for in-progress maintenance + if (data.in_progress_maintenances && data.in_progress_maintenances.length > 0) { + if (dotClass === 'is-green') { + dotClass = 'is-blue'; + statusMessage = 'Maintenance in progress'; + } + } + + // Check for scheduled maintenance + if (data.scheduled_maintenances && data.scheduled_maintenances.length > 0) { + if (dotClass === 'is-green') { + const now = new Date(); + let soonMaintenance = false; + + for (const maintenance of data.scheduled_maintenances) { + const startsAt = new Date(maintenance.starts_at); + const hoursDiff = (startsAt.getTime() - now.getTime()) / (1000 * 60 * 60); + + if (hoursDiff <= 24) { + soonMaintenance = true; + break; + } + } + + if (soonMaintenance) { + dotClass = 'is-blue'; + statusMessage = 'Scheduled maintenance soon'; + } + } + } + + setStatus({ dotClass, statusMessage }); + }; + + const fetchStatus = async () => { + try { + const response = await fetch(apiEndpoint); + if (response.ok) { + const data: StatusData = await response.json(); + updateStatus(data); + } else { + setStatus({ dotClass: 'is-red', statusMessage: 'Cannot check status' }); + } + } catch (error) { + console.error('Error fetching status:', error); + setStatus({ dotClass: 'is-red', statusMessage: 'Cannot check status' }); + } + }; + + React.useEffect(() => { + fetchStatus(); + const interval = setInterval(fetchStatus, refreshInterval); + return () => clearInterval(interval); + }, []); + + const getBackgroundColor = () => { + switch (status.dotClass) { + case 'is-green': return '#00c853'; + case 'is-red': return '#f44336'; + case 'is-orange': return '#ff9800'; + case 'is-blue': return '#2196f3'; + case 'is-yellow': return '#ffc107'; + case 'is-loading': return '#cccccc'; + default: return '#cccccc'; + } + }; + + return ( +
+
+ {status.statusMessage} + + +
+ ); +}; diff --git a/fern/docs.yml b/fern/docs.yml index 440d5bce6..130c314b1 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -119,3 +119,7 @@ layout: header-height: 75px searchbar-placement: header tabs-placement: header + +experimental: + mdx-components: + - ./components \ No newline at end of file diff --git a/fern/products/docs/pages/changelog/overview.mdx b/fern/products/docs/pages/changelog/overview.mdx index 2782589d4..27a71b09e 100644 --- a/fern/products/docs/pages/changelog/overview.mdx +++ b/fern/products/docs/pages/changelog/overview.mdx @@ -2,6 +2,6 @@ title: Changelog Overview --- -# Changelog +Welcome to the changelog section. Here you can track all the updates and changes to the project. -Stay up to date with the latest changes and updates to your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/component-library/custom-components/custom-react-components.mdx b/fern/products/docs/pages/component-library/custom-components/custom-react-components.mdx index 47b7b83b0..29ad8f2e6 100644 --- a/fern/products/docs/pages/component-library/custom-components/custom-react-components.mdx +++ b/fern/products/docs/pages/component-library/custom-components/custom-react-components.mdx @@ -1,8 +1,8 @@ --- title: Custom React Components -description: Integrate your own React components into documentation. +description: How to create and use custom React components. --- -# Custom React Components +Learn how to integrate custom React components into your documentation. -You can integrate your own custom React components to extend the functionality of your documentation site. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/custom-components/reusable-snippets.mdx b/fern/products/docs/pages/component-library/custom-components/reusable-snippets.mdx index 6b82300e6..88fbb3a8b 100644 --- a/fern/products/docs/pages/component-library/custom-components/reusable-snippets.mdx +++ b/fern/products/docs/pages/component-library/custom-components/reusable-snippets.mdx @@ -1,8 +1,8 @@ --- title: Reusable Snippets -description: Create and use reusable content snippets. +description: Creating and managing reusable content snippets. --- -# Reusable Snippets +Learn how to create and manage reusable content snippets for your documentation. -Reusable snippets let you define content once and use it in multiple places throughout your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/accordion-groups.mdx b/fern/products/docs/pages/component-library/default-components/accordion-groups.mdx index 125ff555c..058d6a4f2 100644 --- a/fern/products/docs/pages/component-library/default-components/accordion-groups.mdx +++ b/fern/products/docs/pages/component-library/default-components/accordion-groups.mdx @@ -1,8 +1,8 @@ --- title: Accordion Groups -description: Group multiple accordions together for organized content. +description: How to use the Accordion Groups component. --- -# Accordion Groups +Documentation for the Accordion Groups component used to organize multiple collapsible sections together. -Accordion groups allow you to organize multiple accordions together for better structure. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/accordions.mdx b/fern/products/docs/pages/component-library/default-components/accordions.mdx index 2030e173a..7e7f82b49 100644 --- a/fern/products/docs/pages/component-library/default-components/accordions.mdx +++ b/fern/products/docs/pages/component-library/default-components/accordions.mdx @@ -1,9 +1,9 @@ --- title: Accordions -description: Use accordions to show and hide content sections. +description: How to use the Accordions component. --- -# Accordions +Documentation for the Accordions component used to create collapsible sections that can show/hide content. -Accordions let you expand and collapse sections of content, making your documentation easier to navigate. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/aside.mdx b/fern/products/docs/pages/component-library/default-components/aside.mdx index 0e4e57ce6..0a606e323 100644 --- a/fern/products/docs/pages/component-library/default-components/aside.mdx +++ b/fern/products/docs/pages/component-library/default-components/aside.mdx @@ -1,8 +1,8 @@ --- title: Aside -description: Highlight important information with the Aside component. +description: How to use the Aside component. --- -# Aside +Documentation for the Aside component used to display supplementary content or sidebars. -Use the Aside component to draw attention to important notes or tips in your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/callouts.mdx b/fern/products/docs/pages/component-library/default-components/callouts.mdx index a443dc350..f95e34f93 100644 --- a/fern/products/docs/pages/component-library/default-components/callouts.mdx +++ b/fern/products/docs/pages/component-library/default-components/callouts.mdx @@ -1,8 +1,8 @@ --- title: Callouts -description: Use callouts to emphasize key information. +description: How to use the Callouts component. --- -# Callouts +Documentation for the Callouts component used to highlight important information, warnings, or tips. -Callouts are used to highlight warnings, tips, or other important information in your docs. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/card-groups.mdx b/fern/products/docs/pages/component-library/default-components/card-groups.mdx index 3dae63b2c..0be37d7f8 100644 --- a/fern/products/docs/pages/component-library/default-components/card-groups.mdx +++ b/fern/products/docs/pages/component-library/default-components/card-groups.mdx @@ -1,8 +1,8 @@ --- title: Card Groups -description: Organize multiple cards together. +description: How to use the Card Groups component. --- -# Card Groups +Documentation for the Card Groups component used to organize multiple cards together. -Card groups help you organize multiple cards in a grid or row. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/cards.mdx b/fern/products/docs/pages/component-library/default-components/cards.mdx index eddebd185..c8658706e 100644 --- a/fern/products/docs/pages/component-library/default-components/cards.mdx +++ b/fern/products/docs/pages/component-library/default-components/cards.mdx @@ -1,8 +1,8 @@ --- title: Cards -description: Display information in a card layout. +description: How to use the Cards component. --- -# Cards +Documentation for the Cards component used to display content in card-like containers. -Cards are useful for displaying information in a visually distinct container. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/code-blocks.mdx b/fern/products/docs/pages/component-library/default-components/code-blocks.mdx index f53543909..709bee660 100644 --- a/fern/products/docs/pages/component-library/default-components/code-blocks.mdx +++ b/fern/products/docs/pages/component-library/default-components/code-blocks.mdx @@ -1,8 +1,8 @@ --- title: Code Blocks -description: Display code snippets with syntax highlighting. +description: How to use the Code Blocks component. --- -# Code Blocks +Documentation for the Code Blocks component used to display syntax-highlighted code snippets. -Use code blocks to show code examples with syntax highlighting for better readability. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/embed.mdx b/fern/products/docs/pages/component-library/default-components/embed.mdx index 86361b447..3541b6e5d 100644 --- a/fern/products/docs/pages/component-library/default-components/embed.mdx +++ b/fern/products/docs/pages/component-library/default-components/embed.mdx @@ -1,8 +1,8 @@ --- title: Embed -description: Embed external content such as videos or iframes. +description: How to use the Embed component. --- -# Embed +Documentation for the Embed component used to embed external content like videos, widgets, or iframes. -The Embed component allows you to include external content like videos, maps, or iframes in your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/endpoint-request-snippet.mdx b/fern/products/docs/pages/component-library/default-components/endpoint-request-snippet.mdx index 2e8fc2eb0..bb10c8361 100644 --- a/fern/products/docs/pages/component-library/default-components/endpoint-request-snippet.mdx +++ b/fern/products/docs/pages/component-library/default-components/endpoint-request-snippet.mdx @@ -1,8 +1,8 @@ --- title: Endpoint Request Snippet -description: Show example API request payloads. +description: How to use the Endpoint Request Snippet component. --- -# Endpoint Request Snippet +Documentation for the Endpoint Request Snippet component used to display API request examples and schemas. -Use this component to display example API request payloads for your endpoints. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/endpoint-response-snippet.mdx b/fern/products/docs/pages/component-library/default-components/endpoint-response-snippet.mdx index 4df401294..087d970ce 100644 --- a/fern/products/docs/pages/component-library/default-components/endpoint-response-snippet.mdx +++ b/fern/products/docs/pages/component-library/default-components/endpoint-response-snippet.mdx @@ -1,8 +1,8 @@ --- title: Endpoint Response Snippet -description: Show example API response payloads. +description: How to use the Endpoint Response Snippet component. --- -# Endpoint Response Snippet +Documentation for the Endpoint Response Snippet component used to display API response examples and schemas. -Use this component to display example API response payloads for your endpoints. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/endpoint-schema-snippet.mdx b/fern/products/docs/pages/component-library/default-components/endpoint-schema-snippet.mdx index 4b65ffce3..0b1229df9 100644 --- a/fern/products/docs/pages/component-library/default-components/endpoint-schema-snippet.mdx +++ b/fern/products/docs/pages/component-library/default-components/endpoint-schema-snippet.mdx @@ -1,8 +1,8 @@ --- title: Endpoint Schema Snippet -description: Show the schema for API endpoints. +description: How to use the Endpoint Schema Snippet component. --- -# Endpoint Schema Snippet +Documentation for the Endpoint Schema Snippet component used to display API endpoint schemas. -Use this component to display the schema for your API endpoints. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/frames.mdx b/fern/products/docs/pages/component-library/default-components/frames.mdx index ac960baec..20ffae03c 100644 --- a/fern/products/docs/pages/component-library/default-components/frames.mdx +++ b/fern/products/docs/pages/component-library/default-components/frames.mdx @@ -1,8 +1,8 @@ --- title: Frames -description: Use frames to group related content visually. +description: How to use the Frames component. --- -# Frames +Documentation for the Frames component used to embed external content or create bordered sections. -Frames help you visually group related content in your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/icons.mdx b/fern/products/docs/pages/component-library/default-components/icons.mdx index 352cd9d51..4b71645c2 100644 --- a/fern/products/docs/pages/component-library/default-components/icons.mdx +++ b/fern/products/docs/pages/component-library/default-components/icons.mdx @@ -1,8 +1,8 @@ --- title: Icons -description: Add icons to your documentation for visual cues. +description: How to use the Icons component. --- -# Icons +Documentation for the Icons component and available icon sets for use in your documentation. -Use icons to provide visual cues and enhance the appearance of your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/overview.mdx b/fern/products/docs/pages/component-library/default-components/overview.mdx index 68c1ff944..366f47877 100644 --- a/fern/products/docs/pages/component-library/default-components/overview.mdx +++ b/fern/products/docs/pages/component-library/default-components/overview.mdx @@ -1,11 +1,11 @@ --- -title: Default Components +title: Default Components Overview description: Overview of the default components available. --- -# Default Components +Welcome to the Default Components section! Here you can find documentation for all the built-in components available for use in your project. -This section provides an overview of all the default components you can use in your documentation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/parameter-fields.mdx b/fern/products/docs/pages/component-library/default-components/parameter-fields.mdx index a2079193e..9fdc94bb0 100644 --- a/fern/products/docs/pages/component-library/default-components/parameter-fields.mdx +++ b/fern/products/docs/pages/component-library/default-components/parameter-fields.mdx @@ -1,8 +1,8 @@ --- title: Parameter Fields -description: Document API parameters with parameter fields. +description: How to use the Parameter Fields component. --- -# Parameter Fields +Documentation for the Parameter Fields component used to display API parameters and their descriptions. -Parameter fields help you document the parameters required by your API endpoints. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/steps.mdx b/fern/products/docs/pages/component-library/default-components/steps.mdx index 27338fd40..bae50fa21 100644 --- a/fern/products/docs/pages/component-library/default-components/steps.mdx +++ b/fern/products/docs/pages/component-library/default-components/steps.mdx @@ -1,8 +1,8 @@ --- title: Steps -description: Show a sequence of steps for a process. +description: How to use the Steps component. --- -# Steps +Documentation for the Steps component used to create step-by-step guides. -Use the Steps component to guide users through a multi-step process. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/tabs.mdx b/fern/products/docs/pages/component-library/default-components/tabs.mdx index 88f5c1e02..4a7973293 100644 --- a/fern/products/docs/pages/component-library/default-components/tabs.mdx +++ b/fern/products/docs/pages/component-library/default-components/tabs.mdx @@ -1,8 +1,8 @@ --- title: Tabs -description: Organize content into tabbed sections. +description: How to use the Tabs component. --- -# Tabs +Documentation for the Tabs component used to organize content into switchable sections. -Tabs allow you to organize related content into separate tabbed sections for easier navigation. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/default-components/tooltips.mdx b/fern/products/docs/pages/component-library/default-components/tooltips.mdx index 4472b5365..4baaf946b 100644 --- a/fern/products/docs/pages/component-library/default-components/tooltips.mdx +++ b/fern/products/docs/pages/component-library/default-components/tooltips.mdx @@ -1,8 +1,8 @@ --- title: Tooltips -description: Provide additional information with tooltips. +description: How to use the Tooltips component. --- -# Tooltips +Documentation for the Tooltips component used to provide additional context on hover. -Tooltips display extra information when users hover over an element. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/overview.mdx b/fern/products/docs/pages/component-library/overview.mdx index 0df9c6c76..e10915ac8 100644 --- a/fern/products/docs/pages/component-library/overview.mdx +++ b/fern/products/docs/pages/component-library/overview.mdx @@ -3,6 +3,6 @@ title: Component Library description: Overview of the available components in the library. --- -# Component Library +Welcome to the Component Library! Here you can find documentation and examples for all the reusable components available in this project. -Welcome to the Component Library! Here you can find documentation and examples for all the reusable components available in this project. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/component-library/writing-content/frontmatter.mdx b/fern/products/docs/pages/component-library/writing-content/frontmatter.mdx index be5de95f4..fd588a140 100644 --- a/fern/products/docs/pages/component-library/writing-content/frontmatter.mdx +++ b/fern/products/docs/pages/component-library/writing-content/frontmatter.mdx @@ -1,9 +1,9 @@ --- title: Frontmatter -description: How to use frontmatter in your documentation pages. +description: Understanding and using frontmatter in your content. --- -# Frontmatter +Learn how to use frontmatter to add metadata and configuration to your content files. -Frontmatter is used to define metadata for your documentation pages, such as title, description, and more. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/writing-content/markdown.mdx b/fern/products/docs/pages/component-library/writing-content/markdown.mdx index 91bd9be8e..3279e1ce8 100644 --- a/fern/products/docs/pages/component-library/writing-content/markdown.mdx +++ b/fern/products/docs/pages/component-library/writing-content/markdown.mdx @@ -1,27 +1,27 @@ --- title: Markdown -description: Learn how to use Markdown in your documentation. +description: Using Markdown for content creation. --- -# Markdown +Learn how to use Markdown syntax to create rich, formatted content for your documentation. -Markdown allows you to write rich content for your documentation using a simple, readable syntax. +Markdown is a lightweight markup language that allows you to add formatting to plain text documents. It's widely used for documentation because of its simplicity and readability. -## Example +## Basic Syntax -You can create headings, lists, code blocks, and more: +Here are some common Markdown elements: -### List Example -- Item 1 -- Item 2 -- Item 3 +- **Bold text**: `**bold**` +- *Italic text*: `*italic*` +- [Links](https://example.com): `[Links](https://example.com)` +- Lists: Use `-` or `*` for bullet points +- Code: Use backticks for `inline code` -### Code Block Example -```js -console.log('Hello, Markdown!'); -``` +## Advanced Features -> Markdown is easy to learn and powerful for documentation. +You can also use more advanced Markdown features like tables, code blocks, and more. + +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/component-library/writing-content/visual-editor.mdx b/fern/products/docs/pages/component-library/writing-content/visual-editor.mdx index cc556bb9b..2fb0a609b 100644 --- a/fern/products/docs/pages/component-library/writing-content/visual-editor.mdx +++ b/fern/products/docs/pages/component-library/writing-content/visual-editor.mdx @@ -1,9 +1,9 @@ --- title: Visual Editor -description: Using the visual editor to create and edit documentation content. +description: Using the visual editor for content creation. --- -# Visual Editor +Learn how to use the visual editor to create and edit content with a user-friendly interface. -The visual editor allows you to create and edit documentation content with a user-friendly interface. +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). diff --git a/fern/products/docs/pages/guides/authentication/api-key-injection.mdx b/fern/products/docs/pages/guides/authentication/api-key-injection.mdx index aad0fc6e5..a47915e1c 100644 --- a/fern/products/docs/pages/guides/authentication/api-key-injection.mdx +++ b/fern/products/docs/pages/guides/authentication/api-key-injection.mdx @@ -2,6 +2,6 @@ title: API Key Injection --- -# API Key Injection +How to configure API key injection for authenticated documentation access. -How to inject API keys securely into your documentation or code samples. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/authentication/rbac.mdx b/fern/products/docs/pages/guides/authentication/rbac.mdx index d0de2a383..e805dff3d 100644 --- a/fern/products/docs/pages/guides/authentication/rbac.mdx +++ b/fern/products/docs/pages/guides/authentication/rbac.mdx @@ -1,7 +1,7 @@ --- -title: RBAC +title: Role-Based Access Control --- -# RBAC +How to implement role-based access control for your documentation. -How to set up Role-Based Access Control (RBAC) for your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/authentication/sso.mdx b/fern/products/docs/pages/guides/authentication/sso.mdx index 69788a935..68d1ec574 100644 --- a/fern/products/docs/pages/guides/authentication/sso.mdx +++ b/fern/products/docs/pages/guides/authentication/sso.mdx @@ -1,7 +1,7 @@ --- -title: SSO +title: Single Sign-On --- -# SSO +How to configure Single Sign-On (SSO) for your documentation platform. -How to configure Single Sign-On (SSO) for your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/enterprise/self-hosted.mdx b/fern/products/docs/pages/guides/enterprise/self-hosted.mdx index e583b3f36..262c636b5 100644 --- a/fern/products/docs/pages/guides/enterprise/self-hosted.mdx +++ b/fern/products/docs/pages/guides/enterprise/self-hosted.mdx @@ -1,7 +1,7 @@ --- -title: Self-hosted +title: Self-hosted Enterprise --- -# Self-hosted +Information about self-hosted enterprise solutions for your documentation platform. -Learn how to deploy and manage a self-hosted version of your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/getting-started/customer-showcase.mdx b/fern/products/docs/pages/guides/getting-started/customer-showcase.mdx index d59532998..2d0ac3a8a 100644 --- a/fern/products/docs/pages/guides/getting-started/customer-showcase.mdx +++ b/fern/products/docs/pages/guides/getting-started/customer-showcase.mdx @@ -2,6 +2,6 @@ title: Customer Showcase --- -# Customer Showcase +Examples and case studies of customers using our documentation platform successfully. -See how other customers have successfully launched their documentation sites. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/getting-started/migrate-from-existing-site.mdx b/fern/products/docs/pages/guides/getting-started/migrate-from-existing-site.mdx index 99e8e8f8a..85cc0e968 100644 --- a/fern/products/docs/pages/guides/getting-started/migrate-from-existing-site.mdx +++ b/fern/products/docs/pages/guides/getting-started/migrate-from-existing-site.mdx @@ -1,7 +1,7 @@ --- -title: Migrate from an existing site +title: Migrate from Existing Site --- -# Migrate from an existing site +Step-by-step guide for migrating your documentation from an existing platform or static site. -Learn how to migrate your documentation from an existing site to this platform. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/getting-started/overview.mdx b/fern/products/docs/pages/guides/getting-started/overview.mdx index efbbecf44..653b332d3 100644 --- a/fern/products/docs/pages/guides/getting-started/overview.mdx +++ b/fern/products/docs/pages/guides/getting-started/overview.mdx @@ -2,6 +2,6 @@ title: Overview --- -# Overview +Welcome to the Getting Started guide! This page provides an introduction to setting up and using your documentation site. -Welcome to the Getting Started guide! This page provides an introduction to setting up and using your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/getting-started/quickstart.mdx b/fern/products/docs/pages/guides/getting-started/quickstart.mdx index 76cb9fdec..2683ff3e7 100644 --- a/fern/products/docs/pages/guides/getting-started/quickstart.mdx +++ b/fern/products/docs/pages/guides/getting-started/quickstart.mdx @@ -2,6 +2,6 @@ title: Quickstart --- -# Quickstart +Get started quickly with our documentation platform in just a few steps. -Get up and running quickly with these simple steps to launch your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/getting-started/setting-up-your-domain.mdx b/fern/products/docs/pages/guides/getting-started/setting-up-your-domain.mdx index 81e573134..5cb7e4f7b 100644 --- a/fern/products/docs/pages/guides/getting-started/setting-up-your-domain.mdx +++ b/fern/products/docs/pages/guides/getting-started/setting-up-your-domain.mdx @@ -1,7 +1,7 @@ --- -title: Setting up your domain +title: Setting Up Your Domain --- -# Setting up your domain +How to configure a custom domain for your documentation site. -Instructions for configuring your custom domain for the documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/analytics/fullstory.mdx b/fern/products/docs/pages/guides/integrations/analytics/fullstory.mdx index 499b7fbdb..9e856396c 100644 --- a/fern/products/docs/pages/guides/integrations/analytics/fullstory.mdx +++ b/fern/products/docs/pages/guides/integrations/analytics/fullstory.mdx @@ -1,7 +1,7 @@ --- -title: Fullstory +title: FullStory Analytics --- -# Fullstory +How to integrate FullStory session recording and analytics into your documentation. -How to integrate Fullstory analytics with your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/analytics/google.mdx b/fern/products/docs/pages/guides/integrations/analytics/google.mdx index 6cc895da4..03f484b4b 100644 --- a/fern/products/docs/pages/guides/integrations/analytics/google.mdx +++ b/fern/products/docs/pages/guides/integrations/analytics/google.mdx @@ -2,6 +2,6 @@ title: Google Analytics --- -# Google Analytics +How to integrate Google Analytics into your documentation to track visitor behavior. -How to integrate Google Analytics with your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/analytics/posthog.mdx b/fern/products/docs/pages/guides/integrations/analytics/posthog.mdx index 1307b20d9..381242b1f 100644 --- a/fern/products/docs/pages/guides/integrations/analytics/posthog.mdx +++ b/fern/products/docs/pages/guides/integrations/analytics/posthog.mdx @@ -1,7 +1,7 @@ --- -title: PostHog +title: PostHog Analytics --- -# PostHog +How to integrate PostHog analytics into your documentation. -How to integrate PostHog analytics with your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/analytics/segment.mdx b/fern/products/docs/pages/guides/integrations/analytics/segment.mdx index ae291ba3a..78226f90d 100644 --- a/fern/products/docs/pages/guides/integrations/analytics/segment.mdx +++ b/fern/products/docs/pages/guides/integrations/analytics/segment.mdx @@ -1,7 +1,7 @@ --- -title: Segment +title: Segment Analytics --- -# Segment +How to integrate Segment analytics into your documentation. -How to integrate Segment analytics with your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/feature-flags.mdx b/fern/products/docs/pages/guides/integrations/feature-flags.mdx index 6358e2df6..79220f50a 100644 --- a/fern/products/docs/pages/guides/integrations/feature-flags.mdx +++ b/fern/products/docs/pages/guides/integrations/feature-flags.mdx @@ -2,6 +2,6 @@ title: Feature Flags --- -# Feature Flags +How to implement and manage feature flags in your documentation. -How to use feature flags in your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/postman.mdx b/fern/products/docs/pages/guides/integrations/postman.mdx index 7d8440df6..32038079f 100644 --- a/fern/products/docs/pages/guides/integrations/postman.mdx +++ b/fern/products/docs/pages/guides/integrations/postman.mdx @@ -1,7 +1,7 @@ --- -title: Postman +title: Postman Integration --- -# Postman +How to integrate Postman collections with your documentation. -How to integrate Postman collections with your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/self-hosted.mdx b/fern/products/docs/pages/guides/integrations/self-hosted.mdx index e4e8c10c3..79dc013b0 100644 --- a/fern/products/docs/pages/guides/integrations/self-hosted.mdx +++ b/fern/products/docs/pages/guides/integrations/self-hosted.mdx @@ -1,7 +1,7 @@ --- -title: Self-hosted (Integrations) +title: Self-hosted Integrations --- -# Self-hosted (Integrations) +Learn how to set up and configure self-hosted integrations for your documentation. -How to integrate with self-hosted analytics or support tools. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/integrations/support/postman.mdx b/fern/products/docs/pages/guides/integrations/support/postman.mdx index 53b15dfc2..56ed89e5d 100644 --- a/fern/products/docs/pages/guides/integrations/support/postman.mdx +++ b/fern/products/docs/pages/guides/integrations/support/postman.mdx @@ -1,7 +1,7 @@ --- -title: Postman (Support) +title: Postman Support --- -# Postman (Support) +Support resources for Postman integration issues and troubleshooting. -How to use Postman for supporting your API documentation users. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/api-references.mdx b/fern/products/docs/pages/guides/navigation/api-references.mdx index 399cf06e5..9de914005 100644 --- a/fern/products/docs/pages/guides/navigation/api-references.mdx +++ b/fern/products/docs/pages/guides/navigation/api-references.mdx @@ -2,6 +2,6 @@ title: API References --- -# API References +How to organize and structure API reference documentation in your navigation. -How to include and organize API reference documentation in your site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/changelogs.mdx b/fern/products/docs/pages/guides/navigation/changelogs.mdx index 50a2beb3f..fa8bf8acf 100644 --- a/fern/products/docs/pages/guides/navigation/changelogs.mdx +++ b/fern/products/docs/pages/guides/navigation/changelogs.mdx @@ -2,6 +2,6 @@ title: Changelogs --- -# Changelogs +How to organize and display changelogs in your documentation navigation. -Learn how to add and manage changelogs for your products and documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/hiding-content.mdx b/fern/products/docs/pages/guides/navigation/hiding-content.mdx index ab2936a4e..5856789a7 100644 --- a/fern/products/docs/pages/guides/navigation/hiding-content.mdx +++ b/fern/products/docs/pages/guides/navigation/hiding-content.mdx @@ -2,6 +2,6 @@ title: Hiding Content --- -# Hiding Content +How to hide specific content sections or pages from navigation while keeping them accessible. -Instructions for hiding or restricting access to certain documentation content. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/overview.mdx b/fern/products/docs/pages/guides/navigation/overview.mdx index 6489b7f0d..3601099ac 100644 --- a/fern/products/docs/pages/guides/navigation/overview.mdx +++ b/fern/products/docs/pages/guides/navigation/overview.mdx @@ -1,7 +1,7 @@ --- -title: Overview +title: Navigation Overview --- -# Navigation Overview +Overview of navigation options and configuration for your documentation site. -This page provides an overview of navigation options in your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/products.mdx b/fern/products/docs/pages/guides/navigation/products.mdx index 22363adf7..8a4f7af1f 100644 --- a/fern/products/docs/pages/guides/navigation/products.mdx +++ b/fern/products/docs/pages/guides/navigation/products.mdx @@ -2,6 +2,6 @@ title: Products --- -# Products +How to organize multiple products in your documentation navigation structure. -How to organize and present multiple products within your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/tabs.mdx b/fern/products/docs/pages/guides/navigation/tabs.mdx index b9dfd715a..8a2523c1d 100644 --- a/fern/products/docs/pages/guides/navigation/tabs.mdx +++ b/fern/products/docs/pages/guides/navigation/tabs.mdx @@ -1,7 +1,7 @@ --- -title: Tabs +title: Navigation Tabs --- -# Tabs +How to configure and use navigation tabs in your documentation structure. -Learn how to use and configure tabs for organizing your documentation content. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/navigation/versions.mdx b/fern/products/docs/pages/guides/navigation/versions.mdx index 066f0ad5c..c860fc2c7 100644 --- a/fern/products/docs/pages/guides/navigation/versions.mdx +++ b/fern/products/docs/pages/guides/navigation/versions.mdx @@ -2,6 +2,6 @@ title: Versions --- -# Versions +How to manage and display different versions of your documentation in navigation. -Instructions for managing and displaying different versions of your documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/reference/frontmatter.mdx b/fern/products/docs/pages/guides/reference/frontmatter.mdx index cc30d093c..6658a8812 100644 --- a/fern/products/docs/pages/guides/reference/frontmatter.mdx +++ b/fern/products/docs/pages/guides/reference/frontmatter.mdx @@ -1,7 +1,7 @@ --- -title: Frontmatter +title: Frontmatter Reference --- -# Frontmatter +Complete reference guide for frontmatter options and configuration in your documentation. -Learn about the frontmatter block at the top of your MDX files and how to use it effectively. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/reference/what-is-docs-yml.mdx b/fern/products/docs/pages/guides/reference/what-is-docs-yml.mdx index 91dd49321..946224d6b 100644 --- a/fern/products/docs/pages/guides/reference/what-is-docs-yml.mdx +++ b/fern/products/docs/pages/guides/reference/what-is-docs-yml.mdx @@ -1,7 +1,7 @@ --- -title: What is docs.yml +title: What is docs.yml? --- -# What is docs.yml +Understanding the docs.yml configuration file and how it controls your documentation structure. -An overview of the docs.yml configuration file and its role in your documentation project. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/seo/configuring-slugs.mdx b/fern/products/docs/pages/guides/seo/configuring-slugs.mdx index 23a1a37f1..e6cf23a18 100644 --- a/fern/products/docs/pages/guides/seo/configuring-slugs.mdx +++ b/fern/products/docs/pages/guides/seo/configuring-slugs.mdx @@ -2,6 +2,6 @@ title: Configuring Slugs --- -# Configuring Slugs +How to configure custom URL slugs for your documentation pages for better SEO. -How to configure URL slugs for your documentation pages. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/seo/ilms-txt.mdx b/fern/products/docs/pages/guides/seo/ilms-txt.mdx index a568dd9eb..56bb403fa 100644 --- a/fern/products/docs/pages/guides/seo/ilms-txt.mdx +++ b/fern/products/docs/pages/guides/seo/ilms-txt.mdx @@ -1,7 +1,7 @@ --- -title: Ilms.txt +title: ILMS.txt --- -# Ilms.txt +How to configure ILMS.txt files for search engine optimization. -Information about the Ilms.txt file and its usage for SEO. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/seo/redirects.mdx b/fern/products/docs/pages/guides/seo/redirects.mdx index 5dbb04e2f..f28abd195 100644 --- a/fern/products/docs/pages/guides/seo/redirects.mdx +++ b/fern/products/docs/pages/guides/seo/redirects.mdx @@ -2,6 +2,6 @@ title: Redirects --- -# Redirects +How to set up and manage redirects for your documentation URLs. -Learn how to set up redirects for your documentation site. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/docs/pages/guides/seo/seo-metadata.mdx b/fern/products/docs/pages/guides/seo/seo-metadata.mdx index 113a00c1e..ac315e6ce 100644 --- a/fern/products/docs/pages/guides/seo/seo-metadata.mdx +++ b/fern/products/docs/pages/guides/seo/seo-metadata.mdx @@ -2,6 +2,6 @@ title: SEO Metadata --- -# SEO Metadata +How to optimize your documentation with proper SEO metadata for better search rankings. -How to add and manage SEO metadata for your documentation pages. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/docs/getting-started/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/audiences.mdx b/fern/products/fern-def/pages/defining-your-api/audiences.mdx index 0cf702790..27a9a970f 100644 --- a/fern/products/fern-def/pages/defining-your-api/audiences.mdx +++ b/fern/products/fern-def/pages/defining-your-api/audiences.mdx @@ -2,8 +2,6 @@ title: Audiences --- -# Audiences - Define different audiences for your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/availability.mdx b/fern/products/fern-def/pages/defining-your-api/availability.mdx index c8084c7a9..2fdc73302 100644 --- a/fern/products/fern-def/pages/defining-your-api/availability.mdx +++ b/fern/products/fern-def/pages/defining-your-api/availability.mdx @@ -2,8 +2,6 @@ title: Availability --- -# Availability - Configure availability settings for your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/doc.mdx b/fern/products/fern-def/pages/defining-your-api/doc.mdx index 30215a455..4f467bad4 100644 --- a/fern/products/fern-def/pages/defining-your-api/doc.mdx +++ b/fern/products/fern-def/pages/defining-your-api/doc.mdx @@ -2,8 +2,6 @@ title: Doc --- -# Doc - Documentation configuration. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/endpoints.mdx b/fern/products/fern-def/pages/defining-your-api/endpoints.mdx index 07e4678a1..8a40e2430 100644 --- a/fern/products/fern-def/pages/defining-your-api/endpoints.mdx +++ b/fern/products/fern-def/pages/defining-your-api/endpoints.mdx @@ -2,8 +2,6 @@ title: Endpoints --- -# Endpoints - How to define API endpoints in your specification. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/errors.mdx b/fern/products/fern-def/pages/defining-your-api/errors.mdx index 394da9f32..3bd416a65 100644 --- a/fern/products/fern-def/pages/defining-your-api/errors.mdx +++ b/fern/products/fern-def/pages/defining-your-api/errors.mdx @@ -2,8 +2,6 @@ title: Errors --- -# Errors - Define error responses for your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/examples.mdx b/fern/products/fern-def/pages/defining-your-api/examples.mdx index eae47886c..057f09c6b 100644 --- a/fern/products/fern-def/pages/defining-your-api/examples.mdx +++ b/fern/products/fern-def/pages/defining-your-api/examples.mdx @@ -2,8 +2,6 @@ title: Examples --- -# Examples - How to add examples to your API definition. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/imports.mdx b/fern/products/fern-def/pages/defining-your-api/imports.mdx index 95cc1ac0a..2e72db4d0 100644 --- a/fern/products/fern-def/pages/defining-your-api/imports.mdx +++ b/fern/products/fern-def/pages/defining-your-api/imports.mdx @@ -2,8 +2,6 @@ title: Imports --- -# Imports - How to import external definitions into your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/types.mdx b/fern/products/fern-def/pages/defining-your-api/types.mdx index a172a3fd6..b9611b38b 100644 --- a/fern/products/fern-def/pages/defining-your-api/types.mdx +++ b/fern/products/fern-def/pages/defining-your-api/types.mdx @@ -2,8 +2,6 @@ title: Types --- -# Types - Documentation on the data types used in the API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/webhooks.mdx b/fern/products/fern-def/pages/defining-your-api/webhooks.mdx index b0e658deb..e1144b2b5 100644 --- a/fern/products/fern-def/pages/defining-your-api/webhooks.mdx +++ b/fern/products/fern-def/pages/defining-your-api/webhooks.mdx @@ -2,8 +2,6 @@ title: Webhooks --- -# Webhooks - How to define webhook endpoints in your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/defining-your-api/websockets.mdx b/fern/products/fern-def/pages/defining-your-api/websockets.mdx index 27dd22132..23d62baa9 100644 --- a/fern/products/fern-def/pages/defining-your-api/websockets.mdx +++ b/fern/products/fern-def/pages/defining-your-api/websockets.mdx @@ -2,8 +2,6 @@ title: WebSockets --- -# WebSockets - Configure WebSocket connections in your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/customer-showcase.mdx b/fern/products/fern-def/pages/getting-started/customer-showcase.mdx index 6b3d611bc..6084c326c 100644 --- a/fern/products/fern-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/fern-def/pages/getting-started/customer-showcase.mdx @@ -2,8 +2,6 @@ title: Customer showcase --- -# Customer showcase - See how other customers are using Fern successfully. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/overview.mdx b/fern/products/fern-def/pages/getting-started/overview.mdx index 33538226b..df0f4cb1f 100644 --- a/fern/products/fern-def/pages/getting-started/overview.mdx +++ b/fern/products/fern-def/pages/getting-started/overview.mdx @@ -2,8 +2,6 @@ title: Overview --- -# Overview - Welcome to the Getting Started section! This page provides an introduction to the API and how to begin using it. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/philosophy.mdx b/fern/products/fern-def/pages/getting-started/philosophy.mdx index ca98496cd..5202a8997 100644 --- a/fern/products/fern-def/pages/getting-started/philosophy.mdx +++ b/fern/products/fern-def/pages/getting-started/philosophy.mdx @@ -2,8 +2,6 @@ title: Philosophy --- -# Philosophy - The principles and philosophy behind Fern API definitions. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/getting-started/quickstart.mdx b/fern/products/fern-def/pages/getting-started/quickstart.mdx index 91cbf2c92..d789ff993 100644 --- a/fern/products/fern-def/pages/getting-started/quickstart.mdx +++ b/fern/products/fern-def/pages/getting-started/quickstart.mdx @@ -2,8 +2,6 @@ title: Quickstart --- -# Quickstart - Get started with Fern quickly with this guide. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/api-versions.mdx b/fern/products/fern-def/pages/global-settings/api-versions.mdx index 38aa14645..72af50968 100644 --- a/fern/products/fern-def/pages/global-settings/api-versions.mdx +++ b/fern/products/fern-def/pages/global-settings/api-versions.mdx @@ -2,8 +2,6 @@ title: API versions --- -# API versions - How to manage different versions of your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/authentication.mdx b/fern/products/fern-def/pages/global-settings/authentication.mdx index 7d5a51d04..a62c4dfbb 100644 --- a/fern/products/fern-def/pages/global-settings/authentication.mdx +++ b/fern/products/fern-def/pages/global-settings/authentication.mdx @@ -2,8 +2,6 @@ title: Authentication --- -# Authentication - Configure authentication methods for your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/environments.mdx b/fern/products/fern-def/pages/global-settings/environments.mdx index ede95d53e..dd4106bef 100644 --- a/fern/products/fern-def/pages/global-settings/environments.mdx +++ b/fern/products/fern-def/pages/global-settings/environments.mdx @@ -2,8 +2,6 @@ title: Environments --- -# Environments - Configure different environments for your API (development, staging, production). This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/global-settings/global-headers.mdx b/fern/products/fern-def/pages/global-settings/global-headers.mdx index 1f47ad893..bcc581902 100644 --- a/fern/products/fern-def/pages/global-settings/global-headers.mdx +++ b/fern/products/fern-def/pages/global-settings/global-headers.mdx @@ -2,8 +2,6 @@ title: Global headers --- -# Global headers - Define headers that apply to all API endpoints. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/creating-namespaces.mdx b/fern/products/fern-def/pages/guides/creating-namespaces.mdx index e053d5563..ed970b397 100644 --- a/fern/products/fern-def/pages/guides/creating-namespaces.mdx +++ b/fern/products/fern-def/pages/guides/creating-namespaces.mdx @@ -2,8 +2,6 @@ title: Creating namespaces --- -# Creating namespaces - Instructions for creating and organizing namespaces in your API. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/define-multiple-apis.mdx b/fern/products/fern-def/pages/guides/define-multiple-apis.mdx index 51eb7d3f2..57c6b7543 100644 --- a/fern/products/fern-def/pages/guides/define-multiple-apis.mdx +++ b/fern/products/fern-def/pages/guides/define-multiple-apis.mdx @@ -2,8 +2,6 @@ title: Define multiple APIs --- -# Define multiple APIs - How to define and manage multiple APIs in one project. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx b/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx index dd61785b8..e92b4376d 100644 --- a/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx +++ b/fern/products/fern-def/pages/guides/depending-on-other-apis.mdx @@ -2,8 +2,6 @@ title: Depending on other APIs --- -# Depending on other APIs - How to manage dependencies between different APIs. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/export-to-openapi.mdx b/fern/products/fern-def/pages/guides/export-to-openapi.mdx index 0822376e4..a3f85ef9c 100644 --- a/fern/products/fern-def/pages/guides/export-to-openapi.mdx +++ b/fern/products/fern-def/pages/guides/export-to-openapi.mdx @@ -2,8 +2,6 @@ title: Export to OpenAPI --- -# Export to OpenAPI - How to export your API definition to OpenAPI format. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx b/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx index 852d15820..07b6d978e 100644 --- a/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx +++ b/fern/products/fern-def/pages/guides/validate-your-fern-definition.mdx @@ -2,8 +2,6 @@ title: Validate your Fern definition --- -# Validate your Fern definition - Learn how to validate your Fern definition to ensure it's correct. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/fern/overview). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx index b00c016ac..0bd4dc599 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx @@ -2,8 +2,6 @@ title: FastAPI --- -# Generate OpenAPI from FastAPI - Instructions for generating an OpenAPI definition from a FastAPI project. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx index e8e90de30..b40a35e56 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx @@ -2,8 +2,6 @@ title: NestJS --- -# Generate OpenAPI from NestJS - Instructions for generating an OpenAPI definition from a NestJS project. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx index e41f98ac0..3df1b9d6b 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx @@ -2,8 +2,6 @@ title: Request New Framework --- -# Request a New Framework - Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx index 954b2d1d9..2dfadfb00 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx @@ -2,8 +2,6 @@ title: Swaggo --- -# Generate OpenAPI from Swaggo - Instructions for generating an OpenAPI definition from a Swaggo (Go) project. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx b/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx index 5a0f238ff..5555fe1f5 100644 --- a/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx +++ b/fern/products/grpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx @@ -2,8 +2,6 @@ title: Handwrite It --- -# Handwrite Your OpenAPI Definition - Step-by-step guide to manually writing your OpenAPI definition from scratch. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/grpc-def/pages/getting-started/overview.mdx b/fern/products/grpc-def/pages/getting-started/overview.mdx index 97d40b566..1c576e43b 100644 --- a/fern/products/grpc-def/pages/getting-started/overview.mdx +++ b/fern/products/grpc-def/pages/getting-started/overview.mdx @@ -2,8 +2,6 @@ title: Overview --- -# Overview - This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/customer-showcase.mdx b/fern/products/openrpc-def/pages/getting-started/customer-showcase.mdx index b8913aadc..673a30502 100644 --- a/fern/products/openrpc-def/pages/getting-started/customer-showcase.mdx +++ b/fern/products/openrpc-def/pages/getting-started/customer-showcase.mdx @@ -2,6 +2,6 @@ title: Customer Showcase --- -# Customer Showcase +Examples and case studies of customers using OpenRPC definitions successfully. -See how other customers are using OpenAPI definitions to power their APIs and documentation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi.mdx index 65cd466c8..284e44bb5 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi.mdx @@ -2,6 +2,6 @@ title: Get to OpenAPI --- -# Get to OpenAPI +How to create or transition to OpenRPC definitions for your JSON-RPC APIs. -Learn how to create or obtain your OpenAPI definition. Explore different approaches including handwriting, generating from code, and more. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx index c8095e8a7..c837542d4 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/fastapi.mdx @@ -2,6 +2,6 @@ title: FastAPI --- -# Generate OpenAPI from FastAPI +Instructions for generating an OpenRPC definition from a FastAPI project. -Instructions for generating an OpenAPI definition from a FastAPI project. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx index dfefb49b9..c5175ab66 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/nestjs.mdx @@ -2,6 +2,6 @@ title: NestJS --- -# Generate OpenAPI from NestJS +Instructions for generating an OpenRPC definition from a NestJS project. -Instructions for generating an OpenAPI definition from a NestJS project. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx index 2daa88917..c8477ff98 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/request-new-framework.mdx @@ -1,7 +1,7 @@ --- -title: Request a new framework +title: Request New Framework --- -# Request a New Framework +Don't see your framework? Let us know which framework you'd like to see supported for OpenRPC generation. -Don't see your framework? Let us know which framework you'd like to see supported for OpenAPI generation. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx index 5512b276a..ac627d4f5 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/generate-it/swaggo.mdx @@ -2,6 +2,6 @@ title: Swaggo --- -# Generate OpenAPI from Swaggo +Instructions for generating an OpenRPC definition from a Swaggo (Go) project. -Instructions for generating an OpenAPI definition from a Swaggo (Go) project. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx index 6db37bb5b..4e127a434 100644 --- a/fern/products/openrpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx +++ b/fern/products/openrpc-def/pages/getting-started/get-to-openapi/handwrite-it.mdx @@ -1,7 +1,7 @@ --- -title: Handwrite it +title: Handwrite It --- -# Handwrite Your OpenAPI Definition +Step-by-step guide to manually writing your OpenRPC definition from scratch. -Step-by-step guide to manually writing your OpenAPI definition from scratch. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/overlay-customizations.mdx b/fern/products/openrpc-def/pages/getting-started/overlay-customizations.mdx index 26b75af7e..6fb9aad86 100644 --- a/fern/products/openrpc-def/pages/getting-started/overlay-customizations.mdx +++ b/fern/products/openrpc-def/pages/getting-started/overlay-customizations.mdx @@ -1,7 +1,7 @@ --- -title: Overlay customizations +title: Overlay Customizations --- -# Overlay Customizations +Learn how to customize your OpenAPI overlays to fit your unique requirements. -Learn how to customize your OpenAPI overlays to fit your unique requirements. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/overview.mdx b/fern/products/openrpc-def/pages/getting-started/overview.mdx index 001442f88..d6bf880f5 100644 --- a/fern/products/openrpc-def/pages/getting-started/overview.mdx +++ b/fern/products/openrpc-def/pages/getting-started/overview.mdx @@ -2,6 +2,6 @@ title: Overview --- -# Overview +This is the overview page for Getting Started with your OpenRPC definition. Here you will find a high-level introduction and guidance on how to begin. -This is the overview page for Getting Started with your OpenAPI definition. Here you will find a high-level introduction and guidance on how to begin. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/getting-started/philosophy.mdx b/fern/products/openrpc-def/pages/getting-started/philosophy.mdx index 56f5a3b9a..1e97a0d39 100644 --- a/fern/products/openrpc-def/pages/getting-started/philosophy.mdx +++ b/fern/products/openrpc-def/pages/getting-started/philosophy.mdx @@ -2,6 +2,6 @@ title: Philosophy --- -# Philosophy +The philosophy and principles behind OpenRPC definitions and how they enhance API development. -Understand the philosophy behind designing and maintaining your OpenAPI definitions. Learn best practices and guiding principles. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/allof.mdx b/fern/products/openrpc-def/pages/schemas/allof.mdx index 319904842..305b424b5 100644 --- a/fern/products/openrpc-def/pages/schemas/allof.mdx +++ b/fern/products/openrpc-def/pages/schemas/allof.mdx @@ -1,7 +1,7 @@ --- -title: AllOf +title: All Of --- How to use the `allOf` keyword to compose schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/anyof.mdx b/fern/products/openrpc-def/pages/schemas/anyof.mdx index d98c9c7c5..bd293f9da 100644 --- a/fern/products/openrpc-def/pages/schemas/anyof.mdx +++ b/fern/products/openrpc-def/pages/schemas/anyof.mdx @@ -1,7 +1,7 @@ --- -title: AnyOf +title: Any Of --- How to use the `anyOf` keyword to allow multiple possible schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/enums.mdx b/fern/products/openrpc-def/pages/schemas/enums.mdx index 0f071434b..269806428 100644 --- a/fern/products/openrpc-def/pages/schemas/enums.mdx +++ b/fern/products/openrpc-def/pages/schemas/enums.mdx @@ -4,4 +4,4 @@ title: Enums How to use enum types to define a fixed set of values in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx b/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx index ab179fb00..50d864e10 100644 --- a/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx +++ b/fern/products/openrpc-def/pages/schemas/inlined-schemas.mdx @@ -4,4 +4,4 @@ title: Inlined Schemas How to define schemas inline within your OpenAPI specification. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/objects.mdx b/fern/products/openrpc-def/pages/schemas/objects.mdx index a2308a231..99c6a6e41 100644 --- a/fern/products/openrpc-def/pages/schemas/objects.mdx +++ b/fern/products/openrpc-def/pages/schemas/objects.mdx @@ -4,4 +4,4 @@ title: Objects How to define object schemas with properties in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/oneof.mdx b/fern/products/openrpc-def/pages/schemas/oneof.mdx index f06ab43b4..c29355abe 100644 --- a/fern/products/openrpc-def/pages/schemas/oneof.mdx +++ b/fern/products/openrpc-def/pages/schemas/oneof.mdx @@ -1,7 +1,7 @@ --- -title: OneOf +title: One Of --- How to use the `oneOf` keyword to define alternative schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/schemas/override-type.mdx b/fern/products/openrpc-def/pages/schemas/override-type.mdx index 9e94c50b8..44cac7698 100644 --- a/fern/products/openrpc-def/pages/schemas/override-type.mdx +++ b/fern/products/openrpc-def/pages/schemas/override-type.mdx @@ -1,7 +1,7 @@ --- -title: Override the Type +title: Override Type --- How to override the default type inference for schemas in OpenAPI. -This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn) or the [closest page](https://buildwithfern.com/learn/api-definition/openapi/overview.mdx) to this content. This link maybe broken. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/security-schemes/multiple-security-schemes.mdx b/fern/products/openrpc-def/pages/security-schemes/multiple-security-schemes.mdx index 286d0a352..04a3407ed 100644 --- a/fern/products/openrpc-def/pages/security-schemes/multiple-security-schemes.mdx +++ b/fern/products/openrpc-def/pages/security-schemes/multiple-security-schemes.mdx @@ -2,6 +2,6 @@ title: Multiple Security Schemes --- -# Multiple Security Schemes +Learn how to define and use multiple security schemes in your OpenAPI definition. -Learn how to define and use multiple security schemes in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/security-schemes/overriding-security-scheme.mdx b/fern/products/openrpc-def/pages/security-schemes/overriding-security-scheme.mdx index cf38307fc..905a45251 100644 --- a/fern/products/openrpc-def/pages/security-schemes/overriding-security-scheme.mdx +++ b/fern/products/openrpc-def/pages/security-schemes/overriding-security-scheme.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Security Scheme +title: Overriding Security Scheme --- -# Overriding the Security Scheme +How to override security schemes in specific operations or contexts. -How to override the default security scheme in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/security-schemes/overview.mdx b/fern/products/openrpc-def/pages/security-schemes/overview.mdx index c6be3e7c6..7743f8089 100644 --- a/fern/products/openrpc-def/pages/security-schemes/overview.mdx +++ b/fern/products/openrpc-def/pages/security-schemes/overview.mdx @@ -2,6 +2,6 @@ title: Security Schemes Overview --- -# Security Schemes Overview +Overview of security schemes and authentication methods in OpenAPI. -An introduction to security schemes in OpenAPI. Learn about authentication and authorization options. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/servers/multiple-server-urls.mdx b/fern/products/openrpc-def/pages/servers/multiple-server-urls.mdx index 4f563e0ef..94ba2c929 100644 --- a/fern/products/openrpc-def/pages/servers/multiple-server-urls.mdx +++ b/fern/products/openrpc-def/pages/servers/multiple-server-urls.mdx @@ -2,6 +2,6 @@ title: Multiple Server URLs --- -# Multiple Server URLs +How to configure multiple server URLs for different environments. -How to define and use multiple server URLs in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/servers/naming-your-servers.mdx b/fern/products/openrpc-def/pages/servers/naming-your-servers.mdx index ce65b26b6..fd2a055bb 100644 --- a/fern/products/openrpc-def/pages/servers/naming-your-servers.mdx +++ b/fern/products/openrpc-def/pages/servers/naming-your-servers.mdx @@ -2,6 +2,6 @@ title: Naming Your Servers --- -# Naming Your Servers +Best practices for naming your server configurations. -Best practices for naming your server URLs in OpenAPI. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/servers/overriding-servers.mdx b/fern/products/openrpc-def/pages/servers/overriding-servers.mdx index 67ab82071..0c5cc5f6f 100644 --- a/fern/products/openrpc-def/pages/servers/overriding-servers.mdx +++ b/fern/products/openrpc-def/pages/servers/overriding-servers.mdx @@ -1,7 +1,7 @@ --- -title: Overriding the Servers +title: Overriding Servers --- -# Overriding the Servers +How to override server configurations in specific contexts. -How to override the default servers in your OpenAPI definition. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file diff --git a/fern/products/openrpc-def/pages/servers/overview.mdx b/fern/products/openrpc-def/pages/servers/overview.mdx index b45b551c9..761a9d085 100644 --- a/fern/products/openrpc-def/pages/servers/overview.mdx +++ b/fern/products/openrpc-def/pages/servers/overview.mdx @@ -2,6 +2,6 @@ title: Servers Overview --- -# Servers Overview +Overview of server configuration options in OpenAPI. -Introduction to server objects in OpenAPI. Learn how to define and manage server URLs. \ No newline at end of file +This page is a WIP, please refer to our previous [documentation](https://buildwithfern.com/learn/api-definition/introduction/what-is-an-api-definition). \ No newline at end of file From 0c12bef4be15e80484fd9050c31d705a65e4a354 Mon Sep 17 00:00:00 2001 From: Kapil Gowru Date: Tue, 8 Jul 2025 14:46:41 -0400 Subject: [PATCH 34/39] feat: fixed mobile product swticher --- fern/assets/styles.css | 191 +++++++++++++++------------ fern/components/FernStatus.tsx | 89 +++++++------ fern/products/home/pages/welcome.mdx | 7 +- 3 files changed, 157 insertions(+), 130 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index fd08267d5..77cada99d 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -34,116 +34,120 @@ } /*** START -- PRODUCT SELECTOR STYLING ***/ -.fern-product-selector { - transform: translate(-2px, 4px); -} - -div:has(> .fern-product-selector-radio-group) { - margin-top: 0.5rem; -} -div:has(> .fern-product-selector-radio-group):before { - content: "Explore the Fern Platform"; - font-weight: 500; - margin: 0.5rem 1rem 0 1rem; -} +@media (min-width: 1024px) { -.fern-product-selector-radio-group { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 1.5rem; - padding: 1.25rem; - max-height: 232px; - - > a { - max-width: 320px; - margin: -0.75rem; - position: relative; - - .fern-selection-item{ - border-radius: 1rem; - } + .fern-product-selector { + transform: translate(-2px, 4px); } - > a[href*="home"] { - grid-column: 1; - grid-row: 1; + div:has(> .fern-product-selector-radio-group) { + margin-top: 0.5rem; } - > a[href*="sdks"] { - grid-column: 2; - grid-row: 1; + div:has(> .fern-product-selector-radio-group):before { + content: "Explore the Fern Platform"; + font-weight: 500; + margin: 0.5rem 1rem 0 1rem; } - > a[href*="docs"] { - grid-column: 1; - grid-row: 2; - } + .fern-product-selector-radio-group { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; + padding: 1.25rem; + max-height: 232px; + + > a { + max-width: 320px; + margin: -0.75rem; + position: relative; - > a[href*="ask-fern"] { - grid-column: 2; - grid-row: 2; - } + .fern-selection-item{ + border-radius: 1rem; + } + } - > a[href*="openapi"]:before { - content: "Supported Specs"; - font-weight: 500; - position: absolute; - top: -2rem; - left: 0.5rem; - } + > a[href*="home"] { + grid-column: 1; + grid-row: 1; + } - > a[href*="openapi"] { - grid-column: 3; - grid-row: 1; + > a[href*="sdks"] { + grid-column: 2; + grid-row: 1; + } - .fern-selection-item-icon { - width: 1.5rem; - height: 1.5rem; + > a[href*="docs"] { + grid-column: 1; + grid-row: 2; } - } - > a[href*="fern-def"] { - grid-column: 3; - grid-row: 2; - transform: translateY(-32px); - - .fern-selection-item-icon { - width: 1.5rem; - height: 1.5rem; + > a[href*="ask-fern"] { + grid-column: 2; + grid-row: 2; } - } - > a[href*="asyncapi"] { - grid-column: 3; - grid-row: 3; - transform: translateY(-64px); + > a[href*="openapi"]:before { + content: "Supported Specs"; + font-weight: 500; + position: absolute; + top: -2rem; + left: 0.5rem; + } + + > a[href*="openapi"] { + grid-column: 3; + grid-row: 1; - .fern-selection-item-icon { - width: 1.5rem; - height: 1.5rem; + .fern-selection-item-icon { + width: 1.5rem; + height: 1.5rem; + } } - } - > a[href*="openrpc"] { - grid-column: 3; - grid-row: 4; - transform: translateY(-64px); + > a[href*="fern-def"] { + grid-column: 3; + grid-row: 2; + transform: translateY(-32px); + + .fern-selection-item-icon { + width: 1.5rem; + height: 1.5rem; + } + } - .fern-selection-item-icon { - width: 1.5rem; - height: 1.5rem; + > a[href*="asyncapi"] { + grid-column: 3; + grid-row: 3; + transform: translateY(-64px); + + .fern-selection-item-icon { + width: 1.5rem; + height: 1.5rem; + } } - } - > a[href*="grpc"] { - grid-column: 3; - grid-row: 5; - transform: translateY(-64px); + > a[href*="openrpc"] { + grid-column: 3; + grid-row: 4; + transform: translateY(-64px); - .fern-selection-item-icon { - width: 1.5rem; - height: 1.5rem; + .fern-selection-item-icon { + width: 1.5rem; + height: 1.5rem; + } + } + + > a[href*="grpc"] { + grid-column: 3; + grid-row: 5; + transform: translateY(-64px); + + .fern-selection-item-icon { + width: 1.5rem; + height: 1.5rem; + } } } } @@ -163,6 +167,7 @@ div:has(> .fern-product-selector-radio-group):before { :is(.dark) .fern-product-selector-radio-group a[href*="ask-fern"] img { content: url("https://fern-docs.s3.us-east-2.amazonaws.com/product-switcher/product-switcher-askfern-dark.png") !important; } + /*** END -- PRODUCT SELECTOR STYLING ***/ @@ -653,17 +658,29 @@ div:has(> .fern-product-selector-radio-group):before { font-weight: 400 !important; width: fit-content !important; + img { + transition: transform 0.15s ease-in-out; + transform: translate(0px, 0px); + } + svg { display: none !important; } &.no-hover { cursor: default; + &:hover { background: none !important; color: var(--grayscale-a11) !important; } } + + &:hover { + img { + transform: translate(2px, 0px); + } + } } /* Responsive Design - Mobile First */ diff --git a/fern/components/FernStatus.tsx b/fern/components/FernStatus.tsx index ebb9bc709..f9eee4699 100644 --- a/fern/components/FernStatus.tsx +++ b/fern/components/FernStatus.tsx @@ -128,47 +128,54 @@ export const FernStatusWidget = () => { }; return ( -
-
- {status.statusMessage} - - -
+ +
+ ); }; diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx index 04dca9482..148409827 100644 --- a/fern/products/home/pages/welcome.mdx +++ b/fern/products/home/pages/welcome.mdx @@ -6,6 +6,8 @@ hide-toc: true layout: custom --- +import { FernStatusWidget } from "../../../components/FernStatus"; +