diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5abb25b..b94469b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - project: [docs-starter, graphql, grpc, i18n, multi-source/homepage, multi-source/seeds, multi-source/seeds-sunflower, multi-source/seeds-tomato, multi-source/greenhouses, multi-source/nursery, sse, versioning] + project: [blog, docs-starter, graphql, grpc, i18n, multi-source/homepage, multi-source/seeds, multi-source/seeds-sunflower, multi-source/seeds-tomato, multi-source/greenhouses, multi-source/nursery, sse, versioning] steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/preview-docs.yml b/.github/workflows/preview-docs.yml index eae4b03..2146a5c 100644 --- a/.github/workflows/preview-docs.yml +++ b/.github/workflows/preview-docs.yml @@ -31,7 +31,7 @@ jobs: FERN_TOKEN: ${{ secrets.FERN_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | - PROJECTS="docs-starter graphql grpc i18n multi-source/homepage multi-source/seeds multi-source/seeds-sunflower multi-source/seeds-tomato multi-source/greenhouses multi-source/nursery sse versioning" + PROJECTS="blog docs-starter graphql grpc i18n multi-source/homepage multi-source/seeds multi-source/seeds-sunflower multi-source/seeds-tomato multi-source/greenhouses multi-source/nursery sse versioning" CHANGED_FILES=$(git diff --name-only origin/main...HEAD) : > comment.md diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index b18b9f6..d7b4b0a 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - project: [docs-starter, graphql, grpc, i18n, multi-source/homepage, multi-source/seeds, multi-source/seeds-sunflower, multi-source/seeds-tomato, multi-source/greenhouses, multi-source/nursery, sse, versioning] + project: [blog, docs-starter, graphql, grpc, i18n, multi-source/homepage, multi-source/seeds, multi-source/seeds-sunflower, multi-source/seeds-tomato, multi-source/greenhouses, multi-source/nursery, sse, versioning] steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/README.md b/README.md index 0b6e495..4faf48d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Example Fern docs projects. Each top-level folder is a self-contained example wi | Example | Description | Live demo | | --- | --- | --- | +| [`blog`](./blog) | Blog layout with authors, tags, images, and RSS/Atom/JSON feeds | [blog.docs.buildwithfern.com](https://blog.docs.buildwithfern.com) | | [`docs-starter`](./docs-starter) | Minimal starter project | [docs-starter.docs.buildwithfern.com](https://docs-starter.docs.buildwithfern.com) | | [`graphql`](./graphql) | GraphQL API Reference from a `.graphql` schema | [graphql.docs.buildwithfern.com](https://graphql.docs.buildwithfern.com) | | [`grpc`](./grpc) | gRPC API Reference from `.proto` files | [grpc.docs.buildwithfern.com](https://grpc.docs.buildwithfern.com) | diff --git a/blog/fern/assets/favicon.svg b/blog/fern/assets/favicon.svg new file mode 100644 index 0000000..568bb7e --- /dev/null +++ b/blog/fern/assets/favicon.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/blog/fern/assets/logo-dark.svg b/blog/fern/assets/logo-dark.svg new file mode 100644 index 0000000..f8dc4c9 --- /dev/null +++ b/blog/fern/assets/logo-dark.svg @@ -0,0 +1,5 @@ + + + + Plantstore + diff --git a/blog/fern/assets/logo.svg b/blog/fern/assets/logo.svg new file mode 100644 index 0000000..bb2e269 --- /dev/null +++ b/blog/fern/assets/logo.svg @@ -0,0 +1,5 @@ + + + + Plantstore + diff --git a/blog/fern/blog/2026-01-14.mdx b/blog/fern/blog/2026-01-14.mdx new file mode 100644 index 0000000..02dcd52 --- /dev/null +++ b/blog/fern/blog/2026-01-14.mdx @@ -0,0 +1,12 @@ +--- +title: Winter watering schedules in the API +slug: blog/winter-watering-schedules +description: Seasonal watering plans now adjust for daylight hours and indoor humidity. +tags: ["api", "plant-care"] +author: mira +thumbnail: https://images.unsplash.com/photo-1516253593875-bd7ba052fbc5?q=80&w=1200&h=675&fit=crop +--- + +The watering endpoint now accepts a greenhouse profile and a local date. It uses daylight hours and indoor humidity to calculate the next recommended watering window. + +Existing schedules continue to work without those fields. The response includes the inputs used for the recommendation so store operators can compare it with their manual plan. diff --git a/blog/fern/blog/2026-02-03.mdx b/blog/fern/blog/2026-02-03.mdx new file mode 100644 index 0000000..342989b --- /dev/null +++ b/blog/fern/blog/2026-02-03.mdx @@ -0,0 +1,12 @@ +--- +title: Rebuilding the seed catalog search index +slug: blog/seed-catalog-search +description: Cultivar synonyms, misspellings, and Latin names now resolve to one canonical seed. +tags: ["engineering", "search"] +author: priya +thumbnail: https://images.unsplash.com/photo-1523348837708-15d4a09cfac2?q=80&w=1200&h=675&fit=crop +--- + +The seed catalog index now stores cultivar synonyms beside the canonical seed record. Search requests can match common misspellings and Latin names without duplicating catalog entries. + +The rebuild runs from the source catalog and writes a versioned index. Deployments switch indexes after validation, so an incomplete rebuild does not change search results. diff --git a/blog/fern/blog/2026-03-11.mdx b/blog/fern/blog/2026-03-11.mdx new file mode 100644 index 0000000..f848ac8 --- /dev/null +++ b/blog/fern/blog/2026-03-11.mdx @@ -0,0 +1,14 @@ +--- +title: Streaming greenhouse sensor data +slug: blog/greenhouse-sensor-streams +description: Temperature and moisture readings are available over server-sent events. +tags: ["api", "engineering"] +authors: + - priya + - mira +thumbnail: https://images.unsplash.com/photo-1518770660439-4636190af475?q=80&w=1200&h=675&fit=crop +--- + +Greenhouse temperature and moisture readings are now available over a server-sent events endpoint. Each event includes the sensor identifier, reading time, and calibrated value. + +Clients can reconnect with the last event identifier after a network interruption. The service keeps a short replay window and closes idle connections after the configured timeout. diff --git a/blog/fern/blog/2026-04-08.mdx b/blog/fern/blog/2026-04-08.mdx new file mode 100644 index 0000000..7c0a552 --- /dev/null +++ b/blog/fern/blog/2026-04-08.mdx @@ -0,0 +1,12 @@ +--- +title: A soil composition endpoint +slug: blog/soil-composition-endpoint +description: Query pH, drainage, and nutrient ranges for every plant we sell. +tags: ["api"] +author: mira +thumbnail: https://images.unsplash.com/photo-1416879595882-3373a0480b5b?q=80&w=1200&h=675&fit=crop +--- + +The catalog API now exposes soil composition ranges for each plant. Queries can filter by pH, drainage, and nutrient requirements before returning compatible products. + +Values describe the supported range rather than a single recommended number. This lets the storefront compare a customer's soil report with several plants in one request. diff --git a/blog/fern/blog/2026-05-19.mdx b/blog/fern/blog/2026-05-19.mdx new file mode 100644 index 0000000..8c9fdf5 --- /dev/null +++ b/blog/fern/blog/2026-05-19.mdx @@ -0,0 +1,12 @@ +--- +title: Pruning reminders as webhooks +slug: blog/pruning-webhooks +description: Subscribe to per-plant pruning windows instead of polling the schedule endpoint. +tags: ["api", "plant-care"] +author: priya +thumbnail: https://images.unsplash.com/photo-1585320806297-9794b3e4eeae?q=80&w=1200&h=675&fit=crop +--- + +The care service can now send pruning-window events to a configured webhook. Subscriptions are scoped to a plant and include the start date, end date, and required tool category. + +Delivery attempts use the same retry policy as order events. The event identifier remains stable across retries so receivers can safely de-duplicate updates. diff --git a/blog/fern/blog/2026-06-24.mdx b/blog/fern/blog/2026-06-24.mdx new file mode 100644 index 0000000..8bd379a --- /dev/null +++ b/blog/fern/blog/2026-06-24.mdx @@ -0,0 +1,13 @@ +--- +title: Shipping zones and frost dates +slug: blog/shipping-zones-frost-dates +description: Orders now validate against the destination's last frost date before checkout. +tags: ["engineering"] +author: mira +thumbnail: https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?q=80&w=1200&h=675&fit=crop +excerpt: Live plants ship on a weather-dependent calendar, and the API now enforces it. +--- + +Live plants ship on a weather-dependent calendar, and the API now enforces it. Checkout compares the destination zone with the plant's shipping window before accepting an order. + +The validation response identifies the first eligible ship date and the rule that delayed the order. Dry goods continue to use the regular zone calendar. diff --git a/blog/fern/blog/overview.mdx b/blog/fern/blog/overview.mdx new file mode 100644 index 0000000..e80fa9d --- /dev/null +++ b/blog/fern/blog/overview.mdx @@ -0,0 +1,14 @@ +--- +title: Plantstore blog +subtitle: Notes from the team building the Plantstore API +layout: blog +blog-layout: list +authors: + mira: + name: Mira Okonjo + role: Developer Advocate + url: https://buildwithfern.com + priya: + name: Priya Nair + role: Staff Engineer +--- diff --git a/blog/fern/docs.yml b/blog/fern/docs.yml new file mode 100644 index 0000000..b19c720 --- /dev/null +++ b/blog/fern/docs.yml @@ -0,0 +1,41 @@ +# yaml-language-server: $schema=https://schema.buildwithfern.dev/docs-yml.json + +instances: + - url: blog.docs.buildwithfern.com + +title: Plantstore + +layout: + searchbar-placement: header + page-width: full + +navigation: + - section: Get started + contents: + - page: Overview + path: ./pages/overview.mdx + icon: fa-duotone fa-seedling + - blog: ./blog + +navbar-links: + - type: minimal + text: Fork this repo + url: https://github.com/fern-api/docs-examples + - type: filled + text: Dashboard + url: https://dashboard.buildwithfern.com + +colors: + accent-primary: + dark: "#70E155" + light: "#008700" + background: + dark: "#111113" + light: "#FFFFFF" + +logo: + dark: ./assets/logo-dark.svg + light: ./assets/logo.svg + height: 20 + +favicon: ./assets/favicon.svg diff --git a/blog/fern/fern.config.json b/blog/fern/fern.config.json new file mode 100644 index 0000000..a19aa06 --- /dev/null +++ b/blog/fern/fern.config.json @@ -0,0 +1,4 @@ +{ + "organization": "fern-docs-examples", + "version": "5.106.1" +} diff --git a/blog/fern/pages/overview.mdx b/blog/fern/pages/overview.mdx new file mode 100644 index 0000000..a692426 --- /dev/null +++ b/blog/fern/pages/overview.mdx @@ -0,0 +1,9 @@ +--- +title: Overview +description: A small example of Fern's blog changelog layout. +--- + +This example uses the `blog:` navigation key with `layout: blog` and `blog-layout: grid`. +It includes an author registry and posts with per-post `slug`, `tags`, and `image` fields. +Published posts are available through the blog listing and individual post pages. +Feeds are available at `/blog.rss`, `/blog.atom`, and `/blog.json`.