Customer Portal
Package docs status
Section titled “Package docs status”This page is generated from package source documentation in the Capell packages repository and the checked-in manifest. Source documentation is not distribution status. Before running a Composer command, verify that the exact package and compatible 1.x release are available through public Packagist or the authenticated marketplace account.
| Field | Value |
|---|---|
| Composer package | capell-app/customer-portal |
| Package slug | customer-portal |
| Product group | Capell Commerce |
| Tier | premium |
| Bundle | commerce |
| Runtime contexts | admin, frontend |
| Capell version | ^1.0 |
| Source repository | capell-app/packages |
| Source path | packages/customer-portal |
| Docs source | packages/customer-portal/docs |
| Manifest | capell.json |
What This Plugin Adds
Section titled “What This Plugin Adds”Customer Portal is an Available, Schema-owning Capell package in the Capell Commerce product group. It ships as capell-app/customer-portal and extends these surfaces: admin, frontend.
Customer Portal adds an authenticated account dashboard, package-contributed self-service items and preferences, and a support request workflow.
Signed-in customers manage profile details and preferences and follow support requests, while staff triage those requests in a site-scoped admin resource.
Evidence: capell.json, routes/web.php, src/Actions/ResolvePortalDashboardItemsAction.php, src/Actions/SubmitSupportRequestAction.php, docs/overview.admin.md, docs/screenshots.json, tests/Feature/Frontend/CustomerPortalFrontendTest.php, tests/Feature/Admin/PortalSupportRequestResourceScopeTest.php.
Status details:
- Status: Available
- Tier: premium
- Bundle: commerce
- Composer package:
capell-app/customer-portal - Namespace:
Capell\CustomerPortal - Theme key: not applicable
Why It Matters
Section titled “Why It Matters”For developers: Typed provider contracts let companion packages contribute dashboard, profile, preference, and self-service data without changing the portal controller or views.
For teams: Customers get a consistent private account area, and staff get a clear status and priority workflow for incoming support requests.
Evidence: src/Contracts/PortalDashboardItemProvider.php, src/Contracts/PortalPreferencesProvider.php, src/Contracts/PortalSelfServiceItemProvider.php, src/Support/PortalSelfServiceItemRegistry.php, docs/admin-guide.md, src/Filament/Resources/PortalSupportRequests/PortalSupportRequestResource.php, src/Actions/UpdateSupportRequestStatusAction.php, docs/screenshots.json.
Screens And Workflow
Section titled “Screens And Workflow”Screenshot contract: docs/screenshots.json.


