diff --git a/controller/main.go b/controller/main.go
new file mode 100644
index 0000000..49fda14
--- /dev/null
+++ b/controller/main.go
@@ -0,0 +1,59 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"flag"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"net/http"
+)
+
+var port = flag.Int("port", 123, "Port to listen on.")
+var graphql_address = flag.String("graphql_address", "", "GraphQL server address.")
+
+func minio_webhook_handler(w http.ResponseWriter, r *http.Request) {
+	body, err := ioutil.ReadAll(r.Body)
+	if len(body) == 0 {
+		return
+	}
+	log.Print(string(body))
+	if err != nil {
+		log.Print("-----")
+		log.Print(err)
+		http.Error(w, "Could not read HTTP request body", http.StatusInternalServerError)
+		return
+	}
+	event := make(map[string]interface{})
+	err = json.Unmarshal(body, &event)
+	if err != nil {
+		log.Print("++++++")
+		log.Print(err)
+		http.Error(w, "Could not parse Event JSON object", http.StatusBadRequest)
+		return
+	}
+	buf := []byte("{ \"query\": \"mutation { addImage(input: [{ objectPath: \\\"" + event["Key"].(string) + "\\\"}]) { image { id } }} \" }")
+	log.Print(string(buf))
+	resp, err := http.Post(*graphql_address, "application/json", bytes.NewReader(buf))
+	if err != nil {
+		log.Print("#######")
+		log.Print(err)
+		http.Error(w, "Could not post to GraphQL", http.StatusInternalServerError)
+		return
+	}
+	body, err = ioutil.ReadAll(resp.Body)
+	if err != nil {
+		log.Print("@@@@@@")
+		log.Print(err)
+		http.Error(w, "Could not parse GraphQL response", http.StatusInternalServerError)
+		return
+	}
+	log.Print(string(body))
+}
+
+func main() {
+	flag.Parse()
+	http.HandleFunc("/minio_webhook", minio_webhook_handler)
+	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
+}
