mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-12 04:09:14 +00:00
Featured Section - Frontmatter-controlled featured items with featured: true and featuredOrder - Card view with excerpts and list/card toggle button - View preference saved to localStorage - New Convex queries for featured posts and pages with by_featured index Logo Gallery - Continuous marquee scroll with clickable logos - CSS animation, grayscale with color on hover - Configurable speed, position, and title - 5 sample logos included Firecrawl Content Importer - npm run import <url> scrapes external URLs to markdown drafts - Creates local files in content/blog/ with frontmatter - Then sync to dev or prod (no separate import:prod command) API Enhancements - New /api/export endpoint for batch content fetching - AI plugin discovery at /.well-known/ai-plugin.json - OpenAPI 3.0 spec at /openapi.yaml - Enhanced llms.txt documentation Documentation - AGENTS.md with codebase instructions for AI agents - Updated all sync vs deploy tables to include import workflow - Renamed content/pages/changelog.md to changelog-page.md Technical - New components: FeaturedCards.tsx, LogoMarquee.tsx - New script: scripts/import-url.ts - New dependency: @mendable/firecrawl-js - Schema updates with featured, featuredOrder, excerpt fields
196 lines
4.9 KiB
YAML
196 lines
4.9 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: Markdown Blog API
|
|
description: |
|
|
API for accessing blog posts and pages as markdown content.
|
|
All endpoints return JSON by default. Use format=md for raw markdown.
|
|
version: 1.6.0
|
|
contact:
|
|
url: https://github.com/waynesutton/markdown-site
|
|
|
|
servers:
|
|
- url: https://markdowncms.netlify.app
|
|
description: Production server
|
|
|
|
paths:
|
|
/api/posts:
|
|
get:
|
|
summary: List all posts
|
|
description: Returns a list of all published blog posts with metadata
|
|
operationId: listPosts
|
|
responses:
|
|
'200':
|
|
description: List of posts
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
site:
|
|
type: string
|
|
example: Markdown Site
|
|
url:
|
|
type: string
|
|
example: https://markdowncms.netlify.app
|
|
posts:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/PostSummary'
|
|
|
|
/api/post:
|
|
get:
|
|
summary: Get a single post
|
|
description: Returns a single post by slug. Use format=md for raw markdown.
|
|
operationId: getPost
|
|
parameters:
|
|
- name: slug
|
|
in: query
|
|
required: true
|
|
description: The post slug (URL path)
|
|
schema:
|
|
type: string
|
|
- name: format
|
|
in: query
|
|
required: false
|
|
description: Response format (json or md)
|
|
schema:
|
|
type: string
|
|
enum: [json, md, markdown]
|
|
default: json
|
|
responses:
|
|
'200':
|
|
description: Post content
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Post'
|
|
text/markdown:
|
|
schema:
|
|
type: string
|
|
'400':
|
|
description: Missing slug parameter
|
|
'404':
|
|
description: Post not found
|
|
|
|
/api/export:
|
|
get:
|
|
summary: Export all posts with content
|
|
description: Returns all posts with full markdown content for batch processing
|
|
operationId: exportPosts
|
|
responses:
|
|
'200':
|
|
description: All posts with full content
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
site:
|
|
type: string
|
|
url:
|
|
type: string
|
|
exportedAt:
|
|
type: string
|
|
format: date-time
|
|
posts:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Post'
|
|
|
|
/rss.xml:
|
|
get:
|
|
summary: RSS feed
|
|
description: Standard RSS 2.0 feed with post descriptions
|
|
operationId: rssFeed
|
|
responses:
|
|
'200':
|
|
description: RSS XML feed
|
|
content:
|
|
application/rss+xml:
|
|
schema:
|
|
type: string
|
|
|
|
/rss-full.xml:
|
|
get:
|
|
summary: Full content RSS feed
|
|
description: RSS feed with complete post content (for LLMs)
|
|
operationId: rssFullFeed
|
|
responses:
|
|
'200':
|
|
description: RSS XML feed with full content
|
|
content:
|
|
application/rss+xml:
|
|
schema:
|
|
type: string
|
|
|
|
/sitemap.xml:
|
|
get:
|
|
summary: XML Sitemap
|
|
description: Dynamic sitemap for search engines
|
|
operationId: sitemap
|
|
responses:
|
|
'200':
|
|
description: XML Sitemap
|
|
content:
|
|
application/xml:
|
|
schema:
|
|
type: string
|
|
|
|
components:
|
|
schemas:
|
|
PostSummary:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
example: How to Build a Blog
|
|
slug:
|
|
type: string
|
|
example: how-to-build-blog
|
|
description:
|
|
type: string
|
|
example: A guide to building a markdown blog
|
|
date:
|
|
type: string
|
|
format: date
|
|
example: '2025-01-15'
|
|
readTime:
|
|
type: string
|
|
example: 5 min read
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: [tutorial, markdown]
|
|
url:
|
|
type: string
|
|
example: https://markdowncms.netlify.app/how-to-build-blog
|
|
markdownUrl:
|
|
type: string
|
|
example: https://markdowncms.netlify.app/api/post?slug=how-to-build-blog
|
|
|
|
Post:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
slug:
|
|
type: string
|
|
description:
|
|
type: string
|
|
date:
|
|
type: string
|
|
format: date
|
|
readTime:
|
|
type: string
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
url:
|
|
type: string
|
|
content:
|
|
type: string
|
|
description: Full markdown content
|
|
|