The initial target of this project is to build a headless CMS in and for Elixir that can be used either as an embeddable library in your application or as a stand-alone service.
Why headless? Long term there may well be a case for building out the website generation part and integrating that more. But there is a lot of bang for the buck in terms of time and a very wide use-case for headless CMS:es. Most Elixir enthusiasts are developers. Targeting headless first means we constrain the scope significantly.
We are targeting Phoenix and Ecto which shouldn't be particularly controversial. We are likely not committing to a single database but would at least want to support Postgres and Sqlite which likely means MySQL will work fine too.
Part 1: The Ecto Entity library
Look at almost any popular CMS and they will have runtime (not compile-time) editing of "content types" such as "pages" or "posts". You create them, you can manage what fields they have, all without redeploying code. This presents a bit of a challenge with how Ecto does compile time schema generation. Fortunately Ecto supports schemaless everything (queries, likely using dynamic fragments a lot, sometimes raw queries and schemaless changeset). All the tools around Repo, Query and Migrator can be called at runtime with some alternative data structures. This library should make some opinionated decisions around building "entities", our conception of content types (they aren't just for content O_o). The library should make working with Ecto in this manner as convenient as possible.
This is the necessary foundation for enabling a runtime CMS system on top of Ecto while retaining most of the niceties of Ecto and making programming against it familiar to anyone familiar with Ecto.