The preview surface runs in dev and uses your production render pipeline, so HTML/Text/Raw/Headers stay consistent with real delivery.
The screenshot capture workflow is for preview-pipeline confidence only. It does not claim cross-client parity across Outlook/Gmail/Apple Mail.
Prerequisites
mailglass_admindependency available in:dev- Router mounted behind your dev-only routes
Mount preview routes
defmodule MyAppWeb.Router do
use Phoenix.Router
import MailglassAdmin.Router
if Application.compile_env(:my_app, :dev_routes) do
scope "/dev" do
pipe_through :browser
mailglass_admin_routes "/mail"
end
end
endStart and open preview
mix phx.server
# open http://localhost:4000/dev/mail
Add preview props on a mailable
defmodule MyApp.UserMailer do
use Mailglass.Mailable, stream: :transactional
@impl Mailglass.Mailable
def preview_props do
[name: "Alice", email: "alice@example.com"]
end
endEnd-to-End Example
mix phx.server
Deterministic capture workflow
Use one maintainer command to capture a deterministic screenshot matrix from the
same /dev/mail preview route:
cd mailglass_admin
mix mailglass_admin.preview.capture \
--base-url http://localhost:4000/dev/mail \
--output-dir tmp/mailglass_admin_preview_capture
Default matrix dimensions:
- Widths:
375,768,1024 - Themes:
light,dark - Scenarios: discovered from each mailable's
preview_props/0
Dry-run before capture
Dry-run prints the matrix and still writes deterministic contract artifacts:
cd mailglass_admin
mix mailglass_admin.preview.capture \
--dry-run \
--base-url http://localhost:4000/dev/mail \
--output-dir tmp/mailglass_admin_preview_capture
Artifact contract
The command writes:
tmp/mailglass_admin_preview_capture/<mailable>--<scenario>--w<width>--<theme>.pngtmp/mailglass_admin_preview_capture/manifest.jsontmp/mailglass_admin_preview_capture/checkpoint.json
manifest.json and checkpoint.json use schema version preview_capture.v1
and include bounded language:
preview-pipeline confidence only; not cross-client parity.