mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-12 04:09:14 +00:00
feat: Add docsSectionGroupOrder frontmatter field for controlling docs sidebar group order
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -5,11 +5,42 @@ published: true
|
||||
order: 5
|
||||
rightSidebar: false
|
||||
layout: "sidebar"
|
||||
docsSection: true
|
||||
docsSectionOrder: 4
|
||||
---
|
||||
|
||||
All notable changes to this project.
|
||||

|
||||
|
||||
## 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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user