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()
+}
