# `PhoenixKitOG.Schemas.Template`
[🔗](https://github.com/BeamLabEU/phoenix_kit_og/blob/0.4.0/lib/phoenix_kit_og/schemas/template.ex#L1)

A reusable OpenGraph design — canvas + ordered elements with variable
bindings. Persisted as JSONB so the structure can evolve (new element
types) without a schema change.

See `AGENTS.md` → "Canvas JSON shape" for the shape contract.

# `t`

```elixir
@type t() :: %PhoenixKitOG.Schemas.Template{
  __meta__: term(),
  canvas: map(),
  description: String.t() | nil,
  inserted_at: DateTime.t() | nil,
  name: String.t() | nil,
  preview_image_uuid: binary() | nil,
  updated_at: DateTime.t() | nil,
  uuid: binary() | nil
}
```

# `column_widths`

```elixir
@spec column_widths() :: %{required(atom()) =&gt; pos_integer()}
```

`character varying` column widths for `phoenix_kit_og_templates`, keyed
by field name.

The single source of truth `PhoenixKitOG.Migrations`' V1 DDL
interpolates, so the migration chain and core's `ExpectedSchema` manifest
can never independently disagree on a number.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
