diff --git a/System/Apotiki/Templates.hs b/System/Apotiki/Templates.hs
new file mode 100644
--- /dev/null
+++ b/System/Apotiki/Templates.hs
@@ -0,0 +1,197 @@
+module System.Apotiki.Templates where
+import Data.List (unlines)
+
+--
+-- I am NOT proud of this heredoc implementation.
+--
+
+detailsHtml = unlines [ "<div class=\"panel panel-default\">",
+                        "  <div class=\"panel-heading\">",
+                        "    Package: {{repo[arch][name]['Package']}}",
+                        "  </div>",
+                        "  <div class=\"panel-body\">",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Package</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Package']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Version</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Version']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Architecture</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Architecture']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Maintainer</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Maintainer']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>License</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['License']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Installed Size</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Installed-Size']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Priority</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Priority']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Depends</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Depends']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Homepage</strong></div>",
+                        "      <div class=\"col-md-10\"><a href=\"{{repo[arch][name]['Homepage']}}\">{{repo[arch][name]['Homepage']}}</a></div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Vendor</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Vendor']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Section</strong></div>",
+                        "      <div class=\"col-md-10\">{{repo[arch][name]['Section']}}</div>",
+                        "    </div>",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-md-2\"><strong>Description</strong></div>",
+                        "      <div class=\"col-md-10\">",
+                        "        <pre ng-bind=\"repo[arch][name]['Description']\"></pre>",
+                        "      </div>",
+                        "    </div>",
+                        "  </div>",
+                        "</div>" ]
+
+indexHtml = unlines [ "<!doctype html>",
+                      "<html lang=\"en\">",
+                      "",
+                      "  <head>",
+                      "    <title>apotiki debian repository</title>",
+                      "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
+                      "    <link href=\"//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css\" rel=\"stylesheet\">",
+                      "    <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js\"></script>",
+                      "    <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular-route.js\"></script>",
+                      "    <script src=\"/apotiki.js\"></script>",
+                      "  </head>",
+                      "",
+                      "  <body ng-app=\"repo\">",
+                      "    <div class=\"navbar navbar-default\" role=\"navigation\">",
+                      "      <div class=\"container\">",
+                      "        <div class=\"navbar-header\">",
+                      "          <a class=\"navbar-brand\" href=\"#\">apotiki</a>",
+                      "        </div>",
+                      "        <div class=\"navbar-collapse collapse\">",
+                      "          <ul class=\"nav navbar-nav\">",
+                      "            <li><a href=\"#list\">Listing</a></li>",
+                      "            <li><a href=\"/post.html\">Submit</a></li>",
+                      "          </ul>",
+                      "        </div>",
+                      "      </div>",
+                      "    </div>",
+                      "      ",
+                      "    <div class=\"container\">",
+                      "      <div class=\"row\">",
+                      "        <div class=\"col-lg-8 col-lg-offset-2\">",
+                      "          <ng-view></ng-view>",
+                      "        </div>",
+                      "      </div>",
+                      "    </div>",
+                      "    ",
+                      "  </body>",
+                      "  ",
+                      "</html>" ]
+
+postHtml = unlines [ "<!doctype html>",
+                     "<html lang=\"en\">",
+                     "  <head>",
+                     "    <title>apotiki debian repository</title>",
+                     "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
+                     "    <link href=\"//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css\" rel=\"stylesheet\">",
+                     "  </head>",
+                     "  <body ng-app=\"repo\">",
+                     "    <div class=\"navbar navbar-default\" role=\"navigation\">",
+                     "      <div class=\"container\">",
+                     "        <div class=\"navbar-header\">",
+                     "          <a class=\"navbar-brand\" href=\"#\">apotiki</a>",
+                     "        </div>",
+                     "        <div class=\"navbar-collapse collapse\">",
+                     "          <ul class=\"nav navbar-nav\">",
+                     "            <li><a href=\"/index.html#list\">Listing</a></li>",
+                     "            <li><a href=\"/post.html\">Submit</a></li>",
+                     "          </ul>",
+                     "        </div>",
+                     "      </div>",
+                     "    </div>",
+                     "    <div class=\"container\">",
+                     "      <div class=\"row\">",
+                     "        <div class=\"col-lg-8 col-lg-offset-2\">",
+                     "<div class=\"panel panel-default\">",
+                     "  <div class=\"panel-heading\">",
+                     "    <h4>Package</h4>",
+                     "  </div>",
+                     "  <div class=\"panel-body\">",
+                     "    <form method=\"POST\" action=\"/repo\" enctype=\"multipart/form-data\" role=\"form\">",
+                     "      <div class=\"form-group\">",
+                     "        <label>Choose package</label>",
+                     "        <input type=\"file\" name=\"file\" id=\"file\">",
+                     "        <p class=\"help-block\">",
+                     "          Package file will overwrite any previous versions.",
+                     "        </p>",
+                     "      </div>",
+                     "      <button type=\"submit\" class=\"btn btn-default\">Submit</button>",
+                     "    </form>",
+                     "  </div>",
+                     "</div>",
+                     "        </div>",
+                     "      </div>",
+                     "    </div>",
+                     "  </body>",
+                     "</html>"]
+
+listingHtml = unlines [ "<div class=\"panel panel-default\">",
+                        "  ",
+                        "  <div class=\"panel-heading\">",
+                        "    <div class=\"row\">",
+                        "      <div class=\"col-sm-2\">",
+                        "        <h4>Package listing</h4>",
+                        "      </div>",
+                        "      <div class=\"col-sm-4 col-sm-offset-6\">",
+                        "        <form class=\"form-inline\">",
+                        "          <input type=\"search\" ng-model=\"searchterm\" class=\"form-control\">",
+                        "        </form>",
+                        "      </div>",
+                        "    </div>",
+                        "  </div>",
+                        "  ",
+                        "  <div class=\"panel-body\">",
+                        "    <table class=\"table table-striped\">",
+                        "      <thead>",
+                        "        <th>Package</th>",
+                        "        <th>Version</th>",
+                        "        <th>Architecture</th>",
+                        "      </thead>",
+                        "      <tbody>",
+                        "        <tr ng-repeat=\"pkg in repolist | filter:searchterm\">",
+                        "          <td><a href=\"#repo/{{pkg['Architecture']}}/{{pkg['Package']}}\">{{pkg['Package']}}</a></td>",
+                        "          <td>{{pkg['Version']}}</td>",
+                        "          <td>{{pkg['Architecture']}}</td>",
+                        "        </tr>",
+                        "      </tbody>",
+                        "    </table>",
+                        "  </div>",
+                        "</div>" ]
+
+jsApp = unlines [ "var app = angular.module('repo', ['ngRoute']);",
+                  "app.controller('Apotiki', function($scope, $routeParams, $location, $http) {",
+                  "$scope.repolist = []; $scope.repo = {};",
+                  "$scope.refresh = function(){$http.get('/repo').success(function(data){$scope.repo=data;for(var k in data){for (var subk in data[k]){$scope.repolist.push(data[k][subk]);}}});};",
+                  "if ($routeParams.name) { $scope.name = $routeParams.name; }",
+                  "if ($routeParams.arch) { $scope.arch = $routeParams.arch; }",
+                  "$scope.refresh();});",
+                  "app.config(function($routeProvider) {",
+                  "    $routeProvider",
+                  "        .when('/repo', {templateUrl: 'listing.html', controller: 'Apotiki'})",
+                  "        .when('/repo/:arch/:name', {templateUrl: 'details.html', controller: 'Apotiki'})",
+                  "        .when('/post', {templateUrl: 'post.html'})",
+                  "        .otherwise({redirectTo: '/repo'});});" ]
diff --git a/apotiki.cabal b/apotiki.cabal
--- a/apotiki.cabal
+++ b/apotiki.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                apotiki
-version:             0.5.1
+version:             0.5.2
 synopsis:            a faster debian repository
 description:
     apotiki generates debian repositories fast. its goal is
