# 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

```
config/
  domain: "example.com"
domains/
  example.com/
    accounts/
      foo@example.com/
        config/
        emails/
    config/
      key: []byte(...)
      cert: []byte(...)
    

```
