Commit Graph

109 Commits

Author SHA1 Message Date
Wayne Sutton
3b9f140fe1 updates: readme links update to live site 2025-12-23 01:06:46 -08:00
Wayne Sutton
52016b974f updated readme with docs links 2025-12-23 01:02:23 -08:00
Wayne Sutton
0342539aac feat: add sidebar layout support for blog posts
- Add layout field to posts schema and frontmatter
- Enable docs-style sidebar layout for posts (previously pages only)
- Update Post.tsx to handle sidebar for both posts and pages
- Add layout field to Write.tsx frontmatter reference
- Update documentation in docs.md, setup-guide.md, how-to-publish.md
- Add documentation links to README.md
2025-12-23 00:57:21 -08:00
Wayne Sutton
edb7fc6723 feat: blog view toggle, page sidebar layout, and collapsible markdown
- 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
2025-12-23 00:21:57 -08:00
Wayne Sutton
d47062bb32 fix: use correct excludedPath syntax for Netlify edge functions 2025-12-22 02:04:56 -08:00
Wayne Sutton
1798be1047 fix: use correct excluded_paths syntax for Netlify edge functions 2025-12-22 01:58:11 -08:00
Wayne Sutton
e9ff238abf fix: exclude raw files from edge function so AI crawlers can access markdown 2025-12-22 01:35:38 -08:00
Wayne Sutton
94ba8fe184 fix: SEO/AEO/GEO improvements for AI crawlers and search engines 2025-12-22 00:07:24 -08:00
Wayne Sutton
d623aed598 updates: site url to markdown.fast, png og image and site name 2025-12-21 22:24:12 -08:00
Wayne Sutton
5a7824b2b8 fixed: home link strong css, added more markdown examples 2025-12-21 18:47:17 -08:00
Wayne Sutton
f598c3e903 added vistor map gif to blog post 2025-12-21 16:35:40 -08:00
Wayne Sutton
a2bef06315 feat(stats): add subtitle explaining visitor map count difference 2025-12-21 16:19:49 -08:00
Wayne Sutton
4a912fd345 docs: add visitor map configuration to README and update docs.md
- Added visitor map section to README.md after GitHub Contributions Graph
- Updated visitor map description in content/pages/docs.md with privacy details
- Documents configuration options in src/config/siteConfig.ts
- Explains Netlify geo detection and theme-aware colors
2025-12-21 15:58:43 -08:00
Wayne Sutton
1e67e492c8 fix: improve AI service prompts with load verification 2025-12-21 14:55:15 -08:00
Wayne Sutton
dd934390cc feat: raw markdown URLs, author display, GitHub Stars, and frontmatter docs
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
2025-12-21 13:59:50 -08:00
Wayne Sutton
29691ee655 style(stats): add modern stats card CSS and wider layout
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.
2025-12-21 00:08:44 -08:00
Wayne Sutton
53803e5263 style(stats): remove highlighted accent from Blog Posts card
Remove the teal highlight styling from the Blog Posts card on the Stats
page so all stat cards have uniform appearance. This removes the
highlighted property and associated conditional CSS classes.
2025-12-21 00:03:46 -08:00
Wayne Sutton
569244919d fix: move window.open before await to avoid popup blocker
When content exceeds URL length limit, the async clipboard write
was blocking the window.open call. Browsers require window.open
to happen synchronously within user gesture handlers.
2025-12-20 23:29:32 -08:00
Wayne Sutton
953851f75d fix: update Write page warning to reflect localStorage behavior 2025-12-20 23:16:54 -08:00
Wayne Sutton
662c28057c updated fork-confg post image 2025-12-20 23:12:40 -08:00
Wayne Sutton
5b356ff1a8 updated logo-marquee-image size 2025-12-20 22:55:11 -08:00
Wayne Sutton
db3343f7c0 updated font size and bolded text on homepage 2025-12-20 22:46:32 -08:00
Wayne Sutton
4ea0dd82ef Enhance homepage intro by wrapping text in a strong tag for better emphasis 2025-12-20 22:46:32 -08:00
Wayne Sutton
f14d6b6920 Add MIT License to the project 2025-12-20 22:27:20 -08:00
Wayne Sutton
04d08dbada 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
2025-12-20 22:15:33 -08:00
Wayne Sutton
e10e1098e9 updated footer credits 2025-12-20 21:19:48 -08:00
Wayne Sutton
f1f8c2417a fix: logo path url location for homepage 2025-12-20 20:56:07 -08:00
Wayne Sutton
66a2c4f4d2 feat: add GitHub contributions graph with theme-aware colors
- 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
2025-12-20 20:46:34 -08:00
Wayne Sutton
9bdfe10d61 feat: add /write page with three-column layout, font switcher, frontmatter reference, and localStorage persistence 2025-12-20 18:58:19 -08:00
Wayne Sutton
4b187cff53 fix: use frontmatter image for OG meta instead of default 2025-12-20 16:34:48 -08:00
Wayne Sutton
98a43b86a2 feat: implement chunked backfilling for aggregate component
- Add backfillAggregatesChunk mutation that processes 500 records at a time
- Uses pagination and ctx.scheduler.runAfter to chain batch processing
- Prevents Convex 16MB memory limit issues with large datasets
- Progress visible in Convex dashboard logs
- Track seen session IDs across chunks for unique visitor counting
- Update howstatsworks.md with chunked backfilling documentation
- Add v1.11.1 changelog entries
2025-12-20 14:59:05 -08:00
Wayne Sutton
0057194701 fix: use direct counting for stats until aggregates are backfilled
The aggregate components only contained new page views (after installation),
not the ~6000+ historical views. Changed getStats to use direct counting
from pageViews table to ensure all historical data is displayed correctly.

