# cassiopeia

A simple time tracking tool for the kookie office ecosystem.

The kookie office ecosystem is a set of free software, plain text
tools that I use to run my business.  The other tool you may want to
look at is called [invoice]!

[invoice]: https://git.spacekookie.de/kookienomicon/tree/infra/libkookie/overlays/kookie/invoice
    
## How to use

Each time file only tracks a single customer or project that you are
working on.  The time file itself is simply a set of commands,
followed by associated data.  The following four keywords exist:

* `HEADER`: define metadata about the client, and store the time file
  version to avoid parsing with an incompatible version in the future
* `START`: opens a work session with a local timezone timestamp
* `STOP`: closes a work session with a local timezone timestamp
* `INVOICE`: mark the previous section of sessions as "billed".  This
  is useful if a project is long-running and you want to bill parts of
  the work that you have been doing.

It is recommended not to write this file by hand, although you
definitely can.  Lines starting with `;;` are comments and will be
ignored.  Careful though: they will be stripped from the file next
time that cassiopeia writes it out.  Comment pass-through is on the
roadmap, but not yet implemented!

`cass(1)` comes with a few commands

- `start` will start tracking for an account
- `stop` will stop tracking and error if no open slot exists
- `invoice` will add an invoice block to the time file

All commands require a `-f` (or `--file`) parameter to know which time
file they are operating on.  If none is provided, the `time.cass` file
in the current working directory is tried.  If this does not exist,
the program exits with an error.

By default time values are rounded to the next 15 minutes.  To disable
this, pass `-r` to either the `start` or `stop` commands.


## Interaction with invoice

cassiopeia is designed to output `.yml` configuration that can be used
to generate invoices for your clients.  For this, it needs access to
your client database, and uses the `client` and `project` keys in your
time file header to look them up.  If none are present, you can pass
this data to the `invoice` command manually with `--client` and
`--project`.  You provide your client database path with `--client-db`

The following command will generate an invoice for a project done for
the `ACME inc.` client:

```
$ cass invoice --client-db /home/office/clients.yml --client acme --project world-domination
```

Contrutions welcome via my [public inbox]

[public-inbox]: https://lists.sr.ht/~spacekookie/public-inbox
