afea / filament-positions
Career positions module for the Afea Filament CMS package ecosystem: job listings with SEO, applications, and public routes.
v0.1.0
2026-04-21 10:48 UTC
Requires
- php: ^8.4
- afea/filament-cms-core: @dev
- filament/filament: ^4.0
- illuminate/contracts: ^12.0
- illuminate/database: ^12.0
- illuminate/support: ^12.0
- laravel/prompts: ^0.3
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
README
Career positions module for the Afea Filament CMS package ecosystem.
Ships:
Positionmodel — SEO-enabled, supports slug/resource/localized routing, carries a free-formadditional_fieldsJSON bagPositionApplicationmodel — candidate submissions with CV file (stored on a private disk), status workflow- Three translatable enums:
PositionLocation,PositionType,PositionApplicationStatus - Filament v4
PositionResource+PositionApplicationResource(with pending-badge in navigation) PositionControllerwith list/show/apply actions + shipped Blade viewsPositionsPluginafea:install:positionsinstaller
Installation
composer require afea/filament-positions php artisan afea:install:positions
Register in AdminPanelProvider:
->plugin(\Afea\Cms\Positions\Filament\PositionsPlugin::make())
Set AFEA_POSITIONS_CV_DISK to a private disk — CVs contain candidate PII.
Three common scenarios
1. Switch routing strategy
AFEA_POSITIONS_ROUTING_STRATEGY=localized AFEA_POSITIONS_PREFIX=kariyer
Public URLs move from /careers/developer to /tr/kariyer/developer.
2. Query active positions grouped by department
use Afea\Cms\Positions\Models\Position; $byDepartment = Position::query() ->active() ->with('seo') ->get() ->groupBy('department');
3. Extend the application status workflow
Override the enum via a sub-enum replacement isn't possible, but you can override the model:
class PositionApplication extends \Afea\Cms\Positions\Models\PositionApplication { public function scopeNeedsReview($q) { return $q->pending()->where('created_at', '<', now()->subDays(3)); } }
'models' => ['position_application' => \App\Models\PositionApplication::class],