Commit 31a2a79
authored
feat: add blog infrastructure (#17)
* feat: add blog infrastructure (pages, components, sitemap, nav link)
* feat: add blog SEO (JSON-LD, RSS feed, dynamic OG images, enriched metadata)
* remove blog infrastructure in preparation for MDX rewrite
* add next-mdx-remote, shiki, gray-matter dependencies
* add blog helpers library with MDX compilation and Shiki highlighting
* add MDX components map for blog
* add blog listing page
* add blog post page with MDX rendering and Shiki highlighting
* add dynamic OG image generation for blog posts
* add RSS feed for blog
* wire blog into sitemap, layout RSS link, and header nav
* remove unused react-markdown dependency
* add blog smoke tests (vitest RSS feed, Cypress E2E)
* add llms.txt and llms-full.txt for LLM discoverability
* add 10 OG image variants with preview page at /blog/og-preview
* add 5 more OG variants (v11-v15) with exact SemiAnalysis brand palette
* add 5 fully branded OG variants (v16-v20) matching GSA presentation slide style
* add 5 thumbnail-optimized OG variants (v21-v25) with huge text and minimal details
* render OG preview at actual platform sizes (Twitter, Slack, iMessage)
* fix OG preview images rendering at correct pixel sizes
* fix OG preview layout: full size on own row, platform sizes below
* fix OG preview overflow breaking site layout
* fix OG preview: use lazy loading, inline width, overflow-x-auto for thumbnails
* OG variants: bump text sizes for thumbnail legibility, replace SemiAnalysis text with logo
* triple logo height in all OG variants for legibility
* OG variants: move logo to top-right, increase title sizes
* OG variants: bump secondary text to 36-42px, fix contrast for WCAG AA at thumbnail sizes
* OG overhaul: keep v11/v12/v13/v15, consolidate logos to brand/, rename excerpt to subtitle, remove author field, WCAG text sizes and contrast
* blog OG: consolidate to single circuit-sidebar design with extracted tiles
* remove OG preview page and API route
* move pattern SVGs to brand/
* blog list: match site layout with Card wrappers and full-width container
* blog: match site-wide Card/container layout, use 265 WPM reading time
* blog post: add semantic HTML, subtitle, and inline tags
* rename "Blog" display text to "Articles" across site
* fix AUTHOR_HANDLE to correct Twitter handle @semianalysis_
* mock blog posts in tests instead of using real content
* add slugify to sanitize blog slugs
* fix E2E test heading and replace hardcoded author strings with AUTHOR_NAME
* fix heading hierarchy: use h2 for blog page titles to match media/quotes
* add active nav link highlighting based on current pathname
* add blog analytics tracking for post clicks and back navigation
* add share buttons to blog posts and content links to footer
* remove unused coverImage frontmatter field
* add next/previous post navigation to blog posts
* add reading progress bar to blog posts
* add table of contents with heading anchors to blog posts
* add tag filtering to blog list and clickable tags on posts
* use article title as X share text on blog posts
* use brand color for active nav links (blue/gold per theme)
* fix tags: plain spans on post page, back inside card on list page
* include h1 headings in table of contents
* strip fenced code blocks before extracting TOC headings
* use replaceAll for code block stripping
* remove Content section from footer
* reorder llms.txt: site info, links, then articles
* ToC: sticky sidebar at title level on ultrawides, active highlight, grayed-out passed sections
* ToC: JS-based sidebar positioning, inline fallback when not enough space
* fix ToC sidebar: defer position calculation until after hydration
* fix data-blog-section attribute rendering
* always show TOC expanded, remove collapsible details
* align sidebar TOC with title height, follow scroll via ref
* add lorem ipsum sections to test post for scroll testing
* replace test post with full lorem ipsum content
* double test post length with deeper h3 nesting throughout
* add two more lorem ipsum test posts, update existing title and subtitle
* activate last TOC heading when scrolled to bottom of page
* add twitter:site, article:modified_time, and content:encoded to RSS feed
* use brand color for progress bar, fix AUTHOR_HANDLE casing
* remove content:encoded from RSS feed to avoid raw MDX/HTML in XML
* add 32px scroll offset when clicking TOC headings
* add Shiki dual-theme CSS for syntax highlighting in light/dark mode
* re-add collapsible TOC on mobile, expanded on desktop
* add lorem ipsum comments to all code blocks
* collapsible TOC on non-ultrawide, default closed with hint text
* fix progress bar: use rect.top for accurate scroll tracking, handle short articles
* use brand color on blog post title hover
* add Figure component and placeholder images with lorem ipsum captions
* fix TOC sidebar initial position on page load
* increase footer top padding for breathing room
* add InferenceX v2 article crosspost from Substack with 90 images
* limit figure images to 66% width on desktop, full width on mobile
* add paywall notice and Substack subscribe CTA at end of v2 article
* add blurred paywall teaser and subscribe CTA at end of v2 article
* add Blur MDX component for paywall teaser section
* rename v2 article slug to match title
* add InferenceMAX v1 open source inference benchmarking article
* remove auto-inserted curly quotes from blog blockquotes
* remove placeholder posts, tweak blog article styling and add copyright footer
* move copyright footer inside article prose
* deduplicate heading IDs using parent section prefix
* add hash navigation for blog article headings
* add copy-link icon on heading hover for blog articles
* polish heading link: show "Link copied" with fade-out, no underline
* add remark-gfm for strikethrough and GFM support in blog
* fix escaped asterisks in multiplication expression
* add width/height, lazy loading and async decoding to blog figure images
* add lazy loading to blog images, fix inline code wrapping on mobile
* eagerly load first blog image, preconnect to Substack CDN
* guard against null pathname in header isActive check
* fix gpu-specs e2e tests to use updated logo watermark path
* update blog e2e test to use real article slug after placeholder removal
* auto-scroll sidebar TOC to keep active heading visible
* add track() and error handling to heading link, add extractHeadings tests
* add getAdjacentPosts tests, use node: protocol for fs/path imports
* docs: add blog infrastructure documentation
* add frontmatter and llms to vscode spellcheck dictionary1 parent 85755bb commit 31a2a79
57 files changed
Lines changed: 5003 additions & 104 deletions
File tree
- .vscode
- docs
- packages
- app
- content/blog
- cypress/e2e
- public
- brand
- og-tiles
- src
- app
- blog
- [slug]
- feed.xml
- llms-full.txt
- llms.txt
- components
- blog
- calculator
- gpu-specs
- header
- lib
- d3-chart
- constants/src
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| |||
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| 42 | + | |
41 | 43 | | |
42 | 44 | | |
43 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
| 40 | + | |
39 | 41 | | |
40 | | - | |
| 42 | + | |
41 | 43 | | |
42 | | - | |
43 | | - | |
| 44 | + | |
| 45 | + | |
44 | 46 | | |
45 | 47 | | |
46 | 48 | | |
| |||
66 | 68 | | |
67 | 69 | | |
68 | 70 | | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
69 | 80 | | |
70 | 81 | | |
71 | 82 | | |
| |||
87 | 98 | | |
88 | 99 | | |
89 | 100 | | |
90 | | - | |
| 101 | + | |
91 | 102 | | |
92 | 103 | | |
93 | 104 | | |
| |||
118 | 129 | | |
119 | 130 | | |
120 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
121 | 151 | | |
122 | 152 | | |
123 | 153 | | |
| |||
144 | 174 | | |
145 | 175 | | |
146 | 176 | | |
| 177 | + | |
147 | 178 | | |
148 | 179 | | |
149 | 180 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
0 commit comments