A modern, full-featured team collaboration and project management platform built with Laravel 12 and React.
Features β’ Tech Stack β’ Installation β’ Docker β’ Usage β’ API β’ Testing
- User Registration & Login - Secure authentication with Laravel Fortify
- Two-Factor Authentication (2FA) - Optional TOTP-based 2FA for enhanced security
- Password Reset - Email-based password recovery
- Email Verification - Verify user email addresses
- Role-Based Access Control - Admin, Manager, and Member roles
- Create & Manage Teams - Organize users into collaborative teams
- Team Roles - Owner, Admin, and Member roles with different permissions
- Team Invitations - Invite users via email with expiring invitation links
- Member Management - Add, remove, and update member roles
- Team Dashboard - Overview of team activity and statistics
- Project CRUD - Create, read, update, and delete projects
- Project Members - Assign team members to specific projects
- Project Roles - Lead, Technical Lead, and Member roles
- Soft Deletes - Recover accidentally deleted projects
- Kanban Board - Visual task management with drag-and-drop
- Task CRUD - Full task lifecycle management
- Task Status Workflow - Unplanned β Pending β In-Progress β Done
- Priority Levels - Low, Medium, High, and Critical priorities
- Task Assignment - Assign tasks to project members
- Due Dates - Set and track task deadlines
- Labels - Categorize tasks with colored labels
- Comments - Threaded discussions on tasks
- Subtasks - Break down tasks into smaller items
- My Tasks View - Personal task dashboard
- Personal Dashboard - Overview of assigned tasks and team activity
- Team Dashboard - Team-wide statistics and recent activity
- Task Statistics - Track completion rates, overdue tasks, and progress
- Activity Feed - Recent actions across teams and projects
- Global Search - Search across teams, projects, and tasks from anywhere
- Date Range Filtering - Filter tasks by due date with intuitive date picker
- Task Export - Export tasks to CSV or PDF formats
- Audit Logging - Track all user actions for accountability
- Responsive Design - Works on desktop, tablet, and mobile
- Dark Mode - Toggle between light and dark themes
- SPA Experience - Seamless navigation with Inertia.js
- API Documentation - Auto-generated API docs with Scribe
- Docker Support - Containerized development environment
- Type-Safe Routes - Laravel Wayfinder for TypeScript route generation
- Comprehensive Testing - 100+ Pest tests with full coverage
- Code Quality - Laravel Pint and ESLint for consistent code style
| Technology | Version | Purpose |
|---|---|---|
| PHP | 8.4 | Server-side language |
| Laravel | 12.x | PHP Framework |
| Laravel Fortify | 1.x | Authentication backend |
| Laravel Wayfinder | 0.x | TypeScript route generation |
| SQLite | 3.x | Database (configurable) |
| Technology | Version | Purpose |
|---|---|---|
| React | 19.x | UI Library |
| TypeScript | 5.x | Type-safe JavaScript |
| Inertia.js | 2.x | SPA without API |
| Tailwind CSS | 4.x | Utility-first CSS |
| shadcn/ui | Latest | UI Component Library |
| Lucide React | Latest | Icon Library |
| Tool | Purpose |
|---|---|
| Vite | Frontend build tool |
| Pest | PHP Testing Framework |
| Laravel Pint | PHP Code Style Fixer |
| ESLint | JavaScript/TypeScript Linting |
| Scribe | API Documentation Generator |
| pnpm | Package Manager |
| Docker | Containerized Development |
TeamFlow includes a complete Docker development environment for consistent setup across machines.
# Clone and enter the project
git clone https://github.com/AFAskar/TeamFlow.git
cd TeamFlow
# Build and start containers
make setup
# Or manually:
docker compose up -d
docker compose exec app php artisan migrate --seedVisit http://localhost:8000 in your browser.
| Service | Port | Description |
|---|---|---|
| app | 8000 | Laravel + Nginx + PHP-FPM |
| mysql | 3306 | MySQL 8.0 database |
| redis | 6379 | Redis for cache/queue/sessions |
| node | 5173 | Vite dev server with HMR |
| mailpit | 8025 | Email testing UI |
| queue | - | Laravel queue worker |
| scheduler | - | Laravel task scheduler |
# Basic commands
make build # Build Docker images
make up # Start all containers
make down # Stop all containers
make logs # View container logs
# Development
make dev # Start with Vite dev server
make shell # Open shell in app container
make artisan cmd='migrate' # Run artisan command
# Database
make mysql # Open MySQL shell
make fresh # Fresh migration with seeders
# Testing
make test # Run all tests
# Services (profiles)
make queue # Start queue worker
make scheduler # Start scheduler
make mail # Start Mailpit for email testingUpdate your .env file for Docker:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_DATABASE=teamflow
DB_USERNAME=teamflow
DB_PASSWORD=secret
REDIS_HOST=redis
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025- PHP 8.4 or higher
- Composer 2.x
- Node.js 20.x or higher
- pnpm (recommended) or npm
git clone https://github.com/AFAskar/TeamFlow.git
cd TeamFlowcomposer installpnpm installcp .env.example .env
php artisan key:generateThe application uses SQLite by default. Create the database file:
touch database/database.sqliteRun migrations and seed the database:
php artisan migrate --seedFor development:
pnpm devFor production:
pnpm buildphp artisan serveVisit http://localhost:8000 in your browser.
After seeding the database, you can log in with these accounts:
| Role | Password | |
|---|---|---|
| Admin | admin@example.com | password |
| Manager | manager@example.com | password |
- Log in to your account
- Navigate to Teams from the sidebar
- Click Create Team
- Enter a team name and description
- Click Create Team
- Go to your team's page
- Click Invite Member
- Enter the email address and select a role
- The invited user will receive an invitation
- Navigate to Projects
- Click Create Project
- Select the team for the project
- Enter project details
- Add project members
- Open a project
- Click Create Task or use the Kanban board
- Fill in task details (name, description, status, priority, due date)
- Assign to a team member
- Add labels for categorization
- Open a project and click Kanban
- Drag tasks between columns to update status
- Click on a task to view details or edit
TeamFlow/
βββ app/
β βββ Actions/Fortify/ # Fortify authentication actions
β βββ Concerns/ # Shared traits
β βββ Enums/ # PHP Enums (Role, Status, Priority)
β βββ Http/
β β βββ Controllers/ # Application controllers
β β βββ Middleware/ # HTTP middleware
β β βββ Requests/ # Form request validation
β βββ Models/ # Eloquent models
β βββ Providers/ # Service providers
βββ database/
β βββ factories/ # Model factories for testing
β βββ migrations/ # Database migrations
β βββ seeders/ # Database seeders
βββ resources/
β βββ js/
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components
β βββ layouts/ # Page layouts
β βββ pages/ # Inertia pages
β β βββ auth/ # Authentication pages
β β βββ dashboard.tsx # Main dashboard
β β βββ projects/ # Project management
β β βββ tasks/ # Task management
β β βββ teams/ # Team management
β β βββ settings/ # User settings
β βββ types/ # TypeScript definitions
βββ routes/
β βββ web.php # Web routes
β βββ settings.php # Settings routes
βββ tests/
βββ Feature/ # Feature tests
βββ Unit/ # Unit tests
| Method | Endpoint | Description |
|---|---|---|
| GET | /teams |
List all teams |
| POST | /teams |
Create a new team |
| GET | /teams/{id} |
Get team details |
| PUT | /teams/{id} |
Update team |
| DELETE | /teams/{id} |
Delete team |
| POST | /teams/{id}/leave |
Leave team |
| POST | /teams/{id}/transfer-ownership |
Transfer ownership |
| Method | Endpoint | Description |
|---|---|---|
| GET | /projects |
List all projects |
| POST | /projects |
Create a new project |
| GET | /projects/{id} |
Get project details |
| PUT | /projects/{id} |
Update project |
| DELETE | /projects/{id} |
Soft delete project |
| POST | /projects/{id}/restore |
Restore project |
| GET | /projects/{id}/kanban |
Kanban board view |
| Method | Endpoint | Description |
|---|---|---|
| GET | /tasks |
List tasks with filters |
| GET | /my-tasks |
List user's assigned tasks |
| POST | /tasks |
Create a new task |
| GET | /tasks/{id} |
Get task details |
| PUT | /tasks/{id} |
Update task |
| PATCH | /tasks/{id}/status |
Update task status |
| DELETE | /tasks/{id} |
Delete task |
| POST | /tasks/reorder |
Reorder tasks (Kanban) |
| GET | /tasks-export/csv |
Export tasks to CSV |
| GET | /tasks-export/pdf |
Export tasks to PDF |
| Method | Endpoint | Description |
|---|---|---|
| GET | /search |
Global search across teams/projects/tasks |
| Method | Endpoint | Description |
|---|---|---|
| POST | /tasks/{id}/comments |
Add comment to task |
| PATCH | /task-comments/{id} |
Update comment |
| DELETE | /task-comments/{id} |
Delete comment |
| Method | Endpoint | Description |
|---|---|---|
| GET | /invites |
List user's invitations |
| POST | /team-invites |
Create invitation |
| POST | /invites/{id}/accept |
Accept invitation |
| POST | /invites/{id}/reject |
Decline invitation |
Full interactive API documentation is available at /docs when running the application. The documentation is auto-generated using Scribe and includes:
- Request/response examples
- Authentication requirements
- Parameter descriptions
- Try-it-out functionality
To regenerate the API documentation:
php artisan scribe:generateTeamFlow has comprehensive test coverage with 100+ tests using Pest PHP.
# Run all tests
php artisan test
# Run with compact output
php artisan test --compact
# Run with coverage
php artisan test --coverage
# Run specific test file
php artisan test tests/Feature/TeamControllerTest.php
# Run tests matching a filter
php artisan test --filter=registration| Category | Tests | Description |
|---|---|---|
| Auth | 15+ | Registration, login, 2FA, password |
| Teams | 20+ | Team CRUD, members, invitations |
| Projects | 11+ | Project CRUD, members, restoration |
| Tasks | 15+ | Task CRUD, status, comments |
| Search | 7+ | Global search functionality |
| Export | 8+ | CSV and PDF export |
# Fix PHP code style
vendor/bin/pint
# Check for issues without fixing
vendor/bin/pint --test| Variable | Description | Default |
|---|---|---|
APP_NAME |
Application name | TeamFlow |
APP_ENV |
Environment (local/production) | local |
APP_DEBUG |
Debug mode | true |
DB_CONNECTION |
Database driver | sqlite |
CACHE_STORE |
Cache driver | database |
QUEUE_CONNECTION |
Queue driver | database |
MAIL_MAILER |
Mail driver | log |
SQLite (Default)
DB_CONNECTION=sqliteMySQL
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=teamflow
DB_USERNAME=root
DB_PASSWORD=Redis (Recommended for production)
REDIS_HOST=127.0.0.1
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PSR-12 coding standards for PHP
- Use TypeScript for all frontend code
- Write tests for new features
- Run
vendor/bin/pintbefore committing PHP changes - Run
pnpm lintbefore committing frontend changes
This project is open-sourced software licensed under the MIT license.
- Laravel - The PHP Framework
- React - UI Library
- Inertia.js - Modern Monolith
- Tailwind CSS - Utility-first CSS
- shadcn/ui - Beautiful Components
- Lucide - Icon Library
- Scribe - API Documentation
- DomPDF - PDF Generation
Built with β€οΈ using Laravel and React