@@ -32,7 +32,6 @@
 extra-source-files:  README.md
                      System/Apotiki/Debian/*.hs
                      System/Apotiki/*.hs
-                     static/*.js static/*.html
 
 library
   exposed-modules:     System.Apotiki.Ar
diff --git a/apotiki.hs b/apotiki.hs
--- a/apotiki.hs
+++ b/apotiki.hs
@@ -4,6 +4,7 @@
 import System.Apotiki.Debian.Package
 import System.Apotiki.Debian.Release
 import System.Apotiki.Config
+import System.Apotiki.Templates
 import Data.Map (keys)
 import System.Environment
 import System.Directory
@@ -22,6 +23,7 @@
 import System.IO.Error (isDoesNotExistError)
 import Control.Monad.IO.Class (liftIO)
 import qualified Data.ByteString as B
+import qualified Data.Text.Lazy as T
 
 import Network.Wai.Middleware.Static
 
@@ -49,7 +51,16 @@
 runCommand config ("web":_) = do
   setupRepo config
   scotty 8000 $ do
-    middleware $ staticPolicy (noDots >-> addBase "static")
+    get "/apotiki.js" $ do
+      html $ T.pack jsApp
+    get "/index.html" $ do
+      html $ T.pack indexHtml
+    get "/listing.html" $ do
+      html $ T.pack listingHtml
+    get "/details.html" $ do
+      html $ T.pack detailsHtml
+    get "/post.html" $ do
+      html $ T.pack postHtml
     get "/" $ do
       redirect "/index.html"
     get "/repo" $ do
diff --git a/static/apotiki.js b/static/apotiki.js
deleted file mode 100644
--- a/static/apotiki.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var app = angular.module('repo', ['ngRoute']);
-
-app.controller('Apotiki', function($scope, $routeParams, $location, $http) {
-
-    $scope.repolist = [];
-    $scope.repo = {};
-
-    $scope.refresh = function () {
-        $http.get('/repo').success(function (data) {
-            $scope.repo = data;
-            for (var k in data) {
-                for (var subk in data[k]) {
-                    $scope.repolist.push(data[k][subk]);
-                }
-            }
-        });
-    };
-
-    if ($routeParams.name) { $scope.name = $routeParams.name; }
-    if ($routeParams.arch) { $scope.arch = $routeParams.arch; }
-
-    $scope.refresh();
-});
-
-app.config(function($routeProvider) {
-    $routeProvider
-        .when('/repo', {templateUrl: 'listing.html', controller: 'Apotiki'})
-        .when('/repo/:arch/:name', {templateUrl: 'details.html', controller: 'Apotiki'})
-        .when('/post', {templateUrl: 'post.html'})
-        .otherwise({redirectTo: '/repo'});
-});
diff --git a/static/details.html b/static/details.html
deleted file mode 100644
--- a/static/details.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<div class="panel panel-default">
-  
-  <div class="panel-heading">
-    Package: {{repo[arch][name]['Package']}}
-  </div>
-  
-  <div class="panel-body">
-    <div class="row">
-      <div class="col-md-2"><strong>Package</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Package']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Version</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Version']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Architecture</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Architecture']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Maintainer</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Maintainer']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>License</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['License']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Installed Size</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Installed-Size']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Priority</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Priority']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Depends</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Depends']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Homepage</strong></div>
-      <div class="col-md-10"><a href="{{repo[arch][name]['Homepage']}}">{{repo[arch][name]['Homepage']}}</a></div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Vendor</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Vendor']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Section</strong></div>
-      <div class="col-md-10">{{repo[arch][name]['Section']}}</div>
-    </div>
-    <div class="row">
-      <div class="col-md-2"><strong>Description</strong></div>
-      <div class="col-md-10">
-        <pre ng-bind="repo[arch][name]['Description']"></pre>
-      </div>
-    </div>
-  </div>
-  
-</div>
diff --git a/static/index.html b/static/index.html
deleted file mode 100644
--- a/static/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!doctype html>
-<html lang="en">
-
-  <head>
-    <title>apotiki debian repository</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
-    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js"></script>
-    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular-route.js"></script>
-    <script src="/apotiki.js"></script>
-  </head>
-
-  <body ng-app="repo">
-    <div class="navbar navbar-default" role="navigation">
-      <div class="container">
-        <div class="navbar-header">
-          <a class="navbar-brand" href="#">apotiki</a>
-        </div>
-        <div class="navbar-collapse collapse">
-          <ul class="nav navbar-nav">
-            <li><a href="#list">Listing</a></li>
-            <li><a href="/post.html">Submit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-      
-    <div class="container">
-      <div class="row">
-        <div class="col-lg-8 col-lg-offset-2">
-          <ng-view></ng-view>
-        </div>
-      </div>
-    </div>
-    
-  </body>
-  
-</html>
diff --git a/static/listing.html b/static/listing.html
deleted file mode 100644
--- a/static/listing.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="panel panel-default">
-  
-  <div class="panel-heading">
-    <div class="row">
-      <div class="col-sm-2">
-        <h4>Package listing</h4>
-      </div>
-      <div class="col-sm-4 col-sm-offset-6">
-        <form class="form-inline">
-          <input type="search" ng-model="searchterm" class="form-control">
-        </form>
-      </div>
-    </div>
-  </div>
-  
-  <div class="panel-body">
-    <table class="table table-striped">
-      <thead>
-        <th>Package</th>
-        <th>Version</th>
-        <th>Architecture</th>
-      </thead>
-      <tbody>
-        <tr ng-repeat="pkg in repolist | filter:searchterm">
-          <td><a href="#repo/{{pkg['Architecture']}}/{{pkg['Package']}}">{{pkg['Package']}}</a></td>
-          <td>{{pkg['Version']}}</td>
-          <td>{{pkg['Architecture']}}</td>
-        </tr>
-      </tbody>
-    </table>
-  </div>
-</div>
diff --git a/static/post.html b/static/post.html
deleted file mode 100644
--- a/static/post.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!doctype html>
-<html lang="en">
-
-  <head>
-    <title>apotiki debian repository</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
-  </head>
-
-  <body ng-app="repo">
-    <div class="navbar navbar-default" role="navigation">
-      <div class="container">
-        <div class="navbar-header">
-          <a class="navbar-brand" href="#">apotiki</a>
-        </div>
-        <div class="navbar-collapse collapse">
-          <ul class="nav navbar-nav">
-            <li><a href="/index.html#list">Listing</a></li>
-            <li><a href="/post.html">Submit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-      
-    <div class="container">
-      <div class="row">
-        <div class="col-lg-8 col-lg-offset-2">
-
-<div class="panel panel-default">
-  
-  <div class="panel-heading">
-    <h4>Package</h4>
-  </div>
-  
-  <div class="panel-body">
-    <form method="POST" action="/repo" enctype="multipart/form-data" role="form">
-      <div class="form-group">
-        <label>Choose package</label>
-        <input type="file" name="file" id="file">
-        <p class="help-block">
-          Package file will overwrite any previous versions.
-        </p>
-      </div>
-      <button type="submit" class="btn btn-default">Submit</button>
-    </form>
-  </div>
-</div>
-
-
-        </div>
-      </div>
-    </div>
-    
-  </body>
-  
-</html>
-
-
