/app and /app/{tenant} using SPA mode, scoped entirely to the authenticated tenant’s data. Each route segment that contains {tenant} maps to the Tenant model via the slug attribute.
Registration is disabled inside the panel. New businesses complete onboarding through the public
/registrar-negocio wizard before they can access /app.Access and authentication
| Attribute | Value |
|---|---|
| Panel ID | app |
| Path | /app |
| Auth guard | web |
| Required role | panel_user (business owner) |
| Tenant model | App\Models\Tenant (resolved by slug) |
AppPanelProvider. The panel registers the Tenant model for multi-tenancy and resolves the current tenant from the URL slug on every request:
Tenant isolation
All resources inside the app panel are scoped to the authenticated tenant. Each resource restricts its Eloquent query to the current tenant’s ID. For example,OrderResource uses modifyQueryUsing to filter results:
tenant_id automatically via a hidden field:
Dashboard widgets
The tenant dashboard renders a prioritised widget stack sourced fromapp/Filament/App/Widgets/:
| Widget | Purpose |
|---|---|
TenantStatsWidget | Bento grid with growth KPIs (followers, orders, revenue, appointments) |
RevenueChart | 30-day revenue trend line chart |
OrdersChart | 7-day appointment and order volume |
ProductLimitWidget | Progress bar showing products used vs. plan limit |
AccountCompletenessWidget | Profile completion score with actionable nudges |
QuickActionsWidget | Shortcut buttons for most common actions |
ProductLimitWarning | Alert banner when approaching the free plan product ceiling |
PendingReviewAlert | Alert for unreviewed customer reviews |
FreePlanUpsellWidget | Upgrade prompt for tenants on the free plan |
Navigation groups
The sidebar is organised into three deterministic groups defined inAppPanelProvider:
Mi Negocio
Mi Negocio
Operational resources that run day-to-day business. Includes orders, appointments, and the public site link.
- Pedidos —
OrderResource: incoming orders with status pipeline (Pending → Confirmed → In Kitchen → Ready → Delivered) - Agenda de Citas —
AppointmentResource: appointment calendar with service and provider assignment - Seguidores —
FollowerResource: read-only list of users who follow the business - Leads —
LeadResource: captured leads from public forms - Ver mi Sitio Público — external link to the public microsite
- Compartir Negocio — WhatsApp share link
Catálogo
Catálogo
Resources for building and managing the product catalog.
- Mis Productos —
ProductResource: create and manage products with image editor, pricing, variants (PRO), and menu section assignment - Secciones del Menú —
MenuSectionResource: drag-and-drop sortable sections for organising the catalog - Servicios —
ServiceResource: bookable services with duration and price - Proveedores de Servicio —
ServiceProviderResource: staff or contractors who deliver services - Reseñas —
ReviewResource: customer reviews left on the public site - Inventario —
InventoryLevelResource/InventoryMovementResource: stock levels and movement history - Sucursales —
LocationResource: branch/location management
Marketing
Marketing
Growth and retention tools, some gated to the PRO plan.
- Anuncios —
AnnouncementResource: scheduled banners shown on the public microsite - Cupones —
CouponResource: percentage or fixed discount codes with usage limits and expiry - Campanas (PRO) —
CampaignResource: bulk email campaigns with audience segmentation - Loyalty → Configuracion —
LoyaltyProgramResource: define earn ratio and redemption rules - Loyalty → Recompensas —
LoyaltyRewardResource: rewards that customers can redeem with points
Configuracion
Configuracion
Account and tenant management pages.
- Mi Negocio —
TenantProfileResource: edit the public profile (name, logo, brand colour, social links, checkout options) - Equipo —
TenantUserResource: add team members and assign roles (Owner, Admin, Manager, Operator, Viewer) - Suscripción —
ManageBillingpage: subscription state machine (Free → Pending → PRO) with payment wizard and receipt download - Marketing —
ManageMarketingpage: marketing settings - Configuración —
Settingspage: WhatsApp number, address, and message template - Upgrade a PRO —
UpgradeToPropage: plan comparison and upgrade CTA
Resources reference
ProductResource
Manages products with a mobile-first form. Enforces the free plan product limit via
canCreate(). Supports inline image editing at 1:1 aspect ratio, menu section assignment (PRO), featured products (PRO), and product variants (PRO). Includes a duplicate action and inline price editing directly from the table.OrderResource
Read-only order view with a status pipeline driven by
OrderStateService. Actions (Confirm, A cocina, Listo, Entregar) transition state and fire a broadcast event. Displays a navigation badge showing the count of pending orders.AppointmentResource
Full appointment lifecycle: book, confirm, cancel, and mark as completed. Integrates with
ServiceResource and ServiceProviderResource. Supports an embedded calendar widget.CouponResource
Creates discount codes with type (percentage or fixed), minimum purchase, usage cap, and expiry. Scoped to the current tenant. Active status is toggled inline from the table.
TenantUserResource
Manages
TenantMembership records. Supports inline user creation with a temporary password. Roles (Owner, Admin, Manager, Operator, Viewer) map to RBAC presets in config/rbac.php.LoyaltyProgramResource
Configures the earn ratio (spend to points) and redemption threshold. One program per tenant.
LoyaltyRewardResource defines the rewards catalogue that customers can claim.AnnouncementResource
Scheduled banners with rich text content (no images), type-based colour coding, and activation toggle. Displayed on the tenant’s public microsite during the configured date window.
CampaignResource
PRO-only bulk email campaigns with audience type segmentation (all followers, segment). Campaign emails are dispatched via a queued job.
Plan gating
Plan-gated features useCapability enum checks resolved from the tenant record. Resources silently disable or hide form fields for tenants without the required capability:
ManageBilling page:
canCreate() method on ProductResource enforces the free plan product ceiling by counting existing products and comparing against the free_plan_product_limit setting from GeneralSettings:
Billing page — state machine
ManageBilling is a custom Filament page that renders a different UI based on three subscription states:
- FREE
- PENDING
- PRO
Shows a multi-step payment wizard (Filament
Wizard). Step 1 displays bank transfer instructions populated from GeneralSettings::bank_transfer_instructions. Step 2 collects the reference number and a proof-of-payment image upload.Settings page
Settings is a simple Filament page (app/Filament/App/Pages/Settings.php) that saves tenant fields directly. It exposes:
- Business name
- WhatsApp number
- Address
- WhatsApp message template (with variables:
{business_name},{product_name},{product_price})
TenantPermissionGuardInterface requiring the SETTINGS_VIEW permission.
SPA mode and notifications
The panel runs in SPA mode (powered by Livewire wire navigation) to eliminate full page reloads between views:Filament\Notifications\Notification::make() and appear as toast messages.
Visual design
| Attribute | Value |
|---|---|
| Primary colour | Indigo (Color::Indigo) |
| Gray scale | Zinc (Color::Zinc) |
| Font | Inter (Google Fonts, mobile-optimised) |
| Dark mode | Enabled |
| Sidebar | Collapsible and fully collapsible on desktop |