scotch-blog

A really classy, dead simple, markdown based, blogging framework for node.js

#Scotch ###A really classy, dead simple, markdown based, blogging framework for node.js

To try Scotch for yourself, make sure that you have node, npm, and mongodb installed (and running), then do this:

$> npm install -g scotch-blog
$> scotch create blog
$> cd blog
$> sudo scotch serve

Go to http://0.0.0.0/dashboard/install to install Scotch.

Your blog should be up and running on http://localhost

$> cd blog
$> scotch generate

Your you should now have a 'static' directory in your blog's root directory.

Read the deployment docs on how to configure static site deployment.

Create config/deployment.js and fill it with your deployment settings then run scotch deploy from your terminal. At the moment we support S3 and FTP deployment, with gh-pages on its way.

module.exports = {
  "destination": "s3"
, "opts": {
    "bucket": "<BUCKET NAME>"
  , "key": "<AWS ACCESS KEY>"
  , "secret": "<AWS SECRET KEY>"
  , "region": "<AWS REGION>"      //us-west-1 
  }
};
module.exports = {
  "destination": "ftp"
, "opts": {
    "host": "<FTP HOST>"          //ftp.myserver.com 
  , "port": <FTP PORT>            //Default: 21 
  , "username": "<FTP USERNAME>"
  , "password": "<FTP PASSWORD>"
  }
};

Plugins are installed via npm and enabled via in app/config/environment.js.

/*
* Sample app/config/environment.js
* `npm install readmore`
*/
var config = {
  port: 80,
  model: {
    defaultAdapter: 'mongo'
  },
  db: {
    mongo: {
      dbname: 'blog'
    }
  },
  plugins: {
    formatters: [
      'readmore'
    ]
  }
};
 
module.exports = config;

Formatter plugins enhance the markdown language.

/*
* An example formatter plugin that replaces the string "charcount" with the number
* of characters in the markdown source when viewing a post in the blog index
*/
var replacer = function (buffer) {
  //`this` in the context of a formatter plugin refers to the post model 
  return buffer.replace(/charcount/, this.markdown.length);
};
 
/*
* You can modify either the `index` or `show` actions.
* By not exporting to exports.show, our plugin will only
* run on posts during the index action
*/
exports.index = replacer;
 

If you'd like to help out, check out the issue list.