Skip to content

roxiness/poindexter

Repository files navigation

Search engine for your static site.

Powered by FlexSearch



Poindexter scans a folder for HTML files and indexes each file's content by its relative filename. The full index is output to poindexter.bundle.js, which can be imported and searched with poindexter or flexsearch.

Getting started

Create a searchable index

npx poindexter [HTML folder] -o [output path]

Searching with Poindexter

  import { client } from "poindexter/runtime";  

  // loads the poindexter.bundle.json.
  // for custom path: `client.init({ path: '/path/to/poindexter.bundle.js' })`
  client.init()

  // search the index.
  client.index.search(query)

Narrowing the indexable area

To avoid indexing navbars and widgets, Poindexter provide the following options.

contentSelectors An array of selectors. Poindexter tries each selector untill a match is found. Only the content of the first match is indexed. If no match is found, the page is skipped.

IgnoreSelectors An array of selectors. Poindexter removes any elements matching these selectors.

Please refer to the scrape function for more info. Alternatively you can use your own scrape function.

Options

Please refer to the defaults for now.

Configuration

Thanks to Configent Poindexter can be configured here

  • poindexter.config.js
  • package.json (create a poindexter field)
  • environment
  • .env
  • command line
  • API

Title, description and keywords

Poindexter assumes that title, meta description and meta keywords are available in your HTML. Please refer to defaults If this is not the case, you can create your own resolvers.

Custom resolvers

{
  title: $ => 'my website',
  description: $ => $('.description') || 'no description',
  keywords: $ => $('meta[name=keywords]').attr('content').split(',')
}

FAQ

Can I use Poindexter with a SPA?

Poindexter requires a static site. If you have a SPA, have a look at Spank.

Where can I use Poindexter?

Poindexter can be served from the client, your own backend or a serverless function.

How big are the index bundles?

A site like routify.dev with 65 pages, generates a 65 kb bundle after brotli compression.


Example

Routify dev build