Architecture
============
Backend
-------
The backend is a `Flask `_ application which is expected to run on **Python 3.6+**
using type annotations.
The persistence layer is handled using SQLAlchemy via `Flask-SQLAlchemy `_.
Database schema migrations are performed by `Alembic `_.
The REST API follows the `JSON-API standard `_ using
`Flask-REST-JSONAPI `_.
API that fits an RPC model better than a REST model is serialized using `marshmallow `_
which is what **Flask-REST-JSONAPI** uses anyway.
Frontend
--------
The frontend framework is `React `_, using `Redux `_ for state
management. The source is written in `TypeScript `_ and transpiled to ES5.
The UI framework/CSS framework is `semantic-ui `_. We use the React components for this as well.