diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2015 Luke Hoersten
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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/shake-minify.cabal b/shake-minify.cabal
new file mode 100644
--- /dev/null
+++ b/shake-minify.cabal
@@ -0,0 +1,28 @@
+name:                shake-minify
+version:             0.1.0
+synopsis:            Shake Minify Actions
+description:         Shake minify actions for CSS and JS files.
+license:             BSD3
+license-file:        LICENSE
+author:              Luke Hoersten
+maintainer:          luke@hoersten.org
+homepage:            https://github.com/LukeHoersten/shake-minify
+category:            Web, Development
+build-type:          Simple
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     Development.Shake.Minify
+  build-depends:       base       >= 4.7  && < 4.8
+                     , bytestring >= 0.10 && < 0.11
+                     , css-text   >= 0.1  && < 0.2
+                     , hjsmin     >= 0.1  && < 0.2
+                     , shake      >= 0.14 && < 0.15
+                     , text       >= 1.2  && < 1.3
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+  ghc-options:       -Wall -fwarn-tabs
+
+source-repository head
+  type:     git
+  location: git://github.com/LukeHoersten/shake-minify.git
diff --git a/src/Development/Shake/Minify.hs b/src/Development/Shake/Minify.hs
new file mode 100644
--- /dev/null
+++ b/src/Development/Shake/Minify.hs
@@ -0,0 +1,40 @@
+-- | Minify JS and CSS files similar to the following example:
+--
+-- @
+-- main :: IO ()
+-- main = shakeArgs shakeOptions $ do
+--     want ["\/\/*.min.js", "\/\/*.min.css"]
+--     "//*.min.js"   *> minifyJs
+--     "//*.min.css"  *> minifyCss
+-- @
+
+module Development.Shake.Minify where
+
+import qualified Data.ByteString.Lazy       as BS
+import qualified Data.Text.IO               as TIO
+import qualified Data.Text.Lazy             as LT
+import qualified Data.Text.Lazy.Builder     as LTB
+import           Development.Shake          (Action, liftIO, need)
+import           Development.Shake.FilePath (dropExtension, (-<.>))
+import qualified Text.CSS.Parse             as CSS
+import qualified Text.CSS.Render            as CSS
+import qualified Text.Jasmine               as JS
+
+
+-- | Given a @.min.js@ path, find the @.js@ file and minify it into the specified file name.
+minifyJs :: FilePath -- ^ Desired minified JS files (ex: @"//*.min.js"@)
+         -> Action ()
+minifyJs minJs = do
+    let js = dropExtension minJs -<.> "js"
+    need [js]
+    liftIO $ BS.writeFile minJs =<< JS.minifyFile js
+
+
+-- | Given a @.min.css@ path, find the @.css@ file and minify it into the specified file name.
+minifyCss :: FilePath -- ^ Desired minified CSS files (ex: @"//*.min.css"@)
+          -> Action ()
+minifyCss minCss = do
+    let css = dropExtension minCss -<.> "css"
+    need [css]
+    liftIO $ TIO.writeFile minCss . LT.toStrict . LTB.toLazyText . minify =<< TIO.readFile css
+  where minify = either error CSS.renderNestedBlocks . CSS.parseNestedBlocks
