by andreapavoni

andreapavoni / nova

An attempt to port/rebuild Spree, an open source e-commerce solution, with Elixir and Phoenix.

126 Stars 10 Forks Last release: Not found 95 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Build Status Coverage Status Stories in Ready

An attempt to port/rebuild Spree, an open source e-commerce solution, with Phoenix.


Spree is an excellent product however, for several reasons, it started to show some limits:

  • being written in Ruby and Rails requires a lot of hosting resources
  • it became a big, monolithic piece of software, really hard to customize
  • it slowed down the development pace (perhaps because of the point above)

So here's the deal: why not to port/rebuild Spree with Elixir and Phoenix? The main idea is to take inspiration from the many Spree's good parts and build a new generation ecommerce for the next years.

Roadmap, a sort of

See TODO for more details, meanwhile, here there are some intentions:

Short term

The first short term goal is to quickly build a bare-bones MVP with the core models (eg:

, ...) and the necessary code to glue them through isolated, well defined commands. Then, at a very high level:
  • get a monolithic app, for now
  • as a Customer (say a guest user for the first iteration), I want to purchase products (add to cart -> do checkout)
  • as an Admin, I want to manage products and orders through an HTTP-JSON API

Mid term

Once we get an initial, working, very basic product, we can start to split the whole app into components. Very similar to Spree:

  • core
    : contains the core models and their basic integrations (queries, commands, ...);
  • api
    : all actions should be done from an HTTP-JSON API, so anyone can build its custom frontend (eg: a Single Page App, command line, mobile app, ...), especially for admins;
  • frontend
    : uses plain old server-rendered HTML pages;
  • admin
    : not a top priority. it's like
    , for admins;
  • extensions: everything that doesn't strictly fit into the above components, should be done in a dedicated package. After all, some features are very specific to certain needs, we don't want another monolithic piece of software.

Long term

Don't know right now, world domination™? :-)


  1. Be nice with others
  2. Check issues or, if your prefer kanban boards, we have waffle too
  3. Fork this repo
  4. Write code (and tests)
  5. Open a PR


  1. Copy
    , then edit it to set secret configs
  2. Install dependencies with
    mix deps.get
  3. Create and migrate your database with
    mix ecto.create && mix ecto.migrate
  4. Run tests with
    mix test
  5. Install npm dependencies with
    npm install
  6. Start Phoenix endpoint with
    mix phoenix.server
  7. Visit
    from your browser


We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.