- Customer portal frontend dashboard (frontend, required).
- Customer portal preferences and support form (frontend, required).
- Customer portal support triage admin list (frontend, required).
- Customer portal support triage edit screen (frontend, required).
- Customer portal account settings (frontend, optional).
- Customer portal support request thread (frontend, optional).
Technical Shape
Section titled “Technical Shape”- Service providers:
Capell\CustomerPortal\Providers\CustomerPortalServiceProvider,Capell\CustomerPortal\Providers\AdminServiceProvider. - Config files:
packages/customer-portal/config/capell-customer-portal.php. - Migrations:
packages/customer-portal/database/migrations/2026_05_31_150000_01_create_portal_accounts_table.php,packages/customer-portal/database/migrations/2026_05_31_150000_02_create_portal_support_requests_table.php,packages/customer-portal/database/migrations/2026_06_06_000001_create_portal_support_request_replies_table.php. - Models:
PortalAccount,PortalSupportRequest,PortalSupportRequestReply. - Filament classes:
EditPortalSupportRequest,ListPortalSupportRequests,PortalSupportRequestResource. - Route files:
packages/customer-portal/routes/web.php. - Policies:
PortalSupportRequestPolicy. - Extension contracts:
PortalDashboardItemProvider,PortalPreferencesProvider,PortalProfileProvider,PortalSelfServiceItemProvider. - Events:
PortalSupportRequestStatusChanged,PortalSupportRequestSubmitted. - Actions:
AddSupportRequestReplyAction,BuildPortalPrivacyExportAction,ErasePortalPrivacyDataAction,FindOrCreatePortalAccountAction,ResolveAuthenticatedPortalAccountAction,ResolvePortalDashboardItemsAction,ResolvePortalPreferenceOptionsAction,ResolvePortalPrivacyRecordIdsAction,ResolvePortalProfileAction,ResolvePortalSelfServiceItemsAction,SubmitSupportRequestAction,UpdatePortalPreferencesAction,and 1 more. - Data objects:
PortalAccountIdentityData,PortalDashboardItemData,PortalPreferenceOptionData,PortalPreferencesData,PortalPrivacyRecordIdsData,PortalProfileData,PortalSelfServiceItemData,SupportRequestData. - Manifest action API:
addSupportRequestReply: Capell\CustomerPortal\Actions\AddSupportRequestReplyAction,findOrCreatePortalAccount: Capell\CustomerPortal\Actions\FindOrCreatePortalAccountAction,resolvePortalDashboardItems: Capell\CustomerPortal\Actions\ResolvePortalDashboardItemsAction,resolvePortalPreferenceOptions: Capell\CustomerPortal\Actions\ResolvePortalPreferenceOptionsAction,resolvePortalProfile: Capell\CustomerPortal\Actions\ResolvePortalProfileAction,resolvePortalSelfServiceItems: Capell\CustomerPortal\Actions\ResolvePortalSelfServiceItemsAction,submitSupportRequest: Capell\CustomerPortal\Actions\SubmitSupportRequestAction,updatePortalPreferences: Capell\CustomerPortal\Actions\UpdatePortalPreferencesAction. - Manifest contributions:
admin-resource: Capell\CustomerPortal\Manifest\PortalSupportRequestResourceContribution,model: Capell\CustomerPortal\Manifest\CustomerPortalModelsContribution,route: Capell\CustomerPortal\Manifest\CustomerPortalFrontendRoutesContribution. - Health checks:
Capell\CustomerPortal\Health\CustomerPortalHealthCheck. - Blade views:
packages/customer-portal/resources/views/dashboard.blade.php. - Cache tags:
customer-portal.
Data Model
Section titled “Data Model”- Required tables:
portal_accounts,portal_support_requests,portal_support_request_replies. - Models:
PortalAccount,PortalSupportRequest,PortalSupportRequestReply. - Core record references in migrations:
sites via site_id. - Migration files:
2026_05_31_150000_01_create_portal_accounts_table.php,2026_05_31_150000_02_create_portal_support_requests_table.php,2026_06_06_000001_create_portal_support_request_replies_table.php. - Migration impact: run host migrations through the package install flow before opening package surfaces.
- Deletion/retention behaviour: migrations declare cascade-on-delete relationships; no timed pruning or retention schedule is declared in
capell.json.
Install Impact
Section titled “Install Impact”- Required packages:
capell-app/admin,capell-app/core. - Admin navigation: declares
admin-resource: PortalSupportRequestResourceContribution; each Filament page or resource controls its own navigation visibility. - Admin/editor extensions: none declared.
- Permissions:
ViewAny:PortalSupportRequest,View:PortalSupportRequest,Update:PortalSupportRequest. - Public routes: loads
routes/web.php; registersCustomerPortalFrontendRoutesContribution. - Database changes: package migrations are declared.
- Config:
config/capell-customer-portal.php. - Settings: no package settings declared.
- Queues or schedules: none declared.
- Cache tags:
customer-portal. - Commands: none declared.
Common Pitfalls
Section titled “Common Pitfalls”- Keep required Capell packages on compatible v4 releases:
capell-app/admin,capell-app/core. - Run migrations before opening package resources or public routes.
- Review package configuration before production-like verification:
config/capell-customer-portal.php. - Review middleware, throttling, signatures, and public-output safety in
routes/web.phpbefore exposing routes. - Keep public Blade and cached HTML free of authoring markers, model IDs, permissions, signed editor URLs, and lazy database queries.
- Custom write integrations must preserve invalidation for
customer-portalcache tags.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Likely cause | Check | Fix |
|---|---|---|---|
| Package surface is missing after install | Provider or manifest is not loaded | Confirm capell.json, package composer.json, and provider registration | Reinstall the package, refresh Composer autoload, and clear host caches |
| Admin screen or command fails on missing table | Package migrations have not run | Check the tables listed in Data Model | Run host migrations and rerun the focused package test |
| Route returns unexpected output | Route cache, middleware, or signed URL setup does not match the package route file | Check the route files listed in Technical Shape | Clear route cache and verify middleware before exposing public routes |
| Public output leaks unexpected state | Render data, cache variation, or authoring boundary has regressed | Check public Blade, cache tags, and public-output safety tests | Move data loading out of Blade and rerun the package public-output tests |
Quick Start
Section titled “Quick Start”- Install the package:
composer require capell-app/customer-portal. - Run the required setup:
php artisan migrate. - Open the Customer portal frontend dashboard and confirm the public output renders without admin state.
Next Steps
Section titled “Next Steps”- Package docs
- Overview
- Admin guide
- Configuration files:
config/capell-customer-portal.php. - Troubleshooting
- Screenshot contract
- Marketplace assets
- Capell content language plan
- Capell documentation design system
- Capell and package ERD notes
- Related packages: Access Gate, Contacts, Document Lifecycle, Events, Newsletter, Payments, Privacy Center.
- Focused tests:
vendor/bin/pest packages/customer-portal/tests --configuration=phpunit.xml.