From d623aed5982862503a9efaa33908bfbd05cd2875 Mon Sep 17 00:00:00 2001 From: Wayne Sutton Date: Sun, 21 Dec 2025 22:24:12 -0800 Subject: [PATCH] updates: site url to markdown.fast, png og image and site name --- convex/http.ts | 26 ++++++++++++++++++-------- convex/rss.ts | 2 +- index.html | 27 +++++++++++++++------------ public/images/og-default.png | Bin 0 -> 37902 bytes public/llms.txt | 2 +- public/openapi.yaml | 8 ++++---- public/robots.txt | 2 +- src/config/siteConfig.ts | 6 +++--- src/pages/Post.tsx | 6 +++--- 9 files changed, 46 insertions(+), 33 deletions(-) create mode 100644 public/images/og-default.png diff --git a/convex/http.ts b/convex/http.ts index 9497ec9..7355d38 100644 --- a/convex/http.ts +++ b/convex/http.ts @@ -6,7 +6,7 @@ import { rssFeed, rssFullFeed } from "./rss"; const http = httpRouter(); // Site configuration -const SITE_URL = process.env.SITE_URL || "https://markdowncms.netlify.app"; +const SITE_URL = process.env.SITE_URL || "https://markdown.fast"; const SITE_NAME = "markdown sync framework"; // RSS feed endpoint (descriptions only) @@ -72,7 +72,8 @@ http.route({ const response = { site: SITE_NAME, url: SITE_URL, - description: "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify.", + description: + "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify.", posts: posts.map((post) => ({ title: post.title, slug: post.slug, @@ -194,7 +195,8 @@ http.route({ const response = { site: SITE_NAME, url: SITE_URL, - description: "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify.", + description: + "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify.", exportedAt: new Date().toISOString(), totalPosts: fullPosts.length, posts: fullPosts, @@ -230,7 +232,7 @@ function generateMetaHtml(content: { image?: string; type?: "post" | "page"; }): string { - const siteUrl = process.env.SITE_URL || "https://markdowncms.netlify.app"; + const siteUrl = process.env.SITE_URL || "https://markdown.fast"; const siteName = "markdown sync framework"; const defaultImage = `${siteUrl}/images/og-default.svg`; const canonicalUrl = `${siteUrl}/${content.slug}`; @@ -266,8 +268,12 @@ function generateMetaHtml(content: { - ${content.date ? ` - ` : ""} + ${ + content.date + ? ` + ` + : "" + } @@ -284,8 +290,12 @@ function generateMetaHtml(content: {

${safeTitle}

-

${safeDescription}

${content.date ? ` -

${content.date}${content.readTime ? ` · ${content.readTime}` : ""}

` : ""} +

${safeDescription}

${ + content.date + ? ` +

${content.date}${content.readTime ? ` · ${content.readTime}` : ""}

` + : "" + }

Redirecting to full ${contentType}...

