diff --git a/app/matrix/wellknown/BUILD b/app/matrix/wellknown/BUILD
new file mode 100644
index 0000000..1cf4138
--- /dev/null
+++ b/app/matrix/wellknown/BUILD
@@ -0,0 +1,25 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
+
+go_library(
+    name = "go_default_library",
+    srcs = ["main.go"],
+    importpath = "code.hackerspace.pl/hscloud/app/matrix/wellknown",
+    visibility = ["//visibility:private"],
+    deps = [
+        "//go/mirko:go_default_library",
+        "@com_github_golang_glog//:go_default_library",
+    ],
+)
+
+go_binary(
+    name = "wellknown",
+    embed = [":go_default_library"],
+    visibility = ["//visibility:public"],
+)
+
+go_test(
+    name = "go_default_test",
+    srcs = ["server_test.go"],
+    embed = [":go_default_library"],
+    deps = ["@com_github_go_test_deep//:go_default_library"],
+)
diff --git a/app/matrix/wellknown/README.me b/app/matrix/wellknown/README.me
new file mode 100644
index 0000000..054bde3
--- /dev/null
+++ b/app/matrix/wellknown/README.me
@@ -0,0 +1,14 @@
+matrix well-known server
+========================
+
+This is a small service that runs alongside a Matrix Synapse in order to direct traffic to it via .well-known/matrix/*.
+
+We currently satisfy two URLs formats:
+
+ - .well-known/matrix/client: [as per the client-server spec](https://matrix.org/docs/spec/client_server/latest#well-known-uri), ie. m.homeserver set.
+ - .well-known/matrix/server: [as per the federation spec](https://matrix.org/docs/spec/server_server/latest#get-well-known-matrix-server), ie. m.server set
+
+Usage
+-----
+
+This is automatically ran as part of the kubernetes machinery for Synapse. See //app/matrix/lib/matrix.libsonnet for more information.
diff --git a/app/matrix/wellknown/main.go b/app/matrix/wellknown/main.go
new file mode 100644
index 0000000..ca53641
--- /dev/null
+++ b/app/matrix/wellknown/main.go
@@ -0,0 +1,82 @@
+package main
+
+import (
+	"encoding/json"
+	"flag"
+	"fmt"
+	"net/http"
+
+	"code.hackerspace.pl/hscloud/go/mirko"
+	"github.com/golang/glog"
+)
+
+var (
+	flagListenPublic string
+	flagDomain       string
+)
+
+type wellKnownHomeserver struct {
+	BaseURL string `json:"base_url"`
+}
+
+type wellKnown struct {
+	Homeserver wellKnownHomeserver `json:"m.homeserver"`
+	Server     string              `json:"m.server"`
+}
+
+type server struct {
+	domain string
+}
+
+func (s *server) register(mux *http.ServeMux) {
+	mux.HandleFunc("/.well-known/matrix/server", s.makeHandler(true))
+	mux.HandleFunc("/.well-known/matrix/client", s.makeHandler(false))
+}
+
+func (s *server) makeHandler(server bool) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/json")
+		wk := wellKnown{}
+		if server {
+			wk.Server = fmt.Sprintf("%s:443", s.domain)
+		} else {
+			wk.Homeserver = wellKnownHomeserver{
+				BaseURL: fmt.Sprintf("https://%s", s.domain),
+			}
+		}
+		err := json.NewEncoder(w).Encode(wk)
+		if err != nil {
+			glog.Errorf("When handling request: %v", err)
+		}
+	}
+}
+
+func main() {
+	flag.StringVar(&flagListenPublic, "listen_public", "0.0.0.0:8080", "Address to listen at for well-known traffic")
+	flag.StringVar(&flagDomain, "domain", "matrix.hackerspace.pl", "Address to which clients and servers should connect")
+	flag.Parse()
+
+	m := mirko.New()
+	if err := m.Listen(); err != nil {
+		glog.Exitf("Listen(): %v", err)
+	}
+
+	mux := http.NewServeMux()
+	s := &server{
+		domain: flagDomain,
+	}
+	s.register(mux)
+
+	go func() {
+		glog.Infof("Listening on %s...", flagListenPublic)
+		if err := http.ListenAndServe(flagListenPublic, mux); err != nil {
+			glog.Exitf("listen failed: %v", err)
+		}
+	}()
+
+	if err := m.Serve(); err != nil {
+		glog.Exitf("Serve(): %v", err)
+	}
+
+	<-m.Done()
+}
diff --git a/app/matrix/wellknown/server_test.go b/app/matrix/wellknown/server_test.go
new file mode 100644
index 0000000..bdba93b
--- /dev/null
+++ b/app/matrix/wellknown/server_test.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"encoding/json"
+	"net/http"
+	"net/http/httptest"
+	"testing"
+
+	"github.com/go-test/deep"
+)
+
+func TestServing(t *testing.T) {
+	s := server{
+		domain: "example.com",
+	}
+	mux := http.NewServeMux()
+	s.register(mux)
+
+	for i, te := range []struct {
+		url  string
+		want wellKnown
+	}{
+		{"/.well-known/matrix/client", wellKnown{
+			Homeserver: wellKnownHomeserver{"https://example.com"},
+		}},
+		{"/.well-known/matrix/server", wellKnown{
+			Server: "example.com:443",
+		}},
+	} {
+		req, _ := http.NewRequest("GET", te.url, nil)
+		rr := httptest.NewRecorder()
+		mux.ServeHTTP(rr, req)
+		if want, got := http.StatusOK, rr.Code; want != got {
+			t.Fatalf("%d: handler returned wrong status code: want %v got %v", i, want, got)
+		}
+		got := wellKnown{}
+		if err := json.Unmarshal(rr.Body.Bytes(), &got); err != nil {
+			t.Fatalf("%d: handler returned unparseable JSON: %v", i, err)
+		}
+		if diff := deep.Equal(te.want, got); diff != nil {
+			t.Errorf("%d: response diff: %s", i, diff)
+		}
+	}
+}
