mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-12 04:09:14 +00:00
feat(fork-config): add automated fork configuration with npm run configure
Add a complete fork configuration system that allows users to set up their forked site with a single command or follow manual instructions. ## New files - FORK_CONFIG.md: Comprehensive guide with two setup options - Option 1: Automated JSON config + npm run configure - Option 2: Manual step-by-step instructions with code snippets - AI agent prompt for automated updates - fork-config.json.example: JSON template with all configuration fields - Site info (name, title, description, URL, domain) - GitHub and contact details - Creator section for footer links - Optional feature toggles (logo gallery, GitHub graph, blog page) - Theme selection - scripts/configure-fork.ts: Automated configuration script - Reads fork-config.json and applies changes to all files - Updates 11 configuration files in one command - Type-safe with ForkConfig interface - Detailed console output showing each file updated ## Updated files - package.json: Added configure script (npm run configure) - .gitignore: Added fork-config.json to keep user config local - files.md: Added new fork configuration files - changelog.md: Added v1.18.0 entry - changelog-page.md: Added v1.18.0 section with full details - TASK.md: Updated status and completed tasks - README.md: Replaced Files to Update section with Fork Configuration - content/blog/setup-guide.md: Added Fork Configuration Options section - content/pages/docs.md: Added Fork Configuration section - content/pages/about.md: Added fork configuration mention - content/blog/fork-configuration-guide.md: New featured blog post ## Files updated by configure script | File | What it updates | | ----------------------------------- | -------------------------------------- | | src/config/siteConfig.ts | Site name, bio, GitHub, features | | src/pages/Home.tsx | Intro paragraph, footer links | | src/pages/Post.tsx | SITE_URL, SITE_NAME constants | | convex/http.ts | SITE_URL, SITE_NAME constants | | convex/rss.ts | SITE_URL, SITE_TITLE, SITE_DESCRIPTION | | index.html | Meta tags, JSON-LD, page title | | public/llms.txt | Site info, GitHub link | | public/robots.txt | Sitemap URL | | public/openapi.yaml | Server URL, site name | | public/.well-known/ai-plugin.json | Plugin metadata | | src/context/ThemeContext.tsx | Default theme | ## Usage Automated: cp fork-config.json.example fork-config.json # Edit fork-config.json npm run configure Manual: Follow FORK_CONFIG.md step-by-step guide
This commit is contained in:
172
content/blog/fork-configuration-guide.md
Normal file
172
content/blog/fork-configuration-guide.md
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
title: "Configure your fork in one command"
|
||||
description: "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"
|
||||
slug: "fork-configuration-guide"
|
||||
published: true
|
||||
tags: ["configuration", "setup", "fork", "tutorial"]
|
||||
readTime: "4 min read"
|
||||
featured: true
|
||||
featuredOrder: 0
|
||||
image: "/images/forkconfig.png"
|
||||
excerpt: "Set up your forked site with npm run configure or follow the manual FORK_CONFIG.md guide."
|
||||
---
|
||||
|
||||
# Configure your fork in one command
|
||||
|
||||
After forking this markdown framework, you need to update configuration files with your site information. This affects your site name, URLs, RSS feeds, social sharing metadata, and AI discovery files.
|
||||
|
||||
Previously this meant editing 10+ files manually. Now you have two options.
|
||||
|
||||
## Option 1: Automated configuration
|
||||
|
||||
Run a single command to configure everything at once.
|
||||
|
||||
### Step 1: Copy the example config
|
||||
|
||||
```bash
|
||||
cp fork-config.json.example fork-config.json
|
||||
```
|
||||
|
||||
The file `fork-config.json` is gitignored, so your site configuration stays local and does not get committed. The `.example` file remains in the repo as a template for future forks.
|
||||
|
||||
### Step 2: Edit the JSON file
|
||||
|
||||
Open `fork-config.json` and update the values:
|
||||
|
||||
```json
|
||||
{
|
||||
"siteName": "Your Site Name",
|
||||
"siteTitle": "Your Tagline",
|
||||
"siteDescription": "A one-sentence description of your site.",
|
||||
"siteUrl": "https://yoursite.netlify.app",
|
||||
"siteDomain": "yoursite.netlify.app",
|
||||
"githubUsername": "yourusername",
|
||||
"githubRepo": "your-repo-name",
|
||||
"contactEmail": "you@example.com",
|
||||
"creator": {
|
||||
"name": "Your Name",
|
||||
"twitter": "https://x.com/yourhandle",
|
||||
"linkedin": "https://www.linkedin.com/in/yourprofile/",
|
||||
"github": "https://github.com/yourusername"
|
||||
},
|
||||
"bio": "Write markdown, sync from the terminal. Your content is instantly available to browsers, LLMs, and AI agents.",
|
||||
"theme": "tan"
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Run the configure script
|
||||
|
||||
```bash
|
||||
npm run configure
|
||||
```
|
||||
|
||||
The script reads your JSON file and updates all 11 configuration files automatically. You should see output like:
|
||||
|
||||
```
|
||||
Fork Configuration Script
|
||||
=========================
|
||||
Reading config from fork-config.json...
|
||||
Updating src/config/siteConfig.ts...
|
||||
Updating src/pages/Home.tsx...
|
||||
Updating src/pages/Post.tsx...
|
||||
Updating convex/http.ts...
|
||||
Updating convex/rss.ts...
|
||||
Updating index.html...
|
||||
Updating public/llms.txt...
|
||||
Updating public/robots.txt...
|
||||
Updating public/openapi.yaml...
|
||||
Updating public/.well-known/ai-plugin.json...
|
||||
Updating src/context/ThemeContext.tsx...
|
||||
|
||||
Configuration complete!
|
||||
```
|
||||
|
||||
## Option 2: Manual configuration
|
||||
|
||||
If you prefer to update files manually, follow the guide in `FORK_CONFIG.md`. It includes:
|
||||
|
||||
- Code snippets for each configuration file
|
||||
- Line numbers and exact locations to update
|
||||
- An AI agent prompt to paste into Claude or ChatGPT for assisted configuration
|
||||
|
||||
## What gets updated
|
||||
|
||||
The configuration script updates these files:
|
||||
|
||||
| File | What changes |
|
||||
| ----------------------------------- | ----------------------------------------- |
|
||||
| `src/config/siteConfig.ts` | Site name, bio, GitHub username, features |
|
||||
| `src/pages/Home.tsx` | Intro paragraph, footer links |
|
||||
| `src/pages/Post.tsx` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/http.ts` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/rss.ts` | SITE_URL, SITE_TITLE, SITE_DESCRIPTION |
|
||||
| `index.html` | Meta tags, JSON-LD, page title |
|
||||
| `public/llms.txt` | Site info, GitHub link |
|
||||
| `public/robots.txt` | Sitemap URL |
|
||||
| `public/openapi.yaml` | Server URL, site name |
|
||||
| `public/.well-known/ai-plugin.json` | Plugin metadata |
|
||||
| `src/context/ThemeContext.tsx` | Default theme |
|
||||
|
||||
## Optional settings
|
||||
|
||||
The JSON config file supports additional options:
|
||||
|
||||
```json
|
||||
{
|
||||
"logoGallery": {
|
||||
"enabled": true,
|
||||
"title": "Built with",
|
||||
"scrolling": false,
|
||||
"maxItems": 4
|
||||
},
|
||||
"gitHubContributions": {
|
||||
"enabled": true,
|
||||
"showYearNavigation": true,
|
||||
"linkToProfile": true,
|
||||
"title": "GitHub Activity"
|
||||
},
|
||||
"blogPage": {
|
||||
"enabled": true,
|
||||
"showInNav": true,
|
||||
"title": "Blog",
|
||||
"description": "Latest posts",
|
||||
"order": 0
|
||||
},
|
||||
"postsDisplay": {
|
||||
"showOnHome": true,
|
||||
"showOnBlogPage": true
|
||||
},
|
||||
"featuredViewMode": "cards",
|
||||
"showViewToggle": true,
|
||||
"theme": "tan"
|
||||
}
|
||||
```
|
||||
|
||||
These are optional. If you omit them, the script uses sensible defaults.
|
||||
|
||||
## After configuring
|
||||
|
||||
Once configuration is complete:
|
||||
|
||||
1. **Deploy Convex functions**: Run `npx convex deploy` to push the updated backend files
|
||||
2. **Sync your content**: Run `npm run sync` for development or `npm run sync:prod` for production
|
||||
3. **Test locally**: Run `npm run dev` and verify your site name, footer, and metadata
|
||||
4. **Push to git**: Commit all changes and push to trigger a Netlify rebuild
|
||||
|
||||
## Existing content
|
||||
|
||||
The configuration script only updates site-level settings. It does not modify your markdown content in `content/blog/` or `content/pages/`. Your existing posts and pages remain unchanged.
|
||||
|
||||
If you want to clear the sample content, delete the markdown files in those directories before syncing.
|
||||
|
||||
## Summary
|
||||
|
||||
Two options after forking:
|
||||
|
||||
1. **Automated**: `cp fork-config.json.example fork-config.json`, edit JSON, run `npm run configure`
|
||||
2. **Manual**: Follow `FORK_CONFIG.md` step-by-step or paste the AI prompt into Claude/ChatGPT
|
||||
|
||||
Both approaches update the same 11 files. The automated option takes about 30 seconds. The manual option gives you more control over each change.
|
||||
|
||||
Fork it, configure it, ship it.
|
||||
@@ -6,7 +6,7 @@ slug: "markdown-with-code-examples"
|
||||
published: true
|
||||
tags: ["markdown", "tutorial", "code"]
|
||||
readTime: "5 min read"
|
||||
featured: true
|
||||
featured: false
|
||||
featuredOrder: 5
|
||||
image: "/images/markdown.png"
|
||||
---
|
||||
|
||||
@@ -1,103 +1,223 @@
|
||||
---
|
||||
title: "v1.7 to v1.10 - Mobile menu, scroll-to-top, and fork configuration"
|
||||
description: "New features for mobile navigation, scroll-to-top button, fork configuration documentation, sharing content with AI tools, and improved table styling."
|
||||
title: "v1.18.0 release: 12 versions of shipping"
|
||||
description: "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"
|
||||
slug: "raw-markdown-and-copy-improvements"
|
||||
published: true
|
||||
tags: ["features", "markdown", "updates", "mobile", "configuration"]
|
||||
readTime: "5 min read"
|
||||
tags: ["release", "features", "updates", "developer-tools"]
|
||||
readTime: "8 min read"
|
||||
featured: true
|
||||
featuredOrder: 1
|
||||
featuredOrder: 2
|
||||
image: "/images/v17.png"
|
||||
excerpt: "Mobile menu, scroll-to-top button, fork configuration, raw markdown files, and Generate Skill for AI agents."
|
||||
excerpt: "12 versions of new features: automated fork config, GitHub graph, write page, mobile menu, stats aggregates, and more."
|
||||
---
|
||||
|
||||
## Fork configuration (v1.10.0)
|
||||
## What shipped from v1.7 to v1.18
|
||||
|
||||
When you fork this project, update these files with your site information:
|
||||
This post covers 12 versions of updates to the markdown sync framework. From raw markdown files to automated fork configuration, here is everything that changed.
|
||||
|
||||
| File | What to update |
|
||||
| ----------------------------------- | ----------------------------------------------------------- |
|
||||
| `src/pages/Home.tsx` | Site name, title, intro, bio, featured config, logo gallery |
|
||||
| `convex/http.ts` | `SITE_URL`, `SITE_NAME` (API responses, sitemap) |
|
||||
| `convex/rss.ts` | `SITE_URL`, `SITE_TITLE`, `SITE_DESCRIPTION` (RSS feeds) |
|
||||
| `src/pages/Post.tsx` | `SITE_URL`, `SITE_NAME`, `DEFAULT_OG_IMAGE` (OG tags) |
|
||||
| `index.html` | Title, meta description, OG tags, JSON-LD |
|
||||
| `public/llms.txt` | Site name, URL, description |
|
||||
| `public/robots.txt` | Sitemap URL |
|
||||
| `public/openapi.yaml` | Server URL, site name in examples |
|
||||
| `public/.well-known/ai-plugin.json` | Site name, descriptions |
|
||||
## Automated fork configuration (v1.18.0)
|
||||
|
||||
These constants affect RSS feeds, API responses, sitemaps, and social sharing metadata.
|
||||
Fork setup now takes one command:
|
||||
|
||||
```bash
|
||||
cp fork-config.json.example fork-config.json
|
||||
# Edit fork-config.json with your site info
|
||||
npm run configure
|
||||
```
|
||||
|
||||
The configure script updates all 11 configuration files:
|
||||
|
||||
| File | What it updates |
|
||||
| ----------------------------------- | -------------------------------------- |
|
||||
| `src/config/siteConfig.ts` | Site name, bio, GitHub, features |
|
||||
| `src/pages/Home.tsx` | Intro paragraph, footer links |
|
||||
| `src/pages/Post.tsx` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/http.ts` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/rss.ts` | SITE_URL, SITE_TITLE, SITE_DESCRIPTION |
|
||||
| `index.html` | Meta tags, JSON-LD, page title |
|
||||
| `public/llms.txt` | Site info, GitHub link |
|
||||
| `public/robots.txt` | Sitemap URL |
|
||||
| `public/openapi.yaml` | Server URL, site name |
|
||||
| `public/.well-known/ai-plugin.json` | Plugin metadata |
|
||||
| `src/context/ThemeContext.tsx` | Default theme |
|
||||
|
||||
Two options for fork setup:
|
||||
|
||||
1. **Automated** (recommended): JSON config file + `npm run configure`
|
||||
2. **Manual**: Follow step-by-step instructions in `FORK_CONFIG.md`
|
||||
|
||||
## GitHub contributions graph (v1.17.0)
|
||||
|
||||
The homepage now displays a GitHub-style contribution graph. Configure it in siteConfig:
|
||||
|
||||
```typescript
|
||||
gitHubContributions: {
|
||||
enabled: true,
|
||||
username: "your-github-username",
|
||||
showYearNavigation: true,
|
||||
linkToProfile: true,
|
||||
title: "Contributions",
|
||||
}
|
||||
```
|
||||
|
||||
Features:
|
||||
|
||||
- Theme-aware colors (dark, light, tan, cloud each have unique palettes)
|
||||
- Year navigation with Phosphor CaretLeft/CaretRight icons
|
||||
- Click the graph to visit the GitHub profile
|
||||
- Uses public API (no GitHub token required)
|
||||
- Mobile responsive with scaled cells
|
||||
|
||||
## Write page (v1.13.0 to v1.16.0)
|
||||
|
||||
A markdown writing page now lives at `/write`. Not linked in navigation. Access it directly.
|
||||
|
||||
Three-column layout:
|
||||
|
||||
- **Left sidebar**: Home link, content type selector (Blog Post/Page), actions (Clear, Theme, Font)
|
||||
- **Center**: Full-height writing area with Copy All button
|
||||
- **Right sidebar**: Frontmatter reference with per-field copy buttons
|
||||
|
||||
Features across iterations:
|
||||
|
||||
- Font switcher toggles between Serif and Sans-serif
|
||||
- Theme toggle matches the rest of the app
|
||||
- localStorage persistence for content, type, and font preference
|
||||
- Word, line, and character counts in status bar
|
||||
- Warning banner about refresh losing content
|
||||
- Works with Grammarly and browser spellcheck
|
||||
- Mobile responsive with stacked layout
|
||||
|
||||
The write page does not connect to Convex. It stores content locally. Copy your markdown and paste it into a file in `content/blog/` or `content/pages/`, then run `npm run sync`.
|
||||
|
||||
## Stats aggregates (v1.11.0)
|
||||
|
||||
The stats page now uses O(log n) aggregate counts instead of O(n) table scans.
|
||||
|
||||
Before: Every stats query scanned the entire pageViews table.
|
||||
|
||||
After: Three TableAggregate instances provide pre-computed counts:
|
||||
|
||||
- `totalPageViews`: Global view count
|
||||
- `pageViewsByPath`: Per-page view counts
|
||||
- `uniqueVisitors`: Distinct session count
|
||||
|
||||
Run the backfill after deploying:
|
||||
|
||||
```bash
|
||||
npx convex run stats:backfillAggregates
|
||||
```
|
||||
|
||||
The backfill processes 500 records at a time to stay under the 16MB Convex memory limit. It schedules itself to continue until complete.
|
||||
|
||||
Stats queries now respond consistently fast regardless of how many page views exist.
|
||||
|
||||
## Dedicated blog page (v1.12.0)
|
||||
|
||||
A dedicated `/blog` page now exists. Configure it in siteConfig:
|
||||
|
||||
```typescript
|
||||
blogPage: {
|
||||
enabled: true, // Enable /blog route
|
||||
showInNav: true, // Show in navigation
|
||||
title: "Blog", // Page title
|
||||
order: 0, // Nav order (lower = first)
|
||||
},
|
||||
displayOnHomepage: true, // Also show posts on homepage
|
||||
```
|
||||
|
||||
Navigation combines the Blog link with page links and sorts by order. Set `order: 5` to place Blog after pages with order 0-4.
|
||||
|
||||
Centralized configuration now lives in `src/config/siteConfig.ts` instead of scattered across components.
|
||||
|
||||
## Fork configuration documentation (v1.10.0)
|
||||
|
||||
The docs, setup guide, and README now include a "Files to Update When Forking" section listing all 9 configuration files:
|
||||
|
||||
- Frontend: `siteConfig.ts`, `Home.tsx`, `Post.tsx`
|
||||
- Backend: `http.ts`, `rss.ts`
|
||||
- HTML: `index.html`
|
||||
- AI discovery: `llms.txt`, `robots.txt`, `openapi.yaml`, `ai-plugin.json`
|
||||
|
||||
## Scroll-to-top button (v1.9.0)
|
||||
|
||||
A scroll-to-top button now appears after scrolling 300px. Configure it in `src/components/Layout.tsx`:
|
||||
A scroll-to-top button appears after scrolling 300px. Configure it in `src/components/Layout.tsx`:
|
||||
|
||||
```typescript
|
||||
const scrollToTopConfig: Partial<ScrollToTopConfig> = {
|
||||
enabled: true, // Set to false to disable
|
||||
threshold: 300, // Show after scrolling 300px
|
||||
enabled: true, // Set false to disable
|
||||
threshold: 300, // Pixels before showing
|
||||
smooth: true, // Smooth scroll animation
|
||||
};
|
||||
```
|
||||
|
||||
The button uses the Phosphor ArrowUp icon and works with all four themes. It uses a passive scroll listener for performance and includes a fade-in animation.
|
||||
Uses Phosphor ArrowUp icon. Works with all four themes. Passive scroll listener for performance.
|
||||
|
||||
## Mobile menu (v1.8.0)
|
||||
|
||||
The site now includes a mobile menu with hamburger navigation for smaller screens. On mobile and tablet views, a hamburger icon appears in the top navigation. Tap it to open a slide-out drawer with all page navigation links.
|
||||
Hamburger navigation for mobile and tablet screens. Tap the icon to open a slide-out drawer with page links.
|
||||
|
||||
**Features:**
|
||||
Features:
|
||||
|
||||
- Smooth CSS transform animations
|
||||
- Keyboard accessible (press Escape to close)
|
||||
- Keyboard accessible (Escape to close)
|
||||
- Focus trap for screen reader support
|
||||
- Home link at the bottom of the drawer
|
||||
- Auto-closes when navigating to a new page
|
||||
- Auto-closes when navigating
|
||||
|
||||
The desktop navigation remains unchanged. The mobile menu only appears on screens below 1024px.
|
||||
Desktop navigation stays unchanged. Mobile menu only appears below 1024px.
|
||||
|
||||
## Static raw markdown files
|
||||
## Generate Skill (v1.8.0)
|
||||
|
||||
Every published post and page now gets a static `.md` file at `/raw/{slug}.md`. These files are generated automatically when you run `npm run sync`.
|
||||
The CopyPageDropdown now includes a Generate Skill option. Click to download the current post or page as an AI agent skill file.
|
||||
|
||||
**Example URLs:**
|
||||
The skill file includes:
|
||||
|
||||
- Metadata section with title, description, and tags
|
||||
- When to use section describing scenarios
|
||||
- Instructions section with full content
|
||||
|
||||
Downloads as `{slug}-skill.md`. Use these files to train AI agents or add context to workflows.
|
||||
|
||||
## Static raw markdown files (v1.7.0)
|
||||
|
||||
Every published post and page now gets a static `.md` file at `/raw/{slug}.md`. Generated during `npm run sync`.
|
||||
|
||||
Example URLs:
|
||||
|
||||
- `/raw/setup-guide.md`
|
||||
- `/raw/about.md`
|
||||
- `/raw/how-to-publish.md`
|
||||
|
||||
Each file includes a metadata header with type, date, reading time, and tags. The content matches exactly what you see on the page.
|
||||
Each file includes a metadata header with type, date, reading time, and tags.
|
||||
|
||||
**Use cases:**
|
||||
Use cases:
|
||||
|
||||
- Share raw markdown with AI agents
|
||||
- Link directly to source content for LLM ingestion
|
||||
- View the markdown source of any post
|
||||
|
||||
## View as Markdown in CopyPageDropdown
|
||||
## View as Markdown (v1.7.0)
|
||||
|
||||
The Copy Page dropdown now includes a "View as Markdown" option. Click it to open the raw `.md` file in a new tab.
|
||||
The Copy Page dropdown now includes "View as Markdown" to open the raw `.md` file in a new tab.
|
||||
|
||||
This joins the existing options:
|
||||
Other dropdown options:
|
||||
|
||||
- Copy page (copies formatted markdown to clipboard)
|
||||
- Copy page (formatted markdown to clipboard)
|
||||
- Open in ChatGPT
|
||||
- Open in Claude
|
||||
- Open in Perplexity (new)
|
||||
- Open in Perplexity
|
||||
|
||||
## Perplexity integration
|
||||
## Perplexity integration (v1.7.0)
|
||||
|
||||
Perplexity is now available as an AI service option. Click "Open in Perplexity" to send the full article content directly to Perplexity for research and analysis.
|
||||
Perplexity is now available as an AI service option. Click to send full article content to Perplexity for research and analysis.
|
||||
|
||||
Like the other AI options, if the URL gets too long, the content is copied to your clipboard and Perplexity opens in a new tab. Paste to continue.
|
||||
If the URL gets too long, content copies to clipboard and Perplexity opens in a new tab. Paste to continue.
|
||||
|
||||
## Featured images
|
||||
## Featured images (v1.7.0)
|
||||
|
||||
Posts and pages can now include a featured image that displays in the card view on the homepage.
|
||||
|
||||
Add to your frontmatter:
|
||||
Posts and pages can include a featured image that displays in card view:
|
||||
|
||||
```yaml
|
||||
image: "/images/my-thumbnail.png"
|
||||
@@ -105,11 +225,33 @@ featured: true
|
||||
featuredOrder: 1
|
||||
```
|
||||
|
||||
The image displays as a square thumbnail above the title in card view. Non-square images are automatically cropped to center. Recommended size: 400x400px minimum (800x800px for retina).
|
||||
The image displays as a square thumbnail above the title. Non-square images crop to center. Recommended: 400x400px minimum (800x800px for retina).
|
||||
|
||||
## Improved markdown table styling
|
||||
## Open Graph image fix (v1.12.1)
|
||||
|
||||
Tables now render with GitHub-style formatting across all four themes:
|
||||
Posts with `image` in frontmatter now display their specific OG image when shared. Posts without images fall back to `og-default.svg`. Pages now supported with `og:type` set to "website".
|
||||
|
||||
Relative image paths (like `/images/v17.png`) resolve to absolute URLs automatically.
|
||||
|
||||
## Centralized font sizes (v1.12.2)
|
||||
|
||||
All font sizes now use CSS variables in `global.css`:
|
||||
|
||||
```css
|
||||
:root {
|
||||
--font-size-xs: 12px;
|
||||
--font-size-sm: 13px;
|
||||
--font-size-base: 16px;
|
||||
--font-size-lg: 17px;
|
||||
/* ... */
|
||||
}
|
||||
```
|
||||
|
||||
Edit `:root` variables to customize font sizes across the entire site. Mobile responsive overrides at 768px breakpoint.
|
||||
|
||||
## Improved table styling (v1.7.0)
|
||||
|
||||
Tables render with GitHub-style formatting:
|
||||
|
||||
| Feature | Status |
|
||||
| ------- | ----------------------- |
|
||||
@@ -118,32 +260,31 @@ Tables now render with GitHub-style formatting across all four themes:
|
||||
| Hover | Row highlighting |
|
||||
| Themes | Dark, light, tan, cloud |
|
||||
|
||||
Tables adapt to each theme with proper alternating row colors and hover states.
|
||||
Alternating row colors and hover states adapt to each theme.
|
||||
|
||||
## Generate Skill
|
||||
## Quick reference: sync vs deploy
|
||||
|
||||
The CopyPageDropdown now includes a Generate Skill option. Click it to download the current post or page as an AI agent skill file.
|
||||
| Change | Command | Speed |
|
||||
| ----------------------- | -------------------------- | -------------- |
|
||||
| Blog posts | `npm run sync` | Instant |
|
||||
| Pages | `npm run sync` | Instant |
|
||||
| Featured items | `npm run sync` | Instant |
|
||||
| Import external URL | `npm run import` then sync | Instant |
|
||||
| siteConfig changes | Redeploy | Requires build |
|
||||
| Logo gallery config | Redeploy | Requires build |
|
||||
| React components/styles | Redeploy | Requires build |
|
||||
| Fork configuration | `npm run configure` | Instant |
|
||||
|
||||
The skill file includes:
|
||||
Markdown content syncs instantly via Convex. Source code changes require pushing to GitHub for Netlify to rebuild.
|
||||
|
||||
- Metadata section with title, description, and tags
|
||||
- When to use section describing scenarios for the skill
|
||||
- Instructions section with the full content
|
||||
## Upgrade path
|
||||
|
||||
The file downloads as `{slug}-skill.md`. Use these skill files to train AI agents or add context to your workflows.
|
||||
If upgrading from an earlier version:
|
||||
|
||||
## Summary
|
||||
1. Pull the latest code
|
||||
2. Run `npm install` for new dependencies
|
||||
3. Run `npx convex dev` to sync schema changes
|
||||
4. Run `npx convex run stats:backfillAggregates` if using stats
|
||||
5. Check `siteConfig.ts` for new configuration options
|
||||
|
||||
These updates improve navigation, configuration, and sharing with AI tools:
|
||||
|
||||
1. **Fork configuration** documentation for all 9 site files
|
||||
2. **Scroll-to-top button** with configurable threshold
|
||||
3. **Mobile menu** with slide-out drawer for smaller screens
|
||||
4. **Raw markdown files** at `/raw/{slug}.md` for direct access
|
||||
5. **View as Markdown** option in CopyPageDropdown
|
||||
6. **Perplexity** added alongside ChatGPT and Claude
|
||||
7. **Generate Skill** for AI agent training
|
||||
8. **Featured images** for visual card layouts
|
||||
9. **Better tables** with responsive styling
|
||||
|
||||
All features work across all four themes and are mobile responsive. Run `npm run sync` for development and `npm run sync:prod` for production to update your site with these changes.
|
||||
All features work across all four themes and are mobile responsive.
|
||||
|
||||
@@ -408,14 +408,58 @@ Both files are gitignored. Each developer creates their own local environment fi
|
||||
|
||||
## Customizing Your Framework
|
||||
|
||||
### Files to Update When Forking
|
||||
### Fork Configuration Options
|
||||
|
||||
When you fork this project, update these files with your site information:
|
||||
After forking, you have two options to configure your site:
|
||||
|
||||
#### Option 1: Automated (Recommended)
|
||||
|
||||
Run a single command to configure all files automatically:
|
||||
|
||||
```bash
|
||||
# Copy the example config
|
||||
cp fork-config.json.example fork-config.json
|
||||
|
||||
# Edit fork-config.json with your site information
|
||||
# Then apply all changes
|
||||
npm run configure
|
||||
```
|
||||
|
||||
The `fork-config.json` file includes:
|
||||
|
||||
```json
|
||||
{
|
||||
"siteName": "Your Site Name",
|
||||
"siteTitle": "Your Tagline",
|
||||
"siteDescription": "Your site description.",
|
||||
"siteUrl": "https://yoursite.netlify.app",
|
||||
"siteDomain": "yoursite.netlify.app",
|
||||
"githubUsername": "yourusername",
|
||||
"githubRepo": "your-repo-name",
|
||||
"contactEmail": "you@example.com",
|
||||
"creator": {
|
||||
"name": "Your Name",
|
||||
"twitter": "https://x.com/yourhandle",
|
||||
"linkedin": "https://www.linkedin.com/in/yourprofile/",
|
||||
"github": "https://github.com/yourusername"
|
||||
},
|
||||
"bio": "Your bio text here.",
|
||||
"theme": "tan"
|
||||
}
|
||||
```
|
||||
|
||||
This updates all 11 configuration files in one step. See `FORK_CONFIG.md` for the full JSON schema.
|
||||
|
||||
#### Option 2: Manual
|
||||
|
||||
Follow the step-by-step guide in `FORK_CONFIG.md` to update each file manually. The guide includes code snippets for each file and an AI agent prompt for assisted configuration.
|
||||
|
||||
### Files to Update When Forking
|
||||
|
||||
| File | What to update |
|
||||
| ----------------------------------- | --------------------------------------------------------------------------- |
|
||||
| `src/config/siteConfig.ts` | Site name, title, intro, bio, blog page, logo gallery, GitHub contributions |
|
||||
| `src/pages/Home.tsx` | Intro paragraph text (hardcoded JSX) |
|
||||
| `src/pages/Home.tsx` | Intro paragraph text, footer links |
|
||||
| `convex/http.ts` | `SITE_URL`, `SITE_NAME`, description strings (3 locations) |
|
||||
| `convex/rss.ts` | `SITE_URL`, `SITE_TITLE`, `SITE_DESCRIPTION` (RSS feeds) |
|
||||
| `src/pages/Post.tsx` | `SITE_URL`, `SITE_NAME`, `DEFAULT_OG_IMAGE` (OG tags) |
|
||||
@@ -424,6 +468,7 @@ When you fork this project, update these files with your site information:
|
||||
| `public/robots.txt` | Sitemap URL and header comment |
|
||||
| `public/openapi.yaml` | API title, server URL, site name in examples |
|
||||
| `public/.well-known/ai-plugin.json` | Site name, descriptions |
|
||||
| `src/context/ThemeContext.tsx` | Default theme |
|
||||
|
||||
### Site title and description metadata
|
||||
|
||||
|
||||
@@ -73,4 +73,16 @@ It's a hybrid: developer workflow for publishing + real-time delivery like a dyn
|
||||
- Projects where AI agents generate content programmatically
|
||||
- Sites that need real-time updates without full rebuilds
|
||||
|
||||
## Fork configuration
|
||||
|
||||
After forking, configure your site with a single command:
|
||||
|
||||
```bash
|
||||
cp fork-config.json.example fork-config.json
|
||||
# Edit fork-config.json
|
||||
npm run configure
|
||||
```
|
||||
|
||||
Or follow the manual guide in `FORK_CONFIG.md`. Both options update all 11 configuration files with your site information.
|
||||
|
||||
Fork it, customize it, ship it.
|
||||
|
||||
@@ -7,6 +7,40 @@ order: 5
|
||||
|
||||
All notable changes to this project.
|
||||
|
||||
## v1.18.0
|
||||
|
||||
Released December 20, 2025
|
||||
|
||||
**Automated fork configuration**
|
||||
|
||||
- New `npm run configure` command for one-step fork setup
|
||||
- Copy `fork-config.json.example` to `fork-config.json`
|
||||
- Edit the JSON file with your site information
|
||||
- Run `npm run configure` to apply all changes automatically
|
||||
|
||||
Two options for fork setup:
|
||||
|
||||
1. **Automated** (recommended): JSON config file + `npm run configure`
|
||||
2. **Manual**: Follow step-by-step instructions in `FORK_CONFIG.md`
|
||||
|
||||
The configure script updates all 11 configuration files:
|
||||
|
||||
| File | What it updates |
|
||||
| ----------------------------------- | ---------------------------------------- |
|
||||
| `src/config/siteConfig.ts` | Site name, bio, GitHub, features |
|
||||
| `src/pages/Home.tsx` | Intro paragraph, footer links |
|
||||
| `src/pages/Post.tsx` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/http.ts` | SITE_URL, SITE_NAME constants |
|
||||
| `convex/rss.ts` | SITE_URL, SITE_TITLE, SITE_DESCRIPTION |
|
||||
| `index.html` | Meta tags, JSON-LD, page title |
|
||||
| `public/llms.txt` | Site info, GitHub link |
|
||||
| `public/robots.txt` | Sitemap URL |
|
||||
| `public/openapi.yaml` | Server URL, site name |
|
||||
| `public/.well-known/ai-plugin.json` | Plugin metadata |
|
||||
| `src/context/ThemeContext.tsx` | Default theme |
|
||||
|
||||
New files: `FORK_CONFIG.md`, `fork-config.json.example`, `scripts/configure-fork.ts`
|
||||
|
||||
## v1.17.0
|
||||
|
||||
Released December 20, 2025
|
||||
|
||||
@@ -149,22 +149,39 @@ npm run sync:prod
|
||||
|
||||
## Configuration
|
||||
|
||||
### Site and backend settings
|
||||
### Fork configuration
|
||||
|
||||
When you fork this project, update these files with your site information:
|
||||
After forking, you have two options to configure your site:
|
||||
|
||||
| File | What to update |
|
||||
|------|----------------|
|
||||
| `src/config/siteConfig.ts` | Site name, title, intro, bio, blog page, logo gallery, GitHub contributions |
|
||||
| `src/pages/Home.tsx` | Intro paragraph text (hardcoded JSX) |
|
||||
| `convex/http.ts` | `SITE_URL`, `SITE_NAME`, description strings (3 locations) |
|
||||
| `convex/rss.ts` | `SITE_URL`, `SITE_TITLE`, `SITE_DESCRIPTION` (RSS feeds) |
|
||||
| `src/pages/Post.tsx` | `SITE_URL`, `SITE_NAME`, `DEFAULT_OG_IMAGE` (OG tags) |
|
||||
| `index.html` | Title, meta description, OG tags, JSON-LD |
|
||||
| `public/llms.txt` | Site name, URL, description, topics |
|
||||
| `public/robots.txt` | Sitemap URL and header comment |
|
||||
| `public/openapi.yaml` | API title, server URL, site name in examples |
|
||||
| `public/.well-known/ai-plugin.json` | Site name, descriptions |
|
||||
**Option 1: Automated (Recommended)**
|
||||
|
||||
```bash
|
||||
cp fork-config.json.example fork-config.json
|
||||
# Edit fork-config.json with your site information
|
||||
npm run configure
|
||||
```
|
||||
|
||||
This updates all 11 configuration files in one command. See `FORK_CONFIG.md` for the full JSON schema and options.
|
||||
|
||||
**Option 2: Manual**
|
||||
|
||||
Follow the step-by-step guide in `FORK_CONFIG.md` to update each file manually.
|
||||
|
||||
### Files updated by configuration
|
||||
|
||||
| File | What to update |
|
||||
| ----------------------------------- | --------------------------------------------------------------------------- |
|
||||
| `src/config/siteConfig.ts` | Site name, title, intro, bio, blog page, logo gallery, GitHub contributions |
|
||||
| `src/pages/Home.tsx` | Intro paragraph text, footer links |
|
||||
| `convex/http.ts` | `SITE_URL`, `SITE_NAME`, description strings (3 locations) |
|
||||
| `convex/rss.ts` | `SITE_URL`, `SITE_TITLE`, `SITE_DESCRIPTION` (RSS feeds) |
|
||||
| `src/pages/Post.tsx` | `SITE_URL`, `SITE_NAME`, `DEFAULT_OG_IMAGE` (OG tags) |
|
||||
| `index.html` | Title, meta description, OG tags, JSON-LD |
|
||||
| `public/llms.txt` | Site name, URL, description, topics |
|
||||
| `public/robots.txt` | Sitemap URL and header comment |
|
||||
| `public/openapi.yaml` | API title, server URL, site name in examples |
|
||||
| `public/.well-known/ai-plugin.json` | Site name, descriptions |
|
||||
| `src/context/ThemeContext.tsx` | Default theme |
|
||||
|
||||
### Site title and description metadata
|
||||
|
||||
|
||||
Reference in New Issue
Block a user