A collaborative project and task management platform featuring Kanban boards, team collaboration, rich task management, and automated workflows. Built with Laravel 12, Livewire 4, and Flux UI Pro.
Antiboard is a modern project management tool designed for teams and individuals who need powerful, flexible task organization. It combines the simplicity of Kanban boards with advanced collaboration features, making it perfect for software development, marketing campaigns, or any project that benefits from visual task tracking.
With real-time updates, rich task details, and automated workflows like auto-closing stale tasks, Antiboard helps teams stay organized and focused on what matters most.
- Team Management: Create and manage multiple teams for different projects or clients
- Member Roles: Invite team members with owner and admin roles for granular permissions
- Shareable Invitation Codes: Generate unique codes for team access with configurable usage limits
- Personal Workspaces: Support for individual projects separate from team collaboration
- Project Creation: Organize work into projects within teams with unique, shareable handles
- Access Control: Restrict project access to specific team members for sensitive work
- Project Settings: Configure per-project settings including auto-close rules
- Project Numbers: Auto-incrementing task numbers per project (e.g.,
myproject-123)
- Drag-and-Drop Interface: Intuitive task movement between sections with visual feedback
- Custom Sections: Create unlimited sections to match your workflow (e.g., Backlog, In Review, QA)
- Color-Coded Sections: Assign colors to sections for better visual organization
- Sortable Columns: Reorder sections to match your preferred layout
- Multiple Task States: Pending, In Progress (custom sections), Completed, and Closed
- Task Prioritization: Mark important tasks as priority for quick identification
- Rich Text Descriptions: Create detailed task descriptions using Tiptap editor
- Task Images: Attach screenshots and files directly to tasks
- Task Subscriptions: Follow specific tasks to receive notifications on updates
- Comments: Threaded discussions with teammates for each task
- Image Attachments: Add images to comments for clearer communication
- Checklists: Break down tasks into actionable checklist items
- Tags: Organize tasks with team-wide tags for filtering and categorization
- Multiple Assignees: Assign tasks to multiple team members
- Comment Editing: Track edits with timestamps and editor information
- Save Tasks: Bookmark important tasks for quick access
- Browse Saved Tasks: Dedicated page to view all saved tasks across projects
- Team Filtering: View saved tasks filtered by team
- Task Updates: Receive notifications when tasks are completed, closed, or reopened
- Comment Notifications: Get alerted when new comments are added to subscribed tasks
- Real-time Updates: Stay synchronized with team activity
- Team-Level Settings: Configure auto-close days at the team level as a default
- Project Overrides: Override team settings per project for different workflows
- Scheduled Cleanup: Automatically close tasks that have been inactive for too long
- Dry-Run Mode: Preview which tasks would be closed before executing
- Authentication: Secure login and registration with email verification
- Magic Links: Easy device login using shareable, time-limited links
- Profile Photos: Personalize your account with avatar images
- Device Management: View and manage all logged-in devices
- Account Settings: Customize profile information and appearance preferences
Screenshots coming soon!
- Laravel 12: Modern PHP framework with elegant syntax and powerful features
- PHP 8.2+: Latest PHP features and performance improvements
- Tiptap PHP: Rich text editor for task descriptions
- Pest PHP: Elegant testing framework
- Livewire 4: Full-stack framework for dynamic interfaces without complex JavaScript
- Flux UI Pro: Premium UI components for modern, responsive design
- Tailwind CSS 4: Utility-first CSS framework for rapid styling
- Vite: Lightning-fast build tool for frontend assets
- SQLite: Default for development (simple, no setup required)
- MySQL/PostgreSQL: Supported for production environments
- Spatie Laravel One-Time Passwords: Magic link authentication
- Spatie Laravel Login Link: Secure, shareable login URLs
- Laravel Pint: Automatic PHP code formatting
- Prettier: Code formatting for Blade templates
- Husky: Git hooks for code quality
- Duster: Comprehensive code quality tool
- Laravel Debugbar: Development debugging and profiling
- Server Timing: Performance monitoring
- Honeybadger: Error tracking and monitoring
Note: This project requires a Flux UI Pro license. You can purchase one at fluxui.dev.
- PHP 8.2 or higher
- Composer 2.x
- Node.js 18+ and npm
- SQLite 3, MySQL 5.7+, or PostgreSQL 10+
- Web server (Apache, Nginx, or Laravel Valet for local development)
git clone https://github.com/antihq/antiboard.git
cd antiboardInstall backend dependencies with Composer:
composer installInstall frontend dependencies with npm:
npm installCopy the example environment file:
cp .env.example .envGenerate the application key:
php artisan key:generateBy default, Antiboard uses SQLite for development. No additional configuration is needed.
If you prefer MySQL or PostgreSQL, update your .env file:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=antiboard
DB_USERNAME=your_username
DB_PASSWORD=your_passwordRun the database migrations:
php artisan migrateOptionally, seed the database with sample data:
php artisan db:seedIn one terminal, start the Vite development server:
npm run devIn another terminal, start the Laravel server:
php artisan serveOr use the all-in-one command to start everything (server, queue, logs, Vite):
composer devOpen your browser and navigate to:
http://localhost:8000
Create your first user account and start building!
Key environment variables in .env:
APP_NAME: Application nameAPP_ENV: Environment (local, production, etc.)APP_URL: Application URLAPP_DEBUG: Enable/disable debug mode (false in production)DB_CONNECTION: Database type (sqlite, mysql, pgsql)DB_*: Database connection settingsMAIL_*: Mail configuration for notificationsQUEUE_CONNECTION: Queue driver (database, redis, etc.)
For MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=antiboard
DB_USERNAME=root
DB_PASSWORD=your_passwordFor PostgreSQL:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=antiboard
DB_USERNAME=postgres
DB_PASSWORD=your_passwordTo enable email notifications (magic links, task notifications), configure your mail settings:
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"For better performance with notifications, configure a queue:
QUEUE_CONNECTION=databaseThen run the queue worker:
php artisan queue:work-
Create Your First Team: After registration, you'll have a personal team. Create additional teams for different projects or clients.
-
Create a Project: Within your team, create a project to organize tasks.
-
Add Sections: Create custom sections for your Kanban board (e.g., "To Do", "In Progress", "Review").
-
Create Tasks: Add tasks to your project with titles, descriptions, and assign them to team members.
-
Invite Team Members: Share your team's invitation code to bring collaborators on board.
- Click "Add task" to create a new task in the Pending section
- Fill in task details including title, description, tags, and assignees
- Drag tasks to different sections as they progress through your workflow
- Use priorities to mark important tasks
- Subscribe to tasks you want to follow
- Drag and drop tasks between sections
- Click the "Add section" button to create new columns
- Reorder sections by dragging their headers
- Color-code sections for better visual organization
- Go to Team Settings > Members
- Copy the invitation code or generate a new one
- Share the code with team members via:
{team-handle}/join/{invitation-code} - Manage member roles (owner/admin) in the members list
- Navigate to Team Settings > Auto-Close or Project Settings > Auto-Close
- Set the number of days of inactivity before tasks auto-close
- Project settings override team settings
- Preview auto-close with the dry-run command:
php artisan app:auto-close-tasks --dry-run
Run the entire test suite:
composer testOr use Pest directly:
./vendor/bin/pestRun specific test files:
./vendor/bin/pest tests/Feature/TaskTest.phpFormat PHP code with Laravel Pint:
./vendor/bin/pintFormat Blade templates with Prettier:
npm run format-bladeFormat all code at once:
composer formatStart all development services in one command:
composer devThis starts:
- Laravel server (port 8000)
- Queue worker
- Log viewer (Pail)
- Vite development server
Available custom commands:
# Auto-close inactive tasks
php artisan app:auto-close-tasks
# Preview auto-close without executing
php artisan app:auto-close-tasks --dry-run- Set
APP_ENV=productionandAPP_DEBUG=falsein your.env - Set a secure
APP_KEY(generate withphp artisan key:generate) - Configure your production database
- Set your production
APP_URL
Optimize your application for production:
php artisan config:cache
php artisan route:cache
php artisan view:cacheFor production, run the queue worker with proper process management:
php artisan queue:work --tries=3 --timeout=90Use Supervisor or systemd for process monitoring.
Add the Laravel scheduler to your crontab:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1This is required for the auto-close feature to run automatically.
Ensure the following directories are writable by the web server:
storage/bootstrap/cache/
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cacheserver {
listen 80;
server_name your-domain.com;
root /path-to-your-project/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Composer install fails: Update Composer to the latest version:
composer self-updatenpm install fails: Clear npm cache:
npm cache clean --force
rm -rf node_modules package-lock.json
npm installIf you encounter permission errors:
sudo chown -R $USER:$USER .
chmod -R 775 storage bootstrap/cacheSQLite: Ensure the database file exists and is writable:
touch database/database.sqlite
chmod 664 database/database.sqliteMySQL/PostgreSQL: Verify your .env credentials match your database configuration.
If you're logged out frequently, clear the application cache:
php artisan cache:clear
php artisan config:clear
php artisan session:table
php artisan migrateIf CSS/JS doesn't load properly:
npm run build
php artisan view:clearWe welcome contributions to Antiboard! Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Write tests for new functionality
- Ensure all tests pass:
composer test - Format your code:
composer format - Commit your changes: Use clear, descriptive commit messages
- Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request with a clear description of your changes
- Follow PSR-12 coding standards
- Run
./vendor/bin/pintbefore committing - Use meaningful variable and function names
- Add comments for complex logic
- Write tests for all new features
This project is licensed under the O'Saasy License.
Summary:
- ✅ Free to use, modify, and distribute
- ✅ Perfect for internal tools, client projects, and learning
- ❌ Cannot use to compete with the original licensor by offering it as a hosted SaaS product
- ❌ Cannot offer as a managed or cloud service where the primary value is the software itself
See the LICENSE.md file for the full license text.
- Issues: Report bugs and request features via GitHub Issues
- Discussions: Ask questions and share ideas in GitHub Discussions
- Documentation: This README serves as the primary documentation. Additional documentation coming soon!
Built with ❤️ by antihq