npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@chrishannah/bulba

v0.1.0

Published

static blog generator

Downloads

23

Readme

Bulba

What is this?

A static site generator, built using Node.

Why is it named Bulba?

Two reasons:

  • Bulbasaur is the best Pokemon
  • There was a Bulbasaur plushie next to me when I was thinking of a name

Getting started

To use Bulba, you first need to install it using npm:

npm install -g @chrishannah/bulba

Once you have Bulba installed, you need to run the bulba init command in the directory where you want the your blog to be.

This will create an example blog, containing an example blog post, about page, and a config file.

The structure is as below:

.
└── blog/
    ├── content/
    │   ├── about.md
    │   ├── posts/
    │   │   └── example.md
    │   └── images/
    │       └── image.png
    └── config.yaml

To generate a site using Bulba, you will need to run the bulba generate command from the root of the blog directory.

This will then generate a static site in the directory determined from the config file, default is inside a subdirectory named out inside your blog directory.

The outputted site will look something like this:

.
└── out/
    ├── assets/
    │   ├── css/
    │   │   └── style.css
    │   └── images/
    │       └── image.png
    ├── archive.html
    ├── about.html
    ├── feed.json
    ├── feed.xml
    └── blog-post.html

A few notes on the outputted files:

  • Posts will be exported to the base of the out directory as .html files.
  • Required assets will be exported into the assets directory, inside subdirectories noting their type.
  • An archive page will be generated with contains a list of all blog posts.
  • A JSON Feed will be generated at feed.json.
  • A RSS2 Feed will be generated at feed.xml.
  • The about page will be generated from the about.md file located inside the content directory.
  • All content inside the content/images directory will be exported to the assets/images/ directory relative to the output directory.

Post format

Posts should be saved as .md files, inside the content/posts directory, with the following format:

---
title: Example post
slug: example
date: 2010-09-15 14:40:45
excerpt: Just an example blog post.
---

Content

The excerpt is optional.

Images

To include images in blog posts, they need to be placed in the content/images directory. Everything in this directory will be copied to the assets/images directory, with the same folder structure.

For example, for an image named screenshot.png, at the following location:

blog/content/images/2021/01/01/screenshot.png

will be copied to the following location, relative to the output directory:

/assets/images/2021/01/01/screenshot.png

The latter is the path required to reference an image in a blog post.

Custom header content

If you want to inject custom HTML in the header in all pages, then you can do this by creating a header.html file at the root of your blog directory.

The content of this file will then be injected into every page between the <head> tags.

Config

The config file is where you configure your site information, author details, and a few extra options to customise how the site is generated.

Here is the demo config that is created after running bulba init:

site:
  name: The name of your blog
  description: A description
  url: https://example.blog
  accentColour: red
author:
  name: Your name
  link: https://example.blog
  twitter: 
postsPerPage: 10
numberOfPostsInFeed: 10
paths: 
  assets:
    assets
outputDirectory: out/
showFullContentOnIndex: true
enableCodeHighlighting: true
enableSearchOnArchivePage: true
  • site.name: The name of your blog. Appears in the header and footer of the site, and also in the JSON feed.
  • site.description: The name of your blog. Appears in the footer of the site and in the JSON feed.
  • site.url: The base URL of where your blog is accessible. Used for link generation.
  • site.accentColour: A accent colour that is used in the theme for styling links, quotes, etc. Supports hex, rgb, and HTML colour names. Defaults to red.
  • author.name: Used in the JSON Feed.
  • author.link: Used in the JSON Feed.
  • author.twitter: The full URL of your Twitter account, this will enable a Twitter icon in the footer. Optional.
  • postsPerPage: This number determines how many posts to put on each of the paginated index pages.
  • numberOfPostsInFeed: The number of posts that will be included in the syndicated feeds.
  • path.assets: The relative output directory of asset files used by the site, at the moment this is just the needed .css or .js files needed for site generation. This is relative to the outputDirectory below.
  • outputDirectory: The relative output directory for the site content.
  • showFullContentOnIndex: Setting this to true will show the full blog posts content on index pages, otherwise only the excerpt will be displayed.
  • enableCodeHighlighting: This enables code highlighting, which is powered by highlight.js. The styles used are atom-one-dark and atom-one-light depending on the system appearance. If set to false, highlight.js will not be used or linked from your pages.
  • enableSearchOnArchivePage: Adds a search bar to the top of the archive page. It uses very minimal JavaScript to filter the list based on the query text.

Deploying the site

At the moment, Bulba is strictly a site generator and nothing else. So there are no built-in deployment tools.

My personal set up for dev.chrishannah.me is that I have a server running on Digital Ocean, where I have Bulba installed via npm. I also have a repository for my blog content, which I have checked out on the server.

So when I want to rebuild my site, or update content, I run git pull to fetch any latest changes, then run bulba generate to generate the site, followed by a small script that moves the generated files to the correct place.

Note: When generationg the site, Bulba will attempt to erase the contents of the configured output directory, ready to generate the fresh site. So be careful if you are customising the outputDirectory in the config file.