Getting Started
Admin Panel
Settings
Search for a command to run...
This guide covers the patterns DeepBuilder already uses so your extensions stay consistent.
// app/Livewire/Dashboard/Admin/Reports/ReportsComponent.php
namespace App\Livewire\Dashboard\Admin\Reports;
use App\Support\SeoPage;
use Livewire\Attributes\Layout;
use Livewire\Component;
#[Layout('components.layouts.admin')]
class ReportsComponent extends Component
{
public function mount(): void
{
abort_unless(auth()->user()->can('reports.view_any'), 403);
SeoPage::admin(__('admin.reports_title'), __('admin.reports_subtitle'));
}
public function render()
{
return view('livewire.dashboard.admin.reports.reports');
}
}{{-- resources/views/livewire/dashboard/admin/reports/reports.blade.php --}}
<div>
<x-deep.heading :title="__('admin.reports_title')" />
{{-- content --}}
</div>// routes/admin.php — inside the admin middleware group
Route::get('reports', ReportsComponent::class)->name('admin.reports.index');Add to database/seeders/PermissionSeeder.php:
'reports.view_any',Run php artisan db:seed --class=PermissionSeeder on staging (or migrate fresh in dev).
Edit app/Livewire/Dashboard/Admin/Includes/SidebarComponent.php and add a menu item gated by @can('reports.view_any'). Add strings to lang/en/admin.php.
Prefer services over fat controllers:
| Extension | Start here |
|---|---|
| New AI tool | App\Services\Builder\ agent/tool registry |
| File operation rules | App\Services\Workspace\ |
| Post-build hook | BuildSession observers or App\Jobs\ |
| Credit charge rules | App\Services\Credits\ |
Workspace HTTP surface:
WorkspaceFileController — read/write filesWorkspaceTerminalController — shell commandsWorkspacePublishController — preview deployBuilderChatStreamController — SSE streamsRegister new routes beside existing ones in routes/admin.php (still under auth middleware).
Builder UI assets live in resources/js/. After changes:
Cross-origin isolated headers are required for WebContainer; keep cross.origin.isolated middleware on builder routes.
package_plans via migrationPackages\Options\EditComponentExtend App\Services\Billing\ handlers. Keep idempotency: PackagePaymentEvent records provider event IDs.
CodeCanyon purchase validation uses App\Services\License\ and config/license.php. Custom license servers should implement the same interface used by LicenseController.
Copy existing modules such as Users, Packages, or Pages when adding admin features. Use App\Livewire\Dashboard\Admin\ namespaces and routes/admin.php.
php artisan testAdd feature tests for permissions (403 without ability) and API authorization on workspace routes (users cannot access another user's projectUuid).