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

@stoutlabs/gatsby-theme-stoutlabs-starter-blog

v1.0.4

Published

A Gatsby theme based on my own opinionated starter/configuration. This is a functional WIP!

Downloads

17

Readme

gatsby-theme-stoutlabs-starter-blog

I have converted my starter repo into a Gatsby theme, mostly for practice purposes.

This isn't really meant for production — but I think it will be helpful to others for learning!

Features:

  • Customizable blog content location
  • Customizable blog URL path (e.g. /blog, or /posts, or /whatever)
  • Full MDX-powered blog with built-in:
    • post tags
    • pagination
    • PrismJS code markup
    • Markdown Remark images
    • post meta tags that auto-create pretty FB/Twitter link previews for you
  • styled-components enabled, no need to install/configure them in Gatsby!
  • Global style reset applied via styled-reset
  • Node SASS compiling is configured/enabled, just put stylesheets into the /src/styles/ folder of your site, and import them into pages/components where needed. (And/or set up a global stylesheet and import it via gatsby-browser.js)
  • Advanced SEO component with full JSON site schema generators. Google will love you.
  • Formik installed with Yup validation, should be ready to use. (I haven't tested this yet, but it should work!)
  • Automatic site manifest and favicon generation. Just put a 512x512 image into a folder in your site, and point to it in the config file. (See below)

Instructions:

Installation is pretty easy! Just set up an initial/base Gatsby site from a starter (or on your own), and then:

1. Create the config/index.js file

Create a new file at /src/config/index.js and insert the following configuration object... adjusting values to match your site, of course:

module.exports = {
  title: "Your Site",
  titleshort: "YourSite",
  company: "Your Company Name",
  description: `Opinionated barebones GatsbyJS starter theme with blog. Uses my preferred tools and setup. Minimal styling, almost zero layout - ready to edit!`,
  url: "https://yoursite.com", //live site url
  pathPrefix: "", // not really in use currently

  // Favicon/Manifest stuff
  iconImage: "src/images/gatsby-icon.png", // favicon file 
  // note: above must be 512x512 or larger 1:1 size, and location is relative to root

  // below are absolute URLs of 'site image' and 'logo', which are used as defaults when sharing links on FB/Twitter/etc. (see SEO component)
  // (In this theme, you can put these in /src/images and they'll magically work.)
  image: "https://www.yoursite.com/site-image.jpg",
  logo: "https://www.yoursite.com/android-chrome-512x512.jpg",

  // social media (for SEO & FB/Twitter sharing)
  twitter: "@yourTwitter",
  fbUrl: "https://www.facebook.com/your-url",
  fbAppID: "1234567890",

  // blog settings
  blogSuffix: " | My Blog", // attached to end of post title in <head>
  postsPerPage: 8,
  blogContentPath: "blog", // where the blog content lives
  blogContentBasePath: "/posts", // path on your site to display the blog

  // this is all needed for SEO schemas!
  address: {
    street: "1234 Test St",
    region: "TN",
    postalCode: "37663",
    city: "Your Town",
    geo: {
      latitude: 33.1,
      longitude: -81.1
    },
    telephone: "555-555-5555"
  },

  // site owner (author)
  author: {
    name: "Beau LaNoodles",
    minibio: `This is a custom author 'minibio'. You could use it for displaying an author's bio after a post, for example.`,
    something: `You can make whatever vars you want!`
  }
};

Note: Make sure you put the images used for image and logo into your site!

2. Edit gatsby-config.js

In gatsby-config.js for your site, you'll need a minimum of:

const path = require("path");
const config = require("./src/config/index");

module.exports = {
  siteMetadata: {
    title: config.title,
    siteUrl: config.url,
    description: config.description,
    image: config.image,
    logo: config.logo,
    twitter: config.twitter,
    blogSuffix: config.blogSuffix,
    fbUrl: config.fbUrl,
    fbAppID: config.fbAppID,
    author: config.author,
    address: config.address,
    postsPerPage: config.postsPerPage,
    blogContentPath: config.blogContentPath,
    blogContentBasePath: config.blogContentBasePath
  },
  plugins: [
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `pages`,
        path: `${__dirname}/src/pages`
      }
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `blog`,
        path: `${__dirname}/src/blog` // or whatever you set as blogContentPath
      }
    },
    {
      resolve: `gatsby-theme-stoutlabs-starter-blog`,
      // these are used in static queries in the theme, so we must pass them in here
      options: {
        title: config.title,
        company: config.company,
        postsPerPage: config.postsPerPage,
        contentPath: config.blogContentPath,
        basePath: config.blogContentBasePath,
        siteUrl: config.url,
        iconImage: config.iconImage
      }
    },
    {
      resolve: "gatsby-plugin-root-import",
      options: {
        src: path.join(__dirname, "src"),
        config: path.join(__dirname, "config")
      }
    }
  ]
};

Customization

You can adjust the location of your blog post content (markdown/MDX files location) via blogContentPath in the config file.

You can adjust the URL of the blog posts via blogContentBasePath in the config file.

The appearance can be easily customized via component shadowing. Simply set up a directory in your site at /src/gatsby-theme-stoutlabs-starter-blog and copy any components from this repo into that directory, matching the same structure.

The areas you'll want to shadow are in /src/components/Blog and in /src/styles, so you could copy those over to your site at:

  • /src/@stoutlabs/gatsby-theme-stoutlabs-starter-blog/components/Blog/
  • /src/@stoutlabs/gatsby-theme-stoutlabs-starter-blog/styles/

Any files you place here will override any files that match the same location in the theme!

To Do:

Maybe refactor all those crazy siteMetadata calls into a custom static query hook... or a component with a static query in it.

A global state/context would be helpful for basePath, instead of all the prop drilling currently in place.

Other various refactoring... this thing is still pretty messy!


Important:

This theme is NOT perfect! It is my very first attempt at one...

I like jumping into the deep end first, so I didn't attempt to do something basic. I wanted my first Gatsby theme to have something with real-world features in it, and not just one or two basic things! So, here we are. 😎

Have fun, and happy experimenting/learning! 💜