SEO improvements for better search engine optimization:
1. Canonical URL - Added client-side dynamic canonical link tags for posts and pages
2. Single H1 per page - Markdown H1s demoted to H2 with .blog-h1-demoted class (maintains H1 visual styling)
3. DOM order fix - Article now loads before sidebar in DOM for SEO (CSS order property maintains visual layout)
4. X-Robots-Tag - HTTP header added via netlify.toml (index, follow for public; noindex for dashboard/api routes)
5. Hreflang tags - Self-referencing hreflang (en, x-default) for language targeting
6. og:url consistency - Uses same canonicalUrl variable as canonical link tag
7. twitter:site - New TwitterConfig in siteConfig.ts for Twitter Cards meta tags
Files modified:
- src/config/siteConfig.ts: Added TwitterConfig interface with site/creator fields
- src/pages/Post.tsx: SEO meta tags for posts/pages, DOM order optimization
- src/components/BlogPost.tsx: H1 to H2 demotion in markdown renderer
- src/styles/global.css: .blog-h1-demoted class, CSS order properties
- convex/http.ts: hreflang and twitter:site in generateMetaHtml()
- netlify.toml: X-Robots-Tag headers for public, dashboard, API routes
- index.html: canonical, hreflang, twitter:site placeholder tags
- fork-config.json.example: twitter configuration fields
Closes#4
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add author archive pages displaying all posts by a specific author, following
the existing tag pages pattern. Author names in post headers are now clickable
links that navigate to the author's page.
Changes:
- Add by_authorName index to posts table (convex/schema.ts)
- Add getAllAuthors and getPostsByAuthor queries (convex/posts.ts)
- Create AuthorPage.tsx component with list/cards view toggle
- Add /author/:authorSlug route (src/App.tsx)
- Make authorName clickable in Post.tsx for posts and pages
- Add author link and page styles (src/styles/global.css)
- Add author pages to sitemap (convex/http.ts)
- Update documentation: files.md, TASK.md, changelog.md, changelog-page.md
- Save implementation plan to prds/authorname-blogs.md
Add missing changelog entries to content/pages/changelog-page.md:
v1.34.0 (2025-12-26): Blog page featured layout with hero post
- blogFeatured frontmatter field for posts
- Hero card displays first featured post with landscape image
- 2-column featured row for remaining featured posts
- 3-column grid for regular posts
v1.35.0 (2025-12-26): Image support at top of posts and pages
- showImageAtTop frontmatter field
- Full-width image display above post header
- Works for both posts and pages
v1.36.0 (2025-12-27): Social footer component
- Customizable social links (8 platform types)
- Copyright with auto-updating year
- showSocialFooter frontmatter field for per-page control
- Configurable via siteConfig.socialFooter
v1.37.0 (2025-12-27): Newsletter Admin UI
- Three-column admin interface at /newsletter-admin
- Subscriber management with search and filters
- Send newsletter panel (post selection or custom email)
- Weekly digest automation (Sunday 9am UTC)
- Developer notifications (subscriber alerts, weekly stats)
- Markdown-to-HTML conversion for custom emails
- Add /tags/[tag] routes with dynamic tag archive pages
- Add related posts component to blog post footers (up to 3 by shared tags)
- Tag links in post footers now navigate to tag archive pages
- Re-enable Open in AI links using GitHub raw URLs (bypasses edge issues)
- Add gitHubRepo config in siteConfig.ts for raw URL construction
- Add by_tags index and getAllTags/getPostsByTag/getRelatedPosts queries
- Update sitemap to include dynamically generated tag pages
- Add mobile responsive styling for all new components
- Update docs with git push requirement for AI links to work
- Create netlify/functions/raw.ts Netlify Function
- Returns text/plain with minimal headers for reliable AI ingestion
- Reads from dist/raw/ (production) or public/raw/ (dev/preview)
- Update CopyPageDropdown to use /api/raw/:slug for AI services
- Keep /raw/:slug.md for View as Markdown browser viewing
- Add @netlify/functions dev dependency
- Added v1.24.4 entry documenting showInNav field and hardcodedNavItems configuration
- Added v1.24.3 entry documenting inner page logo configuration
- Includes configuration examples and updated file lists
- Maintains consistent format with existing changelog entries
- Move mobile nav controls to left side (hamburger, search, theme)
- Add sidebar TOC to mobile menu when page has sidebar layout
- Hide desktop sidebar on mobile since accessible via hamburger
- Standardize mobile menu typography with CSS variables
- Use font-family inherit for consistent fonts across menu elements
- Blog page: list/card view toggle with localStorage persistence
- Pages: sidebar layout with auto-generated TOC (layout: "sidebar")
- Markdown: collapsible sections via <details>/<summary> tags
- Add rehype-raw and rehype-sanitize for HTML in markdown
v1.18.1 - CopyPageDropdown raw markdown URLs
- AI services (ChatGPT, Claude, Perplexity) now receive /raw/{slug}.md URLs
- Direct access to clean markdown content for better AI parsing
- No HTML parsing required by AI services
- Renamed buildUrlFromPageUrl to buildUrlFromRawMarkdown
v1.19.0 - Author display for posts and pages
- New optional authorName and authorImage frontmatter fields
- Round avatar image displayed next to date and read time
- Works on individual post and page views
- Write page updated with new field reference
v1.19.1 - GitHub Stars on Stats page
- Live star count from waynesutton/markdown-site repository
- Fetches from GitHub public API (no token required)
- Stats page now displays 6 cards with responsive grid
Documentation updates
- Frontmatter Flow section added to docs.md, setup-guide.md, files.md
- How frontmatter works with step-by-step processing flow
- Instructions for adding new frontmatter fields
Updated files:
- src/components/CopyPageDropdown.tsx
- src/pages/Stats.tsx
- src/pages/Post.tsx
- src/pages/Write.tsx
- src/styles/global.css
- convex/schema.ts
- convex/posts.ts
- convex/pages.ts
- scripts/sync-posts.ts
- content/blog/setup-guide.md
- content/pages/docs.md
- content/pages/changelog-page.md
- files.md
- README.md
- TASK.md
- changelog.md
- AGENTS.md
Add CSS styles for the modern stats page UI:
- stats-cards-modern: 5-column grid layout for stat cards
- stat-card-modern: individual card styling with icons and numbers
- Responsive breakpoints (3/2/1 columns for smaller screens)
- stats-page-wide: wider max-width for stats page
- main-content-wide: layout variant for stats route
These styles were missing from the previous Stats.tsx component update.
- Add GitHubContributions component with year navigation
- Display contribution activity from github-contributions-api.jogruber.de
- Theme-specific colors for dark, light, tan, and cloud themes
- Phosphor icons for year navigation (CaretLeft, CaretRight)
- Click graph to visit GitHub profile
- Configurable via siteConfig.gitHubContributions
- Mobile responsive with scaled cells and hidden day labels
- Add documentation to setup-guide, docs, README, and changelog