diff --git a/Dockerfile b/Dockerfile
index e5fb44da96b3fef9b31b75fd96428a1ba4b94a54..5bf0da9b49ff176b7ec17ccad7a575466af640b7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,5 +11,5 @@ RUN CGO_ENABLED=false go build -a app .
 FROM alpine:3.7
 WORKDIR /
 COPY --from=builder /go/src/app/app /app
-COPY --from=builder /go/src/app/static /static
+COPY --from=builder /go/src/app/templates /templates
 CMD ["/app"]
\ No newline at end of file
diff --git a/main.go b/main.go
index bdb85aefb2934a04cb81c5757186d8084f9af187..d89ea0f87bebc746e7ff37fc97e7c43fa7b7cdfd 100644
--- a/main.go
+++ b/main.go
@@ -12,6 +12,8 @@ import (
 	"crypto/rand"
 	"time"
 	"database/sql"
+	_ "github.com/lib/pq"
+	"html/template"
 )
 
 func writeBody(reader io.ReadCloser, path string) error {
@@ -95,6 +97,20 @@ func printHeaders(r *http.Request) {
 	}
 }
 
+type UserInfo struct {
+	Id    string
+	Name  string
+	Email string
+}
+
+func parseUser(r *http.Request) UserInfo {
+	return UserInfo{
+		r.Header.Get("X-Auth-Subject"),
+		r.Header.Get("X-Auth-Username"),
+		r.Header.Get("X-Auth-Email"),
+	}
+}
+
 func main() {
 	config := NewConfigFromEnv()
 
@@ -108,12 +124,12 @@ func main() {
 		panic(err)
 	}
 
-	staticServer := http.FileServer(http.Dir("static/"))
 	imageServer := http.FileServer(http.Dir(config.TargetFolder))
 
 	http.HandleFunc("/upload/", func(w http.ResponseWriter, r *http.Request) {
-		user := r.Header.Get("X-Auth-Id")
 		if r.Method == "POST" {
+			user := parseUser(r)
+
 			r.ParseMultipartForm(32 << 20)
 			file, _, err := r.FormFile("file")
 			image, err := createImage(&config, file)
@@ -126,7 +142,7 @@ func main() {
 				return
 			}
 
-			_, err = db.Exec("INSERT INTO images (id, owner) VALUES ($1, $2)", image.Id, user)
+			_, err = db.Exec("INSERT INTO images (id, owner) VALUES ($1, $2)", image.Id, user.Id)
 			if err != nil {
 				panic(err)
 			}
@@ -181,14 +197,79 @@ func main() {
 				}
 			}
 		} else {
-			staticServer.ServeHTTP(w, r)
+			user := parseUser(r)
+
+			type UploadData struct {
+				User UserInfo
+			}
+
+			tmpl, err := template.New("upload").ParseFiles("templates/upload")
+			if err != nil {
+				panic(err)
+			}
+			err = tmpl.Execute(w, UploadData{
+				user,
+			})
+			if err != nil {
+				panic(err)
+			}
+		}
+	})
+
+	http.HandleFunc("/me/images/", func(w http.ResponseWriter, r *http.Request) {
+		user := parseUser(r)
+
+		type ImageListData struct {
+			User   UserInfo
+			Images []string
+		}
+
+		result, err := db.Query("SELECT id FROM images WHERE owner = $1", user.Id)
+		if err != nil {
+			panic(err)
+		}
+
+		var images []string
+		for result.Next() {
+			var id string
+			err := result.Scan(&id)
+			if err != nil {
+				panic(err)
+			}
+			images = append(images, id)
+		}
+
+		tmpl, err := template.New("me_images").ParseFiles("templates/me_images")
+		if err != nil {
+			panic(err)
+		}
+		err = tmpl.Execute(w, ImageListData{
+			user,
+			images,
+		})
+		if err != nil {
+			panic(err)
 		}
 	})
 
 	http.Handle("/i/", http.StripPrefix("/i/", imageServer))
 	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
