     [["/manual/index.html"]
      (resource
       {:id ::manual
+       :properties
+       (fn [ctx]
+         (let [fl (io/file "doc" "yada-manual.adoc")]
+           {:exists? true
+            :last-modified (apply max (map #(.lastModified %) (filter #(.isFile %) (file-seq (io/file "doc")))))
+            ::file fl}))
        :methods
        {:get
         {:produces {:media-type "text/html" :charset "UTF-8"}
-         :response (asciidoc->html (io/file "doc" "yada-manual.adoc")
-                                   {:toc true})}}})]
+         :response (fn [ctx]
+                     (asciidoc->html (-> ctx :properties ::file) {:toc true}))}}})]
 
     [["/index.html"]
      (resource

                         (let [imgdir (io/file "doc")
                               fl (io/file imgdir (-> ctx :request :path-info))]
                           {:exists? (.exists fl)
                            ::file fl}))
           :produces (fn [ctx] (ext-mime-type (.getName (-> ctx :properties ::file))))
           :methods

    (let [engine (Asciidoctor$Factory/create)
          _ (register-docinfo-processor! engine)
          ]
      (assert fl)
      (.convertFile
       engine fl
       (..
