Livewire component that brings Spotlight/Alfred-like functionality to your Laravel application.

Overview

Build Status Total Downloads Latest Stable Version License

About LivewireUI Spotlight

LivewireUI Spotlight is a Livewire component that provides Spotlight/Alfred-like functionality to your Laravel application. View demo video.

Installation

Laravel Spotlight Tutorial

Click the image above to read a full article on using the LivewireUI Spotlight package or follow the instructions below.

To get started, require the package via Composer:

composer require livewire-ui/spotlight

Livewire directive

Add the Livewire directive @livewire('livewire-ui-spotlight'):

<html>
<body>
<!-- content -->

@livewire('livewire-ui-spotlight')
</body>
</html>

Alpine

Spotlight requires Alpine. You can use the official CDN to quickly include Alpine:

<script defer src="https://unpkg.com/[email protected]/dist/cdn.min.js"></script>

Opening Spotlight

To open the Spotlight input bar you can use one of the following shortcuts:

  • CTRL + K
  • CMD + K
  • CTRL + /
  • CMD + /

You can customize the keybindings in the configuration file (see below). It's also possible to toggle Spotlight from any other Livewire component or via Javascript.

In any Livewire component you can use the dispatchBrowserEvent helper.

$this->dispatchBrowserEvent('toggle-spotlight');

You can also use the $dispatch helper from Alpine to trigger the same browser event from your markup.

<button @click="$dispatch('toggle-spotlight')">Toggle Spotlight</button>

Creating your first Spotlight command

You can create your first Spotlight command by creating a new class and have it extend LivewireUI\Spotlight\SpotlightCommand. Start by defining a $name and $description for your command. The name and description will be visible when searching through commands.

To help you get started you can use the php artisan make:spotlight <command-name> command.

<?php

namespace LivewireUI\Spotlight\Commands;

use LivewireUI\Spotlight\SpotlightCommand;

class Logout extends SpotlightCommand
{
    protected string $name = 'Logout';

    protected string $description = 'Logout out of your account';

}

The execute method is called when a command is chosen, and the command has no dependencies. Let's for example take a look at the Logout command execute method:

<?php

namespace LivewireUI\Spotlight\Commands;

use Illuminate\Contracts\Auth\StatefulGuard;
use LivewireUI\Spotlight\Spotlight;
use LivewireUI\Spotlight\SpotlightCommand;

class Logout extends SpotlightCommand
{
    protected string $name = 'Logout';

    protected string $description = 'Logout out of your account';

    public function execute(Spotlight $spotlight, StatefulGuard $guard): void
    {
        $guard->logout();
        $spotlight->redirect('/');
    }
}

As you can see, you can type-hint your dependencies and have them resolved by Laravel. If you type-hint Spotlight $spotlight, you will get access to the Livewire Spotlight component. This gives you access to all the Livewire helpers, so you can redirect users, emit events, you name it.

How to define command dependencies

In some cases your command might require dependencies. Let's say we want to create a new user and add it to a specific team. In this case we would need to define a team dependency. To define any dependencies, add a new method to your command and name the method dependencies.

You can use the SpotlightCommandDependencies::collection() method to create a new collection of dependencies. Call the add method to register a new dependency. You can add as many of dependencies as you like. The user input prompt follows the order in which you add the commands.

SpotlightCommandDependencies::collection()
    ->add(SpotlightCommandDependency::make('team')->setPlaceholder('For which team do you want to create a user?'))
    ->add(SpotlightCommandDependency::make('foobar')->setPlaceholder('Input from user')->setType(SpotlightCommandDependency::INPUT));

For every dependency, Spotlight will check if a search{dependency-name} method exists on the command. This method provides the search query given by the user. For example, to search for our team dependency:

public function searchTeam($query)
{
    return Team::where('name', 'like', "%$query%")
        ->get()
        ->map(function(Team $team) {
            return new SpotlightSearchResult(
                $team->id,
                $team->name,
                sprintf('Create license for %s', $team->name)
            );
        });
}

Spotlight expects a collection of SpotlightSearchResult objects. The SpotlightSearchResult object consists out of the result identifier, name and description.

