let render ~lang ~title ~content = Template.render_unsafe ~lang ~title ~content:(Dream.html_escape content) let asset_loader _root path _request = match Content.read ("assets/" ^ path) with | None -> Dream.empty `Not_Found | Some asset -> Dream.respond asset let page path = match Content.read (path ^ ".md") with | None -> None | Some page -> Some (Omd.of_string page |> Omd.to_html) let () = Dream.run @@ Dream.logger @@ Dream.router [ Dream.get "/assets/**" (Dream.static ~loader:asset_loader "") ; Dream.get "/" (fun _request -> match page "index" with | None -> Dream.empty `Not_Found | Some content -> Dream.html (Template.render_unsafe ~lang:"en" ~title:"title" ~content) ) ; Dream.get "/:page" (fun request -> match page (Dream.param "page" request) with | None -> Dream.empty `Not_Found | Some content -> Dream.html (Template.render_unsafe ~lang:"en" ~title:"title" ~content) ) ] @@ Dream.not_found