README.md

# SitemapBuilder

Minimal, pipeline-friendly XML sitemap generator.

## Why

The existing sitemap packages for Elixir are built for writing to files or S3. If you just want to return XML from a Phoenix controller, they are significant overkill. SitemapBuilder renders to a string and stays out of the way.

## Status

Used in production. Updates only for Elixir version compatibility.

## Installation

```elixir
def deps do
  [{:sitemap_builder, "~> 0.1"}]
end
```

## Usage

```elixir
sitemap_xml =
  SitemapBuilder.new(MyAppWeb.Endpoint.url())
  |> SitemapBuilder.add(%SitemapBuilder{url: "/en", lastmod: ~D[2026-01-01]})
  |> SitemapBuilder.add(posts, &%SitemapBuilder{url: "/posts/#{&1.slug}", lastmod: &1.updated_at})
  |> SitemapBuilder.generate()

conn
|> put_resp_content_type("text/xml")
|> text(sitemap_xml)
```

### Entry struct

Each entry is a `%SitemapBuilder{}` with two required fields:

- `:url` — path relative to the host (e.g. `"/en/about"`)
- `:lastmod` — accepts `Date`, `DateTime`, or an Ecto datetime tuple

## License

MIT