diff --git a/apps/photos-ui/BUILD b/apps/photos-ui/BUILD
new file mode 100644
index 0000000..e25c31e
--- /dev/null
+++ b/apps/photos-ui/BUILD
@@ -0,0 +1,55 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary")
+load("@io_bazel_rules_docker//container:container.bzl", "container_push", "container_image")
+load("@rules_pkg//:pkg.bzl", "pkg_tar")
+
+go_binary(
+	name = "photos_ui",
+	srcs = ["main.go"],
+	data = glob([
+	     "static/**",
+	     "*.html",
+	]),
+	deps = [
+	     "@io_bazel_rules_go//go/tools/bazel:bazel",
+	],
+)
+
+filegroup(
+    name = "runfiles",
+    srcs = glob([
+	     "static/**",
+	     "*.html",
+	     "photos_ui.runfiles_manifest",
+	]),
+)
+
+container_image(
+    name = "container",
+    base = "@alpine_base//image",
+    files = [":photos_ui", ":runfiles"],
+    data_path = "/",
+    cmd = ["/photos_ui"],
+    env = {
+    	"RUNFILES_DIR": "/",
+    	"RUNFILES_MANIFEST_FILE": "/photos_ui.runfiles_manifest",
+    },
+    symlinks = {
+    	     "/photos_ui": "/apps/photos-ui/photos_ui_/photos_ui",
+    },
+)
+
+container_push(
+   name = "push_to_dev",
+   image = ":container",
+   format = "Docker",
+   registry = "localhost:30500",
+   repository = "giolekva/photos-ui",
+   tag = "latest",
+)
+
+pkg_tar(
+	name = "chart",
+	srcs = glob(["chart/**"]),
+	extension = "tar.gz",
+	strip_prefix = "./chart",
+)
diff --git a/apps/photos-ui/chart/templates/install.yaml b/apps/photos-ui/chart/templates/install.yaml
index 1e88645..1978b10 100644
--- a/apps/photos-ui/chart/templates/install.yaml
+++ b/apps/photos-ui/chart/templates/install.yaml
@@ -52,4 +52,4 @@
         imagePullPolicy: {{ .Values.image.pullPolicy }}
         ports:
         - containerPort: {{ .Values.containerPort }}
-        command: ["photos-ui", "--port={{ .Values.containerPort }}", "--pcloud_api_addr={{ .Values.pcloudApiAddr }}"]
+        command: ["/photos_ui", "--port={{ .Values.containerPort }}", "--pcloud_api_addr={{ .Values.pcloudApiAddr }}"]
diff --git a/apps/photos-ui/chart/values.yaml b/apps/photos-ui/chart/values.yaml
index 74618e6..bfb5260 100644
--- a/apps/photos-ui/chart/values.yaml
+++ b/apps/photos-ui/chart/values.yaml
@@ -1,6 +1,6 @@
 replicas: 1
 image:
-  name: giolekva/photos-ui
+  name: localhost:30500/giolekva/photos-ui
   tag: latest
   pullPolicy: Always
 servicePort: 80
diff --git a/apps/photos-ui/gallery.html b/apps/photos-ui/gallery.html
index a8001d0..68e200d 100644
--- a/apps/photos-ui/gallery.html
+++ b/apps/photos-ui/gallery.html
@@ -3,7 +3,7 @@
     <head>
         <title>Photos</title>
     </head>
-    <script src="static/photos.js"></script>
+    <script src="static/photos.js?v4"></script>
     <body onload="initGallery('gallery')">
       <div id="gallery" />
     </body>
diff --git a/apps/photos-ui/main.go b/apps/photos-ui/main.go
index b85036e..e170a73 100644
--- a/apps/photos-ui/main.go
+++ b/apps/photos-ui/main.go
@@ -8,13 +8,19 @@
 	"net/http/httputil"
 	"net/url"
 	"text/template"
