We use Gatsby.js to render our website server-side for SEO purposes, and blazing fast load times. It also hydrates into a react app, so having dynamic functionality is a breeze.
We use Firebase Auth for all authentication, Firestore as a client-side database for saving metadata, and Firebase Hosting for all of our application hosting needs.
The simplicity, freedom, and power provided by React is unparalleled. All our front-end work is done in React.
Running background triggers based on events provides a simple, scalable way to create complex interactions.
Certain events need to both happen asynchronously and also be guaranteed execution even in the face of errors. Pub/Sub accomplishes this miraculous feat.
This is our primary database, though most of our actual data is stored in static storage. This database houses the metadata necessary for indexing and finding static data.
All comments, votes, and other actions live here as a highly-scalable, reliable, multi-region storage solution.
App engine fills in the gaps in the increasingly smaller case where it's necessary for us to run our own APIs.
When choosing between the Firebase version or the GCP version of tools, we tend to pick the Firebase version, as it's often simpler and nicer to work with.