You've already forked golang-saas-starter-kit
mirror of
https://github.com/raseels-repos/golang-saas-starter-kit.git
synced 2025-08-06 22:32:51 +02:00
Enhancements to the readme files. Main change was updating references to status of the web app:
instead of the readmes for the web app saying it was still in development with limited functionality, updated references for the web app to say it is fully functioning and provided details.
This commit is contained in:
89
README.md
89
README.md
@ -1,11 +1,9 @@
|
||||
# SaaS Starter Kit
|
||||
# SaaS Startup Kit
|
||||
|
||||
Copyright 2019, Geeks Accelerator
|
||||
twins@geeksaccelerator.com
|
||||
|
||||
Sponsored by Copper Valley Telecom
|
||||
|
||||
The [SaaS Starter Kit](https://saasstartupkit.com/) is a set of libraries in Go and boilerplate Golang code for building
|
||||
The [SaaS Startup Kit](https://saasstartupkit.com/) is a set of libraries in Go and boilerplate Golang code for building
|
||||
scalable software-as-a-service (SaaS) applications. The goal of this project is to provide a proven starting point for new
|
||||
projects that reduces the repetitive tasks in getting a new project launched to production that can easily be scaled
|
||||
and ready to onboard enterprise clients. It uses minimal dependencies, implements idiomatic code and follows Golang
|
||||
@ -25,7 +23,7 @@ https://docs.google.com/presentation/d/1WGYqMZ-YUOaNxlZBfU4srpN8i86MU0ppWWSBb3pk
|
||||
|
||||
*You are welcome to add comments to the Google Slides.*
|
||||
|
||||
[](https://saasstartupkit.com/)
|
||||
[](https://saasstartupkit.com/)
|
||||
|
||||
|
||||
## Motivation
|
||||
@ -69,11 +67,11 @@ facilitate exposing metrics, logs and request tracing to obverse and validate yo
|
||||
|
||||
## Description
|
||||
|
||||
The example project is a complete starter kit for building SasS with GoLang. It provides two example services:
|
||||
The example project is a complete startup 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 via their web browsers.
|
||||
* Web API - REST API with JWT authentication that renders results as JSON. This allows clients and other third-party companies to develop deep
|
||||
integrations with the project.
|
||||
* Web API - REST API with JWT authentication that renders results as JSON. This allows clients and other third-party
|
||||
companies to develop deep integrations with the project.
|
||||
|
||||
The example project also provides these tools:
|
||||
* Schema - Creating, initializing tables of Postgres database and handles schema migration.
|
||||
@ -99,29 +97,29 @@ It contains the following features:
|
||||
* Integration with GitLab for enterprise-level CI/CD.
|
||||
|
||||
Accordingly, the project architecture is illustrated with the following diagram.
|
||||

|
||||

|
||||
|
||||
|
||||
### Example project
|
||||
|
||||
With SaaS, a client subscribes to an online service you provide them. The example project provides functionality for
|
||||
clients to subscribe and then once subscribed they can interact with your software service.
|
||||
With SaaS, a customer subscribes to an online service you provide them. The example project provides functionality for
|
||||
customers to subscribe. Once subscribed, they can interact with your software service.
|
||||
|
||||
The initial contributors to this project are building this saas-starter-kit based on their years of experience building enterprise B2B SaaS. Particularly, this saas-starter-kit is based on their most recent experience building the
|
||||
B2B SaaS for [standard operating procedure software](https://keeni.space) (written entirely in Golang). Please refer to the Keeni.Space website,
|
||||
its [SOP software pricing](https://keeni.space/pricing) and its signup process. The SaaS web app is then available at
|
||||
[app.keeni.space](https://app.keeni.space). They plan on leveraging this experience and build it into a simplified set
|
||||
example services for both a web API and a web app for SaaS businesses.
|
||||
The initial contributors to this project are building this SaaS Startup Kit based on their years of experience building
|
||||
enterprise B2B SaaS. Particularly, this SaaS Startup Kit is based on their most recent experience building the
|
||||
B2B SaaS for [standard operating procedure software](https://keeni.space) (written entirely in Golang). Please refer
|
||||
to the Keeni.Space website, its [SOP software pricing](https://keeni.space/pricing) and its signup process. The SaaS web
|
||||
app is then available at [app.keeni.space](https://app.keeni.space). They are leveraging this most recent experience to
|
||||
build a simplified set example services for both a web API and a web app for SaaS businesses.
|
||||
|
||||
For this example, *projects*
|
||||
will be the single business logic package that will be exposed to users for management based on their role. Additional
|
||||
business logic packages can be added to support your project. It’s important at the beginning to minimize the connection
|
||||
between business logic packages on the same horizontal level.
|
||||
For this example, *projects* will be the single business logic package that will be exposed to users for management
|
||||
based on their role. Additional business logic packages can be added to support your project. It's important at the
|
||||
beginning to minimize the connection between business logic packages on the same horizontal level.
|
||||
|
||||
|
||||
This project provides the following functionality to users:
|
||||
|
||||
New clients can sign up which creates an account and a user with role of admin.
|
||||
New customers can sign up which creates an account and a user with role of admin.
|
||||
* Users with the role of admin can manage users for their account.
|
||||
* Authenticated users can manage their projects based on RBAC.
|
||||
|
||||
@ -219,7 +217,7 @@ following services will run:
|
||||
|
||||
### Running the project
|
||||
|
||||
Use the `docker-compose.yaml` to run all of the services, including the 3rd party services. The first time to run this
|
||||
Use the `docker-compose.yaml` to run all of the services, including the third-party services. The first time to run this
|
||||
command, Docker will download the required images for the 3rd party services.
|
||||
|
||||
```bash
|
||||
@ -264,7 +262,7 @@ $ docker-compose down
|
||||
Running `docker-compose down` will properly stop and terminate the Docker Compose session.
|
||||
|
||||
Note: None of the containers are setup by default with volumes and all data will be lost with `docker-compose down`.
|
||||
This is specifically important to remember regarding the postgres container. If you would like data to be persisted across
|
||||
This is specifically important to remember regarding the Postgres container. If you would like data to be persisted across
|
||||
builds locally, update `docker-compose.yaml` to define a volume.
|
||||
|
||||
|
||||
@ -452,19 +450,24 @@ internally development of the web-app service to the same functionality exposed
|
||||
This separate web-api service can be exposed to clients and be maintained in a more rigid/structured process to manage
|
||||
client expectations.
|
||||
|
||||
The web-app will have its own internal API, similar to this external web-api service, but not exposed for third-party
|
||||
The web-app has its own internal API, similar to this external web-api service, but not exposed for third-party
|
||||
integrations. It is believed that in the beginning, having to define an additional API for internal purposes is worth
|
||||
for the additional effort as the internal API can handle more flexible updates.
|
||||
for the additional effort as the internal API can support increased release velocity and handle more flexible updates.
|
||||
|
||||
For more details on this service, read [web-api readme](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/blob/master/cmd/web-api/README.md)
|
||||
|
||||
### API Documentation
|
||||
|
||||
Documentation for this API service is automatically generated using [swag](https://github.com/geeks-accelerator/swag). Once this
|
||||
web-api service is running, it can be accessed at /docs
|
||||
Documentation for this API service is automatically generated using [swag](https://github.com/geeks-accelerator/swag).
|
||||
|
||||
Once the web-api service is running, it can be accessed at /docs
|
||||
http://127.0.0.1:3001/docs/
|
||||
|
||||
You can see an example of this Golang web-api service and the API documentation running here:
|
||||
https://api.example.saasstartupkit.com/docs/
|
||||
|
||||
[](https://api.example.saasstartupkit.com/docs/)
|
||||
|
||||
|
||||
## Web App
|
||||
[cmd/web-app](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/tree/master/cmd/web-app)
|
||||
@ -477,9 +480,16 @@ for internal requests.
|
||||
Once the web-app service is running it will be available on port 3000.
|
||||
http://127.0.0.1:3000/
|
||||
|
||||
While the web-api service is rocking, this web-app service is still in development. Only the signup functionality works
|
||||
in order for a user to create the initial user with role of admin and a corresponding account for their organization.
|
||||
If you would like to help, please email twins@geeksinthewoods.com.
|
||||
The web-app service is a fully functioning example. You can see an example of this Golang web-app service running here:
|
||||
https://example.saasstartupkit.com
|
||||
|
||||
[](https://example.saasstartupkit.com)
|
||||
|
||||
|
||||
The example web-app service includes complete working example of a responsible mobile-first web app for
|
||||
software-as-a-service and example business logic Go packages facilitating create, read, update and delete operations.
|
||||
It also includes signup for customers to subscribe to your SaaS, user auth for login/logout, and admin functionality
|
||||
of user management.
|
||||
|
||||
For more details on this service, read [web-app readme](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/blob/master/cmd/web-app/README.md)
|
||||
|
||||
@ -499,13 +509,17 @@ code dependencies. Structs for the same database table can be defined by package
|
||||
dependencies.
|
||||
|
||||
The example schema package provides two separate methods for handling schema migration:
|
||||
|
||||
* [Migrations](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/blob/master/internal/schema/migrations.go) -
|
||||
List of direct SQL statements for each migration with defined version ID. A database table is created to persist
|
||||
executed migrations. Upon run of each schema migration run, the migraction logic checks the migration database table to
|
||||
check if it’s already been executed. Thus, schema migrations are only ever executed once. Migrations are defined as a function to enable complex migrations so results from query manipulated before being piped to the next query.
|
||||
check if it’s already been executed. Thus, schema migrations are only ever executed once. Migrations are defined as a
|
||||
function to enable complex migrations so results from query manipulated before being piped to the next query.
|
||||
|
||||
* [Init Schema](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/blob/master/internal/schema/init_schema.go) -
|
||||
If you have a lot of migrations, it can be a pain to run all them. For example, when you are deploying a new instance of
|
||||
the app into a clean database. To prevent this, use the initSchema function that will run as-if no migration was run before (in a new clean database).
|
||||
the app into a clean database. To prevent this, use the initSchema function that will run as-if no migration was run
|
||||
before (in a new clean database).
|
||||
|
||||
Another bonus with the globally defined schema is that it enables the testing package to spin up database containers
|
||||
on-demand and automatically include all the migrations. This allows the testing package to programmatically execute
|
||||
@ -514,7 +528,7 @@ schema migrations before running any unit tests.
|
||||
|
||||
### Accessing Postgres
|
||||
|
||||
To login to the local Postgres container, use the following command:
|
||||
To login to the local Postgres container and query the database tables, use the following command:
|
||||
```bash
|
||||
docker exec -it saas-starter-kit_postgres_1 /bin/bash
|
||||
bash-5.0# psql -U postgres shared
|
||||
@ -538,10 +552,17 @@ shared=# \dt
|
||||
|
||||
## Deployment
|
||||
|
||||
This project includes a complete build pipeline that relies on AWS and GitLab. The presentation "[SaaS Starter Kit - Setup GitLab CI / CD](https://docs.google.com/presentation/d/1sRFQwipziZlxBtN7xuF-ol8vtUqD55l_4GE-4_ns-qM/edit#slide=id.p)"
|
||||
This project includes a complete build pipeline that relies on AWS and GitLab. The presentation
|
||||
"[SaaS Startup Kit - Setup GitLab CI / CD](https://docs.google.com/presentation/d/1sRFQwipziZlxBtN7xuF-ol8vtUqD55l_4GE-4_ns-qM/edit#slide=id.p)"
|
||||
has been made available on Google Docs that provides a step by step guide to setting up a build pipeline using your own
|
||||
AWS and GitLab accounts.
|
||||
|
||||
Google Slides on Setting Up Gitlab CI/CD for SaaS Startup Kit:
|
||||
https://docs.google.com/presentation/d/1sRFQwipziZlxBtN7xuF-ol8vtUqD55l_4GE-4_ns-qM/edit#slide=id.p
|
||||
|
||||
*You are welcome to add comments to the Google Slides.*
|
||||
|
||||
|
||||
The `.gitlab-ci.yaml` file includes the following build
|
||||
stages:
|
||||
```yaml
|
||||
|
@ -1,21 +1,25 @@
|
||||
# SaaS Web API
|
||||
|
||||
Copyright 2019, Geeks Accelerator
|
||||
accelerator@geeksinthewoods.com.com
|
||||
twins@geeksaccelerator.com
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
Web API is a client facing API. Standard response format is JSON.
|
||||
Web API is a client facing API. Standard response format is JSON. The example web-api service includes API documentation.
|
||||
|
||||
While the web app is meant for humans to experience and requires
|
||||
a friendly UI, the web API is meant for customers or third-party partners of your SaaS to programmatically integrate. To
|
||||
help show the similarities and differences between the pages in the web app and similar endpoints in the web API, we
|
||||
have created this diagram below. Since it is very detailed, you can click on the image to see the larger version.
|
||||
|
||||
While the web app is meant for humans to experience and requires a friendly UI, the web API is meant for customers or
|
||||
third-party partners of your SaaS to programmatically integrate. To help show the similarities and differences between
|
||||
the pages in the web app and similar endpoints in the web API, we have created this diagram below. Since it is
|
||||
very detailed, you can click on the image to see the larger version.
|
||||
|
||||
[](https://gitlab.com/geeks-accelerator/oss/saas-starter-kit/tree/master/resources/images/saas-starter-kit-pages-and-endpoints-800x600.png)
|
||||
|
||||
|
||||
This web-api service is not directly used by the web-app service to prevent locking the functionally required for
|
||||
internally development of the web-app service to the same functionality exposed to clients via this web-api service.
|
||||
This separate web-api service can be exposed to clients and be maintained in a more rigid/structured process to manage
|
||||
client expectations.
|
||||
|
||||
**Not all CRUD methods are exposed as endpoints.** Only endpoints that clients may need should be exposed. Internal
|
||||
services should communicate directly with the business logic packages or a new API should be created to support it. This
|
||||
@ -36,11 +40,17 @@ initial admin user must first be created. The initial admin user can easily be c
|
||||
|
||||
## API Documentation
|
||||
|
||||
Documentation for this API service is automatically generated using [swag](https://github.com/geeks-accelerator/swag). Once this
|
||||
web-api service is running, it can be accessed at /docs
|
||||
Documentation for this API service is automatically generated using [swag](https://github.com/geeks-accelerator/swag).
|
||||
The Swag Go project also provides a web UI to allow you and your customers of your SaaS to explore your API - its exposed
|
||||
business logic - as well as easily try our that exposed functionality.
|
||||
|
||||
Once this web-api service is running, the Swagger API documentation for the service can be accessed at /docs:
|
||||
http://127.0.0.1:3001/docs/
|
||||
|
||||
You can refer to the example of the API documentation that we have deployed on production for you here:
|
||||
https://api.example.saasstartupkit.com/docs/
|
||||
|
||||
[](https://api.example.saasstartupkit.com/docs/)
|
||||
|
||||
|
||||
|
||||
|
@ -1,20 +1,25 @@
|
||||
# SaaS Web App
|
||||
|
||||
Copyright 2019, Geeks Accelerator
|
||||
accelerator@geeksinthewoods.com
|
||||
twins@geeksaccelerator.com
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
Responsive web application that renders HTML using the `html/template` package from the standard library to enable
|
||||
direct interaction with clients and their users. It allows clients to sign up new accounts and provides user
|
||||
authentication with HTTP sessions. To see screen captures of the web app, check out this Google Slides deck:
|
||||
authentication with HTTP sessions.
|
||||
|
||||
The web-app service is a fully functioning example. To see screen captures of the Golang web app, check out this Google
|
||||
Slides deck:
|
||||
https://docs.google.com/presentation/d/1WGYqMZ-YUOaNxlZBfU4srpN8i86MU0ppWWSBb3pkejM/edit#slide=id.p
|
||||
|
||||
*You are welcome to add comments to the Google Slides.*
|
||||
|
||||
[](https://docs.google.com/presentation/d/1WGYqMZ-YUOaNxlZBfU4srpN8i86MU0ppWWSBb3pkejM/edit#slide=id.p)
|
||||
We have also deployed this example Go web app to production here:
|
||||
https://example.saasstartupkit.com
|
||||
|
||||
[](https://example.saasstartupkit.com)
|
||||
|
||||
The web app relies on the Golang business logic packages developed to provide an API for internal requests.
|
||||
|
||||
@ -22,11 +27,116 @@ Once the web-app service is running it will be available on port 3000.
|
||||
|
||||
http://127.0.0.1:3000/
|
||||
|
||||
While the web-api service has
|
||||
significant functionality, this web-app service is still in development. Currently this web-app services only resizes
|
||||
an image and displays resized versions of it on the index page. See section below on Future Functionality.
|
||||
|
||||
If you would like to help, please email twins@geeksinthewoods.com.
|
||||
## Web App functionality
|
||||
|
||||
|
||||
This example Web App allows customers and their users to manage projects. Users with role of admin will be allowed to
|
||||
create new projects. Users with access to the project can perform CRUD operations on the record.
|
||||
|
||||
|
||||
This web-app service includes the following pages and corresponding functionality:
|
||||
|
||||
[](../../resources/images/saas-starter-kit-go-web-app-pages.png)
|
||||
|
||||
|
||||
|
||||
|
||||
### landing pages
|
||||
|
||||
The example web-app service in the SaaS Startup Kit includes typical pages for new customers to learn about your
|
||||
service. It allows new customers to review a pricing page as well as signup. Existing customers of your SaaS can login
|
||||
or connect with your support resources. The static web page for your SaaS website also includes a page for your web API
|
||||
service.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-website-pricing.png)
|
||||
|
||||
|
||||
### Signup
|
||||
|
||||
In order for your SaaS offering to deliver its value to your customer, they need to subscribe first. Users can subscribe
|
||||
using this signup page.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-website-signup.png)
|
||||
|
||||
The signup page creates an account and a user associated with the new account. This signup page
|
||||
also uses some cool inline validation.
|
||||
|
||||
### authentication
|
||||
|
||||
Software-as-a-Service usually provides its service after a user has created an account and authenticated. After a user
|
||||
has an account, they can login to your web app. Once logged in they will have access to all pages that require
|
||||
authentication. This login page also uses some cool inline validation.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-website-login.png)
|
||||
|
||||
The GO web app implements Role-based access control (RBAC). The example web app has two basic roles for users: admin
|
||||
and user.
|
||||
* The role of admin provides the ability to perform all CRUD actions on projects and users.
|
||||
* The role of user limits users to only view projects and users.
|
||||
|
||||
Once a user is logged in, then RBAC is enforced and users only can access projects they have access to.
|
||||
|
||||
The web-app service also includes functionality for logout and forgot password.
|
||||
|
||||
|
||||
### projects
|
||||
|
||||
The example code for the web app service in the SaaS Startup Kit exposes business value to authenticated users. The example
|
||||
web app show how the SaaS Starter Kit provides Go boilerplate code to perform CRUD operations on an object.
|
||||
|
||||
One example business logic package is the one to create and manage Projects. In the SaaS Startup Kit, projects represent
|
||||
the highest level of business value. Users can perform CRUD on project records.
|
||||
|
||||
The web app includes this index page that lists all records. This index page then allows users to view, update and delete an object.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-projects.png)
|
||||
|
||||
From the projects index page, users can click the button to create a new record. This create page demonstrates how a new record can be created for projects and also demonstrates inline validation.
|
||||
|
||||
The view page for an object displays the fields for the object as read-only. The page then includes links to edit or archive the object. The archive functionality demonstrates how a soft-delete can be performed. While the web app does not expose functionality to delete a record, the internal API does support the delete operation.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-project-view.png)
|
||||
|
||||
You can easily modify the projects package to support your own requirements. If you were providing a software-as-a-service similar to Github, Projects could be changed to be 'repositories'. If you were providing software-as-a-service similar to Slack, Projects could be modified to be 'channels', etc.
|
||||
|
||||
|
||||
### user (profile)
|
||||
|
||||
After users authenticate with the web app, there is example code for them to view their user details - view their profile.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-profile-view2.png)
|
||||
|
||||
A user can then update the details for the record of their user as another example demonstration the update operation. There
|
||||
is also functionality for the user to change their password.
|
||||
|
||||
|
||||
### account (management)
|
||||
|
||||
Once a user signups to your SaaS via the web app, an account is created. Authenticated users can then view the details
|
||||
of their account (demonstrating the read operation of CRUD).
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-account-update2.png)
|
||||
|
||||
Users with role of admin can view and update the details of their account, while non-admins can only view the details of their account.
|
||||
|
||||
|
||||
### users (management)
|
||||
Users with role of admin have access to functionality that allows them to manage the users associated with their account.
|
||||
This index page uses Datatables to demonstrate providing advanced interactivity to HTML tables.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-users.png)
|
||||
|
||||
From the users index page, users can access the functionality to create a new record. This create page demonstrates how
|
||||
a new record can be created for users. The create functionality also allows one or more roles to be applied for ACLs.
|
||||
|
||||
[](https://dzuyel7n94hma.cloudfront.net/img/saas-startup-example-golang-project-webapp-users-create.png)
|
||||
|
||||
If the admin would rather the new users provide their own user details, there is Go code demonstrating how users can be invited. The invite functionality allows users to specifiy one or more email addresses. Once submitted, the web app will send email invites to allow the users to activate their user.
|
||||
|
||||
From the users index page, admins for an account can view users details. This page also provides access to update the user as well as archive it.
|
||||
|
||||
A user can then update the details for the record of their user as another example demonstration the update operation. As part of ACL, the roles for a user can be added or removed.
|
||||
|
||||
|
||||
## Local Installation
|
||||
@ -40,7 +150,6 @@ go build .
|
||||
|
||||
To build using the docker file, need to be in the project root directory. `Dockerfile` references go.mod in root directory.
|
||||
|
||||
|
||||
```bash
|
||||
docker build -f cmd/web-app/Dockerfile -t saas-web-app .
|
||||
```
|
||||
@ -73,45 +182,5 @@ Test a specific language by appending the locale to the request URL.
|
||||
|
||||
### Future Functionality
|
||||
|
||||
This example Web App is going to allow users to manage checklists. Users with role of admin will be allowed to
|
||||
create new checklists (projects). Each checklist will have tasks (items) associated with it. Tasks can be assigned to
|
||||
users with access to the checklist. Users can then update the status of a task.
|
||||
|
||||
We are referring to "checklists" as "projects" and "tasks" as "items" so this example web-app service will be generic
|
||||
enough for you to leverage and build upon without lots of renaming.
|
||||
|
||||
The initial contributors to this project created a similar service like this: [standard operating procedure software](https://keeni.space/procedures/software)
|
||||
for Keeni.Space. Its' Golang web app for [standard operating procedures software](https://keeni.space/procedures/software) is available at [app.keeni.space](https://app.keeni.space) They plan on leveraging this experience and boil it down into a simplified set of functionality
|
||||
and corresponding web pages that will be a solid examples for building enterprise SaaS web apps with Golang.
|
||||
|
||||
This web-app service eventually will include the following:
|
||||
- authentication
|
||||
- signup (creates user and account records)
|
||||
- login
|
||||
- with role-based access
|
||||
- logout
|
||||
- forgot password
|
||||
- user management
|
||||
- update user and password
|
||||
- account management
|
||||
- update account
|
||||
- manage user
|
||||
- view user
|
||||
- create and invite user
|
||||
- update user
|
||||
- projects (checklists)
|
||||
- index of projects
|
||||
- browse, filter, search
|
||||
- manage projects
|
||||
- view project
|
||||
- with project items
|
||||
- create project
|
||||
- update project
|
||||
- user access
|
||||
- project items (tasks)
|
||||
- view item
|
||||
- create item (adds task to checklist)
|
||||
- update item
|
||||
|
||||
|
||||
|
||||
|
BIN
resources/images/saas-starter-kit-go-rest-api-endpoints.png
Normal file
BIN
resources/images/saas-starter-kit-go-rest-api-endpoints.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
BIN
resources/images/saas-starter-kit-go-web-app-pages.png
Normal file
BIN
resources/images/saas-starter-kit-go-web-app-pages.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 82 KiB |
Reference in New Issue
Block a user