This is a temporary fix until we implement chunked backfilling to handle
the large dataset without exceeding memory limits.
2025-12-20 14:54:11 -08:00
Wayne Sutton
d562e1ede8 docs: add v1.11.0 entry to changelog page for aggregate component 2025-12-20 14:41:55 -08:00
Wayne Sutton
8d28e36458 feat(stats): switch to aggregate component for O(log n) counts
- Add @convex-dev/aggregate package for efficient aggregation
- Update convex.config.ts with pageViewsByPath, totalPageViews, uniqueVisitors aggregates
- Update recordPageView to insert into aggregate components
- Update getStats to use aggregate counts instead of O(n) table scans
- Add backfillAggregates internal mutation for existing data
- Update prds/howstatsworks.md with old vs new comparison
- Update changelog.md with v1.11.0 entry
- Update files.md with aggregate component info
2025-12-20 14:39:53 -08:00
Wayne Sutton
ae3d69c7b0 feat(copy-dropdown): update skill export to Anthropic Agent Skills format
- Change download filename from {slug}-skill.md to SKILL.md
- Add YAML frontmatter with name and description fields
- Generate compliant skill name from slug (lowercase, hyphens, max 64 chars)
- Build description with "when to use" triggers (max 1024 chars)
- Structure content with ## Instructions and ## Examples sections
- Update UI text to "Download as SKILL.md" with "Anthropic Agent Skills format"
2025-12-20 12:24:07 -08:00
Wayne Sutton
4ae8579f48 docs: update site description across 9 files and add metadata table to setup guide 2025-12-20 11:33:14 -08:00
Wayne Sutton
997b9cad21 docs: update blog post and TASK.md with v1.9.0 scroll-to-top and v1.10.0 fork configuration
Updated:
- content/blog/raw-markdown-and-copy-improvements.md
  - Changed title from 'v1.7 and v1.8' to 'v1.7 to v1.10'
  - Added Fork configuration section (v1.10.0) with 9-file table
  - Added Scroll-to-top section (v1.9.0) with configuration options
  - Updated summary to include all features from v1.7 to v1.10
  - Fixed image path to /images/v17.png
  - Updated sync command guidance for dev vs prod
