PhoenixKitComments

ElixirLicense: MIT

Resource-agnostic, polymorphic commenting module for PhoenixKit. Drop-in comments with unlimited nested threading, like/dislike reactions, moderation, and an admin dashboard.

Features

Installation

Add phoenix_kit_comments to your dependencies in mix.exs:

def deps do
[
{:phoenix_kit_comments, "~> 0.1"}
]
end

Then fetch dependencies:

mix deps.get

Note: For development or if not yet published to Hex, you can use:

{:phoenix_kit_comments, github: "mdon/phoenix_kit_comments"}

PhoenixKit auto-discovers the module at startup — no additional configuration needed.

Quick Start

  1. Add the dependency to mix.exs
  2. Run mix deps.get
  3. Enable the module in admin settings (comments_enabled: true)
  4. Embed the CommentsComponent in your LiveViews

Usage

Embedding comments on a page

Use the CommentsComponent LiveComponent in any LiveView:

<.live_component
module={PhoenixKitComments.Web.CommentsComponent}
id="comments"
resource_type="post"
resource_uuid={@post.uuid}
current_user={@current_user}
/>

Resource handler callbacks

Modules that consume comments can register handlers to receive lifecycle notifications:

# config/config.exs
config :phoenix_kit, :comment_resource_handlers, %{
"post" => PhoenixKitPosts,
"entity" => PhoenixKitEntities
}

Handler modules can implement:

Settings

KeyTypeDefaultDescription
comments_enabledbooleanfalseEnable/disable the module
comments_moderationbooleanfalseRequire approval for new comments
comments_max_depthinteger10Maximum thread nesting level
comments_max_lengthinteger10000Maximum comment length (characters)

Moderation Workflow

When comments_moderation is enabled:

Permissions

The module declares permissions via permission_metadata/0:

Use Scope.has_module_access?/2 to check permissions in your application.

CSS Requirements

For Tailwind CSS users: ensure phoenix_kit_comments is listed in your tailwind.config.js sources:

module.exports = {
content: [
// ...
"./deps/phoenix_kit_comments/**/*.{heex,ex}",
// ...
]
}

Architecture

lib/
phoenix_kit_comments.ex # Context + PhoenixKit.Module behaviour
phoenix_kit_comments/
schemas/
comment.ex # Polymorphic comment schema with threading
comment_like.ex # Like tracking (unique per user per comment)
comment_dislike.ex # Dislike tracking (unique per user per comment)
web/
comments_component.ex # Embeddable LiveComponent
index.ex # Admin moderation dashboard
settings.ex # Admin settings page

Comment statuses

StatusDescription
"published"Visible to all (default when moderation is off)
"pending"Awaiting moderator approval
"hidden"Hidden by a moderator
"deleted"Soft-deleted

Database tables

Development

mix deps.get # Install dependencies
mix test # Run tests
mix format # Format code
mix credo # Static analysis
mix dialyzer # Type checking
mix docs # Generate documentation

Troubleshooting

Comments not appearing

CSS classes missing

Permission denied errors

License

MIT — see LICENSE for details.