eavio / project-board
Advanced Kanban Project Board resource tool for Laravel Nova with full Trello import support, drag-and-drop boards, task tracking, deadlines, assignees, labels, comments, file attachments, checklists, and real-time activity feed.
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Language:Vue
Type:laravel-nova-tool
pkg:composer/eavio/project-board
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/support: ^10.0|^11.0|^12.0
- laravel/nova: ^5.0
- spatie/laravel-medialibrary: ^10.15|^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.0
README
A powerful, feature-rich Kanban board resource tool for Laravel Nova, designed to manage projects, tasks, and workflows seamlessly within your Nova administration panel.
🚀 Features
-
Interactive Kanban Board
- Drag & Drop: Smoothly move cards between columns and reorder them within columns.
- Column Management: Create, rename, and delete columns easily.
- Inline Editing: Quick-add cards and rename columns/cards directly from the board view.
-
Rich Card Details
- Descriptions: Full markdown support for detailed task descriptions.
- Checklists: Create multiple checklists with progress tracking.
- Attachments: Drag-and-drop file uploads with preview support.
- Activity & Comments: Real-time activity logging and commenting system with user attribution.
- Due Dates: Set due dates with visual status indicators (Overdue, Complete).
-
Organization & Search
- Labels: Color-coded labelling system (Trello-style) for easy visual categorization.
- Assignees: Assign users to cards with avatar previews.
- Advanced Search: Integrated search bar to find cards, comments, and attachments instantly.
- Filtering: Filter by user, label, or due date (Coming soon).
-
Native Nova Experience
- Dark Mode Support: Fully compatible with Nova's dark mode.
- Responsive: Optimized for various screen sizes.
- Resource Integration: Can be attached as a
ResourceToolto specific resources (e.g.,Project) or used as a standalone Tool page.
-
Import from Trello
- Full Board Import: Import entire Trello boards including lists, cards, labels, checklists, and comments.
- Queued Processing: Large boards are imported via background jobs to prevent timeouts.
- Progress Tracking: Nova notifications keep you informed of import status.
- Attachment Support: Attachments are downloaded and stored via Spatie MediaLibrary.
-
External API
- REST API: Full API for external integrations (ChatGPT, Zapier, etc.)
- OpenAPI 3.1: Auto-generated specification for easy integration
- Token Management: Create and manage API tokens directly from Nova UI
📦 Installation
Requirements
- PHP 8.1+
- Laravel 10, 11, or 12
- Laravel Nova 5.0+
- Spatie Laravel MediaLibrary 10.15+
Step 1: Install via Composer
composer require eavio/project-board
Note: This package requires Laravel Nova, which is a commercial product. You must have a valid Nova license and the Nova composer repository configured.
Step 2: Run Migrations
php artisan migrate
Or publish and customize migrations first:
php artisan vendor:publish --tag=project-board-migrations php artisan migrate
Step 3: Register the Tool
Add the tool to your NovaServiceProvider.php:
use Eavio\ProjectBoard\ProjectBoard; public function tools() { return [ new ProjectBoard, ]; }
Step 4 (Optional): Attach to a Resource
To display a project board on a specific resource (e.g., Company, Project):
use Eavio\ProjectBoard\ProjectBoardResourceTool; public function fields(Request $request) { return [ // ... other fields ProjectBoardResourceTool::make(), ]; }
Step 5: Route Configuration
Important: If your application has catch-all routes (e.g., /{slug}), you must exclude api and project-board from those patterns to prevent route conflicts:
// In routes/web.php - add 'api' and 'project-board' to your pattern exclusions Route::pattern('slug', '^(?!console|nova|api|project-board).*');
Without this, requests to /api/project-board/* may be incorrectly matched by catch-all routes and return 404 errors.
🛠 Usage
Creating a Board
Navigate to the "Projects Board" tool in the Nova sidebar. Click "Create Board" to start a new project board.
Managing Cards
- Add Card: Click the "+ Add a card" button at the bottom of any column.
- Edit Details: Click on any card to open the detailed modal view.
- Move: Drag cards between columns to change their status.
Search
Use the search bar in the top right to quickly filter cards across all columns. The search indexes titles, descriptions, and comments.
Importing from Trello
You can import entire Trello boards into Project Board:
-
Export from Trello:
- Open your Trello board
- Click "..." menu → "More" → "Print and export"
- Select "Export as JSON"
-
Import into Project Board:
- Open Project Board in Nova
- Click the dropdown menu (⋮)
- Select "Import from Trello"
- Upload the JSON file
- Click "Start Import"
-
What gets imported:
- Board name and description
- All lists (as columns) with correct ordering
- All cards with title, description, due dates, and position
- Labels (mapped by color)
- Checklists with items and completion state
- Comments (as activity entries)
- External attachments (downloaded to your storage)
Note: The import runs as a background job. For large boards (300+ cards), this may take several minutes. You'll receive a Nova notification when the import completes.
🔌 External API
Project Board includes a full REST API for external integrations (ChatGPT, Zapier, custom apps, etc.).
API Authentication
The API uses Bearer token authentication. There are two ways to create tokens:
Option 1: Via Nova UI (Recommended)
- Open Projects Board in Nova
- Click the dropdown menu (⋮) next to the board name
- Select "API Tokens"
- Click "Create New Token"
- Copy the token immediately (it won't be shown again)
Option 2: Via API (requires Sanctum auth)
POST /api/project-board/tokens
{
"name": "My Integration",
"abilities": ["*"],
"expires_at": "2025-12-31"
}
Using the Token
Include the token in your API requests:
Authorization: Bearer your-token-here
OpenAPI Specification
An OpenAPI 3.1 specification is available for ChatGPT Actions and other integrations:
- Dynamic endpoint:
/project-board/openapi.json(auto-detects your domain) - Static file:
public/openapi/project-board.json
To use with ChatGPT:
- Go to your GPT's Actions settings
- Import the OpenAPI spec from
https://your-domain.com/project-board/openapi.json - Set up authentication with a Bearer token
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/project-board/boards |
List all accessible boards |
| POST | /api/project-board/boards |
Create a new board |
| GET | /api/project-board/boards/{id} |
Get board details |
| PATCH | /api/project-board/boards/{id} |
Update a board |
| POST | /api/project-board/boards/{id}/columns |
Create a column |
| POST | /api/project-board/boards/{id}/columns-with-cards |
Create column with cards |
| POST | /api/project-board/boards/{id}/cards/bulk |
Bulk create cards |
| PATCH | /api/project-board/boards/{id}/cards/bulk-update |
Bulk update cards |
| GET | /api/project-board/cards/search |
Search cards |
| GET | /api/project-board/cards/{id} |
Get card details |
| POST | /api/project-board/cards |
Create a card |
| PATCH | /api/project-board/cards/{id} |
Update a card |
| DELETE | /api/project-board/cards/{id} |
Delete a card |
| POST | /api/project-board/cards/{id}/move |
Move card to column |
| POST | /api/project-board/cards/{id}/comments |
Add comment |
| POST | /api/project-board/cards/{id}/attachments |
Add attachment via URL |
| PATCH | /api/project-board/columns/{id} |
Update a column |
| DELETE | /api/project-board/columns/{id} |
Delete a column |
User Model Setup
Add the API tokens relationship to your User model:
// In app/Models/User.php public function apiTokens() { return $this->hasMany(\Eavio\ProjectBoard\Models\UserApiToken::class); }
This relationship is required for the token management functionality to work.
⚙️ Configuration
Publish the config file:
php artisan vendor:publish --tag=project-board-config
Available options in config/project-board.php:
return [ 'user_model' => \App\Models\User::class, 'api' => [ 'enabled' => true, 'rate_limit' => 60, ], 'unsplash' => [ 'access_key' => env('UNSPLASH_ACCESS_KEY'), ], ];
📝 License
This project is open-sourced software licensed under the MIT license.
🙏 Credits
- eAvio Aero
- Spatie for Laravel MediaLibrary
- Laravel Nova
🐛 Issues & Contributing
Please report issues on GitHub.