Giter VIP home page Giter VIP logo

blog's Introduction

Novela is archived

We are building Fey, a tool for strategic, focused trading for self-directed investors.




gatsby-novela-theme hero image

Novela — A Gatsby theme by Narative

With minimal styling and maximum features — including multiple homepage layouts, built-in social sharing and dark mode — Novela makes it easy to start publishing beautiful articles and stories with Gatsby.

Novela is built by the team at Narative, and built for everyone that loves the web.

Special thanks to @jpvalery for helping maintain Novela.

Maintenance

We have stopped maintainig this project. There will be occassional PR reviews and merges of significant errors but do not expect any changes or responses to support questions in the future. Thank you to everyone that has contributed and continues to use and learn from Novela.



Table of Contents

Getting Started with Gatsby Starter Novela

This guide will take you through setting up Novela with Gatsby Starter Novela.

Step 1: Starter installation

With gatsby-cli:
gatsby new novela-site https://github.com/narative/gatsby-starter-novela
With git clone:
git clone [email protected]:narative/gatsby-starter-novela.git novela-site

cd novela-site

yarn

Step 2: Develop & Build

Once installed or cloned locally and all packages are installed you can begin developing your site.

# Run localhost
yarn dev

# Build your Gatsby site
yarn build

To learn more about adding Posts, and Site Metadata see:

Getting Started from scratch

This guide will take you through adding Novela to a new project. You do not require any Gatsby starters or similar, but you can add Novela to an existing Gatsby project.

You can also view the completed example repository.

Step 1: Installation

# Create an empty directory and go into it
mkdir novela-site && cd novela-site

# Add all required dependencies
yarn add react react-dom gatsby @narative/gatsby-theme-novela

Step 2: Folder structure

Once you've installed React, Gatsby, and Novela you'll want to add your first Post.

The recommended project structure for your content and site looks like this:

  novela-site
    ├── content
    │ └── posts
    │     └── 2020-01-01-my-first-novela-post
    │         ├── images
    │         │   └── novela-hero.jpg
    │         └── index.mdx
    ├── node_modules
    ├── gatsby-config.js
    └── package.json

Step 3: Using @narative/gatsby-theme-novela

You must add @narative/gatsby-theme-novela as a plugin in gatsby-config.js. @narative/gatsby-theme-novela is configurable through plugin options but we will use the defaults for now.

// gatsby-config.js

module.exports = {
  plugins: ['@narative/gatsby-theme-novela'],
};

Once you've setup @narative/gatsby-theme-novela plugin in gatsby-config.js you can start creating your first Posts.

Step 5: Adding a Post

Start by creating a new folder in content/posts. You can name it anything you like but we recommend including the date at the front to organize your posts. Once you've created your folder you can add an index.mdx file and an images folder.

/content/posts/2020-01-01/index.mdx

---
title: Why Narative loves Gatsby
date: 2019-04-27
hero: ./images/narative-gatsby-hero.jpg
excerpt: This is a love story about Narative and Gatsby
---
# And then under the heading YML you can insert any MDX you like
# like headings, links, code, images, etc
# This will show up in the body of your post
# ...

Step 6: Configuring siteMetadata

In order to configure the theme to properly generate the pages and meta tags you must add specific data to siteMetadata.

The fields that are unique to Novela are hero.heading, hero.maxWidth, and social.

Add your Site Metadata to the gatsby-config.js file.

// gatsby-config.js

module.exports = {
  siteMetadata: {
    title: `Novela by Narative`,
    name: `Narative`,
    siteUrl: `https://gatsby-theme-novela.netlify.com`,
    description: `This is my description that will be used in the meta tags and important for search results`,

    // important to set the main text that appears in the hero
    hero: {
      heading: `Perspectives on technology, design and business from the team at Narative.`,
      maxWidth: 652,
    },
    social: [
      {
        name: `twitter`,
        url: `https://twitter.com/narative`,
      },
      {
        name: `github`,
        url: `https://github.com/narative`,
      },
    ],
  },
  plugins: ['@narative/gatsby-theme-novela'],
};

You can now run your site

Once all steps have been completed you can run your site. In the root of your project run gatsby develop.

If you ran into problems you can reference the example repository or create an issue.


Data Sources

Local is the default data source for Novela. Write MDX and YAML in order to generate posts. This is the fastest and simplest way to get started.

To learn how to use the local file system, read the Installation steps.

Customization

Once you've created the Logo component it should automatically appear in your site.

The technique we have used is called Component Shadowing and is a core feature of Gatsby Themes.

