E-Commerce Backend API in Hapi.js and RethinkDB
JavaScript HTML
Switch branches/tags
Clone or download



Atlas is an E-Commerce Backend (RESTful) API.

It was built with the Yoonic E-Commerce Storefront application in mind and you can check it out live powering NICI Store!

Why write plugins when you can build your own e-commerce platform?

Swagger API Documentation

API Resources

After deploying and running Atlas locally, you can access the Swagger API Documentation by browsing to localhost:8000/docs.

Overall, Atlas provides services for:

  • User Accounts
  • Contents
    • Homepage Banners
    • Articles
    • Content common to all Product Pages
    • ... <-- Whatever you wish :)
  • Products
  • Collections
    • Products
    • Contents
    • Customers
    • ... <-- Your own segmentation engine!
  • Carts
  • Checkouts
  • Orders

Batteries Included

Storefront has a few more tricks up its sleeve ;)



In order to setup, run and start hacking the app locally you just have to:

  1. Clone this repository
  2. npm install
  3. Start rethinkdb server and, in a browser, navigate to http://localhost:8080/#tables (RethinkDB admin)
  4. Create a database named atlas
  5. In that database, create the following tables:
  • Carts
  • Checkouts
  • Collections
  • Contents
  • Orders
  • Products
  • Users
  1. Create a JWT secret key (e.g. using openssl rand -base64 32) and either:
  • Setup the env variable JWT_KEY
  • Add it to the configuration file at config/development in app.jwtKey
  1. In the directory of the Atlas clone, run npm run dev

At this point, you should be have your local deploy of Atlas running on http://localhost:8000 and can point your local deploy of Storefront to it.

Admin Account

In order to access Storefront's Admin and perform certain API calls, an Administrator account is required.

  1. Create an account (either via the API or Storefront)
  2. In a browser, navigate to http://localhost:8080/#dataexplorer
  3. Run the following query r.db('atlas').table('Users').filter({email: '{YOUR_USER_EMAIL}'}).update({status: 'active', scope: ['admin']}); (don't forget to replace {YOUR_USER_EMAIL} with the email address of the account you created)


Comments, suggestions, doubts, flames, /dev/random, etc...