docs: update blog post and TASK.md with v1.9.0 scroll-to-top and v1.10.0 fork configuration

Updated:
- content/blog/raw-markdown-and-copy-improvements.md
  - Changed title from 'v1.7 and v1.8' to 'v1.7 to v1.10'
  - Added Fork configuration section (v1.10.0) with 9-file table
  - Added Scroll-to-top section (v1.9.0) with configuration options
  - Updated summary to include all features from v1.7 to v1.10
  - Fixed image path to /images/v17.png
  - Updated sync command guidance for dev vs prod
- TASK.md
  - Added new To Do items for future features
  - Removed duplicate Future Enhancements section
- content/pages/docs.md
  - Added Mobile menu section
  - Added Copy Page dropdown table with all options
  - Added Markdown tables section
- content/pages/about.md
  - Updated Features list with new v1.8.0 features
- content/blog/setup-guide.md
  - Added image field to pages schema
  - Updated Project structure with new directories
  - Added /raw/{slug}.md to API endpoints
  - Added Mobile Navigation and Copy Page Dropdown sections
  - Added featured image documentation with ordering details

Documentation now covers all features from v1.7.0 through v1.10.0.
This commit is contained in:
Wayne Sutton
2025-12-20 11:05:38 -08:00
parent d3d9c8055d
commit 997b9cad21
63 changed files with 5221 additions and 303 deletions

View File

@@ -7,7 +7,7 @@ const http = httpRouter();
// Site configuration
const SITE_URL = process.env.SITE_URL || "https://markdowncms.netlify.app";
const SITE_NAME = "Markdown Site";
const SITE_NAME = "markdown sync site";
// RSS feed endpoint (descriptions only)
http.route({
@@ -72,7 +72,7 @@ http.route({
const response = {
site: SITE_NAME,
url: SITE_URL,
description: "Developer and writer. Building with Convex and AI.",
description: "An open-source markdown sync site you publish from the terminal with npm run sync. Write locally, sync instantly, skip the build, powered by Convex and Netlify.",
posts: posts.map((post) => ({
title: post.title,
slug: post.slug,
@@ -194,7 +194,7 @@ http.route({
const response = {
site: SITE_NAME,
url: SITE_URL,
description: "Open source markdown blog with real-time sync.",
description: "An open-source markdown sync site you publish from the terminal with npm run sync. Write locally, sync instantly, skip the build, powered by Convex and Netlify.",
exportedAt: new Date().toISOString(),
totalPosts: fullPosts.length,
posts: fullPosts,
@@ -228,8 +228,8 @@ function generatePostMetaHtml(post: {
date: string;
readTime?: string;
}): string {
const siteUrl = process.env.SITE_URL || "https://your-blog.netlify.app";
const siteName = "Wayne Sutton";
const siteUrl = process.env.SITE_URL || "https://markdowncms.netlify.app";
const siteName = "markdown sync site";
const defaultImage = `${siteUrl}/og-image.png`;
const canonicalUrl = `${siteUrl}/${post.slug}`;

View File

@@ -12,6 +12,7 @@ export const getAllPages = query({
published: v.boolean(),
order: v.optional(v.number()),
excerpt: v.optional(v.string()),
image: v.optional(v.string()),
featured: v.optional(v.boolean()),
featuredOrder: v.optional(v.number()),
}),
@@ -37,6 +38,7 @@ export const getAllPages = query({
published: page.published,
order: page.order,
excerpt: page.excerpt,
image: page.image,
featured: page.featured,
featuredOrder: page.featuredOrder,
}));
@@ -52,6 +54,7 @@ export const getFeaturedPages = query({
slug: v.string(),
title: v.string(),
excerpt: v.optional(v.string()),
image: v.optional(v.string()),
featuredOrder: v.optional(v.number()),
}),
),
@@ -75,6 +78,7 @@ export const getFeaturedPages = query({
slug: page.slug,
title: page.title,
excerpt: page.excerpt,
image: page.image,
featuredOrder: page.featuredOrder,
}));
},
@@ -94,6 +98,7 @@ export const getPageBySlug = query({
published: v.boolean(),
order: v.optional(v.number()),
excerpt: v.optional(v.string()),
image: v.optional(v.string()),
featured: v.optional(v.boolean()),
featuredOrder: v.optional(v.number()),
}),
@@ -117,6 +122,7 @@ export const getPageBySlug = query({
published: page.published,
order: page.order,
excerpt: page.excerpt,
image: page.image,
featured: page.featured,
featuredOrder: page.featuredOrder,
};
@@ -134,6 +140,7 @@ export const syncPagesPublic = mutation({
published: v.boolean(),
order: v.optional(v.number()),
excerpt: v.optional(v.string()),
image: v.optional(v.string()),
featured: v.optional(v.boolean()),
featuredOrder: v.optional(v.number()),
}),
@@ -168,6 +175,7 @@ export const syncPagesPublic = mutation({
published: page.published,
order: page.order,
excerpt: page.excerpt,
image: page.image,
featured: page.featured,
featuredOrder: page.featuredOrder,
lastSyncedAt: now,

View File

@@ -61,6 +61,7 @@ export const getFeaturedPosts = query({
title: v.string(),
excerpt: v.optional(v.string()),
description: v.string(),
image: v.optional(v.string()),
featuredOrder: v.optional(v.number()),
}),
),
@@ -85,6 +86,7 @@ export const getFeaturedPosts = query({
title: post.title,
excerpt: post.excerpt,
description: post.description,
image: post.image,
featuredOrder: post.featuredOrder,
}));
},

View File

@@ -3,9 +3,9 @@ import { api } from "./_generated/api";
// Site configuration for RSS feed
const SITE_URL = process.env.SITE_URL || "https://markdowncms.netlify.app";
const SITE_TITLE = "Markdown Site";
const SITE_TITLE = "markdown sync site";
const SITE_DESCRIPTION =
"An open source markdown site powered by Convex and Netlify.";
"An open-source markdown sync site you publish from the terminal with npm run sync. Write locally, sync instantly, skip the build, powered by Convex and Netlify.";
// Escape XML special characters
function escapeXml(text: string): string {

View File

@@ -39,6 +39,7 @@ export default defineSchema({
published: v.boolean(),
order: v.optional(v.number()), // Display order in nav
excerpt: v.optional(v.string()), // Short excerpt for card view
image: v.optional(v.string()), // Thumbnail/OG image URL for featured cards
featured: v.optional(v.boolean()), // Show in featured section
featuredOrder: v.optional(v.number()), // Order in featured section (lower = first)
lastSyncedAt: v.number(),