diff --git a/elm-init.cabal b/elm-init.cabal
--- a/elm-init.cabal
+++ b/elm-init.cabal
@@ -2,14 +2,14 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                elm-init
-version:             0.1.2.1
+version:             1.0.0.0
 synopsis:            Set up basic structure for an elm project
 description:
   Initialize a new empty elm project with some basic scaffolding according to 'https://github.com/evancz/elm-architecture-tutorial'.
 license:             MIT
 license-file:        LICENSE
 author:              justusadam
-maintainer:          development@justusadam.com
+maintainer:          dev@justus.science
 -- copyright:
 category:            Development
 build-type:          Simple
@@ -23,6 +23,7 @@
   resources/licenses/MIT
   resources/licenses/GPLv3
   resources/licenses/GPLv2
+  resources/index.html
 
 
 executable elm-init
@@ -30,7 +31,7 @@
   -- other-modules:
   -- other-extensions:
   build-depends:
-      base >=4.5 && <4.9,
+      base >=4.8 && <5.0,
       filepath >= 1.4,
       directory >= 1.2,
       file-embed >= 0.0.8,
@@ -47,3 +48,9 @@
 source-repository head
   type:     git
   location: git://github.com/JustusAdam/elm-init.git
+
+source-repository this
+  type:     git
+  branch:   master
+  location: git://github.com/JustusAdam/elm-init.git
+  tag:      1.0.0.0
diff --git a/resources/Main.elm b/resources/Main.elm
--- a/resources/Main.elm
+++ b/resources/Main.elm
@@ -1,4 +1,4 @@
-module Main where
+module %s where
 
 -- MODEL
 
diff --git a/resources/index.html b/resources/index.html
new file mode 100644
--- /dev/null
+++ b/resources/index.html
@@ -0,0 +1,11 @@
+<head>
+  <title>Elm Reactor</title>
+  <script src="elm.js" charset="utf-8"></script>
+</head>
+<body>
+  <script type="text/javascript">
+    window.addEventListener("DOMContentLoaded", function (){
+      Elm.fullscreen(Elm.%s, { });
+    })
+  </script>
+</body>
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -5,9 +5,11 @@
 
 
 import           Control.Arrow            as Arrow (first)
+import           Control.Applicative      ((<$>), (<*>))
 import           Data.Aeson.Encode.Pretty (encodePretty)
 import           Data.Bool                (bool)
-import qualified Data.ByteString          as ByteString (ByteString, hPut)
+import qualified Data.ByteString          as ByteString (ByteString, hPut,)
+import qualified Data.ByteString.Char8    as CBS (pack, unpack)
 import qualified Data.ByteString.Lazy     as LBS (hPut)
 import           Data.FileEmbed           (embedFile)
 import           Data.Text                as Text (Text, append, pack, unpack)
@@ -17,14 +19,16 @@
                                            doesDirectoryExist, doesFileExist,
                                            getCurrentDirectory, makeAbsolute)
 import           System.Environment       (getArgs)
-import           System.FilePath          (isValid, takeBaseName, (</>))
+import           System.FilePath          (isValid, takeBaseName, (</>), takeExtension)
 import           System.IO                (IOMode (WriteMode), withFile)
 import           Data.Version             (Version(..), showVersion,
                                           makeVersion)
 import           ElmInit                  (Result, UserDecisions(..),
                                           CmdArgs(..), askChoicesWithOther,
                                           exists, verifyElmVersion, makePackage,
-                                          flattenMaybe)
+                                          flattenMaybe, askChoices)
+import          Text.Printf               (printf)
+import          Data.Char                 (isUpper)
 
 
 standardDirectories :: [FilePath]
@@ -37,8 +41,14 @@
 standardFiles = [ ("README.md", Nothing) ]
 
 standardSourceFiles :: [(FilePath, Maybe ByteString.ByteString)]
