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

v1.0.0 2025-11-08 06:54 UTC

This package is auto-updated.

Last update: 2025-11-08 06:55:52 UTC


README

Latest Version on Packagist Total Downloads

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

  1. LocalStorage Only: All project data is stored in the browser's localStorage
  2. No Database: No migrations, no database tables, no queries
  3. 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
  4. Data Persistence: Data persists until localStorage is cleared
  5. 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

Made with ❤️ by SM Mahfujur Rahman