Changing styles

Novela allows you to change the default theme styling by updating the theme-ui values. If you're familiar with Styled Components or Emotion it's the same as adapting the theme you pass to ThemeProvider.

First, you must create a theme file and then you can override novelaTheme values. See all Novela theme values

// src/gatsby-plugin-theme-ui/index.js

import novelaTheme from '@narative/gatsby-theme-novela/src/gatsby-plugin-theme-ui';

export default {
  ...novelaTheme,
  initialColorMode: `dark`,
  colors: {
    ...novelaTheme.colors,
    primary: '#000',
    secondary: '#73737D',
    accent: '#6166DC',
    grey: '#73737D',
    background: '#fff',
  },
};

Component Shadowing

This feature allows users to override a component in order to customize its rendering.

Component Shadowing lets you replace the theme’s original file, gatsby-theme-novela/src/components/Logo.js, with your own to implement any changes you need.

Any component or section is able to be replaced with your own custom component.

This opens up a full customization of Novela to your designed needs. You can copy any component directly from Novela and alter it how you like, or you can create your own component to replace Novela's entirely.

A basic example of component shadowing is explained below by adding your logo.

Using images

Images can be added to Posts and customized to fit your content. Define a regular Markdown image that will default to Small or write HTML to customize the sizes. All images can be clicked to zoom.

![This is the alt text for small image](./images/small.jpg)

<div className="Image__Small">
  <img src="./images/small.jpg" alt="This is the alt text small image" />
</div>

<div className="Image__Medium">
  <img src="./images/medium.jpg" alt="This is the alt text medium image" />
</div>

<div className="Image__Large">
  <img src="./images/large.jpg" alt="This is the alt text large image" />
</div>
Size Class Name Description
small Image__Small Width of the text
medium Image__Medium Larger than width of the text
large Image__Large Full width image

Adding your logo

Your logo must be in SVG (vector) format in order to add it to the theme. This is required because we will be making a React component containing your SVG Logo.

Start by creating the component file at:

  novela-site
  └── src
    └── @narative
      └── gatsby-theme-novela
        └── components
          └── Logo
            └── index.js

It is important you create the exact folder structure so Gatsby knows to shadow this component. Once the file is created you can create your Logo component.

import React from 'react';

/**
 * Paste in your SVG logo and return it from this component.
 * Make sure you have a height set for your logo.
 * It is recommended to keep the height within 25-35px.
 * Logo comes with a property value called `fill`. `fill` is useful 
 * when you want to change your logo depending on the theme you are on. 
 */
export default function Logo({ fill }) {
  return (
    <svg viewBox="0 0 106 28" height="30px">
      <path d="M62.9 12h2.8v10...." />
      <path fill={fill} d="M25 14h-..." />
      <path d="M14 0C6.3..." fill="#639" />
    </svg>
  );
}

Adding Mailchimp

Want to add a subscription newsletter to your Posts? Novela gives you the option to integrate and build your following in a few easy steps.

Start by downloading gatsby-plugin-mailchimp:

yarn add gatsby-plugin-mailchimp

Then configure the plugins

plugins: [
  {
    resolve: '@narative/gatsby-theme-novela',
    options: {
      contentPosts: 'content/posts',
      basePath: '/',
      mailchimp: true, // make sure this is true!
    },
  },
  {
    resolve: 'gatsby-plugin-mailchimp',
    options: {
      endpoint: '', // add your MC list endpoint here; see plugin repo for instructions
    },
  },
];

That's it. You will now have subscription boxes on each of your Posts. To disable the subscription box on individual Posts you can set subscription: false on the Post.

You can shadow the Subscription component to customize the text displayed. It is recommended to copy and paste the current component and only alter the text.

You will want to override it here:

  novela-site
  └── src
    └── @narative
      └── gatsby-theme-novela
        └── components
          └── Subscription
            └── index.js

Data Models

Theme Options

It is recommended to use the Default options, but if your project requires something else you can configure them to your need.

Option Default Description
contentPosts content/posts Define where you want to pull your Post data from
rootPath / Define the index of your site
basePath / Where should the site be served from? /blog will change all paths to start with /blog
pageLength 6 How many posts should be shown per page
articlePermalinkFormat :slug Define the format of the article permalink. Possible values: :slug, :year, :month, :day. Example: :year/:month/:day/:slug
mailchimp false Enable Mailchimp subscriptions on each Post
sources.local true Enable local file system data source

View Theme option example

