Skip to content

feat(site): migrate search from Pagefind to Algolia DocSearch v4#941

Draft
decepulis wants to merge 1 commit intomainfrom
feat/algolia
Draft

feat(site): migrate search from Pagefind to Algolia DocSearch v4#941
decepulis wants to merge 1 commit intomainfrom
feat/algolia

Conversation

@decepulis
Copy link
Collaborator

Summary

  • Replaces Pagefind (build-time static search) with Algolia DocSearch v4
  • Two search indices: videojs_docs (relevance-ranked, framework-filtered) and videojs_blog (recency-ranked)
  • Ask AI support via videojs_docs-markdown index
  • Full crawler configuration documented in algolia-crawler-config.md

What's included

  • Remove Pagefind integration, dependencies, and data-pagefind-* attributes
  • Add @docsearch/react@4 with indices and askAi props
  • New data-search-content / data-search-ignore attributes (crawler config supports both old and new for backward compat)
  • DocSearch modal themed to match site design (light + dark)
  • search.config.ts for Algolia credentials and index names
  • Updated CLAUDE.md and README.md

Before merging

  • Replace PLACEHOLDER_ASSISTANT_ID in search.config.ts after creating the Ask AI assistant
  • Run full crawl from the Algolia Dashboard
  • After deploy, simplify crawler selectors to remove data-pagefind-* fallbacks

Test plan

  • pnpm -F site build passes
  • No pagefind references remain in site/ source
  • data-llms-* attributes unaffected
  • Crawler URL tester: docs action produces records with correct hierarchy + facets
  • Crawler URL tester: blog action produces records with date field for recency
  • Crawler URL tester: markdown action produces records for Ask AI
  • Verify DocSearch button appears in navbar (after deploy)
  • Verify Cmd+K opens search modal
  • Verify dark mode theming

Closes #938

🤖 Generated with Claude Code

Replace Pagefind (build-time static search) with Algolia DocSearch v4
for two-index search (docs ranked by relevance, blog by recency),
framework-aware filtering, and Ask AI support.

- Remove Pagefind integration and dependencies
- Add @docsearch/react@4 with indices and askAi props
- Replace data-pagefind-* attributes with data-search-* equivalents
- Theme DocSearch modal to match site design (light + dark)
- Add search.config.ts for Algolia credentials and index names
- Add algolia-crawler-config.md with full Dashboard setup guide
- Update CLAUDE.md and README.md documentation

Closes #938

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Mar 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
v10-sandbox Ready Ready Preview, Comment Mar 13, 2026 5:02pm

Request Review

@netlify
Copy link

netlify bot commented Mar 13, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 127b7a9
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/69b4432414fbc80008a231fa
😎 Deploy Preview https://deploy-preview-941--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Contributor

📦 Bundle Size Report

🎨 @videojs/html

(no changes)

Presets (7)
Entry Size
/video (default) 21.97 kB
/video (default + hls) 152.28 kB
/video (minimal) 21.79 kB
/video (minimal + hls) 152.17 kB
/audio (default) 20.65 kB
/audio (minimal) 20.64 kB
/background 6.47 kB
Media (4)
Entry Size
/media/background-video 617 B
/media/container 1.91 kB
/media/hls-video 131.23 kB
/media/simple-hls-video 11.89 kB
Players (3)
Entry Size
/video/player 6.33 kB
/audio/player 6.32 kB
/background/player 6.31 kB
Skins (16)
Entry Type Size
/video/minimal-skin.css css 2.65 kB
/video/skin.css css 2.68 kB
/video/minimal-skin js 21.21 kB
/video/minimal-skin.tailwind js 21.38 kB
/video/skin js 21.37 kB
/video/skin.tailwind js 21.63 kB
/audio/minimal-skin.css css 2.17 kB
/audio/skin.css css 2.19 kB
/audio/minimal-skin js 20.10 kB
/audio/minimal-skin.tailwind js 20.04 kB
/audio/skin js 20.15 kB
/audio/skin.tailwind js 20.28 kB
/background/skin.css css 124 B
/background/skin js 999 B
/base.css css 205 B
/shared.css css 35 B
UI Components (21)
Entry Size
/ui/alert-dialog 2.08 kB
/ui/alert-dialog-close 1.29 kB
/ui/alert-dialog-description 1.53 kB
/ui/alert-dialog-title 1.52 kB
/ui/buffering-indicator 1.82 kB
/ui/captions-button 1.79 kB
/ui/controls 1.79 kB
/ui/fullscreen-button 1.80 kB
/ui/mute-button 1.77 kB
/ui/pip-button 1.78 kB
/ui/play-button 1.76 kB
/ui/playback-rate-button 1.83 kB
/ui/popover 3.16 kB
/ui/poster 1.66 kB
/ui/seek-button 1.81 kB
/ui/slider 2.00 kB
/ui/thumbnail 2.10 kB
/ui/time 1.66 kB
/ui/time-slider 2.94 kB
/ui/tooltip 2.42 kB
/ui/volume-slider 2.17 kB

