 
   alias Serum.GlobalBindings
   alias Serum.Project
+  alias Serum.ProjectValidator
   alias Serum.Result
   alias Serum.Validation
 
   @spec load(binary(), binary()) :: Result.t(Project.t())
   def load(src, dest) do
+    case do_load(src) do
+      {:ok, proj} ->
+        GlobalBindings.put(:site, %{
+          name: proj.site_name,
+          description: proj.site_description,
+          author: proj.author,
+          author_email: proj.author_email,
+          server_root: proj.server_root,
+          base_url: proj.base_url
+        })
+
+        {:ok, %Project{proj | src: src, dest: dest}}
+
+      {:error, _} = error ->
+        error
+    end
+  end
+
+  @spec do_load(binary()) :: Result.t(Project.t())
+  defp do_load(src) do
     cond do
-      File.exists?(Path.join(src, "serum.exs")) -> load_exs(src, dest)
-      File.exists?(Path.join(src, "serum.json")) -> load_json(src, dest)
+      File.exists?(Path.join(src, "serum.exs")) -> load_exs(src)
+      File.exists?(Path.join(src, "serum.json")) -> load_json(src)
       :else -> {:error, {:enoent, Path.join(src, "serum.exs"), 0}}
     end
   end
 
-  @spec load_json(binary(), binary()) :: Result.t(Project.t())
-  defp load_json(src, dest) do
+  @spec load_json(binary()) :: Result.t(Project.t())
+  defp load_json(src) do
     path = Path.join(src, "serum.json")
 
     with {:ok, data} <- File.read(path),

    end
  end

  @spec load_exs(binary(), binary()) :: Result.t(Project.t())
  defp load_exs(src, dest) do
  end
end

        |> Map.new()
        |> Project.new()

      {:ok, proj}
    else
      # From File.read/1:
      {:error, reason} when is_atom(reason) ->
