Search by

mikepagedev / filament-portfolio

MikePageDev

Portfolio projects and case studies for Filament panels.

Package info

github.com/MikePageDev/filament-portfolio

pkg:composer/mikepagedev/filament-portfolio

Statistics

Installs: 7

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.1 2026-11-10 10:07 UTC

This package is auto-updated.

Last update: 2026-11-10 10:07:59 UTC


README

Tests Latest version License

Manage portfolio projects and case studies from a Filament panel.

This package is the admin side only. For public portfolio pages, add portfolio-frontend, or read the Project model from your own code.

Projects table

Project form

Requirements

  • PHP 8.5
  • Laravel 13
  • Filament 5.10 or newer, with a panel already set up

Installation

Install the package:

composer require mikepagedev/filament-portfolio

Publish and run the migration, which creates the portfolio_projects table:

php artisan vendor:publish --tag=filament-portfolio-migrations
php artisan migrate

Screenshots are stored on the public disk by default, so link it if you haven't already:

php artisan storage:link

Then register the plugin in your panel provider:

use MikePageDev\FilamentPortfolio\FilamentPortfolioPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(FilamentPortfolioPlugin::make());
}

A Projects item now appears in your panel.

What a project holds

Field Notes
Title Required.
Slug Generated from the title. Lowercase letters, numbers and hyphens.
Summary Short description.
Problem The problem the project solved.
Role The part you played.
Tech List of tags.
Case study Repeating sections, each with a heading and a body.
Screenshots Uploaded images, each with required alt text.
Live URL Link to the live project.
Source URL Link to the source code.
Published Drafts stay in the panel. Can be toggled from the table.
Sort order Set by dragging rows in the table.

Screenshot files are deleted from disk when they are replaced or removed, and when a project is deleted.

Configuration

Publishing the config file is optional:

php artisan vendor:publish --tag=filament-portfolio-config
Key Default Description
disk public Filesystem disk for screenshots. Set it with the PORTFOLIO_DISK env var.
directory portfolio Folder on that disk.

Using the model

use MikePageDev\FilamentPortfolio\Models\Project;

$projects = Project::query()->published()->ordered()->get();

published() keeps only published projects, and ordered() sorts them by the table order. Project::disk() returns the filesystem disk the screenshots are stored on:

$url = Project::disk()->url($project->images[0]['path']);

tech, case_study and images are cast to arrays. Each image has a path and an alt; each case-study section has a heading and a body.

There's a factory for your tests:

Project::factory()->published()->create(['title' => 'Demo App']);

Testing

composer check

This runs the tests (composer test), static analysis (composer stan) and the code style check (composer lint).

Changelog

See CHANGELOG.md.

Credits

Built by Mike Page. Part of a family of Filament packages; portfolio-frontend adds the public pages.

License

MIT. See LICENSE.md.