diff --git a/src/Prelude.hs b/src/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude.hs
@@ -0,0 +1,31 @@
+module Prelude
+    ( module Exports
+
+    -- | Custom prelude functions
+    , parseInt
+    , headMay
+    ) where
+
+import           Control.Monad.Trans.Resource as Exports (ResourceT,
+                                                          liftResourceT,
+                                                          runResourceT)
+import           Network.HTTP.Types           as Exports
+import           Network.Wai                  as Exports
+import           Relude                       as Exports hiding (get, put)
+
+-- import           Data.Text.Encoding           (decodeUtf8With)
+-- import           Data.Text.Encoding.Error     (lenientDecode)
+import qualified Data.Text.Read               as TR
+
+import           UnliftIO.Exception           as Exports (throwIO)
+
+-- Text formatting
+import           Formatting                   as Exports (format, sformat, (%))
+import           Formatting.ShortFormatters   as Exports (d, sh, st, t)
+
+parseInt :: Integral a => Text -> Maybe a
+parseInt t' = either (const Nothing) Just $ fmap fst $ TR.decimal t'
+
+headMay :: [a] -> Maybe a
+headMay [] = Nothing
+headMay (a:_) = Just a
diff --git a/src/Webby/Server.hs b/src/Webby/Server.hs
--- a/src/Webby/Server.hs
+++ b/src/Webby/Server.hs
@@ -16,7 +16,7 @@
 import qualified UnliftIO.Exception         as E
 import           Web.HttpApiData
 
-import           WebbyPrelude
+import           Prelude
 
 import           Webby.Types
 
@@ -95,7 +95,7 @@
 header :: HeaderName -> WebbyM appEnv (Maybe Text)
 header n = do
     hs <- requestHeaders <$> request
-    return $ headMay $ map (decodeUtf8Lenient . snd) $ filter ((n == ) . fst) hs
+    return $ headMay $ map (decodeUtf8 . snd) $ filter ((n == ) . fst) hs
 
 request :: WebbyM appEnv Request
 request = asks weRequest
@@ -112,7 +112,7 @@
 requestBodyLength :: WebbyM appEnv (Maybe Int64)
 requestBodyLength = do
     hMay <- header hContentLength
-    return $ do val <- toS <$> hMay
+    return $ do val <- hMay
                 parseInt val
 
 finish :: WebbyM appEnv a
@@ -209,10 +209,10 @@
               E.Handler (\(ex :: WebbyError) -> case ex of
                             wmc@(WebbyMissingCapture _) ->
                                 respond $ responseLBS status404 [] $
-                                toS $ displayException wmc
+                                encodeUtf8 $ displayException wmc
 
                             _ -> respond $ responseLBS status400 [] $
-                                 toS $ displayException ex
+                                 encodeUtf8 $ displayException ex
                         )
 
               -- Handles Webby's finish statement
diff --git a/src/Webby/Types.hs b/src/Webby/Types.hs
--- a/src/Webby/Types.hs
+++ b/src/Webby/Types.hs
@@ -10,7 +10,7 @@
 import qualified UnliftIO              as U
 import qualified UnliftIO.Concurrent   as Conc
 
-import           WebbyPrelude
+import           Prelude
 
 -- | A data type to represent parts of the response constructed in the
 -- handler when servicing a request.
