# Crockery design

## Overview

We need:

* SMTP server
  * Receive emails -> middlewares -> storage
  * https://github.com/emersion/go-smtp ?
* IMAP server
  * Receive logins
* HTTP server
  * Serve autodiscovery bumpf
  * ActiveSync protocol
* Storage
  * Accounts
    * Passwords!
    * Emails
  * TLS keys + certificates
  * Search emails - some sort of inverted index necessary
    * https://github.com/blevesearch/bleve ?
  * Embedded database best. Ideally we have a single file to work with
    * https://github.com/coreos/bbolt
    * https://github.com/asdine/storm

## Database structure

I'm not sure what storm does under the hood. It seems clever. We have the
following, though:

* K-V store
  * `config/domain`
  * `domains/<domain>/config/cert`
  * `domains/<domain>/config/key`
* ORM
  * `Account`
    * `Username`
    * `Admin`
    * `Wildcard`
    * `PasswordHash`
