Modules
OpenGraph template + hierarchical assignment plugin for PhoenixKit.
Thin wrapper around PhoenixKit.Activity.log/3 for the OG plugin.
Context for binding templates to scopes inside a consumer module's hierarchy.
Central mapping from error atoms (returned by PhoenixKitOG.Templates,
PhoenixKitOG.Assignments, and the render pipeline) to translated,
user-facing strings.
Gettext backend for OpenGraph-module-specific UI strings.
Module-owned versioned migrations for phoenix_kit_og — the
decentralized-migrations protocol that core's mix phoenix_kit.update
discovers via migration_module/0. This follows the canonical shape
documented in phoenix_kit_hello_world's README ("Versioned migrations",
"Adopting a table core already creates") and its
mix phoenix_kit_hello_world.audit_migrations task: two readers
(migrated_version/1 for migration context, migrated_version_runtime/1
for Mix-task context), up/1 re-reading the version before it changes
anything, and a namespaced COMMENT ON TABLE marker on one anchor table.
PhoenixKitPublishing.Migrations is this chain's closest sibling in
spirit — same adoption situation, same semantic-guard requirement —
scaled down here to 2 tables, 1 FK, 1 named UNIQUE constraint and 3
indexes (all on the same table), and extended with a new invalid-index
self-heal no sibling chain in this workspace has needed yet.
Centralized path helpers — every link routes through
PhoenixKit.Utils.Routes.path/1 so the configured admin prefix and
locale handling are honored.
Top-level rendering facade. Given a template + binding values, produces a PNG (cached) and returns its public URL.
On-disk cache for rendered OG PNGs.
Media resolution + render-mode pre-processing between the stored scene
and OpenFresco.render/3.
Route registration for routes that can't be inlined on a Tab —
notably the per-template editor at /admin/open-graph/:uuid/edit.
Editor-side scene mutations the property panel drives — the
counterpart to OpenFresco.Editor.Ops (which owns pointer gestures:
move/resize/hit-test/front/delete). Everything here takes untrusted
form input, so every field goes through a whitelist + coercion; an
unknown field or junk value returns the scene unchanged.
Loads/saves OpenFresco.Scene documents from the template's canvas
JSONB column, with lazy migration from the legacy canvas format.
Binds a template to a scope inside a consumer module's hierarchy.
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.
Context for managing OpenGraph templates. CRUD only — the editor and renderer live elsewhere.
Registry + resolver for module-exposed variables that templates can bind their slots to.
Assignments admin — the overview of every template binding + a single modal for creating or editing an assignment.
The OG template editor — OpenFresco's server-authoritative editor stage on the left, this module's chrome around it: toolbar + insert menu, slots panel, property panel, and the always-on preview pane.
HEEx render template for the OG editor. Split out from the LV module so the event-handler code stays scannable.
Serves rendered OG PNGs from the on-disk cache.
The arrows stand-in image for the editor stage's sample-values mode —
a light-gray square with four arrows radiating to the corners and a
"Placeholder image" caption, shipped as a data:image/svg+xml URL.
Admin landing page for the OG module — lists templates and the create/delete actions. The visual editor is Phase 2; this page only carries minimal CRUD scaffolding so the module is interactive end-to-end.