A set of simple IndieWeb Jamstack publishing syndication tools
Go to file
Wouter Groeneveld c237e91a88 release 1.0.1 2021-03-05 11:52:30 +01:00
.github/workflows Create main.yml 2021-03-05 11:28:01 +01:00
.yarn move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
src getHours() is local time, use getUTCHours() 2021-03-05 11:48:19 +01:00
test getHours() is local time, use getUTCHours() 2021-03-05 11:48:19 +01:00
.gitignore move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
.pnp.js move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
.yarnrc.yml move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
README.md release 1.0.1 2021-03-05 11:52:30 +01:00
jam-my-stack.sublime-project move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
package-lock.json move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00
package.json release 1.0.1 2021-03-05 11:52:30 +01:00
yarn.lock move masto-feed-parser out of brainbaking repo, first jest tests 2021-03-04 19:01:25 +01:00

README.md

jam-my-stack 🥞

A set of simple IndieWeb Jamstack publishing syndication tools

Published at https://www.npmjs.com/package/jam-my-stack

npm version

These simple scripts enrich your Jamstack-site by adding/manipulating/whatever (meta)data, such as extra posts, indexing, and so forth. A primary example of these tools in action is my own site https://brainbaking.com - inspect how it's used at https://github.com/wgroeneveld/brainbaking

The tools

Usage:

  1. yarn add jam-my-stack
  2. const { mastodon, goodreads, lunr } = require('jam-my-stack')

1. Mastodon

1.1 parseFeed

An async function that parses your Fediverse-compatible feed (Mastodon/Pleroma/...) and converts entries to .md Markdown files for your Jamstack to enjoy.

Usage example:

    await mastodon.parseFeed({
        notesdir: `${__dirname}/content/notes`,
        url: "https://chat.brainbaking.com/users/wouter/feed"
    })

Note that this does not delete the notes dir with every call. It simply checks if there isn't already a file with the same name (based on the publication date), and adds one if not.

2. Goodreads

2.1 createWidget

An async function that reads and modifies Goodreads JS widget embed code, converting low-res book covers to hi-res ones if possible. This omits possible Goodread cookies and cross-domain mishaps.

Usage example:

    const widget = await goodreads.createWidget("https://www.goodreads.com/review/grid_widget/5451893.Wouter's%20bookshelf:%20read?cover_size=medium&hide_link=&hide_title=&num_books=12&order=d&shelf=read&sort=date_added&widget_id=1496758344")
    await fsp.writeFile(`${__dirname}/static/js/goodreads.js`, widget, 'utf-8')

3. Lunr

3.1 buildIndex

An async function that reads all .md files of certain locations (pass as an array []), generating a Lunr.js .json index object. Serialize it yourself wherever you'd like it to go.

Usage example:

    const index = await lunr.buildIndex([
        `${__dirname}/content/post`,
        `${__dirname}/content/notes`])
    await fsp.writeFile(`${__dirname}/static/js/brainbaking-post.json`, JSON.stringify(index), 'utf-8')