The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

=head1 NAME

Bootylicious - Lightweight blog engine on Mojo steroids!

=head1 DESCRIPTION

Bootylicious is a minimalistic blogging application built on top of
L<Mojolicious::Lite>. It is easily extendable with plugins, templates and
themes.

=head2 Features

=over

    * filesystem-based storage
    * comments
    * tags
    * RSS (articles, comments and by tag)
    * static pages
    * drafts
    * archive
    * pingbacks
    * themes
    * multi-parser support (POD, Markdown)
    * plugins
    * Unicode support
    * search

    * lightweight
    * clean code
    * runs everywhere

=back

=head2 Setup

    $ cpan Bootylicious
    $ bootylicious daemon
    Server available at http://*:3000.

=head2 Configuration

Create default configuration file

    $ bootylicious --create-config

Then open C<bootylicious.conf> and change it to fit your
needs. By default C<bootylicious> uses current directory
as working directory. You can change this with C<BOOTYLICIOUS_HOME>
environment variable.

=head2 Writing articles

Articles by default go into C<articles> directory.

Article consists of file information and content with meta data.

=head3 File info

    20101017-article.pod

    or

    20101017T14:02:00-article.pod  or  20101017T140200-article.pod

Where timestamp tells us when the article was created. Modified time is
retrieved automatically from C<mtime>. Filename is the article's permalink url.
Extension is article's format.

=head3 Content

    Title: My first article
    Tags: blog, internet

    Welcome!

    [cut] Read more

    This is my first article. It is in C<pod> format. And I can use all kind of
    B<tags>.

Every article should have metadata. Metadata ends with an empty line.  If there
is a C<[cut]> tag, article will be splitted into C<preview> and C<content>
parts. C<preview> is shown when a) article list is requested, b) rss.

Depending on file format (file extention, remember?) the content is parsed
with an appropriate parser. POD format is available by default. Markdown format
is available when L<Text::Markdown> is installed. Other formats are available as
plugins.

=head2 Enabling/disabling comments

Comments can be disabled everywhere by setting C<comments_enabled> to C<false> in
configuration file:

    {
        ...
        "comments_enabled" : false,
        ...
    }

Or comments can be disabled on per article:

    Title: Article with no comments allowed
    Comments: false

    This is an article...

=head2 Core plugins

=head3 Bootylicious::Plugin::Pingback

Pingbacks as described on L<http://www.hixie.ch/specs/pingback/pingback>.

=head3 Bootylicious::Plugin::HttpCache

ETag header settings and checks.

=head3 Bootylicious::Plugin::CanonicalUrl

All urls that don't have C<.html> in their paths are redirected to C<.html>.

=head3 Bootylicious::Plugin::GoogleAnalytics

Google Analytics JavaScript code.

=head3 Bootylicious::Plugin::Search

Basic search.