{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} module Ibb where import Biz.Ibb (Person(..), Book(..), allPeople) import Control.Monad.IO.Class (liftIO) import Data.ByteString.Lazy (ByteString) import Data.Maybe (fromMaybe) import Data.Text.Lazy (Text) import Data.Text.Lazy.Encoding (encodeUtf8) import System.Environment (lookupEnv) import System.Random (newStdGen) import System.Random.Shuffle (shuffle') import Text.Blaze (Markup) import Text.Blaze.Html (Html) import Text.Blaze.Html.Renderer.Text (renderHtml) import Text.Hamlet (shamlet) import Text.Lucius (lucius, renderCss) import Web.Scotty (ActionM, ScottyM, scotty, get, html, raw, setHeader) render :: Html -> ActionM () render = html . renderHtml css :: ByteString -> ActionM () css src = setHeader "content-type" "text/css" >> raw src main :: IO () main = do port <- read <$> fromMaybe "3000" <$> lookupEnv "PORT" :: IO Int scotty port routes routes :: ScottyM () routes = do get "/" $ do r <- liftIO newStdGen let peopleList = shuffle' allPeople (length allPeople) r render (homepage peopleList) get "/custom.css" $ css stylesheet displayPerson :: Person -> Markup displayPerson person = [shamlet|

#{_name person}

#{_blurb person}