CMASH Modules

Cmash-Modules

Every capability in Cmash lives in its own package. Add or remove modules without affecting the core — clean separation of concerns at every layer.

Cmash-Core

core is the foundational package of the CMAsh ecosystem. It provides the Filament admin panel plugin, general application settings, the dashboard with analytics widgets, and user/role management. Every other CMAsh package depends on this core module.

Features

  • Filament Admin Panel Plugin — registers the CMAsh panel with custom branding, navigation, and login page
  • General Settings — configurable application settings via Filament settings page (powered by spatie/laravel-settings)
  • Dashboard Widgets — visual analytics for projects, compilations, assets, templates, and latest activity
  • User Management — full CRUD for users with UUID primary keys, Spatie roles/permissions, and Filament Shield RBAC
  • API Token Management — per-user Sanctum token administration via relation manager
  • Custom Login Page — branded authentication page

Cmash-Brand

cmash-brand is the one place to define who you are. The brand management package gives every brand a home. Manage multiple brands at one place - keep things organised: each Brand acts as the root of a visual identity tree, grouping together the Brandkits that carry your colors, fonts, and logos into every compiled template.

Features

  • Brand Management — create and manage brand entities with name and metadata
  • Filament Admin — full CRUD resource (List, Create, Edit)
  • REST API — programmatic brand management for external integrations
  • Brandkit Association — brands serve as parent entities for one or more Brandkits

Settings

Name Description Type Info
Name Name of Brand Mandatory -
Slug Slug of Brand Mandatory Unique
Description Short description of Brand Optional -
Logo Logo of Brand Optional Just a visual representation of the brand
Language Relationship to a Language Relation -
Active Status of Brand Yes, No -
Id Number of Brand internal Unique Id of Brand
UUID Unique Identifier of Brand internal Unique Id of Brand
CreatedAt Date of Creation internal -

Cmash-Brandkits

cmash-brandkit provides the brandkit model, which holds the concrete visual identity elements (colors, fonts, logos) for a brand. During Typst compilation, brandkit values are injected as -#let brand- variables, enabling templates to automatically adapt to different brand identities without source code changes.

Features

  • Brandkit Definition — configure brand colors, font families, and logo assets per brand
  • Template Variable Injection — brandkit values become #let brand-color-primary, #let brand-font-heading, etc. in Typst templates
  • Font Path Integration — brand font directories are passed to the Typst compiler via --font-path
  • Filament Admin — full CRUD with brand association (List, Create, Edit)
  • REST API — programmatic brandkit management
  • Multi-Brand Support — a single brand can have multiple brandkits (e.g., light/dark variants)

Settings

Name Description Type Info
Name Name of Brand Mandatory -
Slug Slug of Brand Mandatory Unique
Description Short description of Brand Optional -
Logo Logo of Brand Optional Just a visual representation of the brand
Language Relationship to a Language Optional -
Active Status of Brand Yes, No -
Id Number of Brand internal Unique Id of Brand
UUID Unique Identifier of Brand internal Unique Id of Brand
CreatedAt Date of Creation internal -
Brand Relationship to a Brand Relation -
Brand Colors Key-Value-Definiton of Brand Colors like "primary-color" - "#68F527" Multi-Key-Value Important: Keep the defintions across different brandkits/ brands consistant.
Brand Fonts Key-Value-Definiton of Brand Colors like "primary-font" - "Inter 18pt" Key-Value Important: Value must match to the name of the Font from the "Typst Fonts" section

Cmash-Renderer

cmash-renderer provides the Renderer entity that defines available output formats and their compilation settings. Renderers are assigned to workspaces, controlling which output formats (PDF, PNG, SVG, HTML etc.) are available to end users when downloading their documents. Each renderer can have specific settings like resolution, page size, or quality parameters.

Features

  • Output Format Definitions — configure PDF, PNG, and HTML output renderers with custom settings
  • Workspace Assignment — renderers are linked to workspaces, controlling available download formats
  • Filament Admin — full CRUD resource (List, Create, Edit)
  • REST API — programmatic renderer management
  • Download Integration — the editor's download manager shows available renderers for the project's workspace

Settings

Name Description Type Info
Name Name of Renderer Mandatory -
Slug Slug of Brand Mandatory Unique
Description Short description of Brand Optional @TODO
Configuration Detail Configuration Parameters Key-Value @TODO
Type Selection Selection Available Options: PDF, Image, HTML @TODO
Active Status of Brand Yes, No -
Id Number of Brand internal Unique Id of Brand
UUID Unique Identifier of Brand internal Unique Id of Brand
CreatedAt Date of Creation internal -

Cmash-Workspaces

cmash-workspace provides the Workspace entity that acts as the tenant boundary in CMAsh. Workspaces group documents, templates, and projects together and control which renderers (output formats), brandkits, forms, and editor themes are available. Each workspace can have its own visual editor theme, sidebar layout preferences, and assigned output format renderers.

Features

  • Multi-Tenant Workspaces — isolate documents, templates, and projects by workspace
  • Renderer Assignment — control which output formats (PDF, PNG, SVG) are available per workspace
  • Brandkit Default — assign a default brandkit for the workspace's documents
  • Editor Theme — link a custom CSS editor theme for workspace-specific branding
  • Sidebar Layout — configure editor sidebar layout preferences per workspace
  • Filament Admin — full CRUD resource (List, Create, Edit)
  • REST API — programmatic workspace management

Settings

Name Description Type Info
Name Name of Brand Mandatory -
Slug Slug of Brand Mandatory Unique
Description Short description of Brand Optional -
Logo Logo of Brand Optional Just a visual representation of the brand
Language Relationship to a Language Relation -
Active Status of Brand Yes, No -
Id Number of Brand internal Unique Id of Brand
UUID Unique Identifier of Brand internal Unique Id of Brand
CreatedAt Date of Creation internal -

Cmash-Tags

cmash-tag provides a reusable tagging system for almost any Cmash entity. Tags are managed centrally via the Filament admin panel and can be assigned to Assets, Documents, Templates, Forms, or any future entity type. Tags support color coding, hierarchical parent-child relationships, and type-based scoping.

Features

  • Polymorphic Tags — assign tags to any entity via MorphToMany relationship and a shared cmash_taggables pivot table
  • Tag Types — scope tags by entity type (asset, document, template, form, general). Tags typed general are available across all entities.
  • Color Support — each tag has an optional hex color rendered as tinted badges in admin lists
  • Tree Hierarchy — optional parent-child relationships (adjacency list with parent_id). Child tags display with a prefix; full path shown on hover. Max depth: 5 levels.
  • Reusable Filament Components — drop-in Select (with inline creation), Filter, and Column for any Filament resource
  • REST API — full CRUD + tree endpoint + tag-based entity filtering via ?tags=slug1,slug2
  • Datasource Integration — the _assets virtual datasource supports ?tags= filtering. The image-upload widget supports datasourceParams for tag-filtered asset choosers.
  • Filament Admin — complete TagResource with CRUD, color picker, parent selector, type filter, and tree visualization

Settings

Name Description Type Info
Name Name of Brand Mandatory -
Slug Slug of Brand Mandatory Unique
Description Short description of Brand Optional -
Color Color of Tag Optional
Type Selection of taggable entities Seletion Options: General, Asset, Document, Template, Form
Parent Tag Selection of Tags to choose as parent Tag Seletion
Active Status of Brand Yes, No -
Id Number of Brand internal Unique Id of Brand
UUID Unique Identifier of Brand internal Unique Id of Brand
CreatedAt Date of Creation internal -
SortOrder internal -