     Agent.stop Serum.Build.PostInfoStorage
   end
 
-  defp launch_post1(:parallel, files, srcdir, dstdir, template) do
+  defp launch_post(:parallel, files, srcdir, dstdir, template) do
     files
-    |> Enum.map(&(Task.async Serum.Build, :post_task1, [srcdir, dstdir, &1, template]))
-  end
-
-  defp launch_post1(:sequential, files, srcdir, dstdir, template) do
+    |> Enum.map(&(Task.async Serum.Build, :post_task, [srcdir, dstdir, &1, template]))
+  end
+
+  defp launch_post(:sequential, files, srcdir, dstdir, template) do
     files
-    |> Enum.each(&(post_task1 srcdir, dstdir, &1, template))
-    []
-  end
-
-  defp launch_post(:parallel, info, srcdir, dstdir, template) do
-    info
-    |> Enum.map(&(Task.async Serum.Build, :post_task, [srcdir, dstdir, &1, template]))
-  end
-
-  defp launch_post(:sequential, info, srcdir, dstdir, template) do
-    info
     |> Enum.each(&(post_task srcdir, dstdir, &1, template))
     []
   end

    end
  end

  defp extract_title_tags(file, proj) do
    try do
      ["# " <> title, "#" <> tags] =
        File.open! file, [:read, :utf8], &([IO.gets(&1, ""), IO.gets(&1, "")])
      title = title |> String.trim
      tags = tags |> String.split(~r/, ?/)
                  |> Enum.filter(&(String.trim(&1) != ""))
                  |> Enum.map(fn x ->
                    tag = String.trim x
                    %{name: tag, list_url: "#{Keyword.get proj, :base_url}tags/#{tag}/"}
                  end)
      {:ok, {title, tags}}
    rescue
      _ in MatchError ->
        {:error, :invalid_header}
    end
  end

  defp copy_assets(src, dest) do
    IO.puts "Cleaning assets and media directories..."
    File.rm_rf! "#{dest}assets/"

    {html, _} = Code.eval_quoted template, [assigns: proj ++ assigns]
    html
  end

  defp mkinfo_fail(srcdir, file, reason) do
    IO.puts "\x1b[31mError while parsing `#{srcdir}#{file}.md`: #{reason}\x1b[0m"
