Reaction Commerce's headless ecommerce storefront - Next.js, GraphQL, React
Clone or download
kieckhafer Merge pull request #477 from reactioncommerce/feat-aldeed-multi-payment
Update checkout to support multiple payments
Latest commit cc2f724 Jan 18, 2019

Reaction Storefront Next.js Starter Kit

FOSSA Status

Note: This project is a work in progress and should not be used in production at this time.

Reference headless ecommerce storefront for Reaction Commerce v 2.0.0.


Getting Started

Follow the Reaction Platform docs to install and run all the services necessary to run the Starter Kit:

Directory: Service URL
reaction: GraphQL API localhost:3000/graphql-alpha
reaction: GraphQL API playground localhost:3000/graphiql
reaction: Classic UI localhost:3000
reaction: MongoDB localhost:27017
reaction-hydra: oryd/hydra localhost:4444
reaction-next-starterkit localhost:4000


Set up Stripe

When running the storefront and Reaction for the first time, you will need to configure Stripe payment processing and shipping options to test a complete order checkout flow. After signing up for a Stripe API key, follow these steps:

  1. Add public Stripe API key (STRIPE_PUBLIC_API_KEY) to .env.
  2. Open the Reaction Classic app, at http://localhost:3000. Log in as an Admin user.
  3. Open Payments: Enable Stripe by checking the box. Add a Stripe secret key and public key.
  4. Open Shipping: Enable flat-rate shipping by checking the box. Enable at least one type of flat-rate shipping by clicking on the option in the table and checking the box.

Set up Analytics event tracking

Read the docs for setting up Segment or a custom analytics tracker



The Reaction Platform runs the Starterkit with Docker, so you will have to use Docker commands to view logs, run commands inside the container and more. To run commands specifically for the Starterkit, make sure to change directories into the reaction-next-starterkit directory within the reaction-platform repository:

cd reaction-next-starterkit

Build and run in development mode with logs

docker-compose up -d && docker-compose logs -f

Running Commands inside the container

docker-compose run --rm web [command]

Run any command inside a Docker container and then remove the container. Use this to run any tooling operations. Remember your project directory will be mounted and things will usually just work.

Running Tests in Container

Run tests locally

docker-compose run --rm web yarn test

Run tests locally without cache (this can be helpful if changes aren't showing up)

docker-compose run --rm web yarn test --no-cache

To update a failing snapshot (if you've made changes to a component)

docker-compose run --rm web yarn test -u

To run snyk security tests (this will run tests in the same way as CI)

docker-compose run --rm web sh -c "cp package.json ../ && cp .snyk ../ && cd .. && snyk auth && snyk test"

To run eslint

docker-compose run --rm web eslint src

Yarn Commands

Yarn & NPM should run inside the Docker container. We've taken steps to ensure that the node_modules are placed into a cacheable location. If you run Yarn locally, the node_modules are written directly to the project directory and take precedence over those from the Docker build. Yarn Add

docker-compose run --rm web yarn add --dev [package]

Yarn Install

⚠️ Always rebuild the image and start a new container after modifying yarn.lock or Dockerfile!

docker-compose run --rm web yarn install
docker-compose down --rmi local
docker-compose up -d --build

Testing reaction-component-library components in the starterkit

Sometimes we need to test reaction-component-library components in the context of the starterkit. Unfortunately, there isn't an easy wasy to do this within our Docker containers, so we need to run the starterkit outside of docker.

  1. cd to your local reaction-component-library repo.
  2. Git checkout the proper branch that you want to link
  3. cd into the package folder of this repo, and run the command yarn install followed by yarn build
  4. After the build is done, cd into the new dist folder it just built and run yarn link to allow the library to be installed into the starterkit. This will link @reactioncommerce/components
  5. Inside the reaction-next-starterkit repo, temporarily rename your .yarnrc file to anything else (i.e. .yarnrc-temp)
  6. Run yarn install and then the command yarn link "@reactioncommerce/components" to set the local version as an override of the published npm version
  7. Inside your .env file, change INTERNAL_GRAPHQL_URL to equal http://localhost:3030/graphql-alpha, the same as the EXTERNAL_GRAPHQL_URL
  8. Start the starterkit locally by running the command export $(cat .env | xargs) && yarn dev
  9. Your starterkit should now be running at localhost:4000
    • If you see errors about not being able to find peer dependency packages, that seems to be an issues with yarn linking. You can just temporarily yarn add each of those packages in the component library package/dist folder. (This folder is gitignored anyway.)
  10. After your changes are tested, shut down the starterkit by running the command CTRL+C
  11. Run yarn unlink "@reactioncommerce/components" in the starterkit repo folder
  12. cd to the package/dist folder of the reaction-component-library repo. Run the command yarn unlink to unlink the local version of the component library
  13. Undo the renaming of your .yarnrc file
  14. Undo the URL change inside your .env file

Cleanup Containers

Stop, and retain containers:

docker-compose stop

Stop, and remove containers:

docker-compose down

Stop, and remove containers, volumes and built images:

docker-compose down -v --rmi local

Building and running the production app locally

Sometimes it is helpful during development to make a production build of the app and run that locally.

Run this command to build a Docker image with the production build of the app in it:

docker build -t reaction-storefront --build-arg BUILD_ENV=production .

Then, to start the app on your machine, make sure the Reaction API container is already running and enter:

docker run -d --name storefront -p 4000:4000 --env-file .env --network api.reaction.localhost reaction-storefront

NOTE: You can replace the number before the colon in 4000:4000 with a different localhost port you'd like the application to run at.

NOTE: This is not the way to run the app in actual production deployment. This is only for running the production build locally for development, demo or trial purposes.

To stop the Docker container after starting it with the above command, use:

docker stop storefront


Copyright 2018 Reaction Commerce

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

FOSSA Status