Skip to content

Do Not Do This

These patterns create upgrade, security, performance, or support problems in Capell. Use the safer extension point instead.

Do notWhyUse instead
Render authoring controls in public BladeCached/static HTML would expose editor internals to anonymous visitorsFrontend authoring beacon after authenticated admin response.
Include model IDs, field paths, permissions, selectors, package names, or signed admin URLs in public HTMLLeaks admin structure and breaks public cache safetyPass only public render data to views.
Query models or lazy-load relationships in public BladeHidden N+1s and unsafe fallback stateHydrate data in Actions, controllers, Livewire, composers, or view components.
Let render hooks output diagnostics or admin stateHooks run inside public pagesKeep hooks public-only and test anonymous output.
Do notWhyUse instead
Patch host package classes from an extensionBreaks upgrades and package isolationDocumented contracts, registries, tags, Actions, and Data.
Register Filament resources from frontend providersFrontend requests should not boot admin UIAdmin provider or AdminBridge.
Write database state from service providersProviders run in too many contexts and during cache/build commandsInstall/setup Actions and idempotent migrations.
Keep app-specific model dependencies in reusable packagesPackage cannot be installed independentlyContracts, config, or app glue in the app.
Add dependencies for small helpersLarger install surface and harder upgradesLaravel/core helpers unless the dependency owns a real domain.
Do notWhyUse instead
Publish core schemas to customize fieldsCopies internal files and breaks future Capell changesSchema extenders and AdminBridge.
Put business logic in Filament pages/resourcesHard to test and reuseActions and Data objects.
Use static Filament label properties for user-facing stringsBypasses translation conventionsMethod overrides returning translation keys.
Register package settings in the core Settings screen by handHard to audit package ownershipSettings registry and package-owned extension pages.
Do notWhyUse instead
Build cache keys directly in BladeInvalidation cannot find them reliably@cache with surrogate keys or package cache helpers.
Use wildcard invalidation firstCan flush too much output on busy sitesExact keys/dependencies, then broader patterns only when needed.
Serve static cache during Lockdown/maintenancePublic users may see stale unsafe pagesEnsure lockdown and maintenance bypass stale static files.
Do notWhyUse instead
Treat Marketplace metadata as trusted executable codeRemote product data is not code reviewInstall packages through Composer/deploy workflow and normal package tests.
Expose instance IDs, signing secrets, licence keys, or challenge tokensThey are secrets or trust materialKeep them in encrypted columns/log-safe diagnostics.
Assume catalogue browsing means install authorization will passInstall has entitlement, domain, instance, and compatibility checksRun account connection, diagnostics, heartbeat, and authorization flow.
Do notWhyUse instead
Only test through HTTP when the behavior lives in an ActionSlow tests and unclear failuresTest Actions directly; test UI only for orchestration.
Mock every package boundary in cross-system featuresMocks miss provider/config/table mistakesUse real package providers and real data where integration matters.
Test public output only for expected contentLeaks are absence failuresAssert forbidden admin markers are absent.