Recent changes to this wiki:

Fix: Clarify where distix ticket git repo is
diff --git a/index.mdwn b/index.mdwn
index 037ec5f..720f43d 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -28,7 +28,8 @@ tickets using a command line tool, but everyone else just sends email.
 * Release tarballs: <http://code.liw.fi/debian/pool/main/d/distix/>
 * Issue tracker: the distix uses the tickets are at
   <http://tickets.distix.eu/> tracker (send mail to
-  <mailto:tickets@distix.eu>). The distix repository is at
+  <mailto:tickets@distix.eu>). 
+  * The git repository for the tickets is at
   <http://git.liw.fi/distix-bugs/>.
 * To install:
   * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.

Move index2 to index
diff --git a/index.mdwn b/index.mdwn
index 85eb46f..037ec5f 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,16 +1,49 @@
-# Distributed ticketing system
-
-This web site is a lie. This sentence is a lie. The previous sentence
-may be correct. It is possible that nothing exists, and we're merely
-the figments of our own imaginations.
-
-distix is a distributed ticketing system, aimed at handling support
-issues and bugs. For most people, it is an invisible agent that keeps
-track of issues and bugs by being Cc'd on emails. There is no login
-required. The emails do not need to follow any structure. Each email
-thread becomes its own ticket. The support staff can search and
-manipulate tickets using a command line tool.
-
-distix is built using git, YAML, and Maildirs. This allows tickets to
-be handled entirely offline, and synchronised between machines and
-staff. There is currently no web interface.
+[[!meta title="distix - a distributed ticketing system"]]
+
+
+# Distix
+
+Distix is a **distributed ticketing system** built on top of **git**
+and **email**. Like ticketing systems in general, it is meant for
+keeping track of support requests, bug reports, etc. Unlike most
+ticketing systems, distix works as distribued as git, and all
+communication is over email. This allows everyone to view, search, and
+manipulate tickets offline.
+
+Distix is a command line program. It can also generate a static,
+read-only web site.
+
+For most people, distix is an invisible agent that keeps track of
+issues and bugs by being Cc'd on emails. There is no login required.
+The emails do not need to follow any structure. Each email thread
+becomes its own ticket. The support staff can search and manipulate
+tickets using a command line tool, but everyone else just sends email.
+
+# More info
+
+* [Tutorial](http://git.liw.fi/distix/tree/TUTORIAL) in git.
+* [NEWS](http://git.liw.fi/distix/tree/NEWS)
+* [README](http://git.liw.fi/distix/tree/README)
+* Source code in git: <http://git.liw.fi/distix>
+* Release tarballs: <http://code.liw.fi/debian/pool/main/d/distix/>
+* Issue tracker: the distix uses the tickets are at
+  <http://tickets.distix.eu/> tracker (send mail to
+  <mailto:tickets@distix.eu>). The distix repository is at
+  <http://git.liw.fi/distix-bugs/>.
+* To install:
+  * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.
+    See <http://liw.fi/code/> for instructions.
+  * Everything else: install from source. Or run it from the source
+    tree: no building is required.
+* There is not a mailing list (will be created if there's a need).
+  Also no IRC channel (ditto). Use the distix issue tracker for now.
+* [Blog posts about distix](http://blog.liw.fi/tag/distix/).
+* Licence: GNU GPL v3 or later.
+
+# Contribute
+
+Distix is currently being developed only by [Lars Wirzenius](http://liw.fi).
+To contribute code or documentation, open a ticket with patches in the
+email, or a URL to a git repository to pull from.
+
+For an unfinished architecture document, see [[arch]].
diff --git a/index2.mdwn b/index2.mdwn
deleted file mode 100644
index 037ec5f..0000000
--- a/index2.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-[[!meta title="distix - a distributed ticketing system"]]
-
-
-# Distix
-
-Distix is a **distributed ticketing system** built on top of **git**
-and **email**. Like ticketing systems in general, it is meant for
-keeping track of support requests, bug reports, etc. Unlike most
-ticketing systems, distix works as distribued as git, and all
-communication is over email. This allows everyone to view, search, and
-manipulate tickets offline.
-
-Distix is a command line program. It can also generate a static,
-read-only web site.
-
-For most people, distix is an invisible agent that keeps track of
-issues and bugs by being Cc'd on emails. There is no login required.
-The emails do not need to follow any structure. Each email thread
-becomes its own ticket. The support staff can search and manipulate
-tickets using a command line tool, but everyone else just sends email.
-
-# More info
-
-* [Tutorial](http://git.liw.fi/distix/tree/TUTORIAL) in git.
-* [NEWS](http://git.liw.fi/distix/tree/NEWS)
-* [README](http://git.liw.fi/distix/tree/README)
-* Source code in git: <http://git.liw.fi/distix>
-* Release tarballs: <http://code.liw.fi/debian/pool/main/d/distix/>
-* Issue tracker: the distix uses the tickets are at
-  <http://tickets.distix.eu/> tracker (send mail to
-  <mailto:tickets@distix.eu>). The distix repository is at
-  <http://git.liw.fi/distix-bugs/>.
-* To install:
-  * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.
-    See <http://liw.fi/code/> for instructions.
-  * Everything else: install from source. Or run it from the source
-    tree: no building is required.
-* There is not a mailing list (will be created if there's a need).
-  Also no IRC channel (ditto). Use the distix issue tracker for now.
-* [Blog posts about distix](http://blog.liw.fi/tag/distix/).
-* Licence: GNU GPL v3 or later.
-
-# Contribute
-
-Distix is currently being developed only by [Lars Wirzenius](http://liw.fi).
-To contribute code or documentation, open a ticket with patches in the
-email, or a URL to a git repository to pull from.
-
-For an unfinished architecture document, see [[arch]].

Add link to arch
diff --git a/index2.mdwn b/index2.mdwn
index a8f4989..037ec5f 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -45,3 +45,5 @@ tickets using a command line tool, but everyone else just sends email.
 Distix is currently being developed only by [Lars Wirzenius](http://liw.fi).
 To contribute code or documentation, open a ticket with patches in the
 email, or a URL to a git repository to pull from.
+
+For an unfinished architecture document, see [[arch]].

Fix: typo
diff --git a/index2.mdwn b/index2.mdwn
index 5e82ea1..a8f4989 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -7,7 +7,7 @@ Distix is a **distributed ticketing system** built on top of **git**
 and **email**. Like ticketing systems in general, it is meant for
 keeping track of support requests, bug reports, etc. Unlike most
 ticketing systems, distix works as distribued as git, and all
-communication if over email. This allows everyone to view, search, and
+communication is over email. This allows everyone to view, search, and
 manipulate tickets offline.
 
 Distix is a command line program. It can also generate a static,

Fix: link to distix ticket page, submission email
diff --git a/index2.mdwn b/index2.mdwn
index 64c9b52..5e82ea1 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -27,8 +27,9 @@ tickets using a command line tool, but everyone else just sends email.
 * Source code in git: <http://git.liw.fi/distix>
 * Release tarballs: <http://code.liw.fi/debian/pool/main/d/distix/>
 * Issue tracker: the distix uses the tickets are at
-  <...> tracker (send mail to <mailto:...@liw.fi>).
-  The distix repository is at <http://git.liw.fi/distix-bugs/>.
+  <http://tickets.distix.eu/> tracker (send mail to
+  <mailto:tickets@distix.eu>). The distix repository is at
+  <http://git.liw.fi/distix-bugs/>.
 * To install:
   * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.
     See <http://liw.fi/code/> for instructions.

Fix: typo in link
diff --git a/index2.mdwn b/index2.mdwn
index 45d5baa..64c9b52 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -36,7 +36,7 @@ tickets using a command line tool, but everyone else just sends email.
     tree: no building is required.
 * There is not a mailing list (will be created if there's a need).
   Also no IRC channel (ditto). Use the distix issue tracker for now.
-* [Blog posts about distix(http://blog.liw.fi/tag/distix/).
+* [Blog posts about distix](http://blog.liw.fi/tag/distix/).
 * Licence: GNU GPL v3 or later.
 
 # Contribute

Add small clafification
diff --git a/index2.mdwn b/index2.mdwn
index b17b259..45d5baa 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -17,7 +17,7 @@ For most people, distix is an invisible agent that keeps track of
 issues and bugs by being Cc'd on emails. There is no login required.
 The emails do not need to follow any structure. Each email thread
 becomes its own ticket. The support staff can search and manipulate
-tickets using a command line tool.
+tickets using a command line tool, but everyone else just sends email.
 
 # More info
 

Drop todo notes
diff --git a/index2.mdwn b/index2.mdwn
index c40b0dd..b17b259 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -1,12 +1,6 @@
 [[!meta title="distix - a distributed ticketing system"]]
 
 
-* see https://bestpractices.coreinfrastructure.org/
-
-
------------------------------------------------------------------------------
-
-
 # Distix
 
 Distix is a **distributed ticketing system** built on top of **git**

Add section on contributing
diff --git a/index2.mdwn b/index2.mdwn
index e005fe8..c40b0dd 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -1,7 +1,6 @@
 [[!meta title="distix - a distributed ticketing system"]]
 
 
-* brief overview of the problem that it solves
 * see https://bestpractices.coreinfrastructure.org/
 
 
@@ -39,8 +38,15 @@ tickets using a command line tool.
 * To install:
   * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.
     See <http://liw.fi/code/> for instructions.
-  * Everything else: install from source.
+  * Everything else: install from source. Or run it from the source
+    tree: no building is required.
 * There is not a mailing list (will be created if there's a need).
   Also no IRC channel (ditto). Use the distix issue tracker for now.
 * [Blog posts about distix(http://blog.liw.fi/tag/distix/).
 * Licence: GNU GPL v3 or later.
+
+# Contribute
+
+Distix is currently being developed only by [Lars Wirzenius](http://liw.fi).
+To contribute code or documentation, open a ticket with patches in the
+email, or a URL to a git repository to pull from.

Add more to blurb
diff --git a/index2.mdwn b/index2.mdwn
index 196ff38..e005fe8 100644
--- a/index2.mdwn
+++ b/index2.mdwn
@@ -20,6 +20,12 @@ manipulate tickets offline.
 Distix is a command line program. It can also generate a static,
 read-only web site.
 
+For most people, distix is an invisible agent that keeps track of
+issues and bugs by being Cc'd on emails. There is no login required.
+The emails do not need to follow any structure. Each email thread
+becomes its own ticket. The support staff can search and manipulate
+tickets using a command line tool.
+
 # More info
 
 * [Tutorial](http://git.liw.fi/distix/tree/TUTORIAL) in git.

Add draft of new front page
diff --git a/index2.mdwn b/index2.mdwn
new file mode 100644
index 0000000..196ff38
--- /dev/null
+++ b/index2.mdwn
@@ -0,0 +1,40 @@
+[[!meta title="distix - a distributed ticketing system"]]
+
+
+* brief overview of the problem that it solves
+* see https://bestpractices.coreinfrastructure.org/
+
+
+-----------------------------------------------------------------------------
+
+
+# Distix
+
+Distix is a **distributed ticketing system** built on top of **git**
+and **email**. Like ticketing systems in general, it is meant for
+keeping track of support requests, bug reports, etc. Unlike most
+ticketing systems, distix works as distribued as git, and all
+communication if over email. This allows everyone to view, search, and
+manipulate tickets offline.
+
+Distix is a command line program. It can also generate a static,
+read-only web site.
+
+# More info
+
+* [Tutorial](http://git.liw.fi/distix/tree/TUTORIAL) in git.
+* [NEWS](http://git.liw.fi/distix/tree/NEWS)
+* [README](http://git.liw.fi/distix/tree/README)
+* Source code in git: <http://git.liw.fi/distix>
+* Release tarballs: <http://code.liw.fi/debian/pool/main/d/distix/>
+* Issue tracker: the distix uses the tickets are at
+  <...> tracker (send mail to <mailto:...@liw.fi>).
+  The distix repository is at <http://git.liw.fi/distix-bugs/>.
+* To install:
+  * Debian packages: <http://code.liw.fi/debian/pool/main/d/distix/>.
+    See <http://liw.fi/code/> for instructions.
+  * Everything else: install from source.
+* There is not a mailing list (will be created if there's a need).
+  Also no IRC channel (ditto). Use the distix issue tracker for now.
+* [Blog posts about distix(http://blog.liw.fi/tag/distix/).
+* Licence: GNU GPL v3 or later.

Add basic use cases for web UI
diff --git a/arch.mdwn b/arch.mdwn
index 8d5cb9d..92494fc 100644
--- a/arch.mdwn
+++ b/arch.mdwn
@@ -4,6 +4,9 @@ THIS IS UNFINISHED FOR NOW. To help finish it, feel free to meail
 liw@liw.fi with questions if something's unclear to you.
 
 
+[[!toc ]]
+
+
 Introduction
 ========================================================================
 
@@ -181,6 +184,43 @@ in the Maildir in the ticket repository, not the `Message-Id` header.
 Sketch of the web UI
 ------------------------------------------------------------------------
 
-I don't know enough about implementing modern-ish web applications, so
-I leave this section empty for now. I should probably start with
-writing down the main use cases here.
+
+### Personas for use cases
+
+A user is anyone who wants to look at tickets. They do not need to log
+in.
+
+An admin is someone who manages the ticket repository, and closes
+tickets that have been handled and need no further attention anymore.
+Admins need to be logged in to make any changes.
+
+
+### Use case: User reviews open tickets
+
+As a user, I want to review what tickets are currently open, in order
+to not report a duplicate ticket:
+
+1. I open the distix instance's website, which I've found from a
+   project's or company's normal website.
+1. I  see a list of  open tickets, with ticket  id, latest modificaion
+   date, and a title (short summary of ticket) for each ticket.
+1. I read the list of tickets, and open any ticket (by clicking on
+   ticket id or summary) to read all messages about the ticket.
+
+
+### Use case: Admin closes tickets
+
+As an admin, I want to close a ticket that needs no further attention,
+in order to remove it from the list of open tickets:
+
+1. I open the list of open tickets.
+1. I review tickets (opening them as necessary), to find a ticket that
+   can be closed.
+1. In the ticket view, I click on the "close ticket" button or other
+   user interface element.
+1. If I'm not yet logged in, the service requests I do log in.
+1. I log in.
+1. The service marks the ticket as closed.
+1. If I to back to the list of open tickets, the ticket I just closed
+   isn't there.
+

Flesh out more on how the API behaves
diff --git a/arch.mdwn b/arch.mdwn
index 5c84b39..8d5cb9d 100644
--- a/arch.mdwn
+++ b/arch.mdwn
@@ -161,10 +161,22 @@ GET /tickets                |Get list of ticket ids.
 GET /tickets/ID/meta        |Get a ticket's metadata.
 PUT /tickets/ID/meta        |Update a ticket's metadata.
 GET /tickets/ID/msgs        |Get list of a ticket's emails.
-GETT /tickets/ID/msgs/MSGID |Get an email.
+GET /tickets/ID/msgs/MSGID  |Get an email.
 """]]
 
 
+Note that only metadata may be changed. New tickets may not be
+reported, nor can new messages be added. It's not possible to delete
+anything. The API will be grown as needed, however, so these
+limitations may be lifted if there's actual use cases.
+
+Metadata in the API is expressed using JSON to be more convenient for
+most web programmers. Messages are expressed using RFC2822 (details to
+be fixed). Standard HTTP methods and status codes are used.
+
+Message ids for emails in a ticket refer to the basename of messages
+in the Maildir in the ticket repository, not the `Message-Id` header.
+
 
 Sketch of the web UI
 ------------------------------------------------------------------------

Add API endpoints
diff --git a/arch.mdwn b/arch.mdwn
index fc27450..5c84b39 100644
--- a/arch.mdwn
+++ b/arch.mdwn
@@ -153,8 +153,15 @@ The bearer token will be a signed JWT token.
 ### API calls
 
 [[!table data="""
-endpoint    |description
-/foo        |bar bar bar
+endpoint                    |description
+POST /authn                 |Authenticate using Basic Auth, get JWT bearer token.
+GET /meta                   |Get repository metadata.
+PUT /meta                   |Update (all of) repository metadata.
+GET /tickets                |Get list of ticket ids.
+GET /tickets/ID/meta        |Get a ticket's metadata.
+PUT /tickets/ID/meta        |Update a ticket's metadata.
+GET /tickets/ID/msgs        |Get list of a ticket's emails.
+GETT /tickets/ID/msgs/MSGID |Get an email.
 """]]
 
 

Tweak table markup
diff --git a/arch.mdwn b/arch.mdwn
index 7c6567d..fc27450 100644
--- a/arch.mdwn
+++ b/arch.mdwn
@@ -152,9 +152,9 @@ The bearer token will be a signed JWT token.
 
 ### API calls
 
-[[!table text="""
-endpoint    description
-/foo        bar bar bar
+[[!table data="""
+endpoint    |description
+/foo        |bar bar bar
 """]]
 
 

First partial draft of arch doc
diff --git a/arch.mdwn b/arch.mdwn
new file mode 100644
index 0000000..7c6567d
--- /dev/null
+++ b/arch.mdwn
@@ -0,0 +1,167 @@
+[[!meta title="distix architecture"]]
+
+THIS IS UNFINISHED FOR NOW. To help finish it, feel free to meail
+liw@liw.fi with questions if something's unclear to you.
+
+
+Introduction
+========================================================================
+
+Distix is a ticketing system. It's different from most, though not
+unique:
+
+* It's purely email based. All tickets are reported via email and all
+  discussion related to them is done via email. Normal email threading
+  mechanisms (headers `References` and `In-Reply-To`) are used to
+  check which ticket an email belongs so. Distix itself does not send
+  email, and users to not need to mention ticket identifiers. In face,
+  mostly users to not need to even know a ticketing system exists.
+
+* Tickets are stored in a git repository. Since git is a distribued
+  version control system, this makes distix be a distributed ticketing
+  system.
+
+* Tickets have some metadata (e.g., open/closed status), which is
+  manipulated via a command line program. The metadata is also stored
+  in git.
+
+* A set of static HTML pages may be generated from a distix ticket
+  repository. The HTML may be published to allow people to read
+  tickets more easily.
+
+Distix is typically set up so that it has its own, hidden email
+address, and that address is subscribed to a mailing list.
+User then send email to the list, which results in the email reaching
+distix and being imported to a distix ticket repository. Responses to
+user emails would keep the mailing list in the cc header, meaning the
+responses also get imported by distix.
+
+
+Architectural overview
+========================================================================
+
+All data about tickets are stored in a git repository. Emails are
+stored in a [Maildir][] per ticket, each email in its own file.
+Metadata is stored in a [YAML][] file as key/value pairs. This
+structure makes it very easy to avoid git merge conflicts, and also to
+resolve any conflicts that do happen.
+
+[Maildir]: https://en.wikipedia.org/wiki/Maildir
+[YAML]: https://en.wikipedia.org/wiki/YAML
+
+The distix command line program manipulates the git repository
+directly, including making commits. Distix admins only need to use git
+directly to pus
+h/pull changes, if there are more than one instance of
+the repository.
+
+The distix ticket repository is laid out like this:
+
+    repo/
+        repo.yaml               metadata about the repository
+        tickets/
+            ticket_id/          a diretory for each ticket
+                ticket.yaml     metadata about the ticket
+                Maildir/        where all ticket emails are stored
+
+Ticket ids
+------------------------------------------------------------------------
+
+New tickets are assigned a random id, using UUID4. This makes
+collisions super-unlikely when tickets are created in different
+instances of the ticket repository and then merged.
+
+However, since long hexadecimals ids are cumbersome for humans, the UI
+accepts any unique prefix of a ticket id, and additionally allows
+expressing it using [PGP code words][]. The prefixes or code words are
+translated into full ids at the UI extranal boundary, and only full
+ids are used internally.
+
+[PGP code words]: https://en.wikipedia.org/wiki/PGP_word_list
+
+
+Metadata
+------------------------------------------------------------------------
+
+Metadata is expressed using key, value pairs. It is OK for there to be
+multiple instances of a key to cover use cases such as CVE number
+related to a ticket. If it makes semantic sense to only have at most
+one instance of a key, then the code needs to remove all other
+instances when adding a key, value pair, or when merging changes.
+
+Metadata is stored in a YAML file using the obvious form:
+
+    key1:
+    - value1
+    key2:
+    - value2
+    - value3
+
+Any string value that can be expressed in YAML is OK.
+
+
+An interactive management web interface?
+========================================================================
+
+- a service that provides a frontend and an api backend (with authn)
+  for doing what command line app does, intended to be easier to use
+  interactively and for writing ones own automation
+
+This chapter discusses a possible future change to distix, and how it
+might be implemented.
+
+Motivation
+------------------------------------------------------------------------
+
+The distix command line client works, but can be a bit tedious to use.
+As an example, closing tickets requires iterting over "list ticket",
+"review the discussion of a ticket", and "close ticket" commands, with
+some copy-pasting or typing of ticket ids. Doing that kind of thing
+using a UI better suited for it would be good. The obvious choice is a
+web application.
+
+In addition an organisation might want to build some automation of its
+own around the ticketing system to handle parts of its ticket managing
+workflow better. This can be done by manipulating the ticket git
+repository directly, but may be easier to using an HTTP API.
+
+Both of these can be implemented by adding a "distix web API" or
+"distix service" on top of the git repository, and a frontend to
+implement an interactive web application using the API.
+
+
+Sketch of the API
+------------------------------------------------------------------------
+
+I like RESTful APIs. This is a sketch for one which is centered about
+the main concepts in a distix ticket repository.
+
+### Authentication
+
+Authentication and authorization will initially be quite simple and
+implemented by the distix service itself. Later, an identity provider
+may be added, but those tend to be big, ugly, difficult pieces of
+software and distix needs to be really simple for now. The client
+software (or user via the client software) authenticates to the
+service, using a simple username/password combination via HTTP Basic
+Auth. In response, the client will get a bearer token, which it will
+add to all other API requests.
+
+The bearer token will be a signed JWT token.
+
+
+### API calls
+
+[[!table text="""
+endpoint    description
+/foo        bar bar bar
+"""]]
+
+
+
+Sketch of the web UI
+------------------------------------------------------------------------
+
+I don't know enough about implementing modern-ish web applications, so
+I leave this section empty for now. I should probably start with
+writing down the main use cases here.

calendar update
diff --git a/archives/2017.mdwn b/archives/2017.mdwn
new file mode 100644
index 0000000..592399b
--- /dev/null
+++ b/archives/2017.mdwn
@@ -0,0 +1 @@
+[[!calendar type=year year=2017 pages="page(posts/*) and !*/Discussion"]]
diff --git a/archives/2017/01.mdwn b/archives/2017/01.mdwn
new file mode 100644
index 0000000..2441b7a
--- /dev/null
+++ b/archives/2017/01.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=01 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(01) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/02.mdwn b/archives/2017/02.mdwn
new file mode 100644
index 0000000..e295fbe
--- /dev/null
+++ b/archives/2017/02.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=02 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(02) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/03.mdwn b/archives/2017/03.mdwn
new file mode 100644
index 0000000..6c05242
--- /dev/null
+++ b/archives/2017/03.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=03 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(03) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/04.mdwn b/archives/2017/04.mdwn
new file mode 100644
index 0000000..76e7c08
--- /dev/null
+++ b/archives/2017/04.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=04 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(04) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/05.mdwn b/archives/2017/05.mdwn
new file mode 100644
index 0000000..678f63a
--- /dev/null
+++ b/archives/2017/05.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=05 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(05) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/06.mdwn b/archives/2017/06.mdwn
new file mode 100644
index 0000000..2887ab6
--- /dev/null
+++ b/archives/2017/06.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=06 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(06) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/07.mdwn b/archives/2017/07.mdwn
new file mode 100644
index 0000000..0f746b9
--- /dev/null
+++ b/archives/2017/07.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=07 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(07) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/08.mdwn b/archives/2017/08.mdwn
new file mode 100644
index 0000000..4da2722
--- /dev/null
+++ b/archives/2017/08.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=08 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(08) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/09.mdwn b/archives/2017/09.mdwn
new file mode 100644
index 0000000..70f5e1d
--- /dev/null
+++ b/archives/2017/09.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=09 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(09) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/10.mdwn b/archives/2017/10.mdwn
new file mode 100644
index 0000000..04f5435
--- /dev/null
+++ b/archives/2017/10.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=10 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(10) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/11.mdwn b/archives/2017/11.mdwn
new file mode 100644
index 0000000..fe53f8d
--- /dev/null
+++ b/archives/2017/11.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=11 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(11) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2017/12.mdwn b/archives/2017/12.mdwn
new file mode 100644
index 0000000..bb4a435
--- /dev/null
+++ b/archives/2017/12.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=12 year=2017 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(12) and creation_year(2017) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]

calendar update
diff --git a/archives/2016.mdwn b/archives/2016.mdwn
new file mode 100644
index 0000000..ceb79b8
--- /dev/null
+++ b/archives/2016.mdwn
@@ -0,0 +1 @@
+[[!calendar type=year year=2016 pages="page(posts/*) and !*/Discussion"]]
diff --git a/archives/2016/01.mdwn b/archives/2016/01.mdwn
new file mode 100644
index 0000000..69e4612
--- /dev/null
+++ b/archives/2016/01.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=01 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(01) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/02.mdwn b/archives/2016/02.mdwn
new file mode 100644
index 0000000..359afa3
--- /dev/null
+++ b/archives/2016/02.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=02 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(02) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/03.mdwn b/archives/2016/03.mdwn
new file mode 100644
index 0000000..0c1dce2
--- /dev/null
+++ b/archives/2016/03.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=03 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(03) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/04.mdwn b/archives/2016/04.mdwn
new file mode 100644
index 0000000..d744e37
--- /dev/null
+++ b/archives/2016/04.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=04 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(04) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/05.mdwn b/archives/2016/05.mdwn
new file mode 100644
index 0000000..2ab7ec1
--- /dev/null
+++ b/archives/2016/05.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=05 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(05) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/06.mdwn b/archives/2016/06.mdwn
new file mode 100644
index 0000000..08f3c8e
--- /dev/null
+++ b/archives/2016/06.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=06 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(06) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/07.mdwn b/archives/2016/07.mdwn
new file mode 100644
index 0000000..16e56ef
--- /dev/null
+++ b/archives/2016/07.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=07 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(07) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/08.mdwn b/archives/2016/08.mdwn
new file mode 100644
index 0000000..ed1d4b4
--- /dev/null
+++ b/archives/2016/08.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=08 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(08) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/09.mdwn b/archives/2016/09.mdwn
new file mode 100644
index 0000000..d9c34fd
--- /dev/null
+++ b/archives/2016/09.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=09 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(09) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/10.mdwn b/archives/2016/10.mdwn
new file mode 100644
index 0000000..bf00469
--- /dev/null
+++ b/archives/2016/10.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=10 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(10) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/11.mdwn b/archives/2016/11.mdwn
new file mode 100644
index 0000000..611c2e4
--- /dev/null
+++ b/archives/2016/11.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=11 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(11) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2016/12.mdwn b/archives/2016/12.mdwn
new file mode 100644
index 0000000..a374294
--- /dev/null
+++ b/archives/2016/12.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=12 year=2016 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(12) and creation_year(2016) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]

calendar update
diff --git a/archives/2015.mdwn b/archives/2015.mdwn
new file mode 100644
index 0000000..303f603
--- /dev/null
+++ b/archives/2015.mdwn
@@ -0,0 +1 @@
+[[!calendar type=year year=2015 pages="page(posts/*) and !*/Discussion"]]
diff --git a/archives/2015/01.mdwn b/archives/2015/01.mdwn
new file mode 100644
index 0000000..7930876
--- /dev/null
+++ b/archives/2015/01.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=01 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(01) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/02.mdwn b/archives/2015/02.mdwn
new file mode 100644
index 0000000..6017022
--- /dev/null
+++ b/archives/2015/02.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=02 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(02) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/03.mdwn b/archives/2015/03.mdwn
new file mode 100644
index 0000000..ccc0743
--- /dev/null
+++ b/archives/2015/03.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=03 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(03) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/04.mdwn b/archives/2015/04.mdwn
new file mode 100644
index 0000000..a79d46e
--- /dev/null
+++ b/archives/2015/04.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=04 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(04) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/05.mdwn b/archives/2015/05.mdwn
new file mode 100644
index 0000000..1ad2829
--- /dev/null
+++ b/archives/2015/05.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=05 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(05) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/06.mdwn b/archives/2015/06.mdwn
new file mode 100644
index 0000000..58cd2cb
--- /dev/null
+++ b/archives/2015/06.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=06 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(06) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/07.mdwn b/archives/2015/07.mdwn
new file mode 100644
index 0000000..14cac40
--- /dev/null
+++ b/archives/2015/07.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=07 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(07) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/08.mdwn b/archives/2015/08.mdwn
new file mode 100644
index 0000000..65f1bc8
--- /dev/null
+++ b/archives/2015/08.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=08 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(08) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/09.mdwn b/archives/2015/09.mdwn
new file mode 100644
index 0000000..d772ddf
--- /dev/null
+++ b/archives/2015/09.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=09 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(09) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/10.mdwn b/archives/2015/10.mdwn
new file mode 100644
index 0000000..e22ac54
--- /dev/null
+++ b/archives/2015/10.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=10 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(10) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/11.mdwn b/archives/2015/11.mdwn
new file mode 100644
index 0000000..1fd564b
--- /dev/null
+++ b/archives/2015/11.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=11 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(11) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/12.mdwn b/archives/2015/12.mdwn
new file mode 100644
index 0000000..5ae9222
--- /dev/null
+++ b/archives/2015/12.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=12 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(12) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]

Add more lies
diff --git a/index.mdwn b/index.mdwn
index 6376e21..85eb46f 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,6 +1,8 @@
 # Distributed ticketing system
 
-This web site is a lie. It's full of lies in order to be a placeholder.
+This web site is a lie. This sentence is a lie. The previous sentence
+may be correct. It is possible that nothing exists, and we're merely
+the figments of our own imaginations.
 
 distix is a distributed ticketing system, aimed at handling support
 issues and bugs. For most people, it is an invisible agent that keeps

Add blurb
diff --git a/index.mdwn b/index.mdwn
index be4f451..6376e21 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1 +1,14 @@
-Distix
+# Distributed ticketing system
+
+This web site is a lie. It's full of lies in order to be a placeholder.
+
+distix is a distributed ticketing system, aimed at handling support
+issues and bugs. For most people, it is an invisible agent that keeps
+track of issues and bugs by being Cc'd on emails. There is no login
+required. The emails do not need to follow any structure. Each email
+thread becomes its own ticket. The support staff can search and
+manipulate tickets using a command line tool.
+
+distix is built using git, YAML, and Maildirs. This allows tickets to
+be handled entirely offline, and synchronised between machines and
+staff. There is currently no web interface.

Reset contents
diff --git a/archives.mdwn b/archives.mdwn
deleted file mode 100644
index d07b73b..0000000
--- a/archives.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!if test="archives/*" then="""
-Browse through blog archives by year:
-[[!map pages="./archives/* and !./archives/*/* and !*/Discussion"]]
-"""
-else="""
-You need to use the `ikiwiki-calendar` program to generate calendar-based
-archive pages.
-"""]]
diff --git a/archives/2015.mdwn b/archives/2015.mdwn
deleted file mode 100644
index 303f603..0000000
--- a/archives/2015.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-[[!calendar type=year year=2015 pages="page(posts/*) and !*/Discussion"]]
diff --git a/archives/2015/01.mdwn b/archives/2015/01.mdwn
deleted file mode 100644
index 7930876..0000000
--- a/archives/2015/01.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=01 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(01) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/02.mdwn b/archives/2015/02.mdwn
deleted file mode 100644
index 6017022..0000000
--- a/archives/2015/02.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=02 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(02) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/03.mdwn b/archives/2015/03.mdwn
deleted file mode 100644
index ccc0743..0000000
--- a/archives/2015/03.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=03 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(03) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/04.mdwn b/archives/2015/04.mdwn
deleted file mode 100644
index a79d46e..0000000
--- a/archives/2015/04.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=04 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(04) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/05.mdwn b/archives/2015/05.mdwn
deleted file mode 100644
index 1ad2829..0000000
--- a/archives/2015/05.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=05 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(05) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/06.mdwn b/archives/2015/06.mdwn
deleted file mode 100644
index 58cd2cb..0000000
--- a/archives/2015/06.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=06 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(06) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/07.mdwn b/archives/2015/07.mdwn
deleted file mode 100644
index 14cac40..0000000
--- a/archives/2015/07.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=07 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(07) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/08.mdwn b/archives/2015/08.mdwn
deleted file mode 100644
index 65f1bc8..0000000
--- a/archives/2015/08.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=08 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(08) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/09.mdwn b/archives/2015/09.mdwn
deleted file mode 100644
index d772ddf..0000000
--- a/archives/2015/09.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=09 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(09) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/10.mdwn b/archives/2015/10.mdwn
deleted file mode 100644
index e22ac54..0000000
--- a/archives/2015/10.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=10 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(10) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/11.mdwn b/archives/2015/11.mdwn
deleted file mode 100644
index 1fd564b..0000000
--- a/archives/2015/11.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=11 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(11) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/12.mdwn b/archives/2015/12.mdwn
deleted file mode 100644
index 5ae9222..0000000
--- a/archives/2015/12.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-[[!sidebar content="""
-[[!calendar type=month month=12 year=2015 pages="page(posts/*) and !*/Discussion"]]
-"""]]
-
-[[!inline pages="creation_month(12) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/comments.mdwn b/comments.mdwn
deleted file mode 100644
index e22b50a..0000000
--- a/comments.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!sidebar content="""
-[[!inline pages="comment_pending(./posts/*)" feedfile=pendingmoderation
-description="comments pending moderation" show=-1]]
-Comments in the [[!commentmoderation desc="moderation queue"]]:
-[[!pagecount pages="comment_pending(./posts/*)"]]
-"""]]
-
-Recent comments on posts in the [[blog|index]]:
-[[!inline pages="./posts/*/Discussion or comment(./posts/*)"
-template="comment"]]
diff --git a/index.mdwn b/index.mdwn
index d08446d..be4f451 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,8 +1 @@
-[[!if test="enabled(sidebar)" then="""
-[[!sidebar]]
-""" else="""
-[[!inline pages=sidebar raw=yes]]
-"""]]
-
-[[!inline pages="page(./posts/*) and !*/Discussion" show="10"
-actions=yes rootpage="posts"]]
+Distix
diff --git a/posts.mdwn b/posts.mdwn
deleted file mode 100644
index 2bd0f1d..0000000
--- a/posts.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-Here is a full list of posts to the [[blog|index]].
-
-[[!inline pages="page(./posts/*) and !*/Discussion" archive=yes feedshow=10 quick=yes trail=yes]]
diff --git a/posts/first_post.mdwn b/posts/first_post.mdwn
deleted file mode 100644
index bd4c803..0000000
--- a/posts/first_post.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-This is my first post.
diff --git a/posts/second_post.mdwn b/posts/second_post.mdwn

(Diff truncated)
calendar update
diff --git a/archives/2015.mdwn b/archives/2015.mdwn
new file mode 100644
index 0000000..303f603
--- /dev/null
+++ b/archives/2015.mdwn
@@ -0,0 +1 @@
+[[!calendar type=year year=2015 pages="page(posts/*) and !*/Discussion"]]
diff --git a/archives/2015/01.mdwn b/archives/2015/01.mdwn
new file mode 100644
index 0000000..7930876
--- /dev/null
+++ b/archives/2015/01.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=01 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(01) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/02.mdwn b/archives/2015/02.mdwn
new file mode 100644
index 0000000..6017022
--- /dev/null
+++ b/archives/2015/02.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=02 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(02) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/03.mdwn b/archives/2015/03.mdwn
new file mode 100644
index 0000000..ccc0743
--- /dev/null
+++ b/archives/2015/03.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=03 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(03) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/04.mdwn b/archives/2015/04.mdwn
new file mode 100644
index 0000000..a79d46e
--- /dev/null
+++ b/archives/2015/04.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=04 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(04) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/05.mdwn b/archives/2015/05.mdwn
new file mode 100644
index 0000000..1ad2829
--- /dev/null
+++ b/archives/2015/05.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=05 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(05) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/06.mdwn b/archives/2015/06.mdwn
new file mode 100644
index 0000000..58cd2cb
--- /dev/null
+++ b/archives/2015/06.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=06 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(06) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/07.mdwn b/archives/2015/07.mdwn
new file mode 100644
index 0000000..14cac40
--- /dev/null
+++ b/archives/2015/07.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=07 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(07) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/08.mdwn b/archives/2015/08.mdwn
new file mode 100644
index 0000000..65f1bc8
--- /dev/null
+++ b/archives/2015/08.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=08 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(08) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/09.mdwn b/archives/2015/09.mdwn
new file mode 100644
index 0000000..d772ddf
--- /dev/null
+++ b/archives/2015/09.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=09 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(09) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/10.mdwn b/archives/2015/10.mdwn
new file mode 100644
index 0000000..e22ac54
--- /dev/null
+++ b/archives/2015/10.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=10 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(10) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/11.mdwn b/archives/2015/11.mdwn
new file mode 100644
index 0000000..1fd564b
--- /dev/null
+++ b/archives/2015/11.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=11 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(11) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/archives/2015/12.mdwn b/archives/2015/12.mdwn
new file mode 100644
index 0000000..5ae9222
--- /dev/null
+++ b/archives/2015/12.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=12 year=2015 pages="page(posts/*) and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(12) and creation_year(2015) and page(posts/*) and !*/Discussion" show=0 feeds=no reverse=yes]]

initial commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..eecda60
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.ikiwiki
diff --git a/archives.mdwn b/archives.mdwn
new file mode 100644
index 0000000..d07b73b
--- /dev/null
+++ b/archives.mdwn
@@ -0,0 +1,8 @@
+[[!if test="archives/*" then="""
+Browse through blog archives by year:
+[[!map pages="./archives/* and !./archives/*/* and !*/Discussion"]]
+"""
+else="""
+You need to use the `ikiwiki-calendar` program to generate calendar-based
+archive pages.
+"""]]
diff --git a/comments.mdwn b/comments.mdwn
new file mode 100644
index 0000000..e22b50a
--- /dev/null
+++ b/comments.mdwn
@@ -0,0 +1,10 @@
+[[!sidebar content="""
+[[!inline pages="comment_pending(./posts/*)" feedfile=pendingmoderation
+description="comments pending moderation" show=-1]]
+Comments in the [[!commentmoderation desc="moderation queue"]]:
+[[!pagecount pages="comment_pending(./posts/*)"]]
+"""]]
+
+Recent comments on posts in the [[blog|index]]:
+[[!inline pages="./posts/*/Discussion or comment(./posts/*)"
+template="comment"]]
diff --git a/index.mdwn b/index.mdwn
new file mode 100644
index 0000000..d08446d
--- /dev/null
+++ b/index.mdwn
@@ -0,0 +1,8 @@
+[[!if test="enabled(sidebar)" then="""
+[[!sidebar]]
+""" else="""
+[[!inline pages=sidebar raw=yes]]
+"""]]
+
+[[!inline pages="page(./posts/*) and !*/Discussion" show="10"
+actions=yes rootpage="posts"]]
diff --git a/posts.mdwn b/posts.mdwn
new file mode 100644
index 0000000..2bd0f1d
--- /dev/null
+++ b/posts.mdwn
@@ -0,0 +1,3 @@
+Here is a full list of posts to the [[blog|index]].
+
+[[!inline pages="page(./posts/*) and !*/Discussion" archive=yes feedshow=10 quick=yes trail=yes]]
diff --git a/posts/first_post.mdwn b/posts/first_post.mdwn
new file mode 100644
index 0000000..bd4c803
--- /dev/null
+++ b/posts/first_post.mdwn
@@ -0,0 +1 @@
+This is my first post.
diff --git a/posts/second_post.mdwn b/posts/second_post.mdwn
new file mode 100644
index 0000000..5cc6c38
--- /dev/null
+++ b/posts/second_post.mdwn
@@ -0,0 +1 @@
+This is the second post to this example blog. To add new posts, just add files to the posts/ subdirectory, or use the web form.
diff --git a/sidebar.mdwn b/sidebar.mdwn
new file mode 100644
index 0000000..e0895f6
--- /dev/null
+++ b/sidebar.mdwn
@@ -0,0 +1,10 @@
+[[!if test="enabled(calendar)" then="""
+[[!calendar pages="page(./posts/*) and !*/Discussion"]]
+"""]]
+
+[[Recent Comments|comments]]
+
+[[Archives]]
+
+[[Tags]]:
+[[!pagestats style="list" pages="./tags/*" among="./posts/*"]]
diff --git a/tags.mdwn b/tags.mdwn
new file mode 100644
index 0000000..b5eca5b
--- /dev/null
+++ b/tags.mdwn
@@ -0,0 +1,3 @@
+[[!pagestats pages="./tags/*" among="./posts/*"]]
+
+On the right you can see the tag cloud for this blog.