Skip to main content
Phoenix

Fault-tolerant support for your Phoenix application

Ecto schemas, Phoenix channels, GenServer processes, and OTP supervision trees. Escalated brings support tickets to Elixir with the resilience Phoenix is known for.

Terminal
$ mix deps.get

Why Escalated

Why Escalated for Phoenix

Built for the BEAM — fault-tolerant, real-time, and functional.

Fault Tolerance

Escalated runs under OTP supervision trees. If a process crashes, it restarts automatically. Your support system stays up even when things go wrong.

Real-Time via Channels

Live ticket updates, typing indicators, and agent presence powered by Phoenix Channels. No polling, no WebSocket boilerplate.

Functional Programming

Immutable data, pattern matching, and composable pipelines. Escalated embraces Elixir idioms rather than fighting them.

Getting Started

How It Works

Three steps from zero to a working help desk.

1

Add the Dependency

Add {:escalated, "~> 1.0"} to mix.exs

2

Install & Migrate

mix deps.get && mix ecto.migrate

3

Mount the Router

Forward /support to Escalated.Router in your Phoenix router and the support system is live.

Features

Built for the BEAM

Escalated leverages the full power of OTP and the Phoenix ecosystem.

Ecto Schemas & Changesets

Tickets, replies, and tags are Ecto schemas with validations. Use changesets, preloads, and composable queries.

Phoenix PubSub

Ticket events broadcast via PubSub. Subscribe from any process — LiveView, Channel, or GenServer — for real-time updates.

Pluggable Authorization

Authorization uses a behaviour-based system. Implement the Escalated.Policy behaviour to control access with your own rules.

Telemetry Events

Every ticket action emits Telemetry events. Attach handlers for logging, metrics, and custom side effects.

Plug Middleware

Escalated routes work with the Plug pipeline. Apply authentication, rate limiting, and custom plugs to any route.

ExUnit Test Helpers

Ships with ExUnit helpers and factories. Create tickets, replies, and users in your test suite with clean setup functions.

Code

Idiomatic Elixir

Pattern matching, pipes, and Phoenix conventions.

Elixir
# lib/my_app_web/router.ex
defmodule MyAppWeb.Router do
  use MyAppWeb, :router

  forward "/support", Escalated.Router
end

# lib/my_app/accounts/user.ex
defmodule MyApp.Accounts.User do
  use Ecto.Schema
  use Escalated.HasTickets

  schema "users" do
    has_many :tickets, Escalated.Ticket
  end
end

Ready to add support tickets to your Phoenix app?

Add the dependency, run migrations, and mount the router. Open source, self-hosted, and built for Elixir.