smmahfujurrahman / projectplangenerator
A lightweight Laravel package for project planning with localStorage - no database required. Professional PDF import/export for seamless project syncing.
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/smmahfujurrahman/projectplangenerator
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/http: ^10.0|^11.0|^12.0
- illuminate/routing: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
- tecnickcom/tcpdf: ^6.10
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
README
A lightweight Laravel package for project planning and tracking with NO DATABASE REQUIRED! All data is stored in the browser's localStorage, making it perfect for quick project management without database overhead. Features professional PDF import/export for seamless project syncing.
🎯 Key Features
- � No Database Required: All data stored in browser localStorage
- �📊 Project Management: Create, track, and manage multiple projects
- 🎯 Module & Sub-Module System: Hierarchical task organization
- 📈 Progress Tracking: Real-time completion percentage calculations
- 📅 Timeline Management: Track start dates, due dates, and completion times
- 💰 Budget Tracking: Monitor project and module budgets
- 📄 PDF Import/Export: Upload PDF to sync projects, download professional PDF reports
- 🎨 Beautiful UI: Professional dashboard with Tailwind CSS
- 📊 Statistics & Charts: Visual progress tracking with Chart.js
- ⚙️ Fully Configurable: Control everything from Laravel config file
- � Zero Dependencies: No migrations, no database tables
Requirements
- PHP 8.1 or higher
- Laravel 10.x or ^11.x
Installation
Step 1: Install via Composer
composer require smmahfujurrahman/projectplangenerator
Alternative (install from main branch):
composer require smmahfujurrahman/projectplangenerator:dev-main
Step 2: Publish Assets & Configuration
Publish all package files (config and assets) in one command:
php artisan projectplanner:publish
Or use with --force to overwrite existing files:
php artisan projectplanner:publish --force
This single command will publish:
- Configuration file to
config/projectplanner.php - Assets (CSS, JS) to
public/vendor/projectplanner/ - Views are served directly from the package (no publishing needed!)
Alternative: Publish Individually
If you prefer to publish specific parts:
# Publish only configuration php artisan vendor:publish --tag=projectplanner-config # Publish only assets (CSS, JS) php artisan vendor:publish --tag=projectplanner-assets # Publish everything php artisan vendor:publish --provider="SMMahfujurRahman\ProjectPlanGenerator\ProjectPlanGeneratorServiceProvider"
That's it! No migrations needed!
Usage
Available Commands
# Publish all package files at once (recommended) php artisan projectplanner:publish # Publish with force (overwrite existing files) php artisan projectplanner:publish --force # Individual publishing (optional) php artisan vendor:publish --tag=projectplanner-config php artisan vendor:publish --tag=projectplanner-assets
Note: Views are automatically served from the package and don't need to be published.
Accessing the Dashboard
After installation, access the project planner at:
http://yourapp.test/project-planner
Or whatever route prefix you configure.
Configuration
Edit config/projectplanner.php to customize the package:
return [ // Enable/disable the entire package 'enabled' => env('PROJECT_PLANNER_ENABLED', true), // Route configuration 'route' => [ 'enabled' => env('PROJECT_PLANNER_ROUTE_ENABLED', true), 'prefix' => env('PROJECT_PLANNER_PREFIX', 'project-planner'), 'middleware' => ['web'], // Add 'auth' for authentication ], // Web path for assets 'web_path' => env('PROJECT_PLANNER_WEB_PATH', '/project-planner'), // Import/Export settings 'import_export' => [ 'pdf' => [ 'enabled' => true, 'download' => true, 'upload' => true, ], ], // Feature flags - control what users can do 'features' => [ 'create_project' => true, 'edit_project' => true, 'delete_project' => true, 'export_pdf' => true, 'import_data' => true, 'statistics' => true, 'charts' => true, ], ];
Environment Variables
Add these to your .env file for quick configuration:
PROJECT_PLANNER_ENABLED=true PROJECT_PLANNER_ROUTE_ENABLED=true PROJECT_PLANNER_PREFIX=project-planner PROJECT_PLANNER_WEB_PATH=/project-planner PROJECT_PLANNER_APP_NAME="My Project Planner" # Feature Toggles PROJECT_PLANNER_FEATURE_CREATE=true PROJECT_PLANNER_FEATURE_EDIT=true PROJECT_PLANNER_FEATURE_DELETE=true PROJECT_PLANNER_FEATURE_EXPORT_PDF=true PROJECT_PLANNER_FEATURE_IMPORT=true
How It Works
- LocalStorage Only: All project data is stored in the browser's localStorage
- No Database: No migrations, no database tables, no queries
- Import/Export:
- Export your projects to PDF to backup or share
- Professional PDF reports for documentation
- Import PDF to sync projects across browsers or restore backups
- Data Persistence: Data persists until localStorage is cleared
- Everything in Vendor: All logic stays in the package, only config in your Laravel app
Import/Export Workflow
Export PDF
// User clicks "Export PDF" button in the UI // Downloads: ProjectName_Report.pdf (professional formatted report) // Contains: // - Cover Page with project overview // - Executive Summary with timeline, budget, team // - Complete module breakdown with progress bars // - Statistics and completion metrics
Import PDF
// User clicks "Import PDF" button // Uploads PDF file // Parses and creates a new project with all modules and sub-modules // Syncs with existing localStorage data // Preserves all project details, timelines, and status
PDF Preview (Development Tool)
// Access: /project-planner/pdf-preview // Live preview of PDF without downloading // Useful for testing PDF generation and layout // See changes in real-time as you modify projects
Protecting Routes
Add authentication middleware in config:
'route' => [ 'middleware' => ['web', 'auth'], // Require login ],
Disabling Features
Control what users can do:
'features' => [ 'create_project' => false, // Disable project creation 'delete_project' => false, // Disable project deletion 'import_data' => false, // Disable PDF import ],
Changing the Route
'route' => [ 'prefix' => 'my-projects', // Access at /my-projects ],
Custom App Name
'ui' => [ 'app_name' => 'My Company Project Tracker', ],
How Data Storage Works
LocalStorage Structure
{ "project_planner_data": [ { "id": "id_1699999999_abc123", "name": "Website Redesign", "description": "Complete overhaul", "status": "active", "startDate": "2025-10-01", "targetEndDate": "2025-12-15", "budget": 50000, "team": 5, "modules": [...] } ] }
Data Persistence
- Data is saved automatically on every change
- Data persists across page refreshes
- Data is browser-specific (not synced across devices)
- Use PDF export/import to move data between browsers/devices
- Clearing browser data will delete all projects
Advantages
✅ No Database Overhead: Perfect for small teams or demo purposes
✅ Instant Setup: No migrations to run
✅ Fast Performance: Direct browser storage, no server queries
✅ Privacy: Data never leaves the user's browser
✅ Portable: Export/import to move data anywhere
✅ Zero Dependencies: No database tables or relationships
Limitations
⚠️ Single User: Each browser has its own data
⚠️ No Collaboration: Multiple users can't share the same project
⚠️ Storage Limit: Browser localStorage typically limited to 5-10MB
⚠️ Data Loss: Clearing browser data will delete projects
Solution: Use PDF export regularly to backup your data!
Advanced Usage
Views are Automatically Loaded
Views are served directly from the package's vendor directory. You don't need to publish them. Laravel will automatically find them using the projectplanner:: namespace.
Want to customize views? You can override any view by creating the same file structure in your Laravel app:
# To override index.blade.php:
resources/views/vendor/projectplanner/index.blade.php
# To override pdf-preview.blade.php:
resources/views/vendor/projectplanner/pdf-preview.blade.php
Laravel will use your custom view instead of the package's view.
Customizing Assets
After publishing assets, customize CSS/JS in:
public/vendor/projectplanner/css/styles.css
public/vendor/projectplanner/js/app.js
Disabling the Package
PROJECT_PLANNER_ENABLED=false
Or temporarily disable routes:
PROJECT_PLANNER_ROUTE_ENABLED=false
Roadmap
- Enhanced PDF parsing for complex imports
- Team collaboration via database (optional mode)
- Cloud sync option
- Template projects
- Gantt chart view
- Multi-language support
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Contributions are welcome! Please see CONTRIBUTING for details.
Security
If you discover any security issues, please email mahfujurrahman@example.com.
Credits
License
The MIT License (MIT). Please see License File for more information.
Support
- GitHub Issues: Create an issue
- Documentation: Full Documentation
Made with ❤️ by SM Mahfujur Rahman