PHPackages                             afea/filament-positions - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. afea/filament-positions

ActiveLibrary[Admin Panels](/categories/admin)

afea/filament-positions
=======================

Career positions module for the Afea Filament CMS package ecosystem: job listings with SEO, applications, and public routes.

v0.1.0(1mo ago)014↑445.5%MITPHPPHP ^8.4

Since Apr 21Pushed 1mo agoCompare

[ Source](https://github.com/AfeaSoftware/filament-positions)[ Packagist](https://packagist.org/packages/afea/filament-positions)[ RSS](/packages/afea-filament-positions/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (10)Versions (2)Used By (0)

afea/filament-positions
=======================

[](#afeafilament-positions)

Career positions module for the Afea Filament CMS package ecosystem.

Ships:

- `Position` model — SEO-enabled, supports slug/resource/localized routing, carries a free-form `additional_fields` JSON bag
- `PositionApplication` model — 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)
- `PositionController` with list/show/apply actions + shipped Blade views
- `PositionsPlugin`
- `afea:install:positions` installer

Installation
------------

[](#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
----------------------

[](#three-common-scenarios)

### 1. Switch routing strategy

[](#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

[](#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

[](#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', '
