diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # ChangeLog for servius
 
+## 1.2.2.0
+
+* Viewport for Markdown
+* Rudimentary title parsing for Markdown
+
 ## 1.2.1.0
 
 * Move to cmark-gfm
diff --git a/app/servius.hs b/app/servius.hs
--- a/app/servius.hs
+++ b/app/servius.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE OverloadedStrings  #-}
 {-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE QuasiQuotes        #-}
 module Main (main) where
 
 import           Blaze.ByteString.Builder.Char.Utf8 (fromLazyText)
@@ -15,8 +16,9 @@
 import           Network.HTTP.Types                 (status200)
 import           Network.Wai                        (Middleware, Response,
                                                      pathInfo, responseBuilder)
+import           Text.Blaze.Html                    (preEscapedToHtml)
 import           Text.Blaze.Html.Renderer.Utf8      (renderHtmlBuilder)
-import           Text.Hamlet                        (defaultHamletSettings)
+import           Text.Hamlet                        (defaultHamletSettings, shamlet)
 import           Text.Hamlet.RT                     (parseHamletRT,
                                                      renderHamletRT)
 import           Text.Lucius                        (luciusRT)
@@ -72,4 +74,15 @@
           [optSmart]
           [extStrikethrough, extTable, extAutolink]
           t
-    return $ responseBuilder status200 [("Content-Type", "text/html; charset=utf-8")] $ encodeUtf8Builder html
+        title = T.strip $ T.dropWhile (== '#') $ T.concat $ take 1 $ dropWhile T.null $ T.lines t
+    return $ responseBuilder status200 [("Content-Type", "text/html; charset=utf-8")] $ renderHtmlBuilder
+      [shamlet|
+          $doctype 5
+          <html>
+            <head>
+              <meta charset=utf-8>
+              <meta name="viewport" content="width=device-width, initial-scale=1.0">
+              <title>#{title}
+            <body>
+              <article>#{preEscapedToHtml html}
+      |]
diff --git a/servius.cabal b/servius.cabal
--- a/servius.cabal
+++ b/servius.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: >= 1.10
+
+-- This file has been generated from package.yaml by hpack version 0.29.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 1151ed11829ab6be6a43e6e0c30b14f49cb96da7378208df5b8716ef34fa095c
+-- hash: 9c275b1b992c284f219cfbb5ac99011d456d3d7310f7638c06e1141c77de67b3
 
 name:           servius
-version:        1.2.1.0
+version:        1.2.2.0
 synopsis:       Warp web server with template rendering
 description:    Please see README.md at https://www.stackage.org/package/servius
 category:       Web
@@ -17,7 +19,6 @@
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 extra-source-files:
     ChangeLog.md
     README.md
