Installation
composer require alizharb/forgepulse
php artisan vendor:publish --provider="AlizHarb\ForgePulse\ForgePulseServiceProvider" --tag="forgepulse-migrations"
php artisan migrate
Basic Usage
/forgepulse (Livewire-powered UI).use AlizHarb\ForgePulse\Models\Workflow;
$workflow = Workflow::create([
'name' => 'User Onboarding',
'description' => 'Guide new users through setup',
]);
First Workflow Execution
use AlizHarb\ForgePulse\Facades\ForgePulse;
$execution = ForgePulse::execute($workflow, ['user_id' => 1]);
database/migrations/ for schema changes.resources/views/vendor/forgepulse/ for customization hooks.UI-Driven Development
/forgepulse dashboard.Email, Database, API Call).Programmatic Workflow Creation
$workflow = Workflow::create([
'name' => 'Order Processing',
'steps' => [
['type' => 'email', 'template' => 'order_confirmation', 'to' => '{{ user.email }}'],
['type' => 'database', 'query' => 'UPDATE orders SET status = ? WHERE id = ?', 'params' => ['shipped', 123]],
],
]);
Execution Patterns
$result = ForgePulse::execute($workflow, $context);
ForgePulse::queueExecution($workflow, $context);
$execution = ForgePulse::startExecution($workflow, $context);
$execution->onProgress(fn ($step) => Log::info("Step completed: {$step['name']}"));
Conditional Logic
'conditions' => [
['field' => 'user.tier', 'operator' => '>', 'value' => 'basic', 'next_step' => 3],
],
Integration with Laravel Ecosystem
WorkflowExecuted, StepFailed:
event(new WorkflowExecuted($execution));
ForgePulse::notify($execution, 'step_failed').ForgePulse\Jobs\ExecuteStep for custom step logic.State Management
$execution->resetContext(); // Resets all variables.
UI vs. Programmatic Sync
$workflow->refreshFromDatabase(); // Syncs UI-defined steps.
Versioning Quirks
$workflow->revertToVersion(2); // Reverts to version 2.
Performance
ForgePulse::executeInChunks($workflow, $context, 10); // 10 steps per chunk.
Livewire Conflicts
^3.12).^4.0).Execution Logs
config(['forgepulse.debug' => true]);
storage/logs/forgepulse.log for step-by-step execution traces.Conditional Debugging
dd($workflow->steps, $context); // Verify data matches expectations.
UI Debugging
FORGEPULSE_DEBUG_UI=true
Custom Steps
namespace App\ForgePulse\Steps;
use AlizHarb\ForgePulse\Contracts\Step;
class CustomStep implements Step {
public function execute($context) { ... }
}
config/forgepulse.php:
'steps' => [
'custom' => \App\ForgePulse\Steps\CustomStep::class,
],
Middleware
ForgePulse::beforeExecute(fn ($workflow, $context) => {
// Validate context.
});
Storage Drivers
ForgePulse::extendStorage('s3', function () {
return new S3WorkflowStorage();
});
Testing
ForgePulseTestCase trait:
use AlizHarb\ForgePulse\Testing\ForgePulseTestCase;
class WorkflowTest extends ForgePulseTestCase {
public function testExecution() {
$this->executeWorkflow('user_onboarding', ['user_id' => 1]);
}
}
How can I help you explore Laravel packages today?