diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Author name here (c) 2015
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Author name here nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/postgresql-connector.cabal b/postgresql-connector.cabal
new file mode 100644
--- /dev/null
+++ b/postgresql-connector.cabal
@@ -0,0 +1,29 @@
+name:                  postgresql-connector
+version:               0.1.0
+synopsis:              Initial project postgresql-connector from stack
+description:           Please see README.md
+homepage:              http://github.com/mfine/postgresql-connector
+license:               BSD3
+license-file:          LICENSE
+author:                Mark Fine
+maintainer:            Mark Fine <mark.fine@gmail.com>
+copyright:             2015 Mark Fine
+category:              Web
+build-type:            Simple
+cabal-version:         >= 1.10
+
+library
+  hs-source-dirs:      src
+  exposed-modules:     Database.PostgreSQL.Connector
+  ghc-options:         -Wall
+  build-depends:       base >= 4.7 && < 5
+                     , lens
+                     , mtl
+                     , postgresql-simple
+                     , resourcet
+                     , transformers-base
+  default-language:    Haskell2010
+
+source-repository head
+  type:     git
+  location: https://github.com/mfine/postgresql-connector
diff --git a/src/Database/PostgreSQL/Connector.hs b/src/Database/PostgreSQL/Connector.hs
new file mode 100644
--- /dev/null
+++ b/src/Database/PostgreSQL/Connector.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE ConstraintKinds            #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE TemplateHaskell            #-}
+{-# LANGUAGE UndecidableInstances       #-}
+
+-- |
+-- Module:      Database.PostgreSQL.Connector
+-- Copyright:   (c) 2015 Mark Fine
+-- License:     BSD3
+-- Maintainer:  Mark Fine <mark.fine@gmail.com>
+--
+-- PG Connector.
+
+module Database.PostgreSQL.Connector where
+
+import Control.Lens
+import Control.Monad.Base
+import Control.Monad.Reader
+import Control.Monad.Trans.Resource
+import Data.Int
+import qualified Database.PostgreSQL.Simple as PG
+
+newtype ConnectorT e m a = ConnectorT
+  { unConnectorT :: ReaderT e m a
+  } deriving ( Functor
+             , Applicative
+             , Monad
+             , MonadIO
+             , MonadReader e
+             , MonadThrow
+             )
+
+instance MonadBase b m => MonadBase b (ConnectorT r m) where
+  liftBase = liftBaseDefault
+
+instance MonadTrans (ConnectorT r) where
+  lift = ConnectorT . lift
+
+instance MonadResource m => MonadResource (ConnectorT r m) where
+  liftResourceT = lift . liftResourceT
+
+newtype Conn = Conn
+  { _connConnection :: PG.Connection
+  }
+
+$(makeClassy ''Conn)
+
+type MonadConnector e m =
+  ( MonadIO       m
+  , MonadResource m
+  , MonadReader e m
+  , HasConn     e
+  )
+
+runConnectorT :: HasConn e => e -> ConnectorT e m a -> m a
+runConnectorT e (ConnectorT m) = runReaderT m e
+
+withTransaction :: MonadConnector e m => IO a -> m a
+withTransaction action = do
+  connection <- view connConnection
+  liftIO $ PG.withTransaction connection action
+
+query :: (MonadConnector e m, PG.ToRow q, PG.FromRow r) => PG.Query -> q -> m [r]
+query q params = do
+  connection <- view connConnection
+  liftIO $ PG.query connection q params
+
+query_ :: (MonadConnector e m, PG.FromRow r) => PG.Query -> m [r]
+query_ q = do
+  connection <- view connConnection
+  liftIO $ PG.query_ connection q
+
+execute :: (MonadConnector e m, PG.ToRow q) => PG.Query -> q -> m Int64
+execute q params = do
+  connection <- view connConnection
+  liftIO $ PG.execute connection q params
+
+executeMany :: (MonadConnector e m, PG.ToRow q) => PG.Query -> [q] -> m Int64
+executeMany q params = do
+  connection <- view connConnection
+  liftIO $ PG.executeMany connection q params
+
+execute_ :: MonadConnector e m => PG.Query -> m Int64
+execute_ q = do
+  connection <- view connConnection
+  liftIO $ PG.execute_ connection q
+
+returning :: (MonadConnector e m, PG.ToRow q, PG.FromRow r) => PG.Query -> [q] -> m [r]
+returning q params = do
+  connection <- view connConnection
+  liftIO $ PG.returning connection q params