-standardSourceFiles = [ ("Main.elm", Just $(embedFile "resources/Main.elm")) ]
+standardSourceFiles = []
 
+mainFile :: String -> ByteString.ByteString
+mainFile = CBS.pack . printf (CBS.unpack $(embedFile "resources/Main.elm"))
+
+indexHtml :: String -> ByteString.ByteString
+indexHtml = CBS.pack . printf (CBS.unpack $(embedFile "resources/index.html"))
+
 standardLicenses :: [(Text, Maybe ByteString.ByteString)]
 standardLicenses =
   [ ("None"   , Nothing                                       )
@@ -103,32 +113,50 @@
   <$> askChoicesWithOther
         "project name?"
         0
-        (Just)
+        return
         [pack $ takeBaseName wd]
   <*> askChoicesWithOther
         "choose a source folder name"
         0
-        ((bool Nothing <$> Just <*> isValid) . unpack)  -- filepath path verifier
+        ((bool (Left "The filepath must be valid") <$> return <*> isValid) . unpack)  -- filepath path verifier
         (map pack standardSourceFolders)
   <*> askChoicesWithOther
         "initial project version?"
         0
-        (verifyElmVersion . unpack)  -- TODO add verifier
+        (verifyElmVersion . unpack)
         [pack $ showVersion defaultProjectVersion]
   <*> (putStrLn "a quick summary" >> getLine)
   <*> (putStrLn "project repository url" >> getLine)
   <*> askChoicesWithOther
         "choose a license"
         0
-        Just
+        return
         availableLicenses
   <*> askChoicesWithOther
         "select the elm-version"
         0
-        (Just)  -- add verifier?
+        return
         [defaultElmVersion]
+  <*> askChoicesWithOther
+        "What sould be the Main file?"
+        0
+        (isValidMainFile . unpack)
+        ["Main.elm"]
+  <*> ((== "Yes") <$> askChoices
+        "Should I create an index.html file?"
+        0
+        ["Yes", "No"]
+      )
 
 
+isValidMainFile :: String -> Either Text String
+isValidMainFile file
+  | null file = Left "Filename cannot be 𝜖"
+  | not $ isUpper (head file) = Left "Module names (and their files) have to start with uppercase"
+  | ".elm" /= takeExtension file = Left "Elm modules (such as this main file) have to end with the fileending \".elm\""
+  | otherwise = return file
+
+
 mkFiles :: [(FilePath, Maybe ByteString.ByteString)] -> IO [Result]
 mkFiles = mapM (uncurry mkFile)
 
@@ -144,9 +172,15 @@
     (return $ Left $ "file " `append` pack name `append` " already exists")
 
 
-mkSourceFiles :: FilePath -> IO [Result]
-mkSourceFiles =
-  mkFiles . flip map standardSourceFiles . Arrow.first . (</>)
+mkSourceFiles :: FilePath -> UserDecisions -> IO [Result]
+mkSourceFiles wd (Default { mainFileName = mfn, sourceFolder = sourceF, addIndex = makeIndex }) = do
+  let mainModule = takeBaseName mfn
+  mainFileRes <- mkFile (wd  </> sourceF </> mfn) $ Just $ mainFile mainModule
+  indexFileRes <- if makeIndex
+    then  mkFile (wd </> "index.html") $ Just $ indexHtml mainModule
+    else return $ return ()
+  others <- mkFiles $ flip map standardSourceFiles $ Arrow.first ((wd </> sourceF) </>)
+  return $ mainFileRes:indexFileRes:others
 
 
 mkDirs :: FilePath -> [FilePath] -> IO ()
@@ -192,7 +226,7 @@
   resStatic <- mkFiles $ map (Arrow.first (wd </>)) standardFiles
 
   -- create Elm source files, collect errors
-  resSource <- mkSourceFiles $ wd </> sourceFolder decisions
+  resSource <- mkSourceFiles wd decisions
 
   -- write the package config based on the user decisions
   writeConf wd decisions
