.. _about:

About blohg
===========

blohg_ is a Mercurial_-based blogging engine written in Python_, built on the
top of the Flask_ micro-framework and some of its extensions. All the content of
the blogs are stored inside Mercurial_ repositories, and the repository history
is used to build the posts and pages.

.. _blohg: http://blohg.org/
.. _Mercurial: http://mercurial.selenic.com/
.. _Python: http://python.org/
.. _Flask: http://flask.pocoo.org/


Motivation
----------

Everybody knows that we have a large number of blogging engines lying around the
blogosphere, but there are not a many choices for programmers, who are used to
working daily with source-code editors and version control systems and may be more
productive when blogging using these tools, instead of the fancy WYSIWYG_
editors and administration interfaces.

.. _WYSIWYG: http://en.wikipedia.org/wiki/WYSIWYG

Actually this isn't the first project trying to implement a VCS_-based blogging
engine, but most of the existing projects aren't tied to a VCS_ and are just
using text files that can be versioned with a VCS_, without taking full
advantage of the VCS's revision history.

.. _VCS: http://en.wikipedia.org/wiki/Revision_control

This project uses Mercurial_ as the VCS_, reStructuredText_ as the markup
language and Jinja2_ as the template engine. All of these are pretty popular
within the Python ecosystem and easy to use.

.. _reStructuredText: http://docutils.sourceforge.net/rst.html
.. _Jinja2: http://jinja.pocoo.org/


Basic concepts
--------------

Here are some of the basic concepts needed to understand how blohg works:
In addition, you should know how Mercurial_ works, the reStructuredText_
syntax and the Jinja2_ syntax.

Pages
~~~~~

Pages are static content, such as an "About me" page. They aren't listed in atom
feeds or in the home view.  You may want to create a menu entry
manually in the template to them.  Pages are ``.rst`` files stored in any directory
inside ``content/``, excluding ``content/post/``. Sub-directories are allowed.

Posts
~~~~~

Posts are the dynamic content of a blog. They are shown on the home page and
atom feeds, ordered by publication date, descendant. Posts should be stored
inside the directory ``content/post/``. Sub-directories are allowed.

Tags
~~~~

Tags are identifiers that are used to classify posts by topic. Each tag
generates a HTML page and an atom feed with related posts. Tags aren't
allowed in pages, only posts.


Main features
-------------

These are some of the cool features of blohg:

.. _CMS: http://en.wikipedia.org/wiki/Content_management_system

- Support for static pages and posts.
- Support for tags for posts.
- Support for aliases, making it easy to migrate from some other blogging engine.
- Support for building a static version of the blog, to host it in restricted
  environments.
- Post/page metadata grabbed from the Mercurial_ repository.
- Plenty of reStructuredText_ directives available, to make the blogging
  experience as smooth as possible.
- Easily customizable by Jinja2_ templates.
- Can be used as a full-featured CMS_.
- Support for pagination for posts.
- Atom feeds for posts and tags.
