- Flask app that runs on Google App Engine // GCP.
- Exposes a REST API (GET, POST, PUT, DELETE endpoints) for the client-side application.
- Database is a Neo4j (graph db) instance running on Google Compute Engine.
- Authentication/User-management with Firebase.
- Push notifications with Firebase Cloud Messaging.
- Credentials for GCE instance & FCM stored and queried through Cloud Datastore.
We have both a Development and Production build pipeline. Prod reflects code on master while Dev reflects the latest PR to master:
- Push changes to new branch
- Create a pull request to master for your changes
- Cloud Build (under circles-dev GCP project) is triggered; build must succeed to merge PR
- One reviewer must approve the PR
- PR may be merged to master
- Cloud Build (under circles GCP project) is triggered; app deployed to prod
There are three nodes or "Objects":
- Person
- Circles
- Events
Relationships exist as follows (note that edges can be queried bidirectionally in Neo4j):
(Person) <- :KNOWS -> (Person)
(Person) :IS_MEMBER -> (Circle)
(Person) :INVITED_TO -> (Event)
(Circle) :SCHEDULED -> (Event)