   alias Serum.Template
   alias Serum.TemplateCompiler, as: TC
 
-  @spec process_files(map(), Proj.t()) :: any() # TODO
+  @type result() :: %{
+          pages: [Page.t()],
+          posts: [Post.t()],
+          tag_map: %{required(Tag.t()) => [Post.t()]},
+          tag_counts: %{required(Tag.t()) => non_neg_integer()}
+        }
+
+  @spec process_files(map(), Proj.t()) :: Result.t(result())
   def process_files(files, proj) do
     %{pages: page_files, posts: post_files} = files
 

        error
    end
  end
end

         post_task = Task.async(fn -> process_posts(post_files, proj) end),
         {:ok, pages} <- Task.await(page_task),
         {:ok, posts} <- Task.await(post_task) do
      {:ok, make_result(pages, posts)}
    else
      {:error, _} = error -> error
    end