+
+	"github.com/bazelbuild/rules_go/go/tools/bazel"
 )
 
 var port = flag.Int("port", 3000, "Port to listen on.")
 var pcloudApiAddr = flag.String("pcloud_api_addr", "", "PCloud API Server address.")
 
 func handle_gallery(w http.ResponseWriter, r *http.Request) {
-	http.ServeFile(w, r, "./gallery.html")
+	gallery_html, err := bazel.Runfile("apps/photos-ui/gallery.html")
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+	}
+	http.ServeFile(w, r, gallery_html)
 }
 
 func handle_photo(w http.ResponseWriter, r *http.Request) {
@@ -28,7 +34,11 @@
 		http.Error(w, "Photo id must be provided", http.StatusBadRequest)
 		return
 	}
-	t, err := template.ParseFiles("photo.html")
+	photo_html, err := bazel.Runfile("apps/photos-ui/photo.html")
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+	}
+	t, err := template.ParseFiles(photo_html)
 	if err != nil {
 		log.Print(err)
 		http.Error(w, "Could not process page", http.StatusInternalServerError)
@@ -52,7 +62,11 @@
 
 func main() {
 	flag.Parse()
-	fs := http.FileServer(http.Dir("./static"))
+	static_dir, err := bazel.Runfile("apps/photos-ui/static")
+	if err != nil {
+		log.Fatal(err)
+	}
+	fs := http.FileServer(http.Dir(static_dir))
 	http.Handle("/static/", http.StripPrefix("/static/", fs))
 	http.Handle("/graphql", newGqlProxy(*pcloudApiAddr))
 	http.HandleFunc("/photo", handle_photo)
diff --git a/apps/photos-ui/photo.html b/apps/photos-ui/photo.html
index d41bb29..d2dd612 100644
--- a/apps/photos-ui/photo.html
+++ b/apps/photos-ui/photo.html
@@ -3,7 +3,7 @@
     <head>
         <title>Photos</title>
     </head>
-    <script src="static/photos.js"></script>
+    <script src="static/photos.js?v4"></script>
     <body onload="initImg('photo', '{{ .Id }}')">
       <img id="photo" onload="drawFaces('photo', 'faces', '{{ .Id }}')" src=""></img>
       <canvas id="faces"></canvas>
diff --git a/apps/photos-ui/photos_ui.runfiles_manifest b/apps/photos-ui/photos_ui.runfiles_manifest
new file mode 100644
index 0000000..b604c19
--- /dev/null
+++ b/apps/photos-ui/photos_ui.runfiles_manifest
@@ -0,0 +1,3 @@
+/apps/photos-ui/gallery.html /gallery.html
+/apps/photos-ui/photo.html /photo.html
+/apps/photos-ui/static/photos.js /static/photos.js
diff --git a/apps/photos-ui/static/photos.js b/apps/photos-ui/static/photos.js
index ed33e0d..d098829 100644
--- a/apps/photos-ui/static/photos.js
+++ b/apps/photos-ui/static/photos.js
@@ -35,7 +35,7 @@
     imgs = await fetchAllPhotos();
     img_list = "<ul>";
     for (img of imgs) {
-	img_list += "<li><a href='/photo?id=" + img.id + "'><img style='max-width: 300px' src='http://minio/" + img.objectPath + "' /></a></li>";
+	img_list += "<li><a href='/photo?id=" + img.id + "'><img style='max-width: 300px' src='http://minio:8080/" + img.objectPath + "' /></a></li>";
     }
     img_list += "</ul>";
     document.getElementById(gallery_elem_id).innerHTML = img_list;
@@ -43,7 +43,7 @@
 
 async function initImg(img_elem_id, id) {
     img = await fetchImage(id);
-    document.getElementById(img_elem_id).setAttribute("src", "http://minio/" + img.objectPath);
+    document.getElementById(img_elem_id).setAttribute("src", "http://minio:8080/" + img.objectPath);
 }
 
 async function drawFaces(photo_elem_id, faces_canvas_elem_id, id){