`; diff --git a/convex/rss.ts b/convex/rss.ts index 50bdd6c..40adb50 100644 --- a/convex/rss.ts +++ b/convex/rss.ts @@ -2,7 +2,7 @@ import { httpAction } from "./_generated/server"; import { api } from "./_generated/api"; // Site configuration for RSS feed -const SITE_URL = process.env.SITE_URL || "https://markdowncms.netlify.app"; +const SITE_URL = process.env.SITE_URL || "https://markdown.fast"; const SITE_TITLE = "markdown sync framework"; const SITE_DESCRIPTION = "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify."; diff --git a/index.html b/index.html index 85f50dd..08d84d5 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ name="description" content="An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify." /> - + - + - - + + - - - + + + @@ -71,16 +74,16 @@ "@context": "https://schema.org", "@type": "WebSite", "name": "markdown sync framework", - "url": "https://markdowncms.netlify.app", + "url": "https://www.markdown.fast", "description": "An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify.", "author": { "@type": "Organization", "name": "markdown sync framework", - "url": "https://markdowncms.netlify.app" + "url": "https://www.markdown.fast" }, "potentialAction": { "@type": "SearchAction", - "target": "https://markdowncms.netlify.app/?q={search_term_string}", + "target": "https://www.markdown.fast/?q={search_term_string}", "query-input": "required name=search_term_string" } } diff --git a/public/images/og-default.png b/public/images/og-default.png new file mode 100644 index 0000000000000000000000000000000000000000..8862cad0cb3fd066b5c042e53372fa60e52dd99b GIT binary patch literal 37902 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 literal 0 HcmV?d00001 diff --git a/public/llms.txt b/public/llms.txt index 859cfcf..df79417 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -5,7 +5,7 @@ # Site Information - Name: markdown sync framework -- URL: https://markdowncms.netlify.app +- URL: https://markdown.fast - Description: An open-source publishing framework for AI agents and developers. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify. - Topics: Markdown, Convex, React, TypeScript, Netlify, Open Source, AI, LLM, AEO, GEO diff --git a/public/openapi.yaml b/public/openapi.yaml index de406a4..e7ed421 100644 --- a/public/openapi.yaml +++ b/public/openapi.yaml @@ -9,7 +9,7 @@ info: url: https://github.com/waynesutton/markdown-site servers: - - url: https://markdowncms.netlify.app + - url: https://markdown.fast description: Production server paths: @@ -31,7 +31,7 @@ paths: example: markdown sync framework url: type: string - example: https://markdowncms.netlify.app + example: https://markdown.fast posts: type: array items: @@ -164,10 +164,10 @@ components: example: [tutorial, markdown] url: type: string - example: https://markdowncms.netlify.app/how-to-build-blog + example: https://markdown.fast/how-to-build-blog markdownUrl: type: string - example: https://markdowncms.netlify.app/api/post?slug=how-to-build-blog + example: https://markdown.fast/api/post?slug=how-to-build-blog Post: type: object diff --git a/public/robots.txt b/public/robots.txt index 475b533..161a18f 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -5,7 +5,7 @@ User-agent: * Allow: / # Sitemaps -Sitemap: https://markdowncms.netlify.app/sitemap.xml +Sitemap: https://markdown.fast/sitemap.xml # AI and LLM crawlers User-agent: GPTBot diff --git a/src/config/siteConfig.ts b/src/config/siteConfig.ts index 0fedb75..ebebfd9 100644 --- a/src/config/siteConfig.ts +++ b/src/config/siteConfig.ts @@ -107,15 +107,15 @@ export const siteConfig: SiteConfig = { }, { src: "/images/logos/markdown.svg", - href: "https://markdowncms.netlify.app/docs", + href: "https://markdown.fast/docs", }, { src: "/images/logos/react.svg", - href: "https://markdowncms.netlify.app/setup-guide", + href: "https://markdown.fast/setup-guide", }, { src: "/images/logos/sample-logo-5.svg", - href: "https://markdowncms.netlify.app/setup-guide", + href: "https://markdown.fast/setup-guide", }, ], position: "above-footer", diff --git a/src/pages/Post.tsx b/src/pages/Post.tsx index 3c82caf..98f79c5 100644 --- a/src/pages/Post.tsx +++ b/src/pages/Post.tsx @@ -8,7 +8,7 @@ import { ArrowLeft, Link as LinkIcon, Twitter, Rss } from "lucide-react"; import { useState, useEffect } from "react"; // Site configuration -const SITE_URL = "https://markdowncms.netlify.app"; +const SITE_URL = "https://markdown.fast"; const SITE_NAME = "markdown sync framework"; const DEFAULT_OG_IMAGE = "/images/og-default.svg"; @@ -25,7 +25,7 @@ export default function Post() { useEffect(() => { if (!location.hash) return; if (page === undefined && post === undefined) return; - + // Small delay to ensure content is rendered const timer = setTimeout(() => { const id = location.hash.slice(1); @@ -34,7 +34,7 @@ export default function Post() { element.scrollIntoView({ behavior: "smooth" }); } }, 100); - + return () => clearTimeout(timer); }, [location.hash, page, post]);