         tag: tag,
         page: page,
         max_page: max_page,
+        title: list_title(tag, proj),
         posts: posts,
         list_url: Path.join([proj.base_url, list_dir, "page-#{page}.html"]),
         output: Path.join([proj.dest, list_dir, "page-#{page}.html"])

  @spec to_html([t()], map()) :: Error.result(binary())
  def to_html([h | _] = post_lists, proj) do
    template = Template.get("list")
    header = list_title(h.tag, proj)
    render([nil | post_lists], [], template, header)
  end

  @spec render([t()], [Error.result(binary())], Template.t(), binary()) ::
    Error.result([binary()])

  defp render([_last], acc, _template, _header) do
    acc
    |> Enum.reverse()
    |> Error.filter_results_with_values(:render)
  end

  defp render([prev, curr | rest], acc, template, header) do
    next = List.first(rest)
    bindings = [
      header: header,
      posts: curr.posts,
      current_page: curr.page,
      max_page: curr.max_page,

    ]
    rendered = Renderer.render_fragment(template, bindings)

    render([curr | rest], [rendered | acc], template)
  end

  @spec list_title(maybe_tag(), map()) :: binary()
