diff --git a/Dockerfile.base b/Dockerfile.base
index efc3d1d3..280ba451 100644
--- a/Dockerfile.base
+++ b/Dockerfile.base
@@ -26,7 +26,7 @@ RUN go get github.com/stretchr/testify/assert && \
 	go get github.com/cortesi/modd/cmd/modd && \
 	go get github.com/crazy-max/xgo
 COPY . .
-COPY --from=frontend /statping/ ./frontend/
+COPY --from=frontend /statping/dist/ ./source/dist/
 RUN make clean generate embed build
 RUN chmod a+x statping && mv statping /go/bin/statping
 # /go/bin/statping - statping binary
diff --git a/Makefile b/Makefile
index a098de8c..fa1ef1c7 100644
--- a/Makefile
+++ b/Makefile
@@ -72,10 +72,10 @@ docker-vue:
 docker-test:
 	docker-compose -f docker-compose.test.yml up --remove-orphans
 
-push-base: docker-base
+push-base: clean compile docker-base
 	docker push statping/statping:base
 
-push-vue: clean docker-base docker-vue
+push-vue: clean compile docker-base docker-vue
 	docker push statping/statping:base
 	docker push statping/statping:vue
 
diff --git a/frontend/src/pages/Help.vue b/frontend/src/pages/Help.vue
new file mode 100644
index 00000000..232d2d3b
--- /dev/null
+++ b/frontend/src/pages/Help.vue
@@ -0,0 +1,9 @@
+<template>
+    <div class="col-12 bg-white p-4" v-html="<a class=\"scrollclick\" href=\"#\" data-id=\"page_0\">Types of Monitoring</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_1\">Features</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_2\">Start Statping</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_3\">Linux</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_4\">Mac</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_5\">Windows</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_6\">AWS EC2</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_7\">Docker</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_8\">Mobile App</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_9\">Heroku</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_10\">API</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_11\">Makefile</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_12\">Notifiers</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_13\">Notifier Events</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_14\">Notifier Example</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_15\">Prometheus Exporter</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_16\">SSL</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_17\">Config with .env File</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_18\">Static Export</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_19\">Statping Plugins</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_20\">Statuper</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_21\">Build and Test</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_22\">Contributing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_23\">PGP Signature</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_24\">Testing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_25\">Deployment</a><br>\n\n<div class=\"mt-5\" id=\"page_0\"><h1>Types of Monitoring</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_1\"><h1>Features</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_2\"><h1>Start Statping</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_3\"><h1>Linux</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_4\"><h1>Mac</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_5\"><h1>Windows</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_6\"><h1>AWS EC2</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_7\"><h1>Docker</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_8\"><h1>Mobile App</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_9\"><h1>Heroku</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_10\"><h1>API</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_11\"><h1>Makefile</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_12\"><h1>Notifiers</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_13\"><h1>Notifier Events</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_14\"><h1>Notifier Example</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_15\"><h1>Prometheus Exporter</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_16\"><h1>SSL</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_17\"><h1>Config with .env File</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_18\"><h1>Static Export</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_19\"><h1>Statping Plugins</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_20\"><h1>Statuper</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_21\"><h1>Build and Test</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_22\"><h1>Contributing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_23\"><h1>PGP Signature</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_24\"><h1>Testing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_25\"><h1>Deployment</h1></div>\n"></div>
+</template>
+
+<script>
+export default {
+  name: 'Help',
+}
+</script>
\ No newline at end of file
diff --git a/handlers/api.go b/handlers/api.go
index 6bb9b11e..fae5ad22 100644
--- a/handlers/api.go
+++ b/handlers/api.go
@@ -55,8 +55,8 @@ func apiIndexHandler(r *http.Request) interface{} {
 
 func apiRenewHandler(w http.ResponseWriter, r *http.Request) {
 	var err error
-	core.App.ApiKey = utils.NewSHA1Hash(40)
-	core.App.ApiSecret = utils.NewSHA1Hash(40)
+	core.App.ApiKey = utils.NewSHA256Hash()
+	core.App.ApiSecret = utils.NewSHA256Hash()
 	err = core.App.Update()
 	if err != nil {
 		sendErrorJson(err, w, r)
diff --git a/handlers/dashboard.go b/handlers/dashboard.go
index 4dfc9623..17dc615e 100644
--- a/handlers/dashboard.go
+++ b/handlers/dashboard.go
@@ -99,6 +99,10 @@ func apiThemeSaveHandler(w http.ResponseWriter, r *http.Request) {
 		sendErrorJson(err, w, r)
 		return
 	}
+	if err := source.SaveAsset([]byte(themes.Base), "scss/main.scss"); err != nil {
+		sendErrorJson(err, w, r)
+		return
+	}
 	if err := source.SaveAsset([]byte(themes.Variables), "scss/variables.scss"); err != nil {
 		sendErrorJson(err, w, r)
 		return
diff --git a/types/configs/database.go b/types/configs/database.go
index 4312f324..6d0d1ad2 100644
--- a/types/configs/database.go
+++ b/types/configs/database.go
@@ -85,6 +85,9 @@ func (d *DbConfig) DropDatabase() error {
 }
 
 func (d *DbConfig) Close() {
+	if d == nil {
+		return
+	}
 	if d.Db != nil {
 		d.Db.Close()
 	}
diff --git a/types/configs/latest_sql.go b/types/configs/latest_sql.go
index 6d381fdb..dc2c6411 100644
--- a/types/configs/latest_sql.go
+++ b/types/configs/latest_sql.go
@@ -12,14 +12,18 @@ func init() {
 	os.Setenv("MIGRATION_ID", utils.ToString(latestMigration))
 }
 
-func (c *DbConfig) genericMigration(alterStr string) error {
-	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
+func (c *DbConfig) genericMigration(alterStr string, isPostgres bool) error {
+	var extra string
+	if isPostgres {
+		extra = " TYPE"
+	}
+	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
 		return err
 	}
-	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time TYPE BIGINT;", alterStr)).Error(); err != nil {
+	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time%s BIGINT;", alterStr, extra)).Error(); err != nil {
 		return err
 	}
-	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
+	if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
 		return err
 	}
 	if err := c.Db.Exec("UPDATE hits SET latency = CAST(latency * 1000000 AS bigint);").Error(); err != nil {
diff --git a/types/configs/migration.go b/types/configs/migration.go
index f96daa69..2a154ab5 100644
--- a/types/configs/migration.go
+++ b/types/configs/migration.go
@@ -27,11 +27,11 @@ func (c *DbConfig) DatabaseChanges() error {
 
 		switch c.Db.DbType() {
 		case "mysql":
-			if err := c.genericMigration("MODIFY"); err != nil {
+			if err := c.genericMigration("MODIFY", false); err != nil {
 				return err
 			}
 		case "postgres":
-			if err := c.genericMigration("ALTER"); err != nil {
+			if err := c.genericMigration("ALTER", true); err != nil {
 				return err
 			}
 		default:
diff --git a/types/core/database.go b/types/core/database.go
index 33b1e2d0..a19f6021 100644
--- a/types/core/database.go
+++ b/types/core/database.go
@@ -37,8 +37,8 @@ func Select() (*Core, error) {
 func (c *Core) Create() error {
 	c.ApiKey = c.ApiKey
 	c.ApiSecret = c.ApiSecret
-	apiKey := utils.Getenv("API_KEY", utils.NewSHA1Hash(40)).(string)
-	apiSecret := utils.Getenv("API_SECRET", utils.NewSHA1Hash(40)).(string)
+	apiKey := utils.Getenv("API_KEY", utils.NewSHA256Hash()).(string)
+	apiSecret := utils.Getenv("API_SECRET", utils.NewSHA256Hash()).(string)
 
 	if c.ApiKey == "" || c.ApiSecret == "" {
 		c.ApiSecret = apiSecret
diff --git a/types/users/database.go b/types/users/database.go
index ffe351c2..b86c99fb 100644
--- a/types/users/database.go
+++ b/types/users/database.go
@@ -53,7 +53,7 @@ func (u *User) Delete() error {
 
 func (u *User) BeforeCreate() error {
 	u.Password = utils.HashPassword(u.Password)
-	u.ApiKey = utils.NewSHA1Hash(16)
-	u.ApiSecret = utils.NewSHA1Hash(16)
+	u.ApiKey = utils.NewSHA256Hash()
+	u.ApiSecret = utils.NewSHA256Hash()
 	return nil
 }
diff --git a/utils/encryption.go b/utils/encryption.go
index 5a571159..014e5c16 100644
--- a/utils/encryption.go
+++ b/utils/encryption.go
@@ -16,7 +16,7 @@
 package utils
 
 import (
-	"crypto/sha1"
+	"crypto/sha256"
 	"fmt"
 	"golang.org/x/crypto/bcrypt"
 	"math/rand"
@@ -30,16 +30,13 @@ func HashPassword(password string) string {
 }
 
 // NewSHA1Hash returns a random SHA1 hash based on a specific length
-func NewSHA1Hash(n ...int) string {
-	noRandomCharacters := 32
-	if len(n) > 0 {
-		noRandomCharacters = n[0]
+func NewSHA256Hash() string {
+	d := make([]byte, 10)
+	rand.Seed(Now().UnixNano())
+	if _, err := rand.Read(d); err == nil {
+		fmt.Printf("%x", sha256.Sum256(d))
 	}
-	randString := RandomString(noRandomCharacters)
-	hash := sha1.New()
-	hash.Write([]byte(randString))
-	bs := hash.Sum(nil)
-	return fmt.Sprintf("%x", bs)
+	return fmt.Sprintf("%x", d)
 }
 
 var characterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")