diff --git a/devtools/hackdoc/markdown.go b/devtools/hackdoc/markdown.go
index 911c2c0..fb46c5d 100644
--- a/devtools/hackdoc/markdown.go
+++ b/devtools/hackdoc/markdown.go
@@ -8,6 +8,7 @@
 
 	"code.hackerspace.pl/hscloud/devtools/hackdoc/config"
 
+	"github.com/gabriel-vasile/mimetype"
 	"github.com/golang/glog"
 	"gopkg.in/russross/blackfriday.v2"
 )
@@ -31,6 +32,7 @@
 				q["ref"] = []string{ref}
 				u.RawQuery = q.Encode()
 				node.Destination = []byte(u.String())
+				glog.Infof("link fix %q -> %q", dest, u.String())
 			}
 		}
 		return r.RenderNode(&buf, node, entering)
@@ -38,7 +40,12 @@
 	return buf.Bytes()
 }
 
-func (r *request) handleMarkdown(path string, cfg *config.Config) {
+type pathPart struct {
+	Label string
+	Path  string
+}
+
+func (r *request) handleFile(path string, cfg *config.Config) {
 	data, err := r.source.ReadFile(r.ctx, path)
 	if err != nil {
 		glog.Errorf("ReadFile(%q): %w", err)
@@ -46,30 +53,55 @@
 		return
 	}
 
-	rendered := renderMarkdown([]byte(data), r.ref)
+	// TODO(q3k): do MIME detection instead.
+	if strings.HasSuffix(path, ".md") {
+		rendered := renderMarkdown([]byte(data), r.ref)
 
-	r.logRequest("serving markdown at %s, cfg %+v", path, cfg)
+		r.logRequest("serving markdown at %s, cfg %+v", path, cfg)
 
-	// TODO(q3k): allow markdown files to override which template to load
-	tmpl, ok := cfg.Templates["default"]
-	if !ok {
-		glog.Errorf("No default template found for %s", path)
-		// TODO(q3k): implement fallback template
-		r.w.Write(rendered)
+		// TODO(q3k): allow markdown files to override which template to load
+		tmpl, ok := cfg.Templates["default"]
+		if !ok {
+			glog.Errorf("No default template found for %s", path)
+			// TODO(q3k): implement fallback template
+			r.w.Write(rendered)
+			return
+		}
+
+		pathInDepot := strings.TrimPrefix(path, "//")
+		pathParts := []pathPart{
+			{Label: "//", Path: "/"},
+		}
+		parts := strings.Split(pathInDepot, "/")
+		fullPath := ""
+		for i, p := range parts {
+			label := p
+			if i != len(parts)-1 {
+				label = label + "/"
+			}
+			fullPath += "/" + p
+			pathParts = append(pathParts, pathPart{Label: label, Path: fullPath})
+		}
+
+		vars := map[string]interface{}{
+			"Rendered":    template.HTML(rendered),
+			"Title":       path,
+			"Path":        path,
+			"PathInDepot": pathInDepot,
+			"PathParts":   pathParts,
+			"HackdocURL":  flagHackdocURL,
+			"WebLinks":    r.source.WebLinks(pathInDepot),
+		}
+		err = tmpl.Execute(r.w, vars)
+		if err != nil {
+			glog.Errorf("Could not execute template for %s: %v", err)
+		}
+
 		return
 	}
 
-	pathInDepot := strings.TrimPrefix(path, "//")
-	vars := map[string]interface{}{
-		"Rendered":    template.HTML(rendered),
-		"Title":       path,
-		"Path":        path,
-		"PathInDepot": pathInDepot,
-		"HackdocURL":  flagHackdocURL,
-		"WebLinks":    r.source.WebLinks(pathInDepot),
-	}
-	err = tmpl.Execute(r.w, vars)
-	if err != nil {
-		glog.Errorf("Could not execute template for %s: %v", err)
-	}
+	// Just serve the file.
+	mime := mimetype.Detect(data)
+	r.w.Header().Set("Content-Type", mime.String())
+	r.w.Write(data)
 }
