A complete multi-tenant SaaS project management platform built with PHP and MySQL. Features Kanban boards, team collaboration, task management, subscriptions, and REST API.
- Multi-tenant Architecture - Complete workspace isolation with tenant-based data segregation
- Kanban Boards - Drag-and-drop task management with customizable columns
- Project Management - Create, organize, and track multiple projects
- Task Management - Full task lifecycle with assignments, due dates, priorities, labels
- Team Collaboration - User invitations, role-based access control, project members
- Activity Tracking - Comprehensive activity logs for projects and tasks
- Notifications - In-app notifications for task assignments and updates
- File Attachments - Upload and attach files to tasks
- Comments & Checklists - Add comments and subtasks to tasks
- Subscription Management - Multiple plans with quota enforcement
- Usage Tracking - Monitor resource usage against subscription limits
- REST API - External integration via API keys
- Platform Admin - Global SaaS administrator
- Tenant Admin - Workspace owner with full permissions
- Member - Regular team member
- Guest - Limited access to specific projects
- Backend: PHP 7.0+ (compatible with PHP 8.x)
- Database: MySQL 5.7+ / MariaDB 10.2+
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Architecture: Custom lightweight MVC framework
- PHP 7.0 or higher
- MySQL 5.7+ or MariaDB 10.2+
- Apache/Nginx web server
- PHP Extensions:
- PDO
- pdo_mysql
- mbstring
- openssl
- fileinfo
git clone https://github.com/ahmedsaadawi13/SplashProjects.git
cd SplashProjectsCopy the example environment file:
cp .env.example .envEdit .env and update with your settings:
ENVIRONMENT=development
BASE_URL=http://localhost/SplashProjects/public
DB_HOST=localhost
DB_NAME=splashprojects
DB_USER=root
DB_PASS=your_passwordCreate a new MySQL database:
CREATE DATABASE splashprojects CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Import the database schema and seed data:
mysql -u root -p splashprojects < database.sqlEnsure the web server has write permissions to the storage directory:
chmod -R 755 storage
chmod -R 755 storage/uploadsCreate a virtual host or use .htaccess (already included in /public).
Example virtual host:
<VirtualHost *:80>
ServerName splashprojects.local
DocumentRoot /path/to/SplashProjects/public
<Directory /path/to/SplashProjects/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/splashprojects-error.log
CustomLog ${APACHE_LOG_DIR}/splashprojects-access.log combined
</VirtualHost>Enable mod_rewrite:
sudo a2enmod rewrite
sudo systemctl restart apache2server {
listen 80;
server_name splashprojects.local;
root /path/to/SplashProjects/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?url=$uri&$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.env {
deny all;
}
}Open your browser and navigate to:
http://localhost/SplashProjects/public
Or if using virtual host:
http://splashprojects.local
- Email:
admin@splashprojects.com - Password:
admin123
Acme Corporation:
- Email:
john@acme.com - Password:
password123 - Role: Tenant Admin
TechStart Inc:
- Email:
alice@techstart.com - Password:
password123 - Role: Tenant Admin
All API requests require an API key in the header:
X-API-KEY: your_api_key_here
API keys can be found in the database api_keys table or generated via the admin panel.
List Projects
GET /api/projectsGet Project Details
GET /api/projects/{id}Get Project Boards
GET /api/projects/{id}/boardsResponse:
{
"success": true,
"data": [
{
"id": 1,
"name": "Development Board",
"columns": [
{
"id": 1,
"name": "To Do",
"task_count": 5
}
]
}
]
}Create Task
POST /api/tasks
Content-Type: application/json
{
"column_id": 1,
"title": "Implement feature X",
"description": "Detailed description",
"assigned_to": 2,
"priority": "high",
"due_date": "2025-12-31"
}Update Task
PATCH /api/tasks/{id}
Content-Type: application/json
{
"title": "Updated title",
"status": "completed",
"column_id": 3
}Get Task Details
GET /api/tasks/{id}SplashProjects/
├── app/
│ ├── controllers/ # Application controllers
│ │ ├── api/ # API controllers
│ │ └── *.php
│ ├── models/ # Database models
│ ├── views/ # View templates
│ │ ├── layouts/ # Layout templates
│ │ └── */ # Feature views
│ └── core/ # Core framework classes
├── config/ # Configuration files
├── public/ # Public web root
│ ├── assets/
│ │ ├── css/
│ │ └── js/
│ └── index.php # Entry point
├── storage/ # Storage directory
│ ├── uploads/ # File uploads
│ └── logs/ # Log files
├── tests/ # Test files
├── database.sql # Database schema
├── .env.example # Example environment file
└── README.md
The system includes 4 default plans:
-
Free - $0/month
- 3 projects, 3 users, 100 tasks, 500MB storage
-
Starter - $19/month
- 10 projects, 10 users, 1000 tasks, 5GB storage
-
Professional - $49/month
- 50 projects, 50 users, 10000 tasks, 20GB storage
-
Enterprise - $199/month
- Unlimited resources, 100GB storage
Basic functional tests are included:
php tests/run_tests.php- PSR-1 and PSR-2 coding standards
- All code and comments in English
- Comprehensive inline documentation
- Security-first approach
- CSRF protection on all forms
- Password hashing with
password_hash() - SQL injection prevention via prepared statements
- XSS prevention with output escaping
- File upload validation
- Session security (httponly, secure cookies)
- Tenant data isolation
-
Update
.env:ENVIRONMENT=production BASE_URL=https://yourdomain.com
-
Disable error display:
error_reporting(0); ini_set('display_errors', 0);
-
Enable HTTPS and secure cookies
-
Set proper file permissions:
chmod -R 755 storage chown -R www-data:www-data storage
-
Configure database backups
-
Set up log rotation for
/storage/logs -
Enable opcache for PHP
-
Configure CDN for static assets (optional)
- Enable opcache in
php.ini - Use MySQL query caching
- Implement Redis/Memcached for sessions
- Enable gzip compression
- Optimize images before upload
- Use CDN for static assets
- Check MySQL is running:
sudo systemctl status mysql - Verify credentials in
.env - Ensure database exists
- Check Apache mod_rewrite is enabled
- Verify
.htaccessexists in/public - Check virtual host DocumentRoot points to
/public
- Check
storage/uploadspermissions:chmod 755 storage/uploads - Verify PHP upload settings in
php.ini:upload_max_filesize = 10M post_max_size = 10M
- Enable error display in development
- Check PHP error logs
- Verify all required PHP extensions are installed
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Follow existing code style
- Write clear commit messages
- Test your changes
- Submit a pull request
This project is open-source software licensed under the MIT License.
For issues, questions, or contributions:
- GitHub Issues: https://github.com/ahmedsaadawi13/SplashProjects/issues
- Documentation: See
/docsfolder
Developed by the SplashProjects team.
Built with ❤️ using PHP and MySQL.
Version: 1.0.0 Last Updated: January 2025