This project has been discontiued.

Unfortunately we didn't find the time to work on this project and therefore discontinued it.

Handle business processes
in Laravel

Build complex processes and workflows 10 times faster. Laravel Workflows is an upcoming package to handle business processes visually that are in sync with your code.

How Laravel Workflows can make you 10x faster

Business Processes Re-Invented

Have you ever been together with a client and felt like you spoke two different languages? We feel you. We've been there, too.

That's why it is common to draw business processes. It gives everyone involved a simple overview of the application. The issue with current solutions is that they only take care of the drawing. Once you start coding, your drawings are already out of sync. That's why we came up with Laravel Workflows.

Laravel Workflows is a package that you can install into existing or new projects. It gives you a nice GUI where you can draw business processes - even together with your client. Furthermore, every process step is directly connected to your codebase, where you can define what should happen at this step. This way, your process drawing is always in sync with your code.

PS: By drawing the processes first, rather than coding them, you will be highly efficient and produce results several times faster than before.

Show me the code!

See how Laravel Workflows is used in your project. It comes as a package and can be installed into existing projects. It won't interfere with your current code.

With Laravel Workflows, you don't code your processes - you just draw them. Anyone involved in the project – the project manager, the marketing department, or the developer – looks at the same model. Anyone understands what is going on.
And which developer doesn't like it when the customer comes up with last-minute requirement changes? – Laravel Workflows got your back - just insert new shapes (or "Kasterl", as we call it) wherever you need them.
For every shape in your workflow a corresponding class is automatically generated. In this class you can define whatever is to happen when a workflow reaches this step.
A workflow is always connected to a model. By adding a simple trait every model is able to start workflows.
$trip = Trip::create([
    'user_id' => $user->id,
    'destination' => $destination
]);
$trip->startWorkflow('TripApproval');
At some points workflows are stopped when certain conditions are not met. They are automatically continued when a defined condition is true.
public function continueWhen()
{
    $incidenceLowAgain = $this->getIncidence() < 100;

    if($incidenceLowAgain) {
        Mail::to($this->model->user)->send(new IncidenceLowAgain($this->model));
    }

    return $incidenceLowAgain;
}
Often you need to create forms to approve or deny requests or to inject information into a running workflow. Laravel Workflows offers a Nova-like API to easily create forms.
class ForwardToBoss extends ProcessStep
{
    protected function formFields()
    {
        return Boolean::make('approved', $this)
            ->text('Approve trip of ' . $this->model->user->name . ' to ' . $this->model->destination . '?');
    }
}

// in View
{!! ProcessInstance::atProcessStep('ForwardToBoss', 'TripApproval')->last()->render() !!}
You often need to create lists to show different processes and their states. Laravel Workflows offers a Nova-like API to easily show such lists.
class AmountApproval extends ProcessStep
{
    public function tableColumns()
    {
        return [
            Column::make('Traveler', 'model.user.name'),
            Column::make('Destination', 'model.dest'),
            Column::make('Requested at', 'created_at'),
        ];
    }
}

// in view
<x-workflow-table :process-instances=
    "ProcessInstance::atProcessStep('AmountApproval')"/>
For every process step you can define who can see it and who can update it.
class Approved extends ProcessStep
{
    public function canUpdate($user)
    {
        return $user == $this->model->user;

        // another example: return $user->isBoss();
    }
}

// in View:
@foreach(ProcessInstance::forUser($traveler, 'update') as $processInstance)
    // ...
@endforeach

We drew workflows.
But did we draw your interest?

If your answer is yes, show us some love by hitting the fancy button to your right! In return we will keep you up-to-date on our progress.