plugins: [
  {
    resolve: '@narative/gatsby-theme-novela',
    options: {
      contentPosts: 'content/posts',
      rootPath: '/',
      basePath: '/',
      pageLength: 6,
      mailchimp: true,
      sources: {
        local: true,
      },
    },
  },
];

Post

Key Required Type Description
title required String Used as title and generates a default slug. Must be unique.
slug optional String Define a custom slug that will override the default title slug.
date required Date YYYY-MM-DD format
hero required Image 1200px minimum width recommended
excerpt required String 140 character limit
subscription optional String If mailchimp is enabled disable the subscription box on an individual Post
secret optional Boolean If secret the Post will not appear in paginated lists. Defaults to false.

View Post example

# novela-site/content/posts/2020-01-01/index.mdx
---
title: Why Narative loves Gatsby
date: 2019-04-27
hero: ./images/narative-gatsby-hero.jpg
excerpt: This is a love story about Narative and Gatsby
---
# And then under the heading YML you can insert any MDX you like
# like headings, links, code, images, etc
# This will show up in the body of your post
# ...

Site Metadata

Key Required Type Description
title required String Used for the <title></title>
name required String Ref Used in multiple locations including meta tags and site footer
siteUrl required Date Used in meta tags
description required String Used in meta tags
hero.heading required String Used in the Hero
hero.maxWidth optional number Used in the Hero. Defaults to 652
social required Array View supported icon/name combinations. url is required and the icon is chosen based on the url. If you also provide name, then the icon will be the same as the name you provided as long as the name equals one of the supported icons (See example bellow). Used in site footer and meta tags

View Site Metadata example

Within gatsby-config.js you can configure siteMetadata to show the values you wish. It is required to add siteMetada

// gatsby-config.js
module.exports = {
  siteMetadata: {
    title: `Novela by Narative`,
    name: `Narative`,
    siteUrl: `https://gatsby-theme-novela.netlify.com`,
    description: `This is my description that will be used in the meta tags and important for search results`,

    // hero
    // A required key and will be displayed on the main page of Noveal
    hero: {
      heading: `Perspectives on technology, design and business from the team at Narative.`,
      maxWidth: 652,
    },

    // social
    // Add in the social links that will be displayed in the footer
    social: [
      {
        url: `https://twitter.com/narative`,
      },
      {
        url: `https://github.com/narative`,
      },
      {
        url: `https://www.instagram.com/narative.co/`,
      },
      {
        url: `https://dribbble.com/narativestudio`,
      },
      {
        name: 'stackoverflow',
        url: `https://bit.ly/1x0885j`,
      },
    ],
  },
};

Why use Novela?

There are many Gatsby themes to choose from. Here’s why we think you won’t regret choosing Novela:

Multiple Homepage Layouts

Choose between a variable width grid or a simpler list style to display each story.

Mailchimp integration

Start building an audience and grow your blog subscribers with Mailchimp.

Toggleable Light and Dark Mode

Out of the box, Novela includes both light and dark designs that can be toggled by the user anywhere across the site.

gatsby-novela-theme light dark theme demonstration

Simple Customization with Theme UI

Consistent, easy-to-read code lets you quickly customize every color and setting.

Show code effortlessly

High quality embedded codeblocks that make technical blog posts a breeze.

Highlight-to-Share

Users can select text within an article to copy or share to platforms like Twitter and LinkedIn.

gatsby-novela-theme light dark theme demonstration

Read Time and Progress

Read time is automatically generated for each article based on length, with an animated bar tracking the reader’s progress through each piece.

Accessibility in Mind

Navigable by cursor or keyboard, readable via screens and screen readers, Novela ensures everyone on the web can read what you write.

gatsby-novela-theme accessibility demonstration

The Future

This project is early in development and we are interested in creating an even more extensible experience, and increased out-of-box functionality, including:

  • Built in search with Algolia or similar
  • Tags, categories, and more
  • More theme variations
  • More customization options

blog's People

Contributors

brotzky avatar jpvalery avatar mabasic avatar dannysteenman avatar emasuriano avatar kavimaluskam avatar aleccool213 avatar aryanj-nyc avatar bravo-kernel avatar phenotypic avatar bntzio avatar martinrosenberg avatar cryogenicplanet avatar swyxio avatar pierrenel avatar imprashast avatar swizec avatar eshlox avatar krisbraun avatar eugenejeonme avatar daleseo avatar jcaguirre89 avatar clifmo avatar paschalidi avatar olisikh avatar prajwaldankit avatar rscarrera27 avatar slorber avatar teikjun avatar tcostaco avatar

Watchers

James Cloos avatar

blog's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.