Getting started

Briefly is a minimal blog starter theme for Gridsome, based on the design of the Dylan Smith's personal website, and styled with Tailwind CSS.

Gridsome is a Vue.js-powered, modern site generator for building the fastest possible websites for any Headless CMS, APIs or Markdown-files. Gridsome makes it easy and fun for developers to create fast, beautiful websites without needing to become a performance expert.

Installation

After installing Gridsome, run:

gridsome create my-website https://github.com/cossssmin/gridsome-starter-briefly.git

Then, cd my-website and gridsome develop to start a local development server.

Alternatively, you can clone or download the repo on GitHub.

Features

  • Sitemap
  • RSS Feed
  • Google Analytics
  • Custom 404 Page
  • Code syntax highlighting
  • Medium-like image lightbox
  • Open Graph meta tags for posts
  • Alternative index page: paginated posts list
  • Post descriptions: automatic or user-defined
  • Easily show post dates in your locale (moment.js)
  • Index page post filtering: show longer or shorter posts
  • Posts show a warning if they're older than 1 year (configurable)

Configuration

You'll need to change some Briefly defaults before deploying your own site.

Sitemap

Briefly uses Gridsome's official sitemap plugin. Simply change the default siteUrl in gridsome.config.js, and you're all set:

siteUrl: 'https://gridsome-starter-briefly.netlify.com',

When you build the site, a sitemap.xml will be automatically generated at the root of your site. Read more in the plugin's documentation.

RSS Feed

Update the feed title and all the default URLs, in gridsome.config.js:

{
  use: 'gridsome-plugin-rss',
  options: {
    contentTypeName: 'Post',
    feedOptions: {
      title: 'Briefly, a Gridsome minimal blog starter', // <- update
      feed_url: 'https://gridsome-starter-briefly.netlify.com/feed.xml',  // <- update, leave the file name
      site_url: 'https://gridsome-starter-briefly.netlify.com'  // <- update
    },
    feedItemOptions: node => ({
      title: node.title,
      description: node.description,
      url: 'https://gridsome-starter-briefly.netlify.com/' + node.slug,  // <- update
      author: '@cossssmin',
      date: node.date
    }),
    output: {
      name: 'feed.xml' // <- if you change this, also change it in the `feed_url` above
    }
  }
},

Google Analytics

If you want to use Google Analytics, make sure to change the default tracking code in gridsome.config.js:

{
use: '@gridsome/plugin-google-analytics',
  options: {
    id: 'UA-135446199-2' // <- change this
  }
}

To disable GA, simply comment out or delete that entire code block.

Customisation

Post filtering

Post filtering is done in the filterPosts() method from pages/Index.vue.

Posts are considered to be "longer" if they're over 1000 characters. Otherwise, they're considered "shorter".

You can customise the text and styling by editing the components/PostsFilter.vue file.

Old content alert

Posts that are over one year old will show a warning like this one:

This is a flexible alert component, defined in /src/components/Alert.vue.

Usage:

<!-- /src/templates/Post.vue -->
<template>
    ...
    <alert v-if="postIsOlderThanOneYear" class="bg-orange-100 border-orange-500 text-orange-900">This post is over a year old, some of this information may be out of date.</alert>
    ...
</template>

The postIsOlderThanOneYear computed property uses moment.js, so you can customise it to any date you need. Style it like you would normally style any element, by adding a class="" attribute and using Tailwind utility classes.

Post dates in your language

Open /src/components/PostItem.vue and import your locale after the moment import:

<script>
import moment from 'moment'
import 'moment/locale/ro' // <- add this

export default {
  // ...
}
</script>

For the single post view, do the same in /src/templates/Post.vue.

Advanced customisation

The Gridsome documentation is a great place to start. You will need to be familiar with Vue.js, mostly. Tailwind CSS is very easy to pick up. For advanced customisation, you'll also need a bit of experience with GraphQL.