Guest Customer Checkout
Overview
Problematic - Auth0 & MAU (Monthly Active Users)
Auth0's monthly price is defined by the amount of unique number of MAU by tenant.
This means that if we include our guest customers into Auth0's User Pool, every guest checkout performed will count as +1 on the MAU calculation.
We've checked the previous year's guest customers on rapha.cc, and the number can get high enough to become a problem in our monthly bill.
Proposal
This document explains the Auth0 proposal on guest checkout both in current Hybris & future CommerceLayer solutions.
The main idea is to use the Hybris-CommerceLayer guest checkout capabilities, where the guest customer is saved as an internal user on both framework's databases, and not including them into Auth0's User Pool.
Only when the customer decides to register, this will be included in Auth0.
Guest Checkout in Hybris
The following diagram (available in Gitlab repo) represents the guest checkout flow in Hybris

- New pre-checkout page to give the available options (Login, Signup, Guest)
- If guest chosen, the process remains as-is:
- Email captured on 1st step
- Customer temporary created in Hybris
- Option to register after order is placed - This would trigger the signup via Universal Login
- Customer created in Auth0's User pool
- (and 6) On the callback to Hybris, we have a different scenario from the signup flow, where we transform the temporary user previously saved as a registered one
Guest Checkout in Hybris
The flow described on the diagram (see Gitlab) represents the guest checkout using CommerceLayer

- New pre-checkout page to give the available options (Login, Signup, Guest)
- If guest chosen, redirect to CommerceLayer hosted checkout (depending on the requirements, this might be our own fork, self-hosted)
- Customer provides an email
- Order is placed under a prospect-guest user
- If there's yet another purchase as a guest user, with the same email, the customer appears as “guest - repeat”
- See below for further information regarding types of users in CommerceLayer
- Option to register after order is placed - This would trigger the signup via Universal Login
- Customer created in Auth0's User pool
- On the callback to FE's React app, we will also have a different scenario from the signup flow, sending a request to CommerceLayer's API to transform the current guest user to
registered
A view into CommerceLayer's Customers
It is worth mentioning that CommerceLayer has a very flexible approach for guest users. From their own documentation:
Prospect customers are those that didn’t place any orders yet. A prospect becomes ‘acquired’ when they place their first order. Customers with more than one order become ‘repeat’ customers.
This means that every customer is part of two subsets, attending to their
- Status of their registration (guest / registered)
- Orders placed (none / one / more than one)
In the example below, felix.guest@rapha.cc is a guest customer that hasn't placed any orders yet

And in the next one, for example, john.kilpatrick@rapha.cc is a registered customer that has placed 3 orders so far, while fabrizio@commercelayer.io is a guest user with more than one order placed.

Final thoughts on CommerceLayer guests
To summarise, CommerceLayer allows guest users to place orders, and if the same email is used for subsequent orders, this is grouped under the same guest account (Hybris doesn't).
If the customer decides to become a registered one after n previous placed orders, we would be able to bring their order history back.