diff --git a/hswaw/site/views.go b/hswaw/site/views.go
new file mode 100644
index 0000000..ae62322
--- /dev/null
+++ b/hswaw/site/views.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+	"fmt"
+	"html/template"
+	"net/http"
+
+	"github.com/golang/glog"
+
+	"code.hackerspace.pl/hscloud/hswaw/site/templates"
+)
+
+// parseTemplates parses a set of templates from
+// //hswaw/site/templates/$name.html into a Go HTML template. Typical Go text
+// templating ordering behaviour applies (this basically replicates
+// template.ParseFiles, but for statically embedded files instead).
+func parseTemplates(names ...string) (*template.Template, error) {
+	if len(names) == 0 {
+		return nil, fmt.Errorf("at least one template must be given")
+	}
+
+	var t *template.Template
+	for _, n := range names {
+		path := fmt.Sprintf("hswaw/site/templates/%s.html", n)
+		data, ok := templates.Data[path]
+		if !ok {
+			return nil, fmt.Errorf("template %q (%s) not found", n, path)
+		}
+		s := string(data)
+
+		if t == nil {
+			t = template.New(n)
+		}
+		_, err := t.Parse(s)
+		if err != nil {
+			return nil, fmt.Errorf("template %q could not be parsed: %w", n, err)
+		}
+	}
+	return t, nil
+}
+
+var (
+	tmplAbout   = template.Must(parseTemplates("basic", "about"))
+	tmplAboutEn = template.Must(parseTemplates("basic", "about_en"))
+)
+
+// render attempts to render a given Go template with data into the HTTP
+// response writer, and logs a warning if anything goes wrong.
+func render(w http.ResponseWriter, t *template.Template, data interface{}) {
+	if err := t.Execute(w, data); err != nil {
+		glog.Warningf("Rendering %v failed: %v", t, err)
+	}
+}
+
+// handleAbout handles rendering the about page at /about
+func (s *service) handleAbout(w http.ResponseWriter, r *http.Request) {
+	render(w, tmplAbout, nil)
+}
+
+// handleAboutEn handles rendering the about page at /about_en
+func (s *service) handleAboutEn(w http.ResponseWriter, r *http.Request) {
+	render(w, tmplAboutEn, nil)
+}
