From efd67d2fc9a78bffb7b4c02ff7f20c4f050ef5df Mon Sep 17 00:00:00 2001 From: Lucas Brown Date: Mon, 15 Jul 2019 00:35:29 -0800 Subject: [PATCH] Added new diagram of architecture to main readme file. --- README.md | 15 +++++++++++---- resources/images/saas-stater-kit-diagram.png | Bin 0 -> 31160 bytes 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 resources/images/saas-stater-kit-diagram.png diff --git a/README.md b/README.md index d68e88c..84ae232 100644 --- a/README.md +++ b/README.md @@ -34,12 +34,15 @@ SaaS product offerings typically provide two main components: an API and a web a valuable software based product to clients ideally from a single code base on a recurring basis delivered over the internet. -The example project is a complete starter kit for building SasS with GoLang. It provides three example services: +The example project is a complete starter kit for building SasS with GoLang. It provides two example services: * Web App - Responsive web application to provide service to clients. Includes user signup and user authentication for -direct client interaction. -* Web API - REST API with JWT authentication that renders results as JSON. This allows clients to develop deep +direct client interaction via their web connected devices. +* Web API - REST API with JWT authentication that renders results as JSON. This allows clients and other third-pary companies to develop deep integrations with the project. -* Schema - Tool for initializing of Postgres database and handles schema migration. + +And these tools: +* Schema - Initializing of Postgres database and handles schema migration. +* Dev Ops - Deploying project to AWS with GitLab CI/CD. It contains the following features: * Minimal web application using standard html/template package. @@ -60,6 +63,10 @@ It contains the following features: * CLI with boilerplate templates to reduce repetitive copy/pasting. * Integration with GitLab for enterprise-level CI/CD. +Accordingly, the project architecture is illustrated with the following diagram. +![alt text](resources/images/saas-stater-kit-diagram.png "SaaS Starter Kit diagram") + + ### Example project With SaaS, a client subscribes to an online service you provide them. The example project provides functionality for diff --git a/resources/images/saas-stater-kit-diagram.png b/resources/images/saas-stater-kit-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7d48094581943c78391388576eff251498aab4 GIT binary patch literal 31160 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