Eldum Rétt - Food delivery service built on Decoupled Drupal Commerce with React Native App
Case descriptionAs a customer centric company, Eldum Rétt has very complex requirements for its online services. Customers need to be able to for example to
* individually configure their food boxes with recipes from a selected list
* adjust the number of portions that they want to cook
* select the days of the week they want food delivered for
´´* manage their delivery times and places
* change their subscription settings, e.g. to pause deliveries during absences
The original website was built in 2014 on Drupal 7 with Drupal Commerce and wasn’t flexible enough to sustainably accomodate all these requirements. So the decision was made to move the site to Drupal 8 and Drupal Commerce 2 and also add a React Native based mobile app that would communicate with the main Drupal driven website. This project went live in November 2018 and the app was launched in spring 2019.
Case goals and resultsThe relaunch of Eldum Rétt on a new platform was necessary to allow the company to explore new market opportunities like selling groceries and flexible meal kits, providing a better user experience through a native app and state of the art customer engagement through a modern messaging framework. This would have not been possible with the old systems technology stack.
The meal kit product features a complexity that is probably close to HelloFresh, Blue Apron or Plated. The subscription and shipping systems are close (even more flexible) than what Amazon offers.
ChallengesThe subscription system capabilities of Eldum Rétt go way beyond what you are used e.g. from Amazon or the like. Any subscribable product can be purchased, and for each subscription the user can skip certain deliveries or pause them completely. The customer can also reactivate any subscription and the system will make sure that the subscriptions will pick up on the correct intervals again. Furthermore, all subscriptions of any given customer will get bundled into a single order when being billed, ensuring that the customer will get only one bill for all subscriptions that have the same delivery date.
Flexible meal kits and menus
Eldum Rétt allows the flexible configuration of meal kits. Not only the amount of meals and the amount of people served are completely flexible (within configured constraints), but also the system architecture allows for customers to rearrange meals within a delivery. These scenarios are quite complex, as pricing is subject to change on a per-order bases (depending on product pricing).
Eldum Rétt allows for flexible schedules. This means that the type of schedule can be defined.
E.g. it allows not only for the known week-to-week schedules (renewed every thursday and delivered the week after), same week or even same day schedules are possible. Also, schedules with two week (or longer) buying periods and flexible delivery periods are possible. The system will automatically present the client with the available products and matching delivery options.+
Shipping and packing system
Eldum Rétt uses a smart packing algorithm. Every product (meal kit or grocery) has its physical dimensions (width, height, depth, weight) stored in the system. The system also has the available boxes "package sizes" stored, and will dynamically calculate the optimal packing of a delivery (and the shipping costs).
Shipping also provides the customer with the option to bundle deliveries of the cart into as few deliveries as possible or the greater flexibility of choosing different deliveries for each product. This also takes in account the shipping availability of the products (e.g. some have home delivery available, others not. This could also depend on the customers postal code).
Eldum Rétt features an advanced notification system. Using Infobip's omni messaging, the system can notify the customer about relevant events (purchases, status changes, payments, pick-up reminders and any other) in defined scenarios: e.g. the first option would be to notify the customer via a push notification to the Eldum rétt app. If the customer does not have the app, the next option could be an email. If the customer does not open the email in a certain period of time, a SMS would be sent.
Notifications are also presented to the customer in an activity log on the website and in the app.
API / OAuth
Eldum Rétt has vast API capabilities. OAuth is available for authenticating against the platform (as well as facebook and the like). Furthermore Eldum Rétt has GraphQL built in, which allows extracting literally any information from the system. This is used primarily by the app, but allows any third party system to access the data on the system in a flexible and secure way.
The capabilities of recipe information has been greatly improved compared to the old system. Recipes now contain detailed and structured information:
Cooking instructions with timers: the instructions are separated into steps, which also feature exceptions depending on the amount of persons served. Furthermore, calculation of needed ingredient amounts is completely dynamic (instructions will be correct for any persons served). Also, cooking timers can be defined for any step
Ingredients details: ingredients are stored with their nutritional information (which are dynamically calculated into the recipes per-serving nutritional information and existing allergens).
Other: information about difficulty, ratings, chef, category and cooking time are also available to the user.
Most of the available data from the old system had to be migrated into Eldum Rétt. This has been a time consuming task, both because of the different data structure (many on-the-fly mappings and dependencies needed to be resolved) and the amount of data sets (more than a quarter million orders, ~ 1.2 million data sets were migrated in total). This also had to happen in a way, that customers would get delivered an order the they placed just a few hours earlier in the old system.
The search is only available to the manager and employees of the company. This is an important feature in the webshop as the whole order management takes place in the backend of the system. There are many different search pages in the system that uses different facettes depending on the usecase. For this SolR and SearchAPI module was used.
Community contributions1xINTERNET contributed patches mostly for Commerce and Commerce recurring modules.
Here is a list of other main modules used in this project:
* Message stack
* Advanced Queue