- TASK.md
  - Added new To Do items for future features
  - Removed duplicate Future Enhancements section
- content/pages/docs.md
  - Added Mobile menu section
  - Added Copy Page dropdown table with all options
  - Added Markdown tables section
- content/pages/about.md
  - Updated Features list with new v1.8.0 features
- content/blog/setup-guide.md
  - Added image field to pages schema
  - Updated Project structure with new directories
  - Added /raw/{slug}.md to API endpoints
  - Added Mobile Navigation and Copy Page Dropdown sections
  - Added featured image documentation with ordering details

Documentation now covers all features from v1.7.0 through v1.10.0.
2025-12-20 11:05:38 -08:00
Wayne Sutton
d3d9c8055d docs: update TASK.md and changelog with AGENTS.md entry
- Update TASK.md to v1.6.1 with new completed items
- Add AGENTS.md entry to changelog.md v1.6.1
- Add AGENTS.md entry to changelog-page.md v1.6.1
- Added completed tasks: Firecrawl import, /api/export, AI plugin, OpenAPI spec
2025-12-18 12:47:07 -08:00
Wayne Sutton
87e02d00dc feat: add featured section, logo gallery, Firecrawl import, and API export
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
2025-12-18 12:28:25 -08:00
Wayne Sutton
e5b22487ca feat(search): add real-time full text search with Command+K modal using Convex search indexes and Phosphor Icons 2025-12-17 22:02:52 -08:00
Wayne Sutton
97081dc82d fix(stats): resolve write conflicts in activeSessions table
- Add 10-second dedup window to heartbeat mutation for idempotency
- Add frontend debouncing (5s) with refs to prevent duplicate calls
- Track pending heartbeat state to block overlapping async calls
- Early return when session already updated with same path

Backend (convex/stats.ts):
- Add HEARTBEAT_DEDUP_MS constant (10 seconds)
- Check if session was recently updated before patching

Frontend (src/hooks/usePageTracking.ts):
- Add isHeartbeatPending, lastHeartbeatTime, lastHeartbeatPath refs
- Wrap sendHeartbeat in useCallback with debounce logic
- Import useCallback from React

Fixes write conflict retries shown in Convex dashboard for stats:heartbeat
2025-12-15 12:52:34 -08:00
Wayne Sutton
b280cb4605 docs: add npm run sync:prod notes for production
Clarify when to use development vs production sync commands
in setup-guide, about-this-blog, and markdown-with-code-examples
2025-12-15 09:25:42 -08:00
Wayne Sutton
6c10829b1c feat: add real-time stats page with live visitor tracking and page view analytics 2025-12-14 23:07:11 -08:00
Wayne Sutton
ffef8d6532 readme: updated with npm run sync:prod commands 2025-12-14 21:53:00 -08:00
Wayne Sutton
c492b338b4 fix: require VITE_CONVEX_URL env var for edge functions and clarify publishing workflow
- Add VITE_CONVEX_URL requirement to Netlify env vars for edge function runtime
- Improve error messages in edge functions when Convex URL is missing
- Add "How publishing works" explanation to README, setup guide, and docs
- Update deployment instructions across all documentation
2025-12-14 21:42:09 -08:00
Wayne Sutton
078fbe6698 fix: add edge functions for dynamic RSS, sitemap, and API proxying to Convex HTTP endpoints 2025-12-14 17:00:46 -08:00
Wayne Sutton
c6c12ecd58 fix: update OG image meta tags and rename to Markdown Site 2025-12-14 14:51:22 -08:00
Wayne Sutton
e701737090 refactor: remove Cursor and VS Code options from CopyPageDropdown 2025-12-14 13:16:29 -08:00
Wayne Sutton
128763387b feat: add CopyPageDropdown to static pages for LLM sharing 2025-12-14 12:57:08 -08:00
Wayne Sutton
9fa49cffbb docs: add Netlify deployment troubleshooting guide 2025-12-14 12:30:05 -08:00