Skip to content

Admin Panel

URL

https://<APP_HOST>/admin

Locally: https://conflux.local/admin.

Technology

Filament v5 — official docs. Panel configuration: app/Providers/Filament/AdminPanelProvider.php.

Authentication

  • Guard: Laravel web
  • Login page: /admin/login
  • Credentials are seeded by AdminSeeder from the ADMIN_EMAIL and ADMIN_PASSWORD env vars

Auto-discovery

Type Directory Namespace
Resources app/Filament/Resources/ App\Filament\Resources
Pages app/Filament/Pages/ App\Filament\Pages
Widgets app/Filament/Widgets/ App\Filament\Widgets

No manual registration is required for basic usage — Filament discovers all classes in these directories on boot.

Default Pages and Widgets

Name Type Source
Dashboard Page Filament built-in
AccountWidget Widget Filament built-in
FilamentInfoWidget Widget Filament built-in

Colour Scheme

Primary colour: Amber.

Date & Time Display

Every date-time value shown in the panel is UTC — the app and Filament's own default timezone are both UTC, so no conversion happens between storage and display. Date-time columns and entries built with App\Filament\Support\TextColumn / App\Filament\Support\TextEntry (drop-in subclasses of the Filament base classes) carry a tooltip stating this, on both ->dateTime() and ->since(). A bare calendar date (e.g. a customer's date of birth) is not affected, since a zone has no meaning there. See ADR-0022 for why this is a subclass rather than a Filament macro.

Currency Display

App\Filament\Support\TextColumn / App\Filament\Support\TextEntry also carry a money() method, via the shared App\Filament\Support\Concerns\FormatsTextComponents trait (the same trait supplies dateTime()'s UTC tooltip above; since() stays defined separately per class, since infolist entries and table columns need slightly different tooltip formatting). It replaced 13 duplicated ->formatStateUsing(fn (?int $state): string => $state !== null ? number_format($state / 100, 2) : '—') closures across the Orders, Products and Customers tables, schemas and relation managers.

use App\Filament\Support\TextColumn;

TextColumn::make('total')->money();

money() shadows Filament's own native, currency/locale-aware money() method, which accepts $currency, $divideBy, $locale and $decimalPlaces arguments. This override keeps an identical parameter signature — required so the override satisfies PHP's Liskov substitution check — but ignores every argument and always applies the fixed cents-to-decimal formatting above. Call it with no arguments: ->money(). Passing a currency or locale expecting Filament's native behaviour has no effect; the arguments are silently ignored.

Shared Resource Helpers

Two small helpers under app/Filament/Resources/Concerns/ and app/Filament/Support/Filters/ share access-scoping logic that would otherwise be copy-pasted per resource:

  • App\Filament\Resources\Concerns\ScopedToAccessibleSystemConnection — a trait supplying getEloquentQuery() for a resource whose model is scoped through a systemConnection relationship, filtering to SystemConnection::accessibleBy($user). Used by CustomerResource, OrderResource and ProductResource. TenantResource and SystemConnectionResource scope their own model directly via accessibleBy() and do not use this trait — the model being scoped is a different shape (the resource's own record, not a related one).
  • App\Filament\Support\Filters\SystemConnectionFilter::make() — a factory for the SelectFilter on the systemConnection relationship (searchable, preloaded, options narrowed to SystemConnection::accessibleBy($user)) shared by the Customers, Orders and Products tables.

See Roles and Permissions for what accessibleBy() computes.

Resources

Resource URL Model Reference
Tenants /admin/tenants App\Models\Tenant —
System Connections /admin/system-connections App\Models\SystemConnection system-connections.md
Users /admin/users App\Models\User users.md
Products /admin/products App\Models\Product products.md
Orders /admin/orders App\Models\Order orders.md
Customers /admin/customers App\Models\Customer customers.md

See Also