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 SemanticSearchConfig interface with enabled toggle to siteConfig.ts
- Default semantic search to disabled (enabled: false) to avoid blocking forks without OPENAI_API_KEY
- Update SearchModal.tsx to conditionally show mode toggle based on config
- Update sync-posts.ts to skip embedding generation when disabled
- Add semantic search toggle to Dashboard config generator
- Update FORK_CONFIG.md with Semantic Search Configuration section
- Update fork-config.json.example with semanticSearch option
- Update docs-semantic-search.md with enable/disable instructions
- Update changelog and documentation
When disabled (default):
- Search modal shows only keyword search (no mode toggle)
- Embedding generation skipped during sync
- No OpenAI API key required
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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