LiveView admin UI for Accrue billing operations. Versioning tracks the accrue package—use the same ~> range for both. For a plain-language history of releases (instead of only GitHub release bullets), see Accrue release notes.

Quickstart

accrue_admin stays downstream of the core billing setup. Start with the checked-in Fake-backed demo or the Accrue First Hour guide, get the core billing facade and signed webhook path working, then mount the admin UI for operators.

Hex vs main: The {:accrue_admin, "~> …"} line below tracks accrue_admin/mix.exs @version on the branch you are reading (typically main on GitHub). Hex.pm publishes that train after release; use HexDocs for operator UI docs matched to the Hex version you resolved.

Keep accrue on the same ~> train when both packages are in the host mix.exs, and pin production upgrades via mix.lock.

Add accrue_admin to your host application and mount the package router where operators manage billing:

defp deps do
  [
    {:accrue_admin, "~> 1.1.2"}
  ]
end
defmodule MyAppWeb.Router do
  use MyAppWeb, :router

  import AccrueAdmin.Router

  scope "/" do
    pipe_through [:browser]

    accrue_admin "/billing"
  end
end

Run mix deps.get, finish the core billing and signed-webhook path, and then continue with the package guide on HexDocs for route session options, branding, and auth details:

Operator copy (tiers)

Contributors should treat operator-facing strings in three tiers:

  • Tier A — Host contract: production accrue_admin LiveView copy on mounted routes lives in AccrueAdmin.Copy (and verbatim legal/replay gates in AccrueAdmin.Copy.Locked). Treat changes as host-visible: follow semver and call them out under ### Host-visible copy (accrue_admin) in this package CHANGELOG.md.
  • v1.14 parity inventory: route-level Copy / token / VERIFY posture for the 11 core mounted surfaces is tracked in guides/core-admin-parity.md (ADM-07); start there before widening VERIFY or Copy modules.
  • Tier B — Library demo: ComponentKitchenLive and fixture-heavy previews are non-contract; safe for marketing or instructional tone.
  • Tier C — Dev-only: routes behind dev flags may use placeholder copy but must not imply safety or compliance the library does not provide.

Host setup

accrue_admin expects the host app to provide browser session state and an Accrue.Auth adapter that can resolve an admin-capable operator. The full router mount, branding config, and auth expectations live in the admin UI guide on HexDocs:

The first-time host setup path for the core package lives in the Accrue First Hour guide:

The canonical local demo path lives in the checked-in host app:

  • examples/accrue_host/README.md

Published accrue_admin releases resolve accrue ~> 1.1.2. Monorepo development keeps the sibling ../accrue path dependency unless ACCRUE_ADMIN_HEX_RELEASE=1 is set for release validation.

Assets

The package ships its own committed static bundle from priv/static/. Rebuild it locally with:

cd accrue_admin
mix accrue_admin.assets.build

No host Tailwind config or JavaScript bootstrap changes are required.

Browser UAT

The example-host browser proof in examples/accrue_host/README.md is the full mounted-admin proof path. The commands below are fast package smoke against the admin fixture endpoint only.

The browser regression suite lives under e2e/ and runs against the package's test Phoenix endpoint:

cd accrue_admin
npm ci
npx playwright install chromium
npm run e2e

Admin routes

Source of truth for paths is AccrueAdmin.Router.accrue_admin/2.

The operator sidebar curates navigation for usability; this section lists routes in router declaration order, which may differ from sidebar ordering.

Shipping live/3 routes (relative to the mount path), in monotonic router order:

OrderNav labelPathLiveView module
1Home/AccrueAdmin.Live.DashboardLive
2Customers/customersAccrueAdmin.Live.CustomersLive
3/customers/:idAccrueAdmin.Live.CustomerLive
4Subscriptions/subscriptionsAccrueAdmin.Live.SubscriptionsLive
5/subscriptions/:idAccrueAdmin.Live.SubscriptionLive
6Invoices/invoicesAccrueAdmin.Live.InvoicesLive
7/invoices/:idAccrueAdmin.Live.InvoiceLive
8Charges/chargesAccrueAdmin.Live.ChargesLive
9/charges/:idAccrueAdmin.Live.ChargeLive
10Coupons/couponsAccrueAdmin.Live.CouponsLive
11/coupons/:idAccrueAdmin.Live.CouponLive
12Promotion codes/promotion-codesAccrueAdmin.Live.PromotionCodesLive
13/promotion-codes/:idAccrueAdmin.Live.PromotionCodeLive
14Connect/connectAccrueAdmin.Live.ConnectAccountsLive
15/connect/:idAccrueAdmin.Live.ConnectAccountLive
16Event log/eventsAccrueAdmin.Live.EventsLive
17Webhooks/webhooksAccrueAdmin.Live.WebhooksLive
18/webhooks/:idAccrueAdmin.Live.WebhookLive

Dev-only (allow_live_reload: true)

PathLiveView module
/dev/clockAccrueAdmin.Dev.ClockLive
/dev/email-previewAccrueAdmin.Dev.EmailPreviewLive
/dev/webhook-fixturesAccrueAdmin.Dev.WebhookFixtureLive
/dev/componentsAccrueAdmin.Dev.ComponentKitchenLive
/dev/fake-inspectAccrueAdmin.Dev.FakeInspectLive

Guides

Project policies