diff --git a/Makefile b/Makefile
index 5d9fa301bb323640ce5c1bd575fa3b23aee302e4..ea41626e4d4e2437944f19caf2e0807202aede96 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ SERVER_PKG_BUILD := "${PKG}"
 
 .PHONY: all build clean run
 
-all: build run
+all: build run bundle-libs
 
 dep: ## Get the dependencies
 	dep ensure
@@ -21,6 +21,9 @@ help: ## Display this help screen
 run: build ## Run app
 	./bin/app
 
+bundle-libs: ## Builds JS bundles
+	cd javascript && yarn install && yarn build
+
 fresh: 
 	rm -rf ./vendor
 	rm -rf ./Gopkg.lock
\ No newline at end of file
diff --git a/javascript/.gitignore b/javascript/.gitignore
index f06235c460c2de3d97efc8371125594b7b761b08..e40398241a87ca2dab9425550a659683e6f15c6d 100644
--- a/javascript/.gitignore
+++ b/javascript/.gitignore
@@ -1,2 +1,3 @@
 node_modules
 dist
+temp
diff --git a/javascript/src/viamapi-client.js b/javascript/src/viamapi-client.js
index 84789583619c4f5034850fc5d2feb1d7105f16a8..0a834db07981eac7ab7ae7a71608a559c5e31aff 100644
--- a/javascript/src/viamapi-client.js
+++ b/javascript/src/viamapi-client.js
@@ -1,9 +1,9 @@
 const Penpal = require('penpal').default;
 
-function setupViamAPI(divId, methodsArg) {
+function setupViamAPI(divId, methodsArg, url) {
 	const connection = Penpal.connectToChild({
 	  // URL of page to load into iframe.
-	  url: '{{urlArg}}',
+	  url,
 	  // Container to which the iframe should be appended.
 	  appendTo: document.getElementById(divId),
 	  // Methods parent is exposing to child
diff --git a/javascript/src/viamapi-iframe.js b/javascript/src/viamapi-iframe.js
index 073f9850c531a98b24f1e1ec0c155735583c65b7..83c5ab21672b91864738304c16bdbd097025deac 100644
--- a/javascript/src/viamapi-iframe.js
+++ b/javascript/src/viamapi-iframe.js
@@ -2177,7 +2177,7 @@ const connection = Penpal.connectToParent({
         });
       });
     },
-    marketingЕxecuteEventForIdentificator(identificator, pincode, event) {
+    marketingExecuteEventForIdentificator(identificator, pincode, event) {
       return new Penpal.Promise(result => {
         viamApi.setIdentity("marketingapppublickey")
 
@@ -2256,10 +2256,7 @@ const connection = Penpal.connectToParent({
         result(res)
       })
     },
-    // Previously there was "//{{methods}}" placeholder, but we can't use it anymore since Uglify in webpack
-    // stripping this comment and there is no chance to preserve it
-    // (even with special words like @preserve or comment /*! */)
-    placeholderForExternalMethods:1
+    //{{endpointsPlaceholder}}
   }
 });
 
diff --git a/javascript/webpack.config.js b/javascript/webpack.config.js
index 2329bd5c193ae76d7a670813f70dd7b5ffaaf405..957709cd964aafbdc47b438ec4e4f634c441aa6e 100644
--- a/javascript/webpack.config.js
+++ b/javascript/webpack.config.js
@@ -2,8 +2,7 @@ module.exports = {
   mode: 'production',
   entry: {
     'viamapi-client': ['core-js/fn/promise', './src/viamapi-client.js'],
-    'viamapi-iframe': ['babel-polyfill', './src/viamapi-iframe.js'],
-    'wopiapi-iframe': './src/wopiapi-iframe.js'
+    'viamapi-iframe': ['babel-polyfill', './temp/viamapi-iframe.js'],
   },
   module: {
     rules: [
diff --git a/main.go b/main.go
index 817b975cfd3552b41fdc47ddcee4ac5175a08475..4246518c686a59fb308e589e6b946280179ea154 100644
--- a/main.go
+++ b/main.go
@@ -5,6 +5,8 @@ import (
 	"code.vereign.com/code/restful-api/server"
 	"fmt"
 	"io/ioutil"
+	"os"
+	"path/filepath"
 	"reflect"
 	"sort"
 	"strings"
@@ -14,14 +16,22 @@ import (
 
 func main() {
 	iframeLibrary := buildIframeLibrary()
-	fmt.Print(iframeLibrary)
+
+	newpath := filepath.Join(".", "javascript/temp")
+	os.MkdirAll(newpath, os.ModePerm)
+
+	err := ioutil.WriteFile("./javascript/temp/viamapi-iframe.js", []byte(iframeLibrary), 0644)
+
+	if err != nil {
+		fmt.Println(err.Error())
+	}
 }
 
 func buildIframeLibrary() string {
 	prefixes := []string{}
 	endPoints := server.GetEndPoints(prefixes)
 
-	result := "<script>\n\n"
+	result := ""
 
 	var keys []string
 	for k := range endPoints {
@@ -41,7 +51,7 @@ func buildIframeLibrary() string {
 	methods := generatePenpalRemoteMethods(endPoints)
 	methods += getWopiAPIPenpalMethods()
 
-	viamApi := strings.Replace(string(dat), "placeholderForExternalMethods:1", methods, 1)
+	viamApi := strings.Replace(string(dat), "//{{endpointsPlaceholder}}", methods, 1)
 
 	if err != nil {
 		fmt.Println(err.Error())
@@ -144,8 +154,6 @@ func buildIframeLibrary() string {
 		}
 	}
 
-	result += "</script>\n"
-
 	return result
 }