feat: Add docsSectionGroupOrder frontmatter field for controlling docs sidebar group order

This commit is contained in:
Wayne Sutton
2026-01-02 23:11:35 -08:00
parent 46a1cdf591
commit 8fe6b53600
45 changed files with 2450 additions and 338 deletions

View File

@@ -13,6 +13,10 @@ authorName: "Markdown"
authorImage: "/images/authors/markdown.png"
image: "/images/forkconfig.png"
excerpt: "Set up your forked site with npm run configure or follow the manual FORK_CONFIG.md guide."
docsSection: true
docsSectionGroup: "Setup"
docsSectionGroupOrder: 1
docsSectionOrder: 1
---
# Configure your fork in one command
@@ -97,19 +101,19 @@ If you prefer to update files manually, follow the guide in `FORK_CONFIG.md`. It
The configuration script updates these files:
| File | What changes |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| File | What changes |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `src/config/siteConfig.ts` | Site name, bio, GitHub username, gitHubRepo config, features (logo gallery, GitHub contributions, visitor map, blog page, posts display, homepage, right sidebar, footer, social footer, AI chat, newsletter, contact form, newsletter admin, stats page, MCP server, dashboard, image lightbox) |
| `src/pages/Home.tsx` | Intro paragraph, footer links |
| `src/pages/Post.tsx` | SITE_URL, SITE_NAME constants |
| `convex/http.ts` | SITE_URL, SITE_NAME constants |
| `convex/rss.ts` | SITE_URL, SITE_TITLE, SITE_DESCRIPTION |
| `index.html` | Meta tags, JSON-LD, page title |
| `public/llms.txt` | Site info, GitHub link |
| `public/robots.txt` | Sitemap URL |
| `public/openapi.yaml` | Server URL, site name |
| `public/.well-known/ai-plugin.json` | Plugin metadata |
| `src/context/ThemeContext.tsx` | Default theme |
| `src/pages/Home.tsx` | Intro paragraph, footer links |
| `src/pages/Post.tsx` | SITE_URL, SITE_NAME constants |
| `convex/http.ts` | SITE_URL, SITE_NAME constants |
| `convex/rss.ts` | SITE_URL, SITE_TITLE, SITE_DESCRIPTION |
| `index.html` | Meta tags, JSON-LD, page title |
| `public/llms.txt` | Site info, GitHub link |
| `public/robots.txt` | Sitemap URL |
| `public/openapi.yaml` | Server URL, site name |
| `public/.well-known/ai-plugin.json` | Plugin metadata |
| `src/context/ThemeContext.tsx` | Default theme |
## Optional settings

View File

@@ -14,6 +14,13 @@ blogFeatured: true
authorImage: "/images/authors/markdown.png"
image: "/images/matthew-smith-Rfflri94rs8-unsplash.jpg"
excerpt: "Quick guide to writing and publishing markdown posts with npm run sync."
aiChat: true
docsSection: true
docsSectionGroup: "Publishing"
docsSectionOrder: 3
docsSectionGroupOrder: 3
---
---
# How to Publish a Blog Post

View File

@@ -11,6 +11,10 @@ featuredOrder: 4
layout: "sidebar"
image: /images/workos.png
excerpt: "Complete guide to setting up WorkOS AuthKit authentication for your dashboard. WorkOS is optional and can be configured in siteConfig.ts."
docsSection: true
docsSectionOrder: 2
docsSectionGroup: "Components"
docsLanding: true
---
# How to setup WorkOS

View File

@@ -10,6 +10,10 @@ layout: "sidebar"
blogFeatured: true
image: /images/agentmail-blog.png
tags: ["agentmail", "newsletter", "email", "setup"]
docsSection: true
docsSectionOrder: 2
docsSectionGroup: "Components"
docsLanding: true
---
AgentMail provides email infrastructure for your markdown blog, enabling newsletter subscriptions, contact forms, and automated email notifications. This guide covers setup, configuration, and usage.

View File

@@ -8,6 +8,10 @@ featured: true
featuredOrder: 6
image: /images/firecrwall-blog.png
tags: ["tutorial", "firecrawl", "import"]
docsSection: true
docsSectionOrder: 2
docsSectionGroup: "Components"
docsLanding: true
---
# How to use Firecrawl

View File

