diff --git a/TASK.md b/TASK.md
index 08756f4..99310cd 100644
--- a/TASK.md
+++ b/TASK.md
@@ -4,10 +4,17 @@
## Current Status
-v1.20.2 deployed. Write conflict prevention for heartbeat mutations.
+v1.20.3 deployed. SEO/AEO/GEO improvements for AI crawlers and search engines.
## Completed
+- [x] Raw markdown files now accessible to AI crawlers (ChatGPT, Perplexity)
+- [x] Added /raw/ path bypass in botMeta edge function
+- [x] Sitemap now includes static pages (about, docs, contact, etc.)
+- [x] Security headers added to netlify.toml
+- [x] Link header pointing to llms.txt for AI discovery
+- [x] Preconnect hints for Convex backend
+- [x] Fixed URL consistency in openapi.yaml and robots.txt
- [x] Write conflict prevention: increased dedup windows, added heartbeat jitter
- [x] Visitor map styling: removed box-shadow, increased land dot contrast and opacity
- [x] Real-time visitor map on stats page showing live visitor locations
diff --git a/changelog.md b/changelog.md
index 2d1e21a..9965d10 100644
--- a/changelog.md
+++ b/changelog.md
@@ -4,6 +4,27 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+## [1.20.3] - 2025-12-21
+
+### Fixed
+
+- Raw markdown files now accessible to AI crawlers (ChatGPT, Perplexity)
+ - Added `/raw/` path bypass in botMeta edge function
+ - AI services were receiving HTML instead of markdown content
+
+### Added
+
+- SEO and AEO improvements
+ - Sitemap now includes static pages (about, docs, contact, etc.)
+ - Security headers: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy
+ - Link header pointing to llms.txt for AI discovery
+ - Raw markdown files served with proper Content-Type and CORS headers
+ - Preconnect hints for Convex backend (faster API calls)
+
+### Changed
+
+- Fixed URL consistency: openapi.yaml and robots.txt now use www.markdown.fast
+
## [1.20.2] - 2025-12-21
### Fixed
diff --git a/content/pages/changelog-page.md b/content/pages/changelog-page.md
index 391b68b..30b3cd5 100644
--- a/content/pages/changelog-page.md
+++ b/content/pages/changelog-page.md
@@ -7,6 +7,21 @@ order: 5
All notable changes to this project.
+## v1.20.3
+
+Released December 21, 2025
+
+**SEO, AEO, and GEO improvements**
+
+- Raw markdown files now accessible to AI crawlers (ChatGPT, Perplexity)
+- Added `/raw/` path bypass in botMeta edge function so AI services receive markdown, not HTML
+- Sitemap now includes static pages (about, docs, contact, etc.)
+- Security headers: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy
+- Link header pointing to llms.txt for AI discovery
+- Raw markdown files served with proper Content-Type and CORS headers
+- Preconnect hints for Convex backend (faster API calls)
+- Fixed URL consistency: openapi.yaml and robots.txt now use www.markdown.fast
+
## v1.20.2
Released December 21, 2025
diff --git a/convex/http.ts b/convex/http.ts
index 7355d38..5230115 100644
--- a/convex/http.ts
+++ b/convex/http.ts
@@ -23,12 +23,13 @@ http.route({
handler: rssFullFeed,
});
-// Sitemap.xml endpoint for search engines
+// Sitemap.xml endpoint for search engines (includes posts and pages)
http.route({
path: "/sitemap.xml",
method: "GET",
handler: httpAction(async (ctx) => {
const posts = await ctx.runQuery(api.posts.getAllPosts);
+ const pages = await ctx.runQuery(api.pages.getAllPages);
const urls = [
// Homepage
@@ -44,6 +45,14 @@ http.route({