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.0.0"}
  ]
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 (Phase 27 CONTEXT D-03):

  • 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.0.0. 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

VERIFY-01 in examples/accrue_host/README.md is the merge-blocking path for mounted admin browser proofs on the real example host. 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