@@ -8,6 +8,10 @@ published: true
blogFeatured: true
layout: "sidebar"
tags: ["mcp", "cursor", "ai", "tutorial", "netlify"]
docsSection: true
docsSectionOrder: 2
docsSectionGroup: "Components"
docsLanding: true
---
This site includes an HTTP-based Model Context Protocol (MCP) server that allows AI tools like Cursor, Claude Desktop, and other MCP-compatible clients to access blog content programmatically.

View File

@@ -11,6 +11,10 @@ layout: "sidebar"
featuredOrder: 2
image: /images/dashboard.png
excerpt: "A complete guide to using the dashboard for managing your markdown blog without leaving your browser."
docsSection: true
docsSectionOrder: 2
docsSectionGroup: "Components"
docsLanding: true
---
# How to use the Markdown sync dashboard

View File

@@ -12,6 +12,10 @@ featured: false
layout: "sidebar"
featuredOrder: 5
image: "/images/markdown.png"
docsSection: true
docsSectionOrder: 3
docsSectionGroup: "Publishing"
docsLanding: true
---
# Writing Markdown with Code Examples
@@ -346,7 +350,8 @@ Embed a YouTube video using an iframe:
height="315"
src="https://www.youtube.com/embed/dQw4w9WgXcQ"
title="YouTube video"
allowfullscreen>
allowfullscreen
>
</iframe>
```
@@ -362,7 +367,8 @@ Embed a tweet using the Twitter embed URL:
<iframe
src="https://platform.twitter.com/embed/Tweet.html?id=20"
width="550"
height="250">
height="250"
>
</iframe>
```
@@ -380,7 +386,8 @@ Use `youtube-nocookie.com` for privacy-enhanced embeds:
height="315"
src="https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ"
title="YouTube video"
allowfullscreen>
allowfullscreen
>
</iframe>
```

View File

@@ -14,6 +14,10 @@ image: "/images/setupguide.png"
authorName: "Markdown"
authorImage: "/images/authors/markdown.png"
excerpt: "Complete guide to fork, set up, and deploy your own markdown framework in under 10 minutes."
docsSection: true
docsSectionOrder: 1
docsSectionGroup: "Setup"
docsLanding: true
---
# Fork and Deploy Your Own Markdown Framework
@@ -63,6 +67,7 @@ This guide walks you through forking [this markdown framework](https://github.co
- [Visitor Map](#visitor-map)
- [Logo Gallery](#logo-gallery)
- [Blog page](#blog-page)
- [Homepage Post Limit](#homepage-post-limit)
- [Hardcoded Navigation Items](#hardcoded-navigation-items)
- [Scroll-to-top button](#scroll-to-top-button)
- [Change the Default Theme](#change-the-default-theme)
@@ -71,10 +76,15 @@ This guide walks you through forking [this markdown framework](https://github.co
- [Add Static Pages (Optional)](#add-static-pages-optional)
- [Update SEO Meta Tags](#update-seo-meta-tags)
- [Update llms.txt and robots.txt](#update-llmstxt-and-robotstxt)
- [Tag Pages and Related Posts](#tag-pages-and-related-posts)
- [Search](#search)
- [Using Search](#using-search)
- [How It Works](#how-it-works)
- [Real-time Stats](#real-time-stats)
- [Footer Configuration](#footer-configuration)
- [Social Footer Configuration](#social-footer-configuration)
- [Right Sidebar Configuration](#right-sidebar-configuration)
- [Contact Form Configuration](#contact-form-configuration)
- [Newsletter Admin](#newsletter-admin)
- [Mobile Navigation](#mobile-navigation)
- [Copy Page Dropdown](#copy-page-dropdown)
@@ -87,7 +97,9 @@ This guide walks you through forking [this markdown framework](https://github.co
- [Project Structure](#project-structure)
- [Write Page](#write-page)
- [AI Agent chat](#ai-agent-chat)
- [Dashboard](#dashboard)
- [Next Steps](#next-steps)
- [MCP Server](#mcp-server)
## Prerequisites
@@ -336,23 +348,27 @@ Your markdown content here...
### Frontmatter Fields
| Field | Required | Description |
| --------------- | -------- | ----------------------------------------------------------------------------- |
| `title` | Yes | Post title |
| `description` | Yes | Short description for SEO |
| `date` | Yes | Publication date (YYYY-MM-DD) |
| `slug` | Yes | URL path (must be unique) |
| `published` | Yes | Set to `true` to publish |
| `tags` | Yes | Array of topic tags |
| `readTime` | No | Estimated reading time |
| `image` | No | Header/Open Graph image URL |
| `excerpt` | No | Short excerpt for card view |
| `featured` | No | Set `true` to show in featured section |
| `featuredOrder` | No | Order in featured section (lower = first) |
| `authorName` | No | Author display name shown next to date |
| `authorImage` | No | Round author avatar image URL |
| `rightSidebar` | No | Enable right sidebar with CopyPageDropdown (opt-in, requires explicit `true`) |
| Field | Required | Description |
| --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title` | Yes | Post title |
| `description` | Yes | Short description for SEO |
| `date` | Yes | Publication date (YYYY-MM-DD) |
| `slug` | Yes | URL path (must be unique) |
| `published` | Yes | Set to `true` to publish |
| `tags` | Yes | Array of topic tags |
| `readTime` | No | Estimated reading time |
| `image` | No | Header/Open Graph image URL |
| `excerpt` | No | Short excerpt for card view |
| `featured` | No | Set `true` to show in featured section |
| `featuredOrder` | No | Order in featured section (lower = first) |
| `authorName` | No | Author display name shown next to date |
| `authorImage` | No | Round author avatar image URL |
| `rightSidebar` | No | Enable right sidebar with CopyPageDropdown (opt-in, requires explicit `true`) |
| `unlisted` | No | Hide from listings but allow direct access via slug. Set `true` to hide from blog listings, featured sections, tag pages, search results, and related posts. Post remains accessible via direct link. |
| `docsSection` | No | Include in docs sidebar. Set `true` to show in the docs section navigation. |
| `docsSectionGroup` | No | Group name for docs sidebar. Posts with the same group name appear together. |
| `docsSectionOrder` | No | Order within docs group. Lower numbers appear first within the group. |
| `docsSectionGroupOrder` | No | Order of the group in docs sidebar. Lower numbers make the group appear first. Groups without this field sort alphabetically. |
### How Frontmatter Works
@@ -1591,11 +1607,11 @@ The Dashboard includes a dedicated AI Agent section with a tab-based UI for Chat
Agent requires API keys for the providers you want to use. Set these in Convex environment variables:
| Variable | Provider | Features |
| --- | --- | --- |
| `ANTHROPIC_API_KEY` | Anthropic | Claude Sonnet 4 chat |
| `OPENAI_API_KEY` | OpenAI | GPT-4o chat |
| `GOOGLE_AI_API_KEY` | Google | Gemini 2.0 Flash chat + image generation |
| Variable | Provider | Features |
| ------------------- | --------- | ---------------------------------------- |
| `ANTHROPIC_API_KEY` | Anthropic | Claude Sonnet 4 chat |
| `OPENAI_API_KEY` | OpenAI | GPT-4o chat |
| `GOOGLE_AI_API_KEY` | Google | Gemini 2.0 Flash chat + image generation |
**Optional system prompt variables:**
@@ -1680,6 +1696,7 @@ npm run sync-server
```
This starts a local HTTP server on `localhost:3001` that:
- Executes sync commands when requested from the dashboard
- Streams output in real-time to the dashboard terminal view
- Shows server status (online/offline) in the dashboard

View File

@@ -11,6 +11,10 @@ featured: false
layout: "sidebar"
newsletter: true
excerpt: "Learn how teams use git for markdown version control, sync to Convex deployments, and automate production workflows."
docsSection: true
docsSectionOrder: 1
docsSectionGroup: "Setup"
docsLanding: true
---
# Team Workflows with Git Version Control

View File

@@ -14,6 +14,10 @@ showImageAtTop: true
authorName: "Markdown"
authorImage: "/images/authors/markdown.png"
image: "https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=1200&h=630&fit=crop"
docsSection: true
docsSectionOrder: 3
docsSectionGroup: "Publishing"
docsLanding: true
---
# Using Images in Blog Posts

View File

@@ -5,11 +5,42 @@ published: true
order: 5
rightSidebar: false
layout: "sidebar"
docsSection: true
docsSectionOrder: 4
---
All notable changes to this project.
![](https://img.shields.io/badge/License-MIT-yellow.svg)
## v2.7.0
Released January 2, 2026
**Docs sidebar group ordering**
- New `docsSectionGroupOrder` frontmatter field for controlling docs sidebar group order
- Groups are sorted by the minimum `docsSectionGroupOrder` value among items in each group
- Lower numbers appear first, groups without this field sort alphabetically
- Works alongside `docsSection`, `docsSectionGroup`, and `docsSectionOrder` fields
**Example usage:**
```yaml
---
docsSection: true
docsSectionGroup: "Getting Started"
docsSectionGroupOrder: 1
docsSectionOrder: 1
---
```
**Technical details:**
- Updated `convex/schema.ts` with `docsSectionGroupOrder` field in posts and pages tables
- Updated `convex/posts.ts` and `convex/pages.ts` queries and mutations
- Updated `scripts/sync-posts.ts` to parse `docsSectionGroupOrder` from frontmatter
- Updated `src/components/DocsSidebar.tsx` to sort groups by `docsSectionGroupOrder`
## v2.6.0
Released January 1, 2026

View File

@@ -1,12 +1,17 @@
---
title: "Docs"
slug: "docs"
title: "Documentation"
slug: "documentation"
published: true
order: 0
showInNav: false
layout: "sidebar"
aiChat: true
rightSidebar: true
showFooter: true
docsSection: true
docsSectionOrder: 1
docsSectionGroup: "Setup"
docsLanding: true
---
## Getting Started
@@ -130,6 +135,10 @@ Content here...
| `newsletter` | No | Override newsletter signup display (`true` to show, `false` to hide) |
| `contactForm` | No | Enable contact form on this post |
| `unlisted` | No | Hide from listings but allow direct access via slug. Set `true` to hide from blog listings, featured sections, tag pages, search results, and related posts. Post remains accessible via direct link. |
| `docsSection` | No | Include in docs sidebar. Set `true` to show in the docs section navigation. |
| `docsSectionGroup` | No | Group name for docs sidebar. Posts with the same group name appear together. |
| `docsSectionOrder` | No | Order within docs group. Lower numbers appear first within the group. |
| `docsSectionGroupOrder` | No | Order of the group in docs sidebar. Lower numbers make the group appear first. Groups without this field sort alphabetically. |
| `showImageAtTop` | No | Set `true` to display the `image` field at the top of the post above the header (default: `false`) |
### Static pages
@@ -173,6 +182,10 @@ Content here...
| `contactForm` | No | Enable contact form on this page |
| `showImageAtTop` | No | Set `true` to display the `image` field at the top of the page above the header (default: `false`) |
| `textAlign` | No | Text alignment: "left" (default), "center", or "right". Used by `home.md` for home intro alignment |
| `docsSection` | No | Include in docs sidebar. Set `true` to show in the docs section navigation. |
| `docsSectionGroup` | No | Group name for docs sidebar. Pages with the same group name appear together. |
| `docsSectionOrder` | No | Order within docs group. Lower numbers appear first within the group. |
| `docsSectionGroupOrder` | No | Order of the group in docs sidebar. Lower numbers make the group appear first. Groups without this field sort alphabetically. |
**Hide pages from navigation:** Set `showInNav: false` to keep a page published and accessible via direct URL, but hidden from the navigation menu. Pages with `showInNav: false` remain searchable and available via API endpoints. Useful for pages you want to link directly but not show in the main nav.
@@ -1117,10 +1130,10 @@ The Dashboard includes a dedicated AI Agent section with tab-based UI for Chat a
**Environment Variables (Convex):**
| Variable | Description |
| --- | --- |
| `ANTHROPIC_API_KEY` | Required for Claude Sonnet 4 |
| `OPENAI_API_KEY` | Required for GPT-4o |
| Variable | Description |
| ------------------- | -------------------------------------------------- |
| `ANTHROPIC_API_KEY` | Required for Claude Sonnet 4 |
| `OPENAI_API_KEY` | Required for GPT-4o |
| `GOOGLE_AI_API_KEY` | Required for Gemini 2.0 Flash and image generation |
**Note:** Only configure the API keys for models you want to use. If a key is not set, users see a helpful setup message when they try to use that model.