diff --git a/qlfile b/qlfile
index dee517c..36f308d 100644
--- a/qlfile
+++ b/qlfile
@@ -5,3 +5,4 @@ git hsx https://github.com/skyizwhite/hsx.git
 git ningle-fbr https://github.com/skyizwhite/ningle-fbr.git
 ql cl-ppcre
 ql trivial-backtrace
+ql trivia
diff --git a/qlfile.lock b/qlfile.lock
index c82a172..fb6d3c8 100644
--- a/qlfile.lock
+++ b/qlfile.lock
@@ -30,3 +30,7 @@
  (:class qlot/source/ql:source-ql
   :initargs (:%version :latest)
   :version "ql-2023-10-21"))
+("trivia" .
+ (:class qlot/source/ql:source-ql
+  :initargs (:%version :latest)
+  :version "ql-2024-10-12"))
diff --git a/src/renderer.lisp b/src/renderer.lisp
index 05b6d19..bec6cf5 100644
--- a/src/renderer.lisp
+++ b/src/renderer.lisp
@@ -1,7 +1,10 @@
 (defpackage #:hp/renderer
   (:use #:cl
-        #:hsx)
+        #:hsx
+        #:trivia)
   (:local-nicknames (#:jg #:jingle))
+  (:import-from #:hsx/element
+                #:element)
   (:local-nicknames (#:env #:hp/env)))
 (in-package #:hp/renderer)
 
@@ -27,11 +30,11 @@
 
 (defmethod jg:process-response ((app jg:app) result)
   (jg:set-response-header :content-type "text/html; charset=utf-8")
-  (when (env:dev-mode-p)
-    (jg:set-response-header :cache-control "no-store"))
   (call-next-method app
                     (hsx:render-to-string
-                     (if (listp result)
-                         (destructuring-bind (body metadata) result
-                           (document metadata body))
-                         (document result)))))
+                     (match result
+                       ((guard (or (list element metadata)
+                                   element)
+                               (typep element 'element))
+                        (document metadata element))
+                       (_ (error "Invalid response form"))))))