     |> Enum.each(fn k ->
       fwrite "#{dir}includes/#{k}.html.eex", include(k)
     end)
-    IO.puts "Generated includes into `#{dir}includes/`."
-    {:ok, dir}
+    IO.puts "Generated includable templates into `#{dir}includes/`."
   end
 
   # Generates the initial `.gitignore` file.
-  @spec init_gitignore(ok_result) :: ok_result
-  defp init_gitignore({:ok, dir}) do
+  @spec create_gitignore(binary) :: :ok
+
+  defp create_gitignore(dir) do
     fwrite "#{dir}.gitignore", "site\n"
     IO.puts "Generated `#{dir}.gitignore`."
-    {:ok, dir}
+  end
+
+  # Prints an information message after successfully initializing a new project.
+  @spec finish(binary) :: :ok
+
+  defp finish(dir) do
+    IO.puts "\n\x1b[1mSuccessfully initialized a new Serum project!"
+    IO.puts "try `serum build #{dir}` to build the site.\x1b[0m\n"
   end
 end

    *Hello, world!*
    """
    IO.puts "Generated `#{dir}pages/pages.json`."
    {:ok, dir}
  end

  # Generates default template files.
  @spec init_templates(ok_result) :: ok_result
  defp init_templates({:ok, dir}) do
    [:base, :list, :page, :post]
    |> Enum.each(fn k ->
      fwrite "#{dir}templates/#{k}.html.eex", template(k)

      |> Poison.encode!(pretty: true, indent: 2)
    fwrite "#{dir}serum.json", projinfo
    IO.puts "Generated `#{dir}serum.json`."
  end

  # Generates a minimal index page for the new project.
  @spec create_index(binary) :: :ok

  defp create_index(dir) do
    fwrite "#{dir}pages/index.md", """
    ---
    title: Welcome