-		printHeaders(r)
-		staticServer.ServeHTTP(w, r)
+		user := parseUser(r)
+
+		type IndexData struct {
+			User UserInfo
+		}
+
+		tmpl, err := template.New("index").ParseFiles("templates/index")
+		if err != nil {
+			panic(err)
+		}
+		err = tmpl.Execute(w, IndexData{
+			user,
+		})
+		if err != nil {
+			panic(err)
+		}
 	})
 
 	err = http.ListenAndServe(":8080", nil)
diff --git a/static/index.html b/static/index.html
deleted file mode 100644
index 8025f96dc2023271dc97f9f5b84927934da5f3f4..0000000000000000000000000000000000000000
--- a/static/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<html><a href="/upload/">Upload images</a></html>
\ No newline at end of file
diff --git a/static/index.pug b/static/index.pug
deleted file mode 100644
index a9efe59eafde849c7e10a8ef0aa391638a26b31d..0000000000000000000000000000000000000000
--- a/static/index.pug
+++ /dev/null
@@ -1,3 +0,0 @@
-html
-    a(href="/upload/").
-        Upload images
\ No newline at end of file
diff --git a/static/upload/index.html b/static/upload/index.html
deleted file mode 100644
index 01cb74421a0320b6f90f0d6c696796fa004e006b..0000000000000000000000000000000000000000
--- a/static/upload/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<html><form action="/upload/" method="POST" enctype="multipart/form-data"><input type="file" name="file"/><input type="submit"/></form></html>
\ No newline at end of file
diff --git a/static/upload/index.pug b/static/upload/index.pug
deleted file mode 100644
index 00c790bb31b334e8d2b66307f9169faa0f192dde..0000000000000000000000000000000000000000
--- a/static/upload/index.pug
+++ /dev/null
@@ -1,4 +0,0 @@
-html
-    form(action="/upload/", method="POST" enctype="multipart/form-data")
-        input(type="file", name="file")
-        input(type="submit")
\ No newline at end of file
diff --git a/templates/index b/templates/index
new file mode 100644
index 0000000000000000000000000000000000000000..858580743218cdf68a5b4dd3a0d59d52a2e5bcf8
--- /dev/null
+++ b/templates/index
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+
+{{ if .User.Id }}
+    <p>Welcome, {{ .User.Name }}</p>
+    <p>
+        <a href="/me/images">My Images</a> |
+        <a href="/me/albums">My Albums</a> |
+        <a href="/upload">Upload</a>
+    </p>
+{{ end }}
\ No newline at end of file
diff --git a/templates/me_images b/templates/me_images
new file mode 100644
index 0000000000000000000000000000000000000000..53061dd8f8f2ce842fe16037ea47b102208a5ec1
--- /dev/null
+++ b/templates/me_images
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+
+<p>Welcome, {{ .User.Name }}</p>
+<p>
+    <a href="/me/images">My Images</a> |
+    <a href="/me/albums">My Albums</a> |
+    <a href="/upload">Upload</a>
+</p>
+
+{{ range .Images }}
+    <a href="/i/{{ . }}">
+        <img src="/i/{{ . }}t" >
+    </a>
+{{ end }}
\ No newline at end of file
diff --git a/templates/upload b/templates/upload
new file mode 100644
index 0000000000000000000000000000000000000000..7a4f1d0ecc09583c806e35aead1ee13d25ded113
--- /dev/null
+++ b/templates/upload
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<p>Welcome, {{ .User.Name }}</p>
+<p>
+    <a href="/me/images">My Images</a> |
+    <a href="/me/albums">My Albums</a> |
+    <a href="/upload">Upload</a>
+</p>
+
+<form action="/upload/" method="POST" enctype="multipart/form-data">
+    <input type="file" name="file"/>
+    <input type="submit"/>
+</form>
\ No newline at end of file