Sizes are marginal over the root entry point.

⚛️ @videojs/react

(no changes)

Presets (7)
Entry Size
/video (default) 16.93 kB
/video (default + hls) 147.62 kB
/video (minimal) 16.89 kB
/video (minimal + hls) 147.78 kB
/audio (default) 14.60 kB
/audio (minimal) 14.63 kB
/background 3.19 kB
Media (3)
Entry Size
/media/background-video 539 B
/media/hls-video 131.52 kB
/media/simple-hls-video 12.28 kB
Skins (14)
Entry Type Size
/video/minimal-skin.css css 2.64 kB
/video/skin.css css 2.68 kB
/video/minimal-skin js 16.78 kB
/video/minimal-skin.tailwind js 19.42 kB
/video/skin js 16.80 kB
/video/skin.tailwind js 19.51 kB
/audio/minimal-skin.css css 2.16 kB
/audio/skin.css css 2.18 kB
/audio/minimal-skin js 14.53 kB
/audio/minimal-skin.tailwind js 16.39 kB
/audio/skin js 14.48 kB
/audio/skin.tailwind js 16.58 kB
/background/skin.css css 90 B
/background/skin js 272 B
UI Components (17)
Entry Size
/ui/alert-dialog 2.72 kB
/ui/buffering-indicator 2.19 kB
/ui/captions-button 2.24 kB
/ui/controls 2.19 kB
/ui/fullscreen-button 2.23 kB
/ui/mute-button 2.25 kB
/ui/pip-button 2.23 kB
/ui/play-button 2.24 kB
/ui/playback-rate-button 2.27 kB
/ui/popover 3.08 kB
/ui/poster 2.02 kB
/ui/seek-button 2.25 kB
/ui/slider 3.08 kB
/ui/time 2.32 kB
/ui/time-slider 2.77 kB
/ui/tooltip 3.27 kB
/ui/volume-slider 2.72 kB

Sizes are marginal over the root entry point.

🧩 @videojs/core

(no changes)

Entries (5)
Entry Size
. 4.78 kB
/dom 8.07 kB
/dom/media/custom-media-element 1.76 kB
/dom/media/hls 131.14 kB
/dom/media/simple-hls 11.85 kB

🏷️ @videojs/element

(no changes)

Entries (2)
Entry Size
. 999 B
/context 936 B

📦 @videojs/store

(no changes)

Entries (3)
Entry Size
. 1.32 kB
/html 700 B
/react 360 B

🔧 @videojs/utils

(no changes)

Entries (10)
Entry Size
/array 104 B
/dom 1003 B
/events 227 B
/function 261 B
/object 119 B
/predicate 265 B
/string 148 B
/style 190 B
/time 478 B
/number 158 B

📦 @videojs/spf

(no changes)

Entries (3)
Entry Size
. 40 B
/dom 10.04 kB
/playback-engine 9.95 kB

ℹ️ How to interpret

All sizes are standalone totals (minified + brotli).

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate site search from Pagefind to Algolia DocSearch v4

1 participant