diff --git a/src/WebbyPrelude.hs b/src/WebbyPrelude.hs
deleted file mode 100644
--- a/src/WebbyPrelude.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-module WebbyPrelude
-    ( module Exports
-
-    -- | Custom prelude functions
-    , decodeUtf8Lenient
-    , parseInt
-    ) where
-
-import           Control.Monad.Trans.Resource as Exports (ResourceT,
-                                                          liftResourceT,
-                                                          runResourceT)
-import           Network.HTTP.Types           as Exports
-import           Network.Wai                  as Exports
-import           Protolude                    as Exports hiding (get, put, (%))
-
-import           Data.Text.Encoding           as Exports (encodeUtf8)
-
--- Imports for custom functionality coded in this module.
-import           Data.Text.Encoding           (decodeUtf8With)
-import           Data.Text.Encoding.Error     (lenientDecode)
-import qualified Data.Text.Read               as TR
-
--- Text formatting
-import           Formatting                   as Exports (format, sformat, (%))
-import           Formatting.ShortFormatters   as Exports (d, sh, st, t)
-
--- Decode UTF8 leniently (by replacing an invalid input byte with the
--- Unicode replacement character U+FFFD).
-decodeUtf8Lenient :: ByteString -> Text
-decodeUtf8Lenient = decodeUtf8With lenientDecode
-
-parseInt :: Integral a => Text -> Maybe a
-parseInt t' = hush $ fmap fst $ TR.decimal t'
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -7,7 +7,7 @@
 
 import           Webby.Server
 import           Webby.Types
-import           WebbyPrelude
+import           Prelude
 
 main :: IO ()
 main = defaultMain tests
diff --git a/webby.cabal b/webby.cabal
--- a/webby.cabal
+++ b/webby.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 453573afb20aa05fec6830a6c56f09a3e0ce3770df20ecc25fecb5f278073e09
+-- hash: 65bbfd9f416a142a8a1486ee20e9bf0dc2bb5715c5086ae8f3587951a83de9b8
 
 name:           webby
-version:        0.3.0
+version:        0.3.1
 synopsis:       A super-simple web server framework
 description:    A super-simple, easy to use web server framework inspired by
                 Scotty. The goals of the project are: (1) Be easy to use (2) Allow
@@ -38,7 +38,7 @@
   ghc-options: -Wall
   build-depends:
       aeson >=1.2 && <1.5
-    , base >=4.7 && <5
+    , base-noprelude >=4.7 && <5
     , binary >=0.8 && <0.9
     , bytestring >=0.10 && <0.11
     , fast-logger >=2.4 && <2.5
@@ -46,20 +46,20 @@
     , http-api-data >=0.3 && <0.5
     , http-types >=0.12 && <0.13
     , monad-logger >=0.3 && <0.4
-    , protolude >=0.2 && <0.3
+    , relude
     , resourcet >=1.2 && <1.3
     , text >=1.2 && <1.3
     , unliftio >=0.2.7 && <0.3
     , unordered-containers >=0.2.9 && <0.3
     , wai >=3.2 && <3.3
   if flag(dev)
-    ghc-options: -Werror
+    ghc-options: -Wall -Werror
   exposed-modules:
       Webby
+      Prelude
   other-modules:
       Webby.Server
       Webby.Types
-      WebbyPrelude
       Paths_webby
   default-language: Haskell2010
 
@@ -67,10 +67,10 @@
   type: exitcode-stdio-1.0
   main-is: Spec.hs
   other-modules:
+      Prelude
       Webby
       Webby.Server
       Webby.Types
-      WebbyPrelude
       Paths_webby
   hs-source-dirs:
       src
@@ -79,7 +79,7 @@
   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       aeson >=1.2 && <1.5
-    , base >=4.7 && <5
+    , base-noprelude >=4.7 && <5
     , binary >=0.8 && <0.9
     , bytestring >=0.10 && <0.11
     , fast-logger >=2.4 && <2.5
@@ -87,7 +87,7 @@
     , http-api-data >=0.3 && <0.5
     , http-types >=0.12 && <0.13
     , monad-logger >=0.3 && <0.4
-    , protolude >=0.2 && <0.3
+    , relude
     , resourcet >=1.2 && <1.3
     , tasty
     , tasty-hunit
@@ -98,5 +98,5 @@
     , wai >=3.2 && <3.3
     , webby
   if flag(dev)
-    ghc-options: -Werror
+    ghc-options: -Wall -Werror
   default-language: Haskell2010