Every dependency will have access to the already defined dependencies. So in the example below, you can see that searchFoobar has access to the `Team the user has chosen. This allows for scoped dependency searching.

use LivewireUI\Spotlight\Spotlight;
use LivewireUI\Spotlight\SpotlightCommand;
use LivewireUI\Spotlight\SpotlightCommandDependencies;
use LivewireUI\Spotlight\SpotlightCommandDependency;
use LivewireUI\Spotlight\SpotlightSearchResult;

class CreateUser extends SpotlightCommand
{
    protected string $name = 'Create user';

    protected string $description = 'Create new team user';

    public function dependencies(): ?SpotlightCommandDependencies
    {
        return SpotlightCommandDependencies::collection()
            ->add(SpotlightCommandDependency::make('team')->setPlaceholder('For which team do you want to create a user?'))
            ->add(SpotlightCommandDependency::make('name')->setPlaceholder('How do you want to name this user?')->setType(SpotlightCommandDependency::INPUT));
    }

    public function searchTeam($query)
    {
        return Team::where('name', 'like', "%$query%")
            ->get()
            ->map(function(Team $team) {
                return new SpotlightSearchResult(
                    $team->id,
                    $team->name,
                    sprintf('Create user for %s', $team->name)
                );
            });
    }


    public function execute(Spotlight $spotlight, Team $team, string $name)
    {
        $spotlight->emit('openModal', 'user-create', ['team' => $team->id, 'name' => $name]);
    }

}

Register commands

You can register commands by adding these to the livewire-ui-spotlight.php config file:

<?php

return [
    'commands' => [
        \App\SpotlightCommands\CreateUser::class
    ]
];

It's also possible to register commands via one of your service providers:

use \App\SpotlightCommands\CreateUser;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Spotlight::registerCommand(CreateUser::class);

        // You can also register commands conditionally
        Spotlight::registerCommandIf(true, CreateUser::class);
        Spotlight::registerCommandUnless(false, CreateUser::class);
    }

}

Alternatively, you can also conditionally show or hide a command from the command itself. (Note: you will still need to register your command in your config file or in a service provider.) Add the shouldBeShown method to your command and add any logic to resolve if the command should be shown. Dependencies are resolved from the container, so you can for example verify if the currently authenticated user has the required permissions to access given command:

use Illuminate\Http\Request;
use LivewireUI\Spotlight\Spotlight;
use LivewireUI\Spotlight\SpotlightCommand;

class CreateUser extends SpotlightCommand
{
    protected string $name = 'Create user';

    protected string $description = 'Create new team user';

    public function execute(Spotlight $spotlight)
    {
        $spotlight->emit('openModal', 'user-create');
    }

    public function shouldBeShown(Request $request): bool
    {
        return $request->user()->can('create user');
    }
}

Configuration

You can customize Spotlight via the livewire-ui-spotlight.php config file. This includes some additional options like including CSS if you don't use TailwindCSS for your application. To publish the config run the vendor:publish command:

php artisan vendor:publish --tag=livewire-ui-spotlight-config
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Shortcuts
    |--------------------------------------------------------------------------
    |
    | Define which shortcuts will activate Spotlight CTRL / CMD + key
    | The default is CTRL/CMD + K or CTRL/CMD + /
    |
    */

    'shortcuts' => [
        'k',
        'slash',
    ],

    /*
    |--------------------------------------------------------------------------
    | Commands
    |--------------------------------------------------------------------------
    |
    | Define which commands you want to make available in Spotlight.
    | Alternatively, you can also register commands in your AppServiceProvider
    | with the Spotlight::registerCommand(Logout::class); method.
    |
    */

    'commands' => [
        \LivewireUI\Spotlight\Commands\Logout::class
    ],

    /*
    |--------------------------------------------------------------------------
    | Include CSS
    |--------------------------------------------------------------------------
    |
    | Spotlight uses TailwindCSS, if you don't use TailwindCSS you will need
    | to set this parameter to true. This includes the modern-normalize css.
    |
    */
    'include_css' => false,
    
    /*
    |--------------------------------------------------------------------------
    | Include JS
    |--------------------------------------------------------------------------
    |
    | Spotlight will inject the required Javascript in your blade template.
    | If you want to bundle the required Javascript you can set this to false
    | and add `require('vendor/livewire-ui/spotlight/resources/js/spotlight');`
    | to your script bundler like webpack.
    |
    */
    'include_js' => true,
];

If you want to translate or change default the placeholder you will need to publish the translation file.

php artisan vendor:publish --tag=livewire-ui-spotlight-translations
<?php

return [
    'placeholder' => 'What do you want to do?',
];

Credits

License

Livewire UI is open-sourced software licensed under the MIT license.

Comments
  • Alpine Error:

    Alpine Error: "SyntaxError: Unexpected token '}'"

    I'm running v1.0.0 of Spotlight and have implemented the example logout command.

    When typing 'Logout', the dropdown does not appear and the following error is sent to the console:

    [Warning] Alpine Error: "SyntaxError: Unexpected token '}'" (app.js, line 123)
    
    Expression: ""
    Element: – 
    <template x-for="(item, i) in filteredItems()" :key>…</template>
    
    <template x-for="(item, i) in filteredItems()" :key>…</template>
    [Error] SyntaxError: Unexpected token '}'
    	handleError (app.js:130)
    	tryCatch (app.js:142)
    	(anonymous function) (app.js:563)
    	forEach
    	handleForDirective (app.js:561)
    	(anonymous function) (app.js:1751)
    	forEach
    	resolveBoundAttributes (app.js:1711)
    	updateElement (app.js:1687)
    	(anonymous function) (app.js:1643)
    	walk (app.js:98)
    	walk (app.js:102)
    	walk (app.js:102)
    	walk (app.js:102)
    	walk (app.js:102)
    	walkAndSkipNestedComponents (app.js:1598)
    	updateElements (app.js:1640)
    	(anonymous function) (app.js:1548)
    	later (app.js:114)
    

    Spotlight v0.1.8 does not exhibit this behaviour.

    I'm using:

    Livewire v2.5.1 Alpine v3.2.1 Laravel v8.49.1

    Love the component and will be using it in several projects. Thanks

    opened by SimonBarrettACT 11
  • Target [Illuminate\Contracts\Auth\StatefulGuard] is not instantiable.

    Target [Illuminate\Contracts\Auth\StatefulGuard] is not instantiable.

    `<?php

    namespace LivewireUI\Spotlight\Commands;

    use Illuminate\Contracts\Auth\StatefulGuard; use LivewireUI\Spotlight\Spotlight; use LivewireUI\Spotlight\SpotlightCommand;

    class Logout extends SpotlightCommand {

    protected string $name = 'Logout';
    protected string $description = 'Logout out of your account';
    public function execute(Spotlight $spotlight, StatefulGuard $guard): void
    
    {
    
        $guard->logout();
    
        $spotlight->redirect('/');
    
    }
    

    } `

    opened by sandy15d 8
  • Clicking on action with further dependencies

    Clicking on action with further dependencies

    Logout Since logout has no dependencies, pressing enter or clicking is the same.

    View User Since "View User" command has dependencies, I'm expecting when clicking with the mouse to proceed to that dependency asking the user name. Currently, mouse-clicking on "View User" only closes the dialog with no further action. It works properly when pressing enter, but I'm expecting ENTER and Mouseclick to yield the same result, from a UX viewpoint.

    Thoughts?

    opened by usernotnull 8
  • Different Spotlight behavior depending on the page component?

    Different Spotlight behavior depending on the page component?

    Is there any way to tell Spotlight what the page component is and cater the behavior to that?

    An example. If I open Spotlight on my dashboard and type "New post" it should ask me what project I want to create the post for - great, but if I'm already inside a project, can this info be pre-populated somehow? E.g. can I tell Spotlight that it was opened on a project page and now assume that you want to create the post for that project?

    Thanks!

    Edit // When I think about it. I may even have some options that should only show up in Spotlight if it's called from a certain component. Either way, I think both ways would be solved if I could tell Spotlight where it was called from. Maybe this is already possible?

    opened by seabasss 6
  • Show results without input

    Show results without input

    This PR makes it so the results are shown even without any search input. Closes #62

    image

    I feel like it's a better default command palette behaviour, we could still put this behind a config flag if you prefer?

    opened by riasvdv 4
  • Alpine v3 support

    Alpine v3 support

    Update Spotlight to Alpine v3.

    • [x] Update readme
    • [x] Fix console error related to x-for https://github.com/livewire-ui/spotlight/blob/alpine-v3/resources/views/spotlight.blade.php#L50
    Uncaught (in promise) ReferenceError: id is not defined
        at eval (eval at generateFunctionFromString (app.js:1643), <anonymous>:3:32)
        at app.js:1654
        at tryCatch (app.js:1678)
        at app.js:2903
        at runIfTypeOfFunction (app.js:1673)
        at app.js:1656
        at tryCatch (app.js:1678)
        at loop (app.js:2886)
        at app.js:2876
        at Array.reactiveEffect (app.js:496)
    
    opened by PhiloNL 4
  • Not able to interact with the component

    Not able to interact with the component

    HeyHey, Cool package you have there. Excited to test it out!

    I just ran into a problem but I'm not able to solve it. I've livewire alrdy preinstalled and just added the component like you mentioned within the docs.

    After I hit the start page, I can see the overlay but can not close or interact with it. Any ideas?

    image
    <!DOCTYPE html>
    <html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="UTF-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        <meta name="csrf-token" content="{{ csrf_token() }}">
    
       <link href="{{ mix('css/app.css') }}" rel="stylesheet">
          
        @livewireStyles
    
    </head>
    <body class="bg-gray-50">
    @include('layouts.partials._navigation')
    @yield('content')
    @include('layouts.partials._footer')
    @include('layouts.partials._flash')
    <script src="{{ mix('js/app.js')}}"></script>
    @livewire('livewire-ui-spotlight')
    @livewireScripts
    </body>
    </html>
    

    I've also created the test component.

    <?php
    
    namespace App\Http\Livewire\Commands;
    
    use Illuminate\Contracts\Auth\StatefulGuard;
    use LivewireUI\Spotlight\Spotlight;
    use LivewireUI\Spotlight\SpotlightCommand;
    
    class Logout extends SpotlightCommand
    {
        protected string $name = 'Logout';
    
        protected string $description = 'Logout out of your account';
    
        public function execute(Spotlight $spotlight, StatefulGuard $guard): void
        {
            $guard->logout();
            $spotlight->redirect('/');
        }
    }
    
    

    Cheers,

    opened by StanBarrows 4
  • Strange behavior with Laravel Scout and Algolia

    Strange behavior with Laravel Scout and Algolia

    ``Hi!

    I have a project that can search through a list of products. For better search result, I have connected my model with Laravel Scout and Algolia.

    When I search within my controller with some specific keywords, I get 9 results.

    But when I search within the spotlight component, I only get 1 result..

    Here's my function in my spotlight component:

    public function searchProduct(string $query): Collection
        {
            return Product::search($query)
                ->get()
                ->map(function (Product $product) {
                    return new SpotlightSearchResult(
                        $product->id,
                        $product->name,
                        $product->code,
                        []
                    );
                });
        }
    

    It doesn't seem wrong to me.. Am I missing something? Does the SpotlightSearchResult group some results?

    Thank you in advance for your support

    opened by bee-interactive 3
  • Langs support

    Langs support

    Hi,

    Is there any way how to use laravel langs and their values in defining for the command name and description?

    For me this does not work: image

    Thank you!

    opened by rudolfbruder 3
  • How to persist data while Spotlight is open?

    How to persist data while Spotlight is open?

    Hi,

    Upon opening Spotlight & starting a command, I want to temporary store some data when when Spotlight is open. In my case all the available Resources from Laravel Nova.

    I can store some data when the page is opens, but after starting Spotlight & every keystroke after, the component refreshes and the data is lost. My solution now is to store the data in the session, and flush it on execution, but this is not the most stable solution.

    Is it possible to execute a function on start of a command, and keep this data while spotlight is open? After executing the data can be flushed.

    opened by LTKort 3
  • Close already open modals when a new modal opens with Spotlight?

    Close already open modals when a new modal opens with Spotlight?

    This is really cool!

    I'm trying it out with modals and it works pretty well, but is there any way to close all other modals if I open a new one with Spotlight? This didn't work:

    public function execute(Spotlight $spotlight)
    {
        $spotlight->emit('closeModal'); // forceful too if possible
        $spotlight->emit('openModal', 'create-user');
    }
    

    Also, is there any way to change the standard Logout out of your account to Log out of your account.

    Edit // I guess I can just re-create that class in my Spotlight folder.

    Thanks again, love it!

    opened by seabasss 3
  • Duplicate in production ( Laravel Vapor )

    Duplicate in production ( Laravel Vapor )

    Hello guys! something weird is happening.

    Working super super nice in local as allways, when we deploy in production, using laravel vapor + serverless this is what I see:

    Captura de pantalla 2022-12-19 a las 11 14 01

    As you see is duplicated 3 times, this happend with all commands.

    I try creating custom custom provider, or just using default livewire-ui-spotlight.php

    Any ideas?

    `<?php

    return [

    /*
    |--------------------------------------------------------------------------
    | Shortcuts
    |--------------------------------------------------------------------------
    |
    | Define which shortcuts will activate Spotlight CTRL / CMD + key
    | The default is CTRL/CMD + K or CTRL/CMD + /
    |
     */
    
    'shortcuts' => [
        'k',
        'slash',
    ],
    
    /*
    |--------------------------------------------------------------------------
    | Commands
    |--------------------------------------------------------------------------
    |
    | Define which commands you want to make available in Spotlight.
    | Alternatively, you can also register commands in your AppServiceProvider
    | with the Spotlight::registerCommand(Logout::class); method.
    |
     */
    
    'commands' => [
        App\Spotlight\SearchVehicle::class
    ],
    
    /*
    |--------------------------------------------------------------------------
    | Include CSS
    |--------------------------------------------------------------------------
    |
    | Spotlight uses TailwindCSS, if you don't use TailwindCSS you will need
    | to set this parameter to true. This includes the modern-normalize css.
    |
     */
    'include_css' => false,
    
    /*
    |--------------------------------------------------------------------------
    | Include JS
    |--------------------------------------------------------------------------
    |
    | Spotlight will inject the required Javascript in your blade template.
    | If you want to bundle the required Javascript you can set this to false,
    | call 'npm install fuse.js' or 'yarn add fuse.js',
    | then add `require('vendor/livewire-ui/spotlight/resources/js/spotlight');`
    | to your script bundler like webpack.
    |
     */
    'include_js' => true,
    

    ]; `

    opened by cloudstudio 4
  • Missing documentation: Fuse.js

    Missing documentation: Fuse.js

    In README.md under How to define search synonyms, I believe it should be explicitly made clear the effect of the filteredItems() function using Fuse JS, to the end that the result returned from the Spotlight command on the backend may not be shown/displayed on the frontend because it is filtered out from what is displayed to the user, differently from what is returned by the backend.

    I lost quality time trying to debug why I returned items as SpotlightSearchResult but nothing showed up on the frontend. I had to dive into the code to figure that out, and I believe such crucial behaviour should be documented.

    Please let me know if a PR that updates the doc to this effect is welcomed.

    opened by damms005 0
  • Ability to customize Fuse search options

    Ability to customize Fuse search options

    Issue

    I've noticed that some of my search results aren't appearing in the spotlight search results. They're actually returned as dependencyQueryResults, which can be confirmed in alpinejs devtools, but they don't make it through Fuse to appear in the spotlight result list. By default, Fuse places importance on the beginning of the field that is being searched. Since the match is towards the end of the searched string, it is being ignored.

    Example String being searched: "TTU/JH COMM COLLEGE DESIGN CATALOG SAMPLES O# 492026578-7,8,9"

    if my input search query is "492026578", this result doesn't make it to the result list. It IS however, part of the query results, but Fuse skips over it because the query string is at the end of the searched string.

    Solution

    Provide a way to customize the Fuse fuzzy matching options like location, distance, ignoreLocation, and threshold.

    If I manually edit the spotlight.js file and set ignoreLocation to true, then the result shows on the page as expected.

    I could attempt a PR, but may take a while. I understand if you don't want to start tying your package down to the Fuse fuzzy search implementation, but maybe there's a way to add options that can be translated to those Fuse options. Then again, you may not want spotlight to be concerned with that stuff at all. If so, I understand.

    Thanks for this great component.

    opened by devcircus 7
  • Create property on Spotlight to allow placeholder overrides

    Create property on Spotlight to allow placeholder overrides

    Addresses discussion #56

    Allows for default placeholder setting on page load by just passing in a property in the Livewire component. API is updated in the README.md

    opened by bebo925 0
Releases(1.0.6)
Owner
Livewire UI
Livewire components by @philoNL
Livewire UI
Eloquent Befriended brings social media-like features like following, blocking and filtering content based on following or blocked models.

Laravel Befriended Eloquent Befriended brings social media-like features like following, blocking and filtering content based on following or blocked

Renoki Co. 720 Jan 3, 2023
This package allows you to render livewire components like a blade component, giving it attributes, slots etc

X-livewire This package allows you to render livewire components like a blade component, giving it attributes, slots etc. Assuming you wanted to creat

null 7 Nov 15, 2022
Laravel-comments-livewire - Livewire components for the laravel-comments package

Associate comments and reactions with Eloquent models This package contains Livewire components to be used with the spatie/laravel-comments package. S

Spatie 15 Jan 18, 2022
A Simple MOFH clientarea for free like infinityfree and minimal functionality

Project Hustal Project Hustal is a free of cost MOFH clientarea for account management and support services. It have easy to use features and a much l

Mahtab Hassan 10 Feb 15, 2022
It's like React for PHP. Powered by Laravel, Livewire, Tailwind, & Alpine.

Tailwire It's like React for PHP. Powered by Laravel, Livewire, Tailwind, & Alpine. Features: Use a custom view component class namespace Declare rout

null 5 Dec 12, 2021
Laravel Livewire full page component routing.

Laravel Livewire Routes Laravel Livewire full page component routing. This package allows you to specify routes directly inside your full page Livewir

null 22 Oct 6, 2022
Laravel Livewire form component with declarative Bootstrap 5 fields and buttons.

Laravel Livewire Forms Laravel Livewire form component with declarative Bootstrap 5 fields and buttons. Requirements Bootstrap 5 Installation composer

null 49 Oct 29, 2022
A TALL-based Laravel Livewire component to replace the (multiple) select HTML input form with beautiful cards.

TALL multiselect cards A TALL-based Laravel Livewire component to replace the (multiple) select HTML input form with beautiful cards. Table of content

Frederic Habich 19 Dec 14, 2022
Laravel Livewire component to show Events in a good looking monthly calendar

Livewire Calendar This package allows you to build a Livewire monthly calendar grid to show events for each day. Events can be loaded from within the

Andrés Santibáñez 680 Jan 4, 2023
A dynamic table component for Laravel Livewire - For Slack access, visit:

A dynamic Laravel Livewire component for data tables. Bootstrap 4 Demo | Bootstrap 5 Demo | Tailwind Demo | Demo Repository Installation You can insta

Anthony Rappa 1.3k Jan 1, 2023
A dynamic Laravel Livewire component for multi steps form

Livewire component that provides you with a wizard that supports multiple steps form while maintaining state.

Vildan Bina 233 Jan 4, 2023
An advanced datatable component for Laravel Livewire.

Livewire Smart Table An advanced, dynamic datatable component with pagination, sorting, and searching including json data. Installation You can instal

Turan Karatuğ 87 Oct 13, 2022
Livewire component that provides you with a modal that supports multiple child modals while maintaining state.

About LivewireUI Modal LivewireUI Modal is a Livewire component that provides you with a modal that supports multiple child modals while maintaining s

Livewire UI 806 Jan 6, 2023
Livewire component that provides you with a modal that supports multiple child modals while maintaining state.

About Wire Elements Modal Wire Elements Modal is a Livewire component that provides you with a modal that supports multiple child modals while maintai

Wire Elements 806 Jan 6, 2023
Livewire component for dependant and/or searchable select inputs

Livewire Select Livewire component for dependant and/or searchable select inputs Preview Installation You can install the package via composer: compos

Andrés Santibáñez 441 Dec 19, 2022
Render a Livewire component on a specific target in the DOM.

Livewire Portals Render a Livewire component on a specific target in the DOM. Install THIS PACKAGE IS STILL IN DEVELOPMENT, TO USE, PLEASE ADD THE FOL

Jeff Ochoa 20 Aug 11, 2022
Emmet like Abbreviation to generate and wrap Laravel Blade Component with markup

Laravel Blade Emerald Emmet like Abbreviation to generate and wrap Laravel Blade Component with markup ?? Features Generate HTML in a Blade file via p

Aqua 32 Sep 6, 2022
A quiz application with laravel 8, spatie permissions, livewire, jetstream, chartjs, tailwindcss and more!

Todo Currently busy with some other important things, will definately would like to imporove the app with 1. Multiple choices selection and mapping to

Baig 67 Nov 21, 2022
Multipurpose Laravel and Livewire Application. This is a part of tutorial series on Youtube.

Multipurpose Laravel and Livewire Application This is a part of YouTube tutorial series on building application using Laravel and Livewire. Here is th

Clovon 88 Dec 23, 2022