Phase 4: Built-in Plugins
Core plugins that ship with the template
Goal
Implement the essential plugins that most directory websites need. Each plugin is an independent package that can be enabled/disabled.
Tasks
4.1 Plugin: @ever-works/plugin-search
- Pagefind integration for post-build index generation
- Build hook to run Pagefind after Astro build
- Configuration: bundle path, index fields, language
4.2 Plugin: @ever-works/plugin-filters
-
filterItems()utility with category + tag + search filtering - URL parameter synchronization (parse/serialize)
- Configuration: which filters to show, param names, URL sync toggle
4.3 Plugin: @ever-works/plugin-pagination
-
paginate<T>()utility with full metadata (hasPrev/hasNext, totalPages, etc.) -
generatePagePaths()for AstrogetStaticPaths - Configuration: items per page, max pages
4.4 Plugin: @ever-works/plugin-seo
-
generateMetaTags()— standard HTML, Open Graph, Twitter Cards -
generateJsonLd()— Schema.org structured data (WebSite, ItemList, Product) - Configuration: title template, default image, Twitter handle, locale
4.5 Plugin: @ever-works/plugin-sitemap
- Wraps Astro's built-in
@astrojs/sitemapintegration - Configuration: changefreq, priority, exclude patterns
4.6 Plugin: @ever-works/plugin-sort
-
sortItems()utility — name (locale-aware), date, featured-first -
onDataLoadedhook applies default sort to items - Configuration: default sort field, direction, available options
4.7 Web App Integration
-
plugins.config.ts— registers all 6 plugins -
content.ts— integrates PluginRunner pipeline -
BaseLayout.astro— uses SEO meta tags - Pages use pagination and JSON-LD structured data
- Paginated listing page (
/page/[page])
Plugin Priority Order
- plugin-seo — Essential for any website ✅
- plugin-pagination — Needed for listing pages ✅
- plugin-filters — Core directory functionality ✅
- plugin-search — User expectation ✅
- plugin-sort — Common directory feature ✅
- plugin-sitemap — SEO requirement ✅
Success Criteria
- ✅ Each plugin works independently
- ✅ Plugins can be enabled/disabled in
plugins.config.ts - ✅ Disabling a plugin doesn't break the build
- ✅ All plugins have TypeScript types and JSDoc
- ✅ Pure utility functions exported for use outside plugin system
- ✅ Full typecheck passes (0 errors, 0 warnings)
- ✅ Build succeeds (8 pages in 2.88s)