3 **pinopress** is a modular makefile based static blog generator. that means you run the build script once and every page is generated beforehand.
4 **pinopress** also focuses on extensibility, you can hook your own shell scripts into the build process to easily add any new features.
6 built in features include markdown generated blog articles, and a rss feed.
10 templates are html snippets that you can customize. these templates are then pieced together to form the final html page. edit them to your liking. they can be found in the `templates/` directory. Here's a brief description of each one that comes by default:
12 template | description
13 ------------------|-----------
14 archivepage | html used for the archive page
15 archiveitem | snippet for each list item on archive page
16 rollingpage | html used for rolling page
17 rollingitem | snippet for each rolling item
18 feed | main xml for rss feed
19 feeditem | xml snippet for each entry in feed
20 articlepage | html for each article
21 navbar | sample template for mounts
25 modules are shellscripts that are called during the build process that can add extra features.
27 here are some potential ideas for modules:
28 - [ ] syntax highlight for code blocks
29 - [x] blog average time to read
31 ## pinopress flavored markdown
33 pinopress articles are written in an enhanced version of markdown. specification coming soon.
37 **pinopress** makes extensive use of **gnu envsubst** so in each template, you can use variables that will be substituted in on build. variables can be used in both templates and blog articles. Here's a list of some that you can use:
41 `$SITEURL` - the SITEURL variable you set in the pinopress config
43 `$USERGLOBAL1` - global variable you can use however you want
45 `$USERGLOBAL2` - a second user defined global variable
49 `$ARTICLE_TITLE` - title of article, as set in article header
51 `$PUBLISHED_DATE` - the date/time the article was published, as set in the article header
53 `$DESCRIPTION` - brief description of the blog post
55 `$USERLOCAL1` - article specific variable you can use for whatever you want
57 `$USERLOCAL2` - another user local variable
61 mounts are the **pinopress** solution to html includes. to include any file from the template directory, use the following syntax:
63 <!-- MOUNT_[NAMEOFFILE] -->
65 note that the name of file is without any extensions and in all caps. also, mounts are **not** expanded recursively.
67 **pinopress** also has the following builtin mounts that are used internally, prefixed by an underscore:
69 <!-- _MOUNT_ARTICLECONTENT -->
70 <!-- _MOUNT_ROLLINGITEM -->
71 <!-- _MOUNT_ARCHIVEITEM -->
72 <!-- _MOUNT_FEEDITEM -->