diff --git a/AGENTS.md b/AGENTS.md index 7d8e73f..54af301 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,10 +19,10 @@ Your content is instantly available to browsers, LLMs, and AI agents.. Write mar - **Site Name**: markdown - **Site Title**: markdown sync framework - **Site URL**: https://markdown.fast -- **Total Posts**: 12 -- **Total Pages**: 4 -- **Latest Post**: 2025-12-25 -- **Last Updated**: 2025-12-27T06:13:31.118Z +- **Total Posts**: 14 +- **Total Pages**: 5 +- **Latest Post**: 2025-12-27 +- **Last Updated**: 2025-12-27T23:32:52.395Z ## Tech stack diff --git a/README.md b/README.md index 977116f..d415d49 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,19 @@ Follow the step-by-step guide in `FORK_CONFIG.md` to update each file manually. - Run `npm run import ` to scrape and create draft posts locally - Then sync to dev or prod with `npm run sync` or `npm run sync:prod` +### Newsletter and Email + +The framework includes AgentMail integration for newsletter subscriptions and contact forms. Features include: + +- Newsletter subscriptions and sending +- Contact forms on any post or page +- Automated weekly digests +- Developer notifications +- Admin UI for subscriber management +- CLI tools for sending newsletters and stats + +See the [AgentMail setup guide](https://www.markdown.fast/blog/how-to-use-agentmail) for configuration instructions. + ## Getting Started ### Prerequisites diff --git a/content/blog/about-this-blog.md b/content/blog/about-this-blog.md index be819c9..1c728aa 100644 --- a/content/blog/about-this-blog.md +++ b/content/blog/about-this-blog.md @@ -3,7 +3,7 @@ title: "About This Markdown Framework" description: "How this open source framework works with Convex for real-time sync and Netlify for deployment." date: "2025-12-14" slug: "about-this-blog" -published: true +published: false tags: ["convex", "netlify", "open-source", "markdown", "ai", "llm"] readTime: "4 min read" featured: false diff --git a/content/blog/git-commit-message-best-practices.md b/content/blog/git-commit-message-best-practices.md index 7e06336..76309eb 100644 --- a/content/blog/git-commit-message-best-practices.md +++ b/content/blog/git-commit-message-best-practices.md @@ -1,7 +1,7 @@ --- title: "Git commit message best practices" description: "A guide to writing clear, consistent commit messages that help your team understand changes and generate better changelogs." -date: "2025-01-17" +date: "2025-12-14" slug: "git-commit-message-best-practices" published: true tags: ["git", "development", "best-practices", "workflow"] diff --git a/content/blog/how-to-use-agentmail.md b/content/blog/how-to-use-agentmail.md index 41442c7..1a13362 100644 --- a/content/blog/how-to-use-agentmail.md +++ b/content/blog/how-to-use-agentmail.md @@ -4,6 +4,7 @@ description: "Complete guide to setting up AgentMail for newsletters and contact date: "2025-12-27" slug: "how-to-use-agentmail" published: true +image: images/agentmail-blog.png tags: ["agentmail", "newsletter", "email", "setup"] --- @@ -35,11 +36,11 @@ In the AgentMail dashboard, navigate to API settings and copy your API key. You' In your Convex dashboard, go to Settings > Environment Variables and add: -| Variable | Description | Required | -|----------|-------------|----------| -| `AGENTMAIL_API_KEY` | Your AgentMail API key | Yes | -| `AGENTMAIL_INBOX` | Your inbox address (e.g., `markdown@agentmail.to`) | Yes | -| `AGENTMAIL_CONTACT_EMAIL` | Contact form recipient (defaults to inbox if not set) | No | +| Variable | Description | Required | +| ------------------------- | ----------------------------------------------------- | -------- | +| `AGENTMAIL_API_KEY` | Your AgentMail API key | Yes | +| `AGENTMAIL_INBOX` | Your inbox address (e.g., `markdown@agentmail.to`) | Yes | +| `AGENTMAIL_CONTACT_EMAIL` | Contact form recipient (defaults to inbox if not set) | No | **Important:** Never hardcode email addresses in your code. Always use environment variables. @@ -152,8 +153,8 @@ Submissions are stored in Convex and sent via AgentMail to your configured recip ### Frontmatter options -| Field | Type | Description | -|-------|------|-------------| +| Field | Type | Description | +| ------------- | ------- | ------------------------------------- | | `contactForm` | boolean | Enable contact form on this post/page | ## Frontmatter options @@ -165,7 +166,7 @@ Control newsletter signup display per post/page: ```markdown --- title: "My Post" -newsletter: true # Show signup (default: follows siteConfig) +newsletter: true # Show signup (default: follows siteConfig) --- ``` @@ -174,7 +175,7 @@ Or hide it: ```markdown --- title: "My Post" -newsletter: false # Hide signup even if enabled globally +newsletter: false # Hide signup even if enabled globally --- ``` @@ -195,10 +196,10 @@ All AgentMail features require these Convex environment variables: ## CLI commands -| Command | Description | -|---------|-------------| -| `npm run newsletter:send ` | Send a blog post to all subscribers | -| `npm run newsletter:send:stats` | Send weekly stats summary to your inbox | +| Command | Description | +| -------------------------------- | --------------------------------------- | +| `npm run newsletter:send ` | Send a blog post to all subscribers | +| `npm run newsletter:send:stats` | Send weekly stats summary to your inbox | ## Troubleshooting diff --git a/content/blog/how-to-use-firecrawl.md b/content/blog/how-to-use-firecrawl.md index 19405dd..f80e64f 100644 --- a/content/blog/how-to-use-firecrawl.md +++ b/content/blog/how-to-use-firecrawl.md @@ -1,9 +1,10 @@ --- title: "How to use Firecrawl" description: "Import external articles as markdown posts using Firecrawl. Get your API key and configure environment variables for local imports and AI chat." -date: "2025-01-20" +date: "2025-12-20" slug: "how-to-use-firecrawl" published: true +image: images/firecrwall-blog.png tags: ["tutorial", "firecrawl", "import"] --- diff --git a/content/pages/contact.md b/content/pages/contact.md index f3376b9..2d36850 100644 --- a/content/pages/contact.md +++ b/content/pages/contact.md @@ -9,10 +9,8 @@ order: 4 You found the contact page. Nice +## Contact form demo + +This form does not work in production and AgentMail to send emails. See How to use AgentMail with Markdown Sync for details.> + - -## The technical way - -This site runs on Convex, which means every page view is a live subscription to the database. You are not reading cached HTML. You are reading data that synced moments ago. - -If you want to reach out, here is an idea: fork this repo, add a contact form, wire it to a Convex mutation, and deploy. Your message will hit the database in under 100ms. No email server required. diff --git a/content/pages/newsletter.md b/content/pages/newsletter.md index 15483f6..0c010a3 100644 --- a/content/pages/newsletter.md +++ b/content/pages/newsletter.md @@ -4,12 +4,29 @@ slug: newsletter published: true order: 15 showInNav: true -newsletter: true +newsletter: false --- -# Newsletter +# Newsletter Demo Page -Stay updated with the latest posts and updates from the markdown sync framework. +This is a demo newsletter page available at `/newsletter`. The newsletter feature uses AgentMail for email infrastructure. + + + +## About AgentMail + +This newsletter integration is powered by AgentMail, which provides email infrastructure for the markdown blog framework. + +AgentMail Newsletter integration features: + +- Newsletter subscriptions and sending +- Contact forms on any post or page +- Automated weekly digests +- Developer notifications +- Admin UI for subscriber management +- CLI tools for sending newsletters and stats + +For complete setup instructions and detailed documentation, see the [How to use AgentMail with Markdown Sync](/blog/how-to-use-agentmail) guide. ## What you will get @@ -19,7 +36,7 @@ When you subscribe, you will receive: - Updates about new features and improvements - Tips and tricks for getting the most out of markdown sync -## Subscribe +## Subscribe Demo Use the form below to subscribe to our newsletter. We respect your privacy and you can unsubscribe at any time. diff --git a/public/images/agentmail-blog.png b/public/images/agentmail-blog.png new file mode 100644 index 0000000..508bf7c Binary files /dev/null and b/public/images/agentmail-blog.png differ diff --git a/public/images/firecrwall-blog.png b/public/images/firecrwall-blog.png new file mode 100644 index 0000000..82feb4e Binary files /dev/null and b/public/images/firecrwall-blog.png differ diff --git a/public/llms.txt b/public/llms.txt index 4b90f0f..5608ba1 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,6 +1,6 @@ # llms.txt - Information for AI assistants and LLMs # Learn more: https://llmstxt.org/ -# Last updated: 2025-12-27T06:13:31.119Z +# Last updated: 2025-12-27T23:32:52.396Z > Your content is instantly available to browsers, LLMs, and AI agents. @@ -9,8 +9,8 @@ - URL: https://markdown.fast - Description: Your content is instantly available to browsers, LLMs, and AI agents. 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 -- Total Posts: 12 -- Latest Post: 2025-12-25 +- Total Posts: 14 +- Latest Post: 2025-12-27 - GitHub: https://github.com/waynesutton/markdown-site # API Endpoints diff --git a/public/raw/about-this-blog.md b/public/raw/about-this-blog.md deleted file mode 100644 index dfab9e6..0000000 --- a/public/raw/about-this-blog.md +++ /dev/null @@ -1,117 +0,0 @@ -# About This Markdown Framework - -> How this open source framework works with Convex for real-time sync and Netlify for deployment. - ---- -Type: post -Date: 2025-12-14 -Reading time: 4 min read -Tags: convex, netlify, open-source, markdown, ai, llm ---- - -# About This Markdown Framework - -An open-source publishing framework built for AI agents and developers to ship websites, docs, or blogs.. Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents. Built on Convex and Netlify. - -## How It Works - -The architecture is straightforward: - -1. **Markdown files** live in `content/blog/` -2. **Convex** stores posts in a real-time database -3. **React** renders the frontend -4. **Netlify** handles deployment and edge functions - -When you add a new markdown file and run the sync script, your post appears instantly. No rebuild required. - -## The Stack - -| Layer | Technology | -| -------- | ------------------------- | -| Frontend | React + TypeScript | -| Backend | Convex | -| Styling | CSS (no framework) | -| Hosting | Netlify | -| Content | Markdown with frontmatter | - -## Why Convex? - -Convex provides real-time sync out of the box. When you update a post, every connected browser sees the change immediately. - -```typescript -// Fetching posts is one line -const posts = useQuery(api.posts.getAllPosts); -``` - -No REST endpoints. No cache invalidation. No WebSocket setup. The data stays in sync automatically. - -## Why Markdown? - -Markdown files in your repo are simpler than a CMS: - -- Version controlled in git (commit, diff, roll back) -- Edit with any text editor -- AI agents can create and modify posts -- No separate login or admin panel - -## Features - -This site includes: - -- **Real-time updates** via Convex subscriptions -- **Static pages** for About, Projects, Contact (optional) -- **RSS feeds** at `/rss.xml` and `/rss-full.xml` -- **Sitemap** at `/sitemap.xml` -- **JSON API** at `/api/posts` and `/api/post?slug=xxx` -- **Theme switching** between dark, light, tan, and cloud -- **SEO optimization** with meta tags and structured data -- **AI discovery** via `llms.txt` - -## Fork and Deploy - -The setup takes about 10 minutes: - -1. Fork the repo -2. Run `npx convex dev` to set up your backend -3. Run `npm run sync` to upload posts (development) or `npm run sync:prod` (production) -4. Deploy to Netlify - -**Development vs Production:** Use `npm run sync` when testing locally against your dev Convex deployment. Use `npm run sync:prod` when deploying content to your live production site. - -**Sync commands:** - -**Development:** - -- `npm run sync` - Sync markdown content -- `npm run sync:discovery` - Update discovery files (AGENTS.md, llms.txt) -- `npm run sync:all` - Sync content + discovery files together - -**Production:** - -- `npm run sync:prod` - Sync markdown content -- `npm run sync:discovery:prod` - Update discovery files -- `npm run sync:all:prod` - Sync content + discovery files together - -**Import external content:** Run `npm run import ` to scrape and create local markdown drafts. Then sync to dev or prod. There is no separate import command for production because import creates local files only. - -Read the [setup guide](/setup-guide) for detailed steps. - -## Customization - -Edit `src/pages/Home.tsx` to change: - -- Site name and description -- Featured posts -- Footer links - -Edit `src/styles/global.css` to change: - -- Colors and typography -- Theme variables -- Layout spacing - -## Links - -- [Convex Documentation](https://docs.convex.dev) -- [Netlify Documentation](https://docs.netlify.com) -- [Setup Guide](/setup-guide) \ No newline at end of file diff --git a/public/raw/about.md b/public/raw/about.md index 81c9bbe..cb322f1 100644 --- a/public/raw/about.md +++ b/public/raw/about.md @@ -2,7 +2,7 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- An open-source publishing framework built for AI agents and developers to ship websites, docs, or blogs.. 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/public/raw/changelog.md b/public/raw/changelog.md index 5d988c4..0ae00f0 100644 --- a/public/raw/changelog.md +++ b/public/raw/changelog.md @@ -2,7 +2,7 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- All notable changes to this project. diff --git a/public/raw/contact.md b/public/raw/contact.md index 36214de..b170d18 100644 --- a/public/raw/contact.md +++ b/public/raw/contact.md @@ -2,15 +2,13 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- You found the contact page. Nice - +## Contact form demo -## The technical way +This form does not work in production and AgentMail to send emails. See How to use AgentMail with Markdown Sync for details.> -This site runs on Convex, which means every page view is a live subscription to the database. You are not reading cached HTML. You are reading data that synced moments ago. - -If you want to reach out, here is an idea: fork this repo, add a contact form, wire it to a Convex mutation, and deploy. Your message will hit the database in under 100ms. No email server required. \ No newline at end of file + \ No newline at end of file diff --git a/public/raw/docs.md b/public/raw/docs.md index f43a629..59a76da 100644 --- a/public/raw/docs.md +++ b/public/raw/docs.md @@ -2,7 +2,7 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- ## Getting Started diff --git a/public/raw/git-commit-message-best-practices.md b/public/raw/git-commit-message-best-practices.md index 7d74b7f..9620966 100644 --- a/public/raw/git-commit-message-best-practices.md +++ b/public/raw/git-commit-message-best-practices.md @@ -4,7 +4,7 @@ --- Type: post -Date: 2025-01-17 +Date: 2025-12-14 Reading time: 5 min read Tags: git, development, best-practices, workflow --- diff --git a/public/raw/how-to-use-agentmail.md b/public/raw/how-to-use-agentmail.md index 9877a58..c84ef77 100644 --- a/public/raw/how-to-use-agentmail.md +++ b/public/raw/how-to-use-agentmail.md @@ -37,11 +37,11 @@ In the AgentMail dashboard, navigate to API settings and copy your API key. You' In your Convex dashboard, go to Settings > Environment Variables and add: -| Variable | Description | Required | -|----------|-------------|----------| -| `AGENTMAIL_API_KEY` | Your AgentMail API key | Yes | -| `AGENTMAIL_INBOX` | Your inbox address (e.g., `markdown@agentmail.to`) | Yes | -| `AGENTMAIL_CONTACT_EMAIL` | Contact form recipient (defaults to inbox if not set) | No | +| Variable | Description | Required | +| ------------------------- | ----------------------------------------------------- | -------- | +| `AGENTMAIL_API_KEY` | Your AgentMail API key | Yes | +| `AGENTMAIL_INBOX` | Your inbox address (e.g., `markdown@agentmail.to`) | Yes | +| `AGENTMAIL_CONTACT_EMAIL` | Contact form recipient (defaults to inbox if not set) | No | **Important:** Never hardcode email addresses in your code. Always use environment variables. @@ -154,8 +154,8 @@ Submissions are stored in Convex and sent via AgentMail to your configured recip ### Frontmatter options -| Field | Type | Description | -|-------|------|-------------| +| Field | Type | Description | +| ------------- | ------- | ------------------------------------- | | `contactForm` | boolean | Enable contact form on this post/page | ## Frontmatter options @@ -167,7 +167,7 @@ Control newsletter signup display per post/page: ```markdown --- title: "My Post" -newsletter: true # Show signup (default: follows siteConfig) +newsletter: true # Show signup (default: follows siteConfig) --- ``` @@ -176,7 +176,7 @@ Or hide it: ```markdown --- title: "My Post" -newsletter: false # Hide signup even if enabled globally +newsletter: false # Hide signup even if enabled globally --- ``` @@ -197,10 +197,10 @@ All AgentMail features require these Convex environment variables: ## CLI commands -| Command | Description | -|---------|-------------| -| `npm run newsletter:send ` | Send a blog post to all subscribers | -| `npm run newsletter:send:stats` | Send weekly stats summary to your inbox | +| Command | Description | +| -------------------------------- | --------------------------------------- | +| `npm run newsletter:send ` | Send a blog post to all subscribers | +| `npm run newsletter:send:stats` | Send weekly stats summary to your inbox | ## Troubleshooting diff --git a/public/raw/how-to-use-firecrawl.md b/public/raw/how-to-use-firecrawl.md index 6bc3d0d..baca784 100644 --- a/public/raw/how-to-use-firecrawl.md +++ b/public/raw/how-to-use-firecrawl.md @@ -4,7 +4,7 @@ --- Type: post -Date: 2025-01-20 +Date: 2025-12-20 Reading time: 2 min read Tags: tutorial, firecrawl, import --- diff --git a/public/raw/index.md b/public/raw/index.md index e1df1cb..8b7cff1 100644 --- a/public/raw/index.md +++ b/public/raw/index.md @@ -2,7 +2,7 @@ This is the homepage index of all published content. -## Blog Posts (14) +## Blog Posts (13) - **[How to use AgentMail with Markdown Sync](/raw/how-to-use-agentmail.md)** - Complete guide to setting up AgentMail for newsletters and contact forms in your markdown blog - Date: 2025-12-27 | Reading time: 5 min read | Tags: agentmail, newsletter, email, setup @@ -14,12 +14,14 @@ This is the homepage index of all published content. - Date: 2025-12-21 | Reading time: 5 min read | Tags: features, stats, convex, updates, analytics - **[Configure your fork in one command](/raw/fork-configuration-guide.md)** - Two options to set up your forked markdown framework: automated JSON config with npm run configure, or step-by-step manual guide. - Date: 2025-12-20 | Reading time: 4 min read | Tags: configuration, setup, fork, tutorial +- **[How to use Firecrawl](/raw/how-to-use-firecrawl.md)** - Import external articles as markdown posts using Firecrawl. Get your API key and configure environment variables for local imports and AI chat. + - Date: 2025-12-20 | Reading time: 2 min read | Tags: tutorial, firecrawl, import - **[v1.18.0 release: 12 versions of shipping](/raw/raw-markdown-and-copy-improvements.md)** - Everything new from v1.7 to v1.18.0. Automated fork setup, GitHub contributions graph, write page, mobile menu, aggregates, and more. - Date: 2025-12-20 | Reading time: 8 min read | Tags: release, features, updates, developer-tools - **[New features: search, featured section, and logo gallery](/raw/new-features-search-featured-logos.md)** - Three updates that make your markdown framework more useful: Command+K search, frontmatter-controlled featured items, and a scrolling logo gallery. - Date: 2025-12-17 | Reading time: 4 min read | Tags: features, search, convex, updates -- **[About This Markdown Framework](/raw/about-this-blog.md)** - How this open source framework works with Convex for real-time sync and Netlify for deployment. - - Date: 2025-12-14 | Reading time: 4 min read | Tags: convex, netlify, open-source, markdown, ai, llm +- **[Git commit message best practices](/raw/git-commit-message-best-practices.md)** - A guide to writing clear, consistent commit messages that help your team understand changes and generate better changelogs. + - Date: 2025-12-14 | Reading time: 5 min read | Tags: git, development, best-practices, workflow - **[How to Publish a Blog Post](/raw/how-to-publish.md)** - A quick guide to writing and publishing markdown posts using Cursor after your framework is set up. - Date: 2025-12-14 | Reading time: 3 min read | Tags: tutorial, markdown, cursor, IDE, publishing - **[Writing Markdown with Code Examples](/raw/markdown-with-code-examples.md)** - A complete reference for writing markdown with links, code blocks, images, tables, and formatting. Copy examples directly into your posts. @@ -28,10 +30,6 @@ This is the homepage index of all published content. - Date: 2025-12-14 | Reading time: 8 min read | Tags: convex, netlify, tutorial, deployment - **[Using Images in Blog Posts](/raw/using-images-in-posts.md)** - Learn how to add header images, inline images, and Open Graph images to your markdown posts. - Date: 2025-12-14 | Reading time: 4 min read | Tags: images, tutorial, markdown, open-graph -- **[How to use Firecrawl](/raw/how-to-use-firecrawl.md)** - Import external articles as markdown posts using Firecrawl. Get your API key and configure environment variables for local imports and AI chat. - - Date: 2025-01-20 | Reading time: 2 min read | Tags: tutorial, firecrawl, import -- **[Git commit message best practices](/raw/git-commit-message-best-practices.md)** - A guide to writing clear, consistent commit messages that help your team understand changes and generate better changelogs. - - Date: 2025-01-17 | Reading time: 5 min read | Tags: git, development, best-practices, workflow ## Pages (6) @@ -44,6 +42,6 @@ This is the homepage index of all published content. --- -**Total Content:** 14 posts, 6 pages +**Total Content:** 13 posts, 6 pages All content is available as raw markdown files at `/raw/{slug}.md` diff --git a/public/raw/newsletter.md b/public/raw/newsletter.md index c461537..9031f13 100644 --- a/public/raw/newsletter.md +++ b/public/raw/newsletter.md @@ -2,12 +2,29 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- -# Newsletter +# Newsletter Demo Page -Stay updated with the latest posts and updates from the markdown sync framework. +This is a demo newsletter page available at `/newsletter`. The newsletter feature uses AgentMail for email infrastructure. + + + +## About AgentMail + +This newsletter integration is powered by AgentMail, which provides email infrastructure for the markdown blog framework. + +AgentMail Newsletter integration features: + +- Newsletter subscriptions and sending +- Contact forms on any post or page +- Automated weekly digests +- Developer notifications +- Admin UI for subscriber management +- CLI tools for sending newsletters and stats + +For complete setup instructions and detailed documentation, see the [How to use AgentMail with Markdown Sync](/blog/how-to-use-agentmail) guide. ## What you will get @@ -17,7 +34,7 @@ When you subscribe, you will receive: - Updates about new features and improvements - Tips and tricks for getting the most out of markdown sync -## Subscribe +## Subscribe Demo Use the form below to subscribe to our newsletter. We respect your privacy and you can unsubscribe at any time. diff --git a/public/raw/projects.md b/public/raw/projects.md index d187b31..af87e96 100644 --- a/public/raw/projects.md +++ b/public/raw/projects.md @@ -2,7 +2,7 @@ --- Type: page -Date: 2025-12-27 +Date: 2025-12-28 --- This markdown framework is open source and built to be extended. Here is what ships out of the box. diff --git a/src/config/siteConfig.ts b/src/config/siteConfig.ts index af8d6ec..4056fa8 100644 --- a/src/config/siteConfig.ts +++ b/src/config/siteConfig.ts @@ -317,7 +317,7 @@ export const siteConfig: SiteConfig = { }, { src: "/images/logos/firecrawl.svg", - href: "https://firecrawl.dev/?utm_source=markdownfast", + href: "https://www.markdown.fast/how-to-use-firecrawl", }, { src: "/images/logos/markdown.svg", @@ -329,7 +329,7 @@ export const siteConfig: SiteConfig = { }, { src: "/images/logos/agentmail.svg", - href: "https://agentmail.to/utm_source=markdownfast", + href: "https://www.markdown.fast/how-to-use-agentmail/", }, { src: "/images/logos/mcp.svg",