TeamKit v5
Teamkit is a robust starter kit, designed to accelerate the development of modern web applications with a ready-to-use multi-panel structure.
Author:
Jefferson Gonçalves
Documentation
- About TeamKit
- Features
- System Requirements
- Installation
- Installation with Docker
- Authentication Structure
- Teams – Multitenancy in the App Panel
- Development
- Customization
- Resources
- License
- Credits

#About TeamKit
TeamKit is a robust starter kit built on Laravel 13.x and Filament 5.x, designed to accelerate the development of modern web applications with a ready-to-use multi-panel structure.
#Features
- Laravel 13.x - The latest version of the most elegant PHP framework
- Filament 5.x - Powerful and flexible admin framework
- Multi-Panel Structure - Includes three pre-configured panels:
- Admin Panel (
/admin) - For system administrators - App Panel (
/app) - For authenticated application users - Public Panel (frontend interface) - For visitors
- Admin Panel (
- Teams (Multitenancy) - Team management with registration, profile, and team switching directly in the App panel
- Environment Configuration - Centralized configuration through the
config/teamkit.phpfile
#System Requirements
- PHP 8.3 or higher
- Composer
- Node.js and PNPM
#Installation
Clone the repository
laravel new my-app --using=jeffersongoncalves/teamkitv5 --database=mysql
#Using FilaKit CLI
Or use FilaKit CLI for a simplified setup:
filakit new my-app --kit=jeffersongoncalves/teamkitv5
Install FilaKit CLI:
composer global require jeffersongoncalves/filakit-cli
#Easy Installation
TeamKit can be easily installed using the following command:
php install.php
This command automates the installation process by:
- Installing Composer dependencies
- Setting up the environment file
- Generating application key
- Setting up the database
- Running migrations
- Installing Node.js dependencies
- Building assets
- Configuring Herd (if used)
#Manual Installation
Install JavaScript dependencies
pnpm install
Install Composer dependencies
composer install
Set up environment
cp .env.example .env
php artisan key:generate
Configure your database in the .env file
Run migrations
php artisan migrate
Run the server
php artisan serve
#Installation with Docker
Clone the repository
laravel new my-app --using=jeffersongoncalves/teamkitv5 --database=mysql
Move into the project directory
cd my-app
Install Composer dependencies
composer install
Set up environment
cp .env.example .env
Configuring custom ports may be necessary if you have other services running on the same ports.
# Application Port (ex: 8080)
APP_PORT=8080
# MySQL Port (ex: 3306)
FORWARD_DB_PORT=3306
# Redis Port (ex: 6379)
FORWARD_REDIS_PORT=6379
# Mailpit Port (ex: 1025)
FORWARD_MAILPIT_PORT=1025
Start the Sail containers
./vendor/bin/sail up -d
You won’t need to run php artisan serve, as Laravel Sail automatically handles the development server within the container.
Attach to the application container
./vendor/bin/sail shell
Generate the application key
php artisan key:generate
Install JavaScript dependencies
pnpm install
#Authentication Structure
TeamKit comes pre-configured with a custom authentication system that supports different types of users:
Admin- For administrative panel accessUser- For application panel access
#Teams – Multitenancy in the App Panel
Teamkit includes native support for Teams (multitenancy) in the application panel (/app). This allows you to isolate data by team and provide a multi‑company/multi‑project experience.
Key points:
- Team model:
App\Models\Teamwith fieldsuser_id(owner),name, andpersonal_team. - Current user and current team: the user has
current_team_idand helper methods for team management. - Tenancy in Filament: the App panel is configured with tenant
Team::class, tenant route prefixteam, a team registration page, and a team profile page.
URLs and navigation:
- App panel:
/app - Team registration:
/app/team/register(also accessible via the user menu under Tenancy) - Team profile: accessible from the Tenancy menu when a team is selected (e.g.,
/app/team/{id}/profile– managed by Filament) - Team switcher: appears at the top of the panel when the user belongs to 2+ teams.
Creating and managing teams:
- Register a team: at
/app/team/register, enter the team name. The authenticated user becomes the team owner (user_id). - Edit team profile: via the “Team profile” page, allowing you to change the team
name. - Switch teams: use the switcher at the top of Filament. Programmatically:
$user->switchTeam($team).
User ↔ team association:
- Team owner: the creator is the owner (field
user_id). - Members: the many‑to‑many relationship
User::teams()/Team::users()uses the pivot represented byApp\Models\Membership. - Access rules:
User::canAccessTenant($tenant)validates whether the user belongs to the team (owner or member). TheUser::getTenants()method returns the list for the switcher.
Team invitations (new):
- Invite members from the Team profile page: add emails in the Invitations list. The system prevents duplicates if the email already belongs to the team (owner or member) and enforces uniqueness per team.
- Pending invitations are listed for the invited user in the App panel user menu under “Invitations”. From there, the user can Accept (joins the team immediately) or Cancel (declines) each invite.
- On acceptance, the user is attached to the team membership and the invitation is removed. Declining deletes the invitation without adding the user.
- Admins can view/manage all invitations via the Admin panel resource “Team Invitations”.
Team‑scoped data:
- Middleware:
App\Http\Middleware\ApplyTenantScopesis prepared for you to apply global scopes to your models, for example:// Example (uncomment and adapt): // SomeModel::addGlobalScope( // fn (Builder $query) => $query->whereBelongsTo(Filament::getTenant()), // ); - Adapt your Resources/queries to always consider the current tenant when applicable.
Relevant migrations:
database/migrations/0001_01_01_000005_create_teams_table.php- Creates the
teamstable with:id,user_id(indexed),name, andpersonal_team(boolean), plus timestamps.
- Creates the
database/migrations/0001_01_01_000007_create_team_invitations_table.php- Creates the
team_invitationstable to store pending invitations per team and email.
- Creates the
Filament pages related to Teams:
- Registration:
App\Filament\App\Pages\Tenancy\RegisterTeam(usesFilament\Pages\Tenancy\RegisterTenant). - Profile:
App\Filament\App\Pages\Tenancy\EditTeamProfile(usesFilament\Pages\Tenancy\EditTenantProfile). - Invitations:
App\Filament\App\Pages\TeamInvitationAccept— user menu → “Invitations” in the App panel.
App panel configuration (summary):
App\Providers\Filament\AppPanelProvider->tenant(Team::class)->tenantRoutePrefix('team')->tenantRegistration(RegisterTeam::class)->tenantProfile(EditTeamProfile::class)- Adds a user menu item “Invitations” linking to
TeamInvitationAccept::getUrl()when a team is active ->tenantMiddleware([ApplyTenantScopes::class], isPersistent: true)
Tips:
- When creating new Models/Resources that should be isolated by team, remember to relate them to
Teamand apply the scope in the middleware or in your queries. - If you need to define a default team,
User::currentTeamis resolved automatically ifcurrent_team_idis empty (it falls back to the personal team if it exists).
#Development
# Run the development server with logs, queues and asset compilation
composer dev
# Or run each component separately
php artisan serve
php artisan queue:listen --tries=1
pnpm run dev
#Customization
#Panel Configuration
Panels can be customized through their respective providers:
app/Providers/Filament/AdminPanelProvider.phpapp/Providers/Filament/AppPanelProvider.phpapp/Providers/Filament/PublicPanelProvider.php
Alternatively, these settings are also consolidated in the config/teamkit.php file for easier management.
#Themes and Colors
Each panel can have its own color scheme, which can be easily modified in the corresponding Provider files or in the
teamkit.php configuration file.
#Configuration File
The config/teamkit.php file centralizes the configuration of the starter kit, including:
- Panel routes
- Middleware for each panel
- Branding options (logo, colors)
- Authentication guards
#Resources
TeamKit includes support for:
- User and admin management
- Multi-guard authentication system
- Tailwind CSS integration
- Database queue configuration
- Customizable panel routing and branding
#License
This project is licensed under the MIT License.
#Credits
Developed by Jefferson Gonçalves.
The author
From the same author
Hidden Action
A hidden action that allows you to define it without rendering it in the UI.
Author:
Jefferson Gonçalves
Whatsapp Widget
Provides a simple yet customizable WhatsApp widget for your website.
Author:
Jefferson Gonçalves
Topbar
Automatically adds a customized topbar to your Filament admin panel. This plugin enhances your panel's user experience by replacing the default topbar component with an improved version that displays navigation and user interface elements in strategic locations.
Author:
Jefferson Gonçalves
Pixel
Seamlessly integrates Meta Pixel analytics into your Blade templates. Using your Meta Pixel ID, it enables easy tracking of website visits and user interactions, providing valuable insights into your audience and website performance.
Author:
Jefferson Gonçalves
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese