User Interface
Interactivity
Business Model
Persistence

PHP is a server-side language. That prompted us to implement server-side UI actions. They are very easy to define - no need to create any routes or custom routines, simply define a PHP closure like this:

$button = Button::addTo($owner, ['Click for the greeting!']);
$button->on('click', static function () {
    return 'Hello World!';
});
Click for the greeting!

A component of Agile Toolkit (callback) enables seamless communication between the frontend components (which are often written in VueJS) and the backend. We also support seamless reloading of any UI widget:

$seg = View::addTo($owner, ['ui' => 'segment']);

Text::addTo($seg)->set('Number of buttons: ');

$paginator = Paginator::addTo($seg, [
    'total' => 5,
    'reload' => $seg,
    'urlTrigger' => 'count',
]);

View::addTo($seg, ['ui' => 'divider']);

$count = $seg->getApp()->tryGetRequestQueryParam('count') ?? 1;
for ($i = 1; $i <= $count; ++$i) {
    Button::addTo($seg, [(string) $i]);
}
Number of buttons:
1

This demo also shows you how to create composite views. The '$seg' above contains text, paginator, divider and some buttons. Interestingly, Paginator view also consists of buttons and Agile Toolkit renders everything reliably.