Design Process
of React-GraphQL App
Consuming Virta REST API
Mustafa Enes Ertarhanacı
Senior Front-End Developer
Contents
- Demo - End Result
- Initial thoughts
- API (Node - GraphQL)
- Front-end (React - Apollo)
- Production (Docker - DigitalOcean)
Demo 🚀
Initial Thoughts
API
NODE - GRAPHQL
Node.js as the runtime

Express makes spinning up a simple http server so easy
API
NODE - GRAPHQL


Provided GraphQL API by using an Express middleware
API
NODE - GRAPHQL


GraphQL

Some other Express middlewares
API
NODE - GRAPHQL



cors()
morgan()
GraphQL
Nodemon handles auto-refreshing
API
NODE - GRAPHQL


+


cors()
morgan()
GraphQL
TypeScript as a safety belt
API
NODE - GRAPHQL



+

TypeScript
GraphQL

cors()
morgan()
Front-end
REACT - APOLLO
React
Using React for the UI was a requirement
Front-end
REACT - APOLLO
React
I picked "create-react-app" to do so
Front-end
REACT - APOLLO
React

Styled-components is a good companion to React components
Front-end
REACT - APOLLO
React


Apollo looked like a balanced choice for a GraphQL client
Front-end
REACT - APOLLO
React



TypeScript
TypeScript is my favorite way of taming the JavaScript and ensuring type safety
Front-end
REACT - APOLLO



TypeScript

React
Testing
Library

Jest
DOM
Helpers
React Testing Library encourages decoupling of tests from inner workings of implementations
React
Production
Let's minify the representations and visualise the environments. First, development



DEVELOPMENT
:3000
:4000
https://api.virta

DOCKER - DIGITALOCEAN
Production
I thought containerizing the parts and having docker-compose manage them in production would be neat



:3000
:4000
https://api.virta

PRODUCTION



https://api.virta


DEVELOPMENT


web
graphql
:80
DOCKER - DIGITALOCEAN
Production
At this point, I decided to use DigitalOcean, as it provides better support for deploying docker-compose (compared to Heroku)



:3000
:4000
https://api.virta
PRODUCTION

DEVELOPMENT



https://api.virta




web
graphql
:80

DOCKER - DIGITALOCEAN
Production
DOCKER - DIGITALOCEAN
I used a separate repo (Hub) to configure production environment. i.e.: docker-compose and nginx configs, deploy scripts



:3000
:4000
https://api.virta
PRODUCTION

DEVELOPMENT



https://api.virta




web
graphql
:80


Hub.git
Production
I didn't set up a CI/CD pipeline for this repo. So, I used ssh and git to pull changes to DO whenever I needed



:3000
:4000
https://api.virta
PRODUCTION

DEVELOPMENT



https://api.virta




web
graphql
:80

$ ssh; git pull
DOCKER - DIGITALOCEAN

Hub.git
Production



https://api.virta
PRODUCTION

DEVELOPMENT



https://api.virta




web
graphql
:80

$ ssh; git pull


$ git push
$ npm run test;
$ ssh;
$ ./deploy_react
.travis.yml
But I wanted to set up pipelines for the project codebases
DOCKER - DIGITALOCEAN


Hub.git
Design Process of React-GraphQL App
By mustastum
Design Process of React-GraphQL App
Presentation showing how I implemented a React-GraphQL web application to show "EV charging stations", using various technologies.
- 452