# PhoenixKitCatalogue v0.31.3 - Table of Contents > Catalogue module for PhoenixKit — manufacturers, suppliers, and product catalogues. ## Pages - Guides - [Smart Catalogues](smart_catalogues.md) ## Modules - [PhoenixKitCatalogue](PhoenixKitCatalogue.md): Catalogue module for PhoenixKit. - [PhoenixKitCatalogue.AIPrompt](PhoenixKitCatalogue.AIPrompt.md): Idempotent provisioning of the catalogue's AI-translation prompts. - [PhoenixKitCatalogue.AITranslatable](PhoenixKitCatalogue.AITranslatable.md): `PhoenixKitAI.Translatable` adapter for catalogue resources — the small per-module hook into PhoenixKitAI's generic AI-translation pipeline. - [PhoenixKitCatalogue.AITranslatable.Sets](PhoenixKitCatalogue.AITranslatable.Sets.md): `PhoenixKitAI.Translatable` adapter for catalogue attribute SETS — the entities-backed blueprint (`"catalogue_set_label"`, the set's own display name) and its value records (`"catalogue_set_value"`, each value's title). See `PhoenixKitCatalogue.Catalogue.AttributeSets` for what a set is; this module only translates it. - [PhoenixKitCatalogue.AITranslateBinding](PhoenixKitCatalogue.AITranslateBinding.md): `PhoenixKitAI.Components.AITranslate.FormBinding` for catalogue forms — the storage-specific half of the shared AI-translate glue. - [PhoenixKitCatalogue.Attachments](PhoenixKitCatalogue.Attachments.md): Folder-scoped file attachments + featured image for catalogue resources (items and catalogues share the exact same pattern). - [PhoenixKitCatalogue.Catalogue](PhoenixKitCatalogue.Catalogue.md): Context module for managing catalogues, manufacturers, suppliers, categories, and items. - [PhoenixKitCatalogue.Catalogue.AttributeSets](PhoenixKitCatalogue.Catalogue.AttributeSets.md): Attribute SETS — the 2026-08-18 rework of the group/attribute system. - [PhoenixKitCatalogue.Catalogue.AttributeSets.OrphanPruner](PhoenixKitCatalogue.Catalogue.AttributeSets.OrphanPruner.md): Subscribes to entities blueprint lifecycle events and prunes item attachments whose set blueprint was deleted out from under them — the "suspenders" to the delete guard's "belt" (the guard refuses deleting attached sets; this cleans up after deletes that bypassed it, e.g. repo-level operations or a host that never registered the guard). The design doc always claimed this subscriber; the 2026-08-18 panel review noticed it was never actually wired. - [PhoenixKitCatalogue.Catalogue.Attributes](PhoenixKitCatalogue.Catalogue.Attributes.md): Attribute groups — reusable, translatable sets of product characteristics. - [PhoenixKitCatalogue.Catalogue.BrowseState](PhoenixKitCatalogue.Catalogue.BrowseState.md): Pure browse-state reducer for paged, searchable, category-filtered item browsing — the shared brain of `ItemSelectorModal` and any embedded browse surface. - [PhoenixKitCatalogue.Catalogue.Counts](PhoenixKitCatalogue.Catalogue.Counts.md): Catalogue-level item and category counts. Includes both per-uuid helpers and single-query batch versions to avoid N+1 lookups when rendering catalogue lists with associated item / category counts. - [PhoenixKitCatalogue.Catalogue.CrmLink](PhoenixKitCatalogue.Catalogue.CrmLink.md): Links a catalogue directory row to the CRM party it represents. - [PhoenixKitCatalogue.Catalogue.Duplication](PhoenixKitCatalogue.Catalogue.Duplication.md): Copies of items and categories — the "Duplicate" bulk action. - [PhoenixKitCatalogue.Catalogue.ItemSupplierInfos](PhoenixKitCatalogue.Catalogue.ItemSupplierInfos.md): Context for managing the `phoenix_kit_cat_item_supplier_info` junction table. - [PhoenixKitCatalogue.Catalogue.Links](PhoenixKitCatalogue.Catalogue.Links.md): Manufacturer ↔ Supplier many-to-many links. - [PhoenixKitCatalogue.Catalogue.Manufacturers](PhoenixKitCatalogue.Catalogue.Manufacturers.md): Manufacturers — company directory used as the source of items. - [PhoenixKitCatalogue.Catalogue.PdfEngines](PhoenixKitCatalogue.Catalogue.PdfEngines.md): Engine chain for PDF text extraction: pdfium (in-app, precompiled NIF) first, poppler (`pdfinfo`/`pdftotext` system binaries) as the fallback when installed. - [PhoenixKitCatalogue.Catalogue.PdfLibrary](PhoenixKitCatalogue.Catalogue.PdfLibrary.md): PDF library — upload, extract, search. - [PhoenixKitCatalogue.Catalogue.PubSub](PhoenixKitCatalogue.Catalogue.PubSub.md): Real-time fan-out for catalogue mutations. - [PhoenixKitCatalogue.Catalogue.Rules](PhoenixKitCatalogue.Catalogue.Rules.md): Smart-catalogue rules — one row per `(item, referenced_catalogue)` pair. - [PhoenixKitCatalogue.Catalogue.Search](PhoenixKitCatalogue.Catalogue.Search.md): Item search — global, per-catalogue, and per-category, with optional scope composition (`catalogue_uuids` AND `category_uuids`). - [PhoenixKitCatalogue.Catalogue.Slugs](PhoenixKitCatalogue.Catalogue.Slugs.md): Per-language slug generation for catalogue items and categories. - [PhoenixKitCatalogue.Catalogue.SmartPricing](PhoenixKitCatalogue.Catalogue.SmartPricing.md): Public smart-pricing evaluator — the canonical implementation of the algorithm previously documented as a copy-paste reference in `guides/smart_catalogues.md`. - [PhoenixKitCatalogue.Catalogue.SupplierComments](PhoenixKitCatalogue.Catalogue.SupplierComments.md): Where a supplier's comments about ONE item live. - [PhoenixKitCatalogue.Catalogue.SupplierFields](PhoenixKitCatalogue.Catalogue.SupplierFields.md): Admin-defined EXTRA fields on a supplier row — "incoterm", "carton quantity", "certification expiry" — added without a migration. - [PhoenixKitCatalogue.Catalogue.Suppliers](PhoenixKitCatalogue.Catalogue.Suppliers.md): Suppliers — delivery companies linked to manufacturers via the many-to-many `phoenix_kit_cat_manufacturer_suppliers` table. - [PhoenixKitCatalogue.Catalogue.Translations](PhoenixKitCatalogue.Catalogue.Translations.md): Multilang `data` JSONB helpers — read merged language data from a record and write language-specific overrides through the entity's own update function. - [PhoenixKitCatalogue.Errors](PhoenixKitCatalogue.Errors.md): Central mapping from error atoms (returned by `PhoenixKitCatalogue.Catalogue` and the import pipeline) to translated, user-facing strings. - [PhoenixKitCatalogue.Export](PhoenixKitCatalogue.Export.md): Export context for the Catalogue module. - [PhoenixKitCatalogue.Export.Destination](PhoenixKitCatalogue.Export.Destination.md): Behaviour for export destinations (e.g. PRO100, Universal). - [PhoenixKitCatalogue.Export.Pro100](PhoenixKitCatalogue.Export.Pro100.md): PRO100 export destination. - [PhoenixKitCatalogue.Export.Universal](PhoenixKitCatalogue.Export.Universal.md): Universal export destination. - [PhoenixKitCatalogue.Export.UniversalJson](PhoenixKitCatalogue.Export.UniversalJson.md): Universal JSON export encoder. - [PhoenixKitCatalogue.Extension](PhoenixKitCatalogue.Extension.md): Behaviour for a module that adds a "Shop"-style section to the catalogue item and/or category forms and owns a namespace under `data` (spec §2 principle 8, §4 row C4). - [PhoenixKitCatalogue.Extensions](PhoenixKitCatalogue.Extensions.md): Discovery and absorption for `PhoenixKitCatalogue.Extension` implementers — the item/category form "extension slot" (spec §2 principle 8, §4 row C4). - [PhoenixKitCatalogue.Gettext](PhoenixKitCatalogue.Gettext.md): Gettext backend for phoenix_kit_catalogue. - [PhoenixKitCatalogue.Import](PhoenixKitCatalogue.Import.md): Import context: source registry (inbound mirror of Export). - [PhoenixKitCatalogue.Import.CommaParser](PhoenixKitCatalogue.Import.CommaParser.md) - [PhoenixKitCatalogue.Import.Executor](PhoenixKitCatalogue.Import.Executor.md): Executes an import plan by creating categories and items. - [PhoenixKitCatalogue.Import.Mapper](PhoenixKitCatalogue.Import.Mapper.md): Maps file columns to catalogue fields and transforms row data into validated item attribute maps ready for insertion. - [PhoenixKitCatalogue.Import.Matcher](PhoenixKitCatalogue.Import.Matcher.md): Matches PRO100 rows to existing catalogue items. - [PhoenixKitCatalogue.Import.Parser](PhoenixKitCatalogue.Import.Parser.md): Parses XLSX and CSV files into structured row data. - [PhoenixKitCatalogue.Import.Pro100Parser](PhoenixKitCatalogue.Import.Pro100Parser.md): Parses the PRO100 fixed-layout text formats (`# Parts` / `# Materials`). - [PhoenixKitCatalogue.Import.Pro100Plan](PhoenixKitCatalogue.Import.Pro100Plan.md): Builds the PRO100 sync diff/report. Rows fall into three buckets - [PhoenixKitCatalogue.Import.Pro100TemplateLoader](PhoenixKitCatalogue.Import.Pro100TemplateLoader.md): Applies a `Pro100TemplatePlan` to the catalogue. - [PhoenixKitCatalogue.Import.Pro100TemplateParser](PhoenixKitCatalogue.Import.Pro100TemplateParser.md): Parses a PRO100 `configTables` export — the estimate/price template PRO100 uses to quote a project. XML, despite the extension the exporter gives it. - [PhoenixKitCatalogue.Import.Pro100TemplatePlan](PhoenixKitCatalogue.Import.Pro100TemplatePlan.md): Turns a parsed PRO100 estimate template into the catalogue structure to create. - [PhoenixKitCatalogue.Import.SemicolonParser](PhoenixKitCatalogue.Import.SemicolonParser.md) - [PhoenixKitCatalogue.Import.Source](PhoenixKitCatalogue.Import.Source.md): Behaviour for import sources — the inbound mirror of Export.Destination. - [PhoenixKitCatalogue.Import.Source.Pro100](PhoenixKitCatalogue.Import.Source.Pro100.md): PRO100 import source: fixed-layout # Parts / # Materials, update-by-id. - [PhoenixKitCatalogue.Import.Source.Universal](PhoenixKitCatalogue.Import.Source.Universal.md): Universal import source: XLSX/CSV (existing parser) + JSON (export round-trip). - [PhoenixKitCatalogue.Import.TabParser](PhoenixKitCatalogue.Import.TabParser.md) - [PhoenixKitCatalogue.Metadata](PhoenixKitCatalogue.Metadata.md): Global, code-defined list of metadata fields that catalogue resources (items and catalogues) can opt into. - [PhoenixKitCatalogue.Migrations](PhoenixKitCatalogue.Migrations.md): Module-owned versioned migrations for `phoenix_kit_catalogue` — the decentralized-migrations protocol that core's `mix phoenix_kit.update` discovers via `migration_module/0`: `current_version/0` + `migrated_version_runtime/1` + idempotent `up/1` + version-aware `down/1`. `phoenix_kit_crm` (ten adopted tables) is the closest sibling example of this exact situation, scaled up further to eighteen tables. - [PhoenixKitCatalogue.Paths](PhoenixKitCatalogue.Paths.md): Centralized path helpers for the Catalogue module. - [PhoenixKitCatalogue.Pro100.Id](PhoenixKitCatalogue.Pro100.Id.md): PRO100 numeric id: the SKU reduced to digits only (`"76.0026.12"` -> `"76002612"`). Shared by the PRO100 export (id column) and import (match key) so the two never drift. `nil`/no-digit -> `""`. - [PhoenixKitCatalogue.Schemas.Attribute](PhoenixKitCatalogue.Schemas.Attribute.md): Schema for attributes within an attribute group ("Color", "Trim"). - [PhoenixKitCatalogue.Schemas.AttributeGroup](PhoenixKitCatalogue.Schemas.AttributeGroup.md): Schema for attribute groups — reusable, translatable sets of product characteristics ("Idea doors": Color, Trim, Surface…). - [PhoenixKitCatalogue.Schemas.AttributeValue](PhoenixKitCatalogue.Schemas.AttributeValue.md): Schema for values within an attribute ("White", "Oak", "Anthracite"). - [PhoenixKitCatalogue.Schemas.Catalogue](PhoenixKitCatalogue.Schemas.Catalogue.md): Schema for catalogues — top-level groupings (e.g., Kitchen Furniture, Plumbing). - [PhoenixKitCatalogue.Schemas.CatalogueRule](PhoenixKitCatalogue.Schemas.CatalogueRule.md): Smart-catalogue rule: one row per `(item, referenced_catalogue)` pair. - [PhoenixKitCatalogue.Schemas.Category](PhoenixKitCatalogue.Schemas.Category.md): Schema for categories within a catalogue. - [PhoenixKitCatalogue.Schemas.Folder](PhoenixKitCatalogue.Schemas.Folder.md): Schema for catalogue folders — a nesting layer for organizing catalogues on the admin index. Folders are module-global (not scoped to a catalogue) and are unrelated to the media-folder system. - [PhoenixKitCatalogue.Schemas.Item](PhoenixKitCatalogue.Schemas.Item.md): Schema for catalogue items — individual products/materials with SKU and pricing. - [PhoenixKitCatalogue.Schemas.ItemAttributeGroup](PhoenixKitCatalogue.Schemas.ItemAttributeGroup.md): Item ↔ attribute-group assignment row. - [PhoenixKitCatalogue.Schemas.ItemAttributeSet](PhoenixKitCatalogue.Schemas.ItemAttributeSet.md): Join row: an item's attachment of one attribute SET (a managed entities blueprint — "Ikea colors"). Items attach any number of sets, ordered by `position`. - [PhoenixKitCatalogue.Schemas.ItemSupplierInfo](PhoenixKitCatalogue.Schemas.ItemSupplierInfo.md): Junction table row linking a catalogue item to a supplier. - [PhoenixKitCatalogue.Schemas.Manufacturer](PhoenixKitCatalogue.Schemas.Manufacturer.md): Schema for manufacturers. - [PhoenixKitCatalogue.Schemas.ManufacturerSupplier](PhoenixKitCatalogue.Schemas.ManufacturerSupplier.md): Join table linking manufacturers to suppliers (many-to-many). - [PhoenixKitCatalogue.Schemas.Pdf](PhoenixKitCatalogue.Schemas.Pdf.md): Per-upload row in the catalogue's PDF library. - [PhoenixKitCatalogue.Schemas.PdfExtraction](PhoenixKitCatalogue.Schemas.PdfExtraction.md): Extraction state for one unique PDF file content. - [PhoenixKitCatalogue.Schemas.PdfPage](PhoenixKitCatalogue.Schemas.PdfPage.md): Per-page join row keyed by `(file_uuid, page_number)`. - [PhoenixKitCatalogue.Schemas.PdfPageContent](PhoenixKitCatalogue.Schemas.PdfPageContent.md): Content-addressed cache of PDF page text. - [PhoenixKitCatalogue.Schemas.Supplier](PhoenixKitCatalogue.Schemas.Supplier.md): Schema for suppliers. - [PhoenixKitCatalogue.TranslationStatus](PhoenixKitCatalogue.TranslationStatus.md): Freshness of catalogue AI translations: a per-(resource, language, FIELD) fingerprint of the source text, and the state it implies. - [PhoenixKitCatalogue.Web.AttributeGroupFormLive](PhoenixKitCatalogue.Web.AttributeGroupFormLive.md): Create/edit form for attribute groups, with the inline attribute/value editor on :edit. - [PhoenixKitCatalogue.Web.CatalogueDetailLive](PhoenixKitCatalogue.Web.CatalogueDetailLive.md): Detail view for a single catalogue, with infinite-scroll paging over its categories and items. - [PhoenixKitCatalogue.Web.CatalogueFormLive](PhoenixKitCatalogue.Web.CatalogueFormLive.md): Create/edit form for catalogues with multilang support. - [PhoenixKitCatalogue.Web.CataloguesLive](PhoenixKitCatalogue.Web.CataloguesLive.md): Landing page for the Catalogue module. - [PhoenixKitCatalogue.Web.CategoryFormLive](PhoenixKitCatalogue.Web.CategoryFormLive.md): Create/edit form for categories within a catalogue. - [PhoenixKitCatalogue.Web.ComponentRelay](PhoenixKitCatalogue.Web.ComponentRelay.md): Delivers catalogue PubSub events to a LiveComponent as `send_update/3` refreshes, so a component embedded in ANY host LiveView follows the catalogue live without the host forwarding a single message. - [PhoenixKitCatalogue.Web.Components](PhoenixKitCatalogue.Web.Components.md): Reusable UI components for the Catalogue module. - [PhoenixKitCatalogue.Web.Components.AttributeSetItemsModal](PhoenixKitCatalogue.Web.Components.AttributeSetItemsModal.md): Read-only popup previewing the items attached to ONE attribute set — opened from the sets listing's Items count (Max's 2026-08-28 direction: the count is the button; the preview is a popup, not a page). Each row: photo, name (links to the item editor), catalogue / category, selling price, the item's SELECTED values of this set (ghost-filtered), and status. - [PhoenixKitCatalogue.Web.Components.Browse](PhoenixKitCatalogue.Web.Components.Browse.md): Embeddable, selection-agnostic building blocks for browsing catalogue items — the pieces `ItemSelectorModal` is assembled from, exposed so a host LiveView can compose its own browse surface (a storefront section, a picker, a read-only category wall) without copying markup. - [PhoenixKitCatalogue.Web.Components.CatalogueBrowse](PhoenixKitCatalogue.Web.Components.CatalogueBrowse.md): Embeddable catalogue browse surface: search, category chips, and the item grid or admin-look table as one drop-in LiveComponent — the same `BrowseState` + `Browse.*` stack `ItemSelectorModal` runs on, minus the selection chrome. Put a catalogue (or a scoped slice of one) on any logged-in page - [PhoenixKitCatalogue.Web.Components.ItemPicker](PhoenixKitCatalogue.Web.Components.ItemPicker.md): Combobox LiveComponent for picking a single item from the catalogue via server-side search. - [PhoenixKitCatalogue.Web.Components.ItemSelectorModal](PhoenixKitCatalogue.Web.Components.ItemSelectorModal.md): Catalogue item selector modal: the catalogue's analogue of core's `MediaSelectorModal`. A logged-in user browses the catalogue inside a modal — search, admin-style subcategory tiles, an admin-look table or photo-forward card grid — picks items, sets a quantity per item, and confirms. - [PhoenixKitCatalogue.Web.Components.PdfSearchModal](PhoenixKitCatalogue.Web.Components.PdfSearchModal.md): LiveComponent that searches the PDF library for any page whose text matches one of the given item's translated names. - [PhoenixKitCatalogue.Web.Components.ProductCard](PhoenixKitCatalogue.Web.Components.ProductCard.md): A read-only product card for a catalogue `%Item{}` — opened from the `ItemPicker` thumbnail or a list's featured-image thumb, and potentially shown to a CLIENT, not just admins, so it has to stand on its own. - [PhoenixKitCatalogue.Web.EventsLive](PhoenixKitCatalogue.Web.EventsLive.md): LiveView for the catalogue activity events subtab. - [PhoenixKitCatalogue.Web.ExportController](PhoenixKitCatalogue.Web.ExportController.md): Stateless controller for the catalogue export download. - [PhoenixKitCatalogue.Web.ExportLive](PhoenixKitCatalogue.Web.ExportLive.md): Export tab LiveView. - [PhoenixKitCatalogue.Web.Helpers](PhoenixKitCatalogue.Web.Helpers.md): Tiny utilities shared by every catalogue LiveView. Imported into LVs via the standard `import PhoenixKitCatalogue.Web.Helpers` line. - [PhoenixKitCatalogue.Web.ImportLive](PhoenixKitCatalogue.Web.ImportLive.md): Multi-step import wizard for catalogue items. - [PhoenixKitCatalogue.Web.ItemFormLive](PhoenixKitCatalogue.Web.ItemFormLive.md): Create/edit form for catalogue items with multilang support. - [PhoenixKitCatalogue.Web.PdfDetailLive](PhoenixKitCatalogue.Web.PdfDetailLive.md): Single-PDF detail page. Shows metadata + extraction status, embeds the vendored PDF.js viewer in an iframe pre-bound to the file and the optional `?page=N` URL param. - [PhoenixKitCatalogue.Web.PdfLibraryLive](PhoenixKitCatalogue.Web.PdfLibraryLive.md): Admin index for the PDF library subtab. - [PhoenixKitCatalogue.Web.Routes](PhoenixKitCatalogue.Web.Routes.md): Route module for PhoenixKit Catalogue admin routes. - [PhoenixKitCatalogue.Web.Settings](PhoenixKitCatalogue.Web.Settings.md): Read/write helpers for the catalogue AI-translation sweep's operational settings (block-6 plan, Task 4). `PhoenixKitCatalogue.Workers.TranslationSweepWorker` reads these on every tick. Nothing in this module's own UI writes them yet — the `/admin/catalogue/translations` page has no settings panel — so enabling the sweep is an operator (or host) call into `update_*`. - [PhoenixKitCatalogue.Web.TableConfig](PhoenixKitCatalogue.Web.TableConfig.md): Column metadata for the catalogue admin tables, keyed by scope (`:catalogues`, `:suppliers`, `:manufacturers`). Pure data — cell and card rendering live in the LiveView. Labels are zero-arity fns so they resolve in the request's current locale. - [PhoenixKitCatalogue.Web.TableQuery](PhoenixKitCatalogue.Web.TableQuery.md): Pure, in-memory search → filter → sort pipeline over a list of row maps (catalogues/suppliers/manufacturers already loaded by the LiveView). - [PhoenixKitCatalogue.Web.TableToolbar](PhoenixKitCatalogue.Web.TableToolbar.md): Toolbar pieces for the catalogue admin tables: the column-settings modal, the sort select+direction control, and an enum filter select. All emit plain events handled by `CataloguesLive` against the active scope. - [PhoenixKitCatalogue.Web.TranslationsLive](PhoenixKitCatalogue.Web.TranslationsLive.md): Admin page for catalogue AI-translation freshness (block-6 plan, Task 5): `/admin/catalogue/translations`. - [PhoenixKitCatalogue.Web.ViewConfig](PhoenixKitCatalogue.Web.ViewConfig.md): Per-user table view config (columns / sort / filters / view mode) for the catalogue admin tables. Stored in `phoenix_kit_users.custom_fields` under the `"catalogue_view_configs"` key — no dedicated table. Precedent: `PhoenixKit.Notifications.Prefs`. - [PhoenixKitCatalogue.Workers.PdfExtractor](PhoenixKitCatalogue.Workers.PdfExtractor.md): Oban worker that extracts text page-by-page from a PDF through the `PdfEngines` chain: pdfium (in-app precompiled NIF — no system packages needed) first, poppler (`pdfinfo`/`pdftotext`) as the fallback when installed. - [PhoenixKitCatalogue.Workers.TranslationSweepWorker](PhoenixKitCatalogue.Workers.TranslationSweepWorker.md): Opt-in, self-rescheduling Oban worker that tops up catalogue AI translations: on every tick it enqueues one `PhoenixKitAI.TranslateWorker` job per (resource, target language) pair currently `:missing` or `:stale` — `:unknown` is never picked up automatically (design source doc §4.1: an operator decides that pair's fate explicitly). ## Mix Tasks - [mix phoenix_kit_catalogue.audit_supplier_refs](Mix.Tasks.PhoenixKitCatalogue.AuditSupplierRefs.md): Reports junction rows in `phoenix_kit_cat_item_supplier_info` whose `supplier_uuid` does not resolve in the expected source.