Presets & Jetstream, with Michael Dyrynda
Matt Stauffer:
Hey, welcome to the Laravel podcast, season four. Today we're talking to Michael Dyrynda the co-host of the Laravel News podcast, North Meets South podcast, all sorts of other great things, the founder of Laracon AU, and today we're talking about presets and Jetstream. Stay tuned. D-Y-R-Y-N-D-A.
Matt Stauffer:
All right, everybody. Welcome back to the Laravel podcast, season four, where every single episode is about a single particular topic, and today's topic is a little complicated because the whole idea of how it works changed several days ago.
Matt Stauffer:
So today is August 31st, which means it's actually September 1st for my guest, Michael, over in the Australia, and we are talking about, originally it was going to be about the auth presets, this UI components that come along, but then Laracon last week, Laravel 8, is now coming with a different set of things, so we're going to primarily focus on the Laravel 8 side, this one is a little bit going to be more just the Jetstream episode.
Matt Stauffer:
We'll see what I actually title it by the time you're all seeing it. So anyway. That's what we're doing today with my friend Michael Dyrynda. So, Michael, would you say hi to the people and tell them who you are and what you're about, and how you introduce yourself to people in the grocery store.
Michael Dyrynda:
Matt, hello. I am Michael Dyrynda. I am the Australian, although we've got a few of us now.
Matt Stauffer:
Yeah.
Michael Dyrynda:
It's exciting to see Jess and Tim taking the limelight and doing their bit, but I host the Laravel News podcast. I host the North Meets South web podcast, and the Road to Laracon podcast, which I always forget the name of when I try and explain it. I had to record the-
Matt Stauffer:
The music one.
Michael Dyrynda:
... intro for my Laravel meet up talk four or five times because I kept on saying the Laravel News podcast.
Matt Stauffer:
Nice.
Michael Dyrynda:
Yeah, do that. I host on Twitter. I have a few open source packages about the place. I basically exist in this community because of you, Matt.
Matt Stauffer:
Oh.
Michael Dyrynda:
And as far as how I introduce myself in the grocery store, it's been a while because-
Matt Stauffer:
The grocery store.
Michael Dyrynda:
... everything is a bit funny now.
Matt Stauffer:
Yeah.
Michael Dyrynda:
I can go to the grocery store but you try and get in and out as quick as you can when you're outside.
Matt Stauffer:
Yeah. You don't actually talk to people. Yeah.
Michael Dyrynda:
Yeah. It's interesting, because I'm a lead software developer, and that gets all kinds of strange looks. There's not much actual software development in that role.
Matt Stauffer:
Right.
Michael Dyrynda:
It's more around-
Matt Stauffer:
People, and.
Michael Dyrynda:
... managing my team.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And managing my people and dealing with other parts of the business and making sure that my team can do their job effectively, and it's keeping people away that shouldn't be interrupting, and making sure we stay focused, and lots of requirements and scoping, and things like that.
Michael Dyrynda:
But I just got a board directive which means I am locked in a room and not allowed to talk to anyone or do anything until that board directive is complete, so that's nice that I-
Matt Stauffer:
All right.
Michael Dyrynda:
... can focus on programming for the next 20 days, I hope.
Matt Stauffer:
Okay.
Michael Dyrynda:
As things go, it's deadline before requirements.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And because my lovely wife is expecting, she's 35 weeks and two days today, at time of recording, so it's crunch to get it all done before I go on parental leave, so.
Matt Stauffer:
Yeah. That's going to be interesting deadline timeline there.
Michael Dyrynda:
Yeah.
Matt Stauffer:
35 weeks, and you said you have a 20 week board directive?
Michael Dyrynda:
20 days.
Matt Stauffer:
20 days. Okay, because I was going to say, "That's not going to work.", but 20 days. Okay, 20 days works.
Michael Dyrynda:
Yeah.
Matt Stauffer:
Got it. Cool.
Michael Dyrynda:
Yeah, so I've got 20 days to finish this thing, and then depending on when the baby gets here, I'm taking six weeks off work.
Matt Stauffer:
Six weeks, yes. I love this. Are you still going to be podcasting stuff, or you're taking it the whole way off?
Michael Dyrynda:
We'll see how we go.
Matt Stauffer:
Right. All right.
Michael Dyrynda:
During the day, my eldest will still be in child care four days a week, so it will just be me, and my wife, and newborn for most of the time and it will just be working around sleep or lack thereof, and things like that.
Matt Stauffer:
Yeah. Sleeping whenever you can, basically. Yeah.
Michael Dyrynda:
Yeah, that's it.
Matt Stauffer:
I love it. Well, you all know, and Michael especially knows, that I talk forever because on the Road to Laracon podcast I was supposed to talk for 10 minutes and it ended up talking for over an hour, but today we actually have a hard one hour deadline, which is going to be very interesting because Michael and I especially could just talk forever.
Matt Stauffer:
So we're going to see how well I'm capable of actually holding myself in. So we're going to jump right to the topic. So the topic here is, let's just call it Jetstream at the simplest, but really what we mean is just the idea of auth presets in Laravel in general.
Matt Stauffer:
So if you had to describe that to a five year old, what would that look like?
Michael Dyrynda:
My experience, I thought about this the other day, and Jonathan did a really good job at explaining-
Matt Stauffer:
Yeah.
Michael Dyrynda:
... his eloquent stuff to a five year old, and Caleb, I thought, went the extra mile explaining it to-
Matt Stauffer:
To an actual five year old.
Michael Dyrynda:
... varying degrees of age. I've only really got experience with a two year old and you may as well talk to a wall sometimes, because a lot of it is just agreeing with whatever noise comes from their mouth.
Matt Stauffer:
Yup.
Michael Dyrynda:
But in terms of a preset, I suppose explaining it a five year old, I would say a preset is, not even specifically just software, a preset is something that allows you to get from start to finish much quicker.
Michael Dyrynda:
So if we're building a Lego car, if the Lego car already has the wheels and the platform, the base of the car, attached, you don't have to put them together, that's preset in a way, where you're going to put the doors on, or put the driver on, or put the roof on the car.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So it's a way to help you get from nothing to a more advanced state, so somewhere further on down the road without doing the repetitive, boring stuff, and working on... You customize. You want to put a red door on, or you want to have blue door on, or you want to have a girl driver or a boy driver.
Michael Dyrynda:
It's customizing the bits that are specific to what you envision in your head, or in the case of a Laravel application, the bits that are specific to your business, or your SaaS, or you're side project idea, or whatever it is.
Michael Dyrynda:
So the preset is taking away all of the stuff that is the same from every single project and letting you just focus on your bit, the things that make your snowflake special.
Matt Stauffer:
I like that. And I think that especially that last bit right there, I was thinking, as you were talking, the pitch for these presets, and honestly, for frameworks in general, like we were talking about before we started recording, is it's the pieces that you do almost all the time, right?
Matt Stauffer:
So for me, talking to my son, I think it would be, "Do you know every single time you make a car, you've got to start by doing the same six pieces together, the wheels, and this and that? What if you just showed up to make cars and there's just 50 wheel bases set up and could just start." Oh, my gosh, that would be... So yeah, that's what the presets are.
Michael Dyrynda:
Yeah.
Matt Stauffer:
I love that.
Michael Dyrynda:
And it's good that you mention the framework, because in a way, a framework, whether it's Symphony or whether it's Laravel, or Cake, or whatever, it is a preset. It takes away all of the session stuff. It handles middleware, it handles HTTP, it handles routing.
Matt Stauffer:
Yeah.
Michael Dyrynda:
All of that stuff, in a manner of speaking, is getting you from nothing, an empty index.php file to I'm ready to start building my application, the things that actually matter to my customers.
Matt Stauffer:
Yeah. And for a while, talking about Jetstream and auth presets, for a while, it was just you either used the auth preset or you don't, so this wasn't even as if there were different presets, it was just, do you or do you not want this particular piece of the framework to show up in this app.
Michael Dyrynda:
Yeah.
Matt Stauffer:
So it was only later, when there was more than one option. Usually, I would jump right from here into, when's the last time you used the system? But I think that's actually less relevant. I think what's more interesting to me is, well, the next thing is often, can you describe it to somebody who, let's say, has been writing just raw php for ages?
Matt Stauffer:
And then, I think, go into, when's the last time you didn't use it, I think, is where I want to go? But let's start.
Michael Dyrynda:
Yeah.
Matt Stauffer:
To someone who has just been writing hand-rolled, vanilla php for ages, they're starting to get the understanding of the value of framework in general, talk about the specific value of this Jetstream space of auth, and users, and stuff like that.
Michael Dyrynda:
For anybody that's been doing it for a while, chances are that you have got some way of picking up from project-to-project. Now, that could be that you're just copying and pasting files from your last project to the next project.
Michael Dyrynda:
But someone who's been doing it for a while, in my mind, is someone that has probably been working on the same project for a long time. They've gone into a business, they've been there for five or six years, and the application is an application that the picked up when they started and it was a php4 app that they had to get to php5, they were forced to do it, but they weren't necessarily bringing anything in.
Michael Dyrynda:
So their view of the application development world could be skewed a little bit. They might have heard about frameworks, or they might have heard about Laravel specifically, but in my mind, I think someone that is still writing vanilla php is probably not necessarily keeping up to date with modern php development more broadly.
Matt Stauffer:
Yup.
Michael Dyrynda:
They're probably not using Composer to pull in packages. They're probably not doing any of the more modern practices. And so, using a framework and using a preset really means that if you are starting in your application, you don't have to copy and paste stuff.
Michael Dyrynda:
And more importantly, if you're using something that exists as a package, it's probably vetted by the community. There's hundreds, if not thousands, of eyes looking at code. There is way more coverage of testing of that as a result, and way more edge cases are handled because you've got more people doing it.
Michael Dyrynda:
And if you're a single developer working somewhere in that environment, or one of two or three people and you're all writing it like this, you probably don't have a security expert. You're not a Scott Arciszewski in the community. You should not do that, or we need to push forward.
Michael Dyrynda:
Even a Marco saying that we need to push the security practices, and things like that. And those experts that you don't have if you're just building stuff on your own.
Michael Dyrynda:
And auth is a really critical part of our application, where if you get it a little bit wrong and you're prone to session hijacking or SQL injection, or anything like that, the frameworks are built to handle all that stuff for you so you don't have to worry about it.
Michael Dyrynda:
And that's the main thing, that you don't have to worry about these things because if something goes wrong, there's thousands, and thousands, and thousands of people that are affected by it.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And it's in the best interest of all of those people to make sure that things like that don't happen.
Matt Stauffer:
Yeah. So you haven't heard this yet because I just finished editing it, but the episode right before yours is, Authorization and Authentication, or Authentication and Authorization with Joseph Silber.
Matt Stauffer:
And so, in that episode, which everybody but you just listened to, we talked about the fact that authentication is saying, who am I? And then, authorization is asking the question of, what can I do?
Matt Stauffer:
So as we've talked about Jetstream and these auth presets being auth presets, we've at least introduced the basic idea to listeners that these are presets that make it possible for you to reuse code that allows you to do that, but can you actually walk through what things were included with the old auth presets, and then, now that Jetstream is around, what things does it add that now we'll have access to going forward but we didn't before?
Michael Dyrynda:
Yeah. So I reckon it was Laravel 5.5. Pre-5.5, you got included in your application a user model, some routes to handle login and registration, and maybe password reset, maybe?
Matt Stauffer:
I think not password reset.
Michael Dyrynda:
Yeah.
Matt Stauffer:
But I am curious to see. We'll look it up.
Michael Dyrynda:
Yeah. But back then, it was Bootstrap 3, I think. It hadn't even been updated to Bootstrap 4 yet, and it was like, this is what you get in the framework and you can use it, and go from there, or you can't, as you said earlier on, that it was just there and it was take it or leave it kind of thing.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And then, in Laravel, I think it was 5.5, we added the notion of presets, where Laravel would ship with a variant, which was, I think, the Bootstrap one, and you could swap in a View one, and it would give you the same scaffolding, the same login form, and things like that, but they would be View components.
Michael Dyrynda:
And then, I think it was Samantha that was responsible for the react components.
Matt Stauffer:
Yeah, Samantha Geitz.
Michael Dyrynda:
And so, there was a react preset, and as part of that, there was an organization that spawned on GitHub, the Laravel Frontend Presets organization, which then gave birth to the tall stacks, so Tailwind, Alpine, Laravel Livewire, and there was the ZURB one, there's a Tailwind one, just the vanilla Tailwind one, Bulma.
Michael Dyrynda:
All kinds of different CSS frameworks have got their own scaffolding or preset, and you could just run a command and it would pull in the package into your application, it would copy those assets across. It might move some of the default ones, and then you would have that.
Michael Dyrynda:
So if your preference was to use something like Bulma, instead of having to figure out, okay, I need to NPM install Bulma, and then run NPM, run dev, and then build all of these components, the preset was about fast-tracking that process and getting you to a place where using your CSS framework of choice or your JavaScript framework of choice, with those components.
Michael Dyrynda:
So they all looked the same. It was always using user name and password, email and password. It was always a registration form. It was always a basic dashboard that says, "Welcome to your dashboard.", and that was essentially it.
Michael Dyrynda:
And so, it was around getting the authentication stuff, and when Taylor gave his talk at Laracon online last week, at the time of this recording, on the 26th of August, he spoke about how it was always not quite what he wanted in terms of a scaffolding, and that's where we saw announced at Laracon last week the notion of this new project called Jetstream.
Michael Dyrynda:
Not only gives you the login and registration, but it gives you the next step, which is user profile management so you can go and change your name, your avatar, change your password. It has support for teams if you wanted that. It gives you the ability to do two factor authentication. All of these things that are fairly common in a modern web application.
Michael Dyrynda:
It's those things that Laravel gives you the login, but then you have to build those things yourself each time.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And so, having that included, and as a first party package, which means, going back, thousands of eyeballs, lots of testing, lots of people using it, and things like that.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So it really simplifies that, but the presets are one thing. Even just having the Laravel/Laravel repository on GitHub, in a manner of speaking, that is a preset.
Matt Stauffer:
Yeah.
Michael Dyrynda:
It is a preset to get you to having Laravel installed, and so anything that expedites the process of going from a blank Git project or a blank folder on your computer, to having the ability to do routing, and requests, and validation, and accepting requests from forms and putting them in the database, that is a preset. That is a scaffold of some description.
Michael Dyrynda:
And on the Laravel thing, there are decisions that you might not agree with. For example, you may not want to have a models directory when Laravel 8 comes out, and so you would fork the Laravel repo and you would create your own so that you could create your on projects from this other repository which doesn't have a models directory.
Michael Dyrynda:
And you could have a whole bunch of pre-installed packages. You might not use Laravel's authentication, you might use Google, for example, use Google at work, so you'd use Google authentication, and that's all built into your base repository, so any time you start up a new project for work, it's already ready to go past the point of the boilerplate.
Michael Dyrynda:
And that's really what the presets are all about. It's about getting past the boilerplate that is the same in all of your applications, and getting you right into the building part of it.
Matt Stauffer:
Yeah. There's a couple notes in there that I wanted to share. One of them is I would, just so you know, many people over the history or time have tried to fork Laravel so they could maintain their own. Don't do it. Just don't do it.
Matt Stauffer:
If you're listening to this, if you're within the sound of my voice, don't do it. You're going to regret it. There's a lot of values that can come from it but there's a lot of costs, and we're actually working on something with Lambo right now, and if you don't know, Lambo is a command line tool that I set up for making it easier to spin up new Laravel apps. It's just a layer around the Laravel installer with, funny enough, Lambo presets.
Matt Stauffer:
And the idea is that if you want to apply it, it requires a certain set of packages, or something like that, every time you spin up a new app, you'd use Lambo for that. But I know that's not what Michael was actually specifically suggesting, but I just want to get it all in yours brain. If you're getting started and you're tempted to do that, don't do it. It's not worth it.
Michael Dyrynda:
I agree with you on that.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Because there's the maintenance burden because changes happen to that Laravel repository all the time, which means if you want to have your own take on it, but want to keep up to date with the main stuff, you've got to keep those things in sync.
Michael Dyrynda:
Periodically, usually ever major release, I will run a Laravel shift over it, just to get it up to speed, but yeah, keeping it up to date, you are correct, it is painful. It takes a certain kind of sadist.
Matt Stauffer:
Yeah. You keep up with Laravel more than most people, right? And so, if it's a little painful for you, for somebody who's just getting started, it's going to be a lot painful. So again, no judgment on people like you who have chosen to do it.
Michael Dyrynda:
I would not recommend it. But it is an approach.
Matt Stauffer:
But yeah. But another note, so you mentioned the Laravel/Laravel repository, so it's not actually something we've mentioned before on the thing, but just so everyone knows, there's two main repositories on GitHub, Laravel/Laravel and Laravel/Framework.
Matt Stauffer:
Michael, can you really quickly tell us the difference between the two?
Michael Dyrynda:
Mm-hmm (affirmative). So Laravel/Laravel is a skeleton of a new application. So when you run Laravel new, if you're using the Laravel installer, if you run Lambo new, or it's just Lambo, isn't it? You got rid of that new keyword.
Matt Stauffer:
I think so.
Michael Dyrynda:
So yeah. So if you had Composer global require the Laravel installer and you were to run Laravel new, it would clone down a copy of that Laravel/Laravel repository. It would drop it into the folder, it would run a whole set of scaffolding steps, so it would run Composer install, it would run php Artisan key generate, and things like that, and it would get you a fresh copy of the application.
Michael Dyrynda:
Laravel framework is, I guess, the mono repo of all of the Illuminate components. So these are all the components that make up the core of the framework that handles the authentication, that handles your Artisan console, it handles caching and queues, and all of that kind of stuff.
Michael Dyrynda:
So that's where the core functionality of the framework is, and Laravel/Laravel is the application structure, so it's got the app directory, the HTTP controller, and all of that kind of stuff. And so, that's what you typically work in with your application, so you wouldn't normally go into the framework or the vendor folder unless you were making contributions to the framework itself.
Matt Stauffer:
Yeah, that's good. So we talked about the fact that in the pre-Jetstream world, you could set up different preset and there's also a whole bunch of community-contributed presets.
Matt Stauffer:
In Jetstream, you're not just going to get to inherit all those ones you had mentioned. Bulma and Bootstrap. There's two main ones that you get in Jetstream. Can you talk a little bit about the tech stack of each of those two options?
Michael Dyrynda:
Yeah. So the tech stacks that were demoed at Laracon were basically Inertia.js, which is a project from Jonathan Reinink, and Laravel Livewire, which is a project from Caleb Porzio.
Michael Dyrynda:
And where Inertia is building a modern monolith where it gives you JavaScript View components, so it's all built atop View, and you get View components for everything.
Michael Dyrynda:
So you get all of your login is a View component, all of your two factor authentication stuff is a View component, and it allows you to leverage your server side routing and your controllers, and all of that kind of stuff without having to create a Blade view that hits a View js component, that then makes an API request to another controller, this condenses it all and really flattens that structure, so essentially you have one View that handles all the intel.
Michael Dyrynda:
So Inertia will handle swapping between those views and swapping in the components that you'd need from a single view, and also allows you to leverage the native application routing, so you don't have to have a controller that displays the Blade view, that displays the View component, as well as an API controller that you then make all your data requests to.
Michael Dyrynda:
And then, Livewire is a project from Caleb, as I mentioned, which is phenomenal. It's based on the Phoenix something. It's a Phoenix thing, right?
Matt Stauffer:
Phoenix Live, something.
Michael Dyrynda:
You always talk about it.
Matt Stauffer:
Live View? Is it?
Michael Dyrynda:
Live View? That sounds right. Phoenix Live View, that sounds good.
Matt Stauffer:
I think so, yeah.
Michael Dyrynda:
We'll call it Phoenix Live View. It's based on that idea where your components are self-contained in their view, in their behavior. It handles all of the JavaScript interactivity, the JavaScript keeping your things in sync. It's like View, but on the server side, js on the server side.
Michael Dyrynda:
So they're two different approaches to get to the same place, and they're both really powerful, and they're for people who are predominantly php developers, Laravel developers. Either of those approaches is great. View gives you a little bit more of that reach into the JavaScript world whereas Livewire keeps you close to the php.
Michael Dyrynda:
So with Jetstream you pull in the package into your application, you run Jetstream:install, and you give it the stack that you want to use, so whether it's Inertia or Livewire, and it will, like the preset commands, it will pull everything that it needs, so it will pull in your config, any migrations. It will set up your views and your routes, and all of that kind of stuff for you, and really get you to a place where your application is ready to go with users, with user registration, with teams, if you want.
Michael Dyrynda:
On the install command, you can parse dash, dash teams, and it will pull in team support into that for you as well. And so, it really takes that next step of these were the next things.
Michael Dyrynda:
So previously, you might have used another variant of a preset in Laravel Spark which, for those of you who don't know, it was a first party paid application that had a lot of this stuff in there. It handled billing, it handled teams, it handled products and plans, it handled user registration, all that kind of stuff to scaffold up a software as a service application.
Michael Dyrynda:
And Jetstream decouples all of the user and team management from Spark, and Spark will, as I understood it from the presentation, the very brief touching on it, Spark will just be the billing component via either Stripe or Paddle, and then the teams and user management side of things comes out into this Jetstream package which is free and open source.
Michael Dyrynda:
So it's exciting to have that. I was going to dig into it before this until I realized that I was an hour late for this, so I will have to dig into it afterward now.
Matt Stauffer:
Didn't get that breathing room.
Michael Dyrynda:
Yeah, yeah.
Matt Stauffer:
Yeah, that's helpful. So there's Livewire, which is its own JavaScript framework that facilitates you writing mainly php and Blade code. And then, there's Inertia, which is a wrapper around View and it also can be wrapped around other things, but in this particular template that we're getting with Jetstream it's wrapped around View, and it allows you to get rid of some of the cruft that happens and the duplication that happens when you're doing basically a single page app view in Laravel.
Matt Stauffer:
And so, you're writing simpler Laravel routes that map directly to your View components rather than having to do multiple steps of indirection that Michael was talking about earlier.
Matt Stauffer:
So in that context, let's say I don't know where to start. Let's say I don't know Livewire, let's say I don't know Inertia, which, in your mind, and I didn't prepare you for this, but which, in your mind, is going to be the one that's easier for somebody who is not a total View expert, who's not a Livewire expert, who's maybe a little bit familiar with both, with View at least, a little bit familiar with Blade, where do you think they should start?
Michael Dyrynda:
I think if you're a little bit familiar with either of them, then either, realistically, is a good place to start. They're not too far removed from just doing either or, right?
Michael Dyrynda:
If you are less familiar with JavaScript, or you're less familiar with View, I would definitely start with Livewire, purely because it keeps you in php for 99% of what you're doing.
Michael Dyrynda:
You are still writing Blade views, you are still writing php classes, and Livewire handles all of the interactivity and the reactivity, and all that kind of stuff, mostly transparently. And so, you don't need to jump from a php controller to a JavaScript view component. You can just stay all in php.
Michael Dyrynda:
And you've only ever got your Livewire component open and if you're splitting your code editor, you've got the php on one side and the Blade view on the other side, and that's all you're ever dealing with.
Michael Dyrynda:
With Inertia, it's the same thing. You've got php controller on one side, and View component on the other side.
Matt Stauffer:
Right.
Michael Dyrynda:
And it really just depends on how familiar you are with View.
Matt Stauffer:
Yeah.
Michael Dyrynda:
If you're comfortable with View, Inertia is a really good place to be.
Matt Stauffer:
Yeah.
Michael Dyrynda:
But if you're not really then I would stick with and try Livewire first.
Matt Stauffer:
Yeah.
Michael Dyrynda:
For sure. Of the two.
Matt Stauffer:
Yeah, and I did a YouTube video saying, I think, basically the same thing, which is that if you are learning Laravel and you don't know View at all, and that's some people, right? Some people are learning Laravel as php programmers, and then Livewire will probably be an easier learn because it is basically Laravel's components, which you should learn anyway when you're learning Laravel, with a little bit of extra sauce on it.
Matt Stauffer:
However, if you're coming from being a frontend developer and then you're learning Laravel, you're almost definitely going to have an easier time working with Inertia and View just because it's View. It's basically just a better interaction between View and your Laravel app than normal View and Laravel, at its simplest.
Michael Dyrynda:
Yeah.
Matt Stauffer:
All right. So the next question. We spent a lot of time on this beginning one, because it's just a new concept, is usually, when was the last time you used this. But really, I am very curious. When was the last time you built an app that didn't use one of the auth presets?
Michael Dyrynda:
Most of my work ones, believe it or not, don't.
Matt Stauffer:
Okay.
Michael Dyrynda:
Don't use the auth presets. So we use Google for a lot of our business. We use it for mail-
Matt Stauffer:
Oh got it.
Michael Dyrynda:
... we use it for the G Suite, Docs, and things like that.
Matt Stauffer:
I'm sorry.
Michael Dyrynda:
And so, as a result of that, all of our user authentication is managed in Google. So our IT support team is responsible for creating user accounts, and then once they have an account they can log into any of our applications.
Matt Stauffer:
Got it. Okay.
Michael Dyrynda:
And the applications manage authorization.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So Google will authenticate that user and say, "Yup, you're in." And then, you can log in but you might just get met with a 403, right?
Matt Stauffer:
Yeah.
Michael Dyrynda:
Because you're not actually allowed to be in that application and access anything. So most of my work applications don't use the presets, or don't use any of the Laravel authentication. So we swap out. We use Socialite, because it's the easiest way to get up and running, and we just put in the functionality there for interacting with Google for authentication.
Michael Dyrynda:
But it's more common that I wouldn't use the presets myself in my work scenarios.
Matt Stauffer:
That makes sense. If we're talking single sign on, or SSO, those are very common contexts where you're not going to use that. So is there any other type of context where you find yourself not reaching for the auth?
Michael Dyrynda:
No.
Matt Stauffer:
Okay.
Michael Dyrynda:
I am. I've been working on a project recently and initially, we started with Inertia, and I'm not the strongest JavaScript developer and I felt that was holding me back. And after Laracon Online in February, when I saw some of the stuff that you could do with Livewire, we made the switch, and we got so much further so much quicker-
Matt Stauffer:
Okay.
Michael Dyrynda:
... has more proficient php people using that. So I've been really enjoying Livewire, just the self-contained nature of it all, and being able to contain a view that is responsible for itself, that knows how to submit itself.
Michael Dyrynda:
For example, with Laravel's logout, you have to post to the logout endpoint, and to do that, the old scaffold would have a button that would have a hidden form, and it would have a document, dot find whatever, and it would submit that form transparently.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Well, with Livewire, you could have a logout component that contains that form, that logic, all in one place and it would be responsible for intercepting the click, handling the logout, and then handling the redirect.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And that would all be self-contained within a component.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So it's really nice in that regard. And so, I love the work that Jonathan has done with Inertia. I played around with it very early one, and he continues to spend a lot of time on it and really refine it. And from an observational perspective, it seems though he's really sweating the small stuff.
Michael Dyrynda:
He's making sure that things like scroll position are preserved if you go backwards and forward between. Even if you leave the site and come back, if you were rolling it yourself, if you were using the Basecamp turbo-links, it might not necessarily do that, and if you are rolling it yourself, these edge cases that leak into your application because they're JavaScript. Changing routes on the page doesn't know because you're not really navigating in your browser if you're just using JavaScript to swap things out.
Matt Stauffer:
Yeah so, I think for me, if I were to not use the auth it would be single sign on or it would be something where the users are actually interacting with it, like an API.
Michael Dyrynda:
API.
Matt Stauffer:
And all that is to say, all the rest of the time I'm using the presets. Every software as a service, everything. Even just fun little tools where I'm not sure if there's going to be a login, it's just so cheap to have the auth in there.
Michael Dyrynda:
Yeah.
Matt Stauffer:
And then, one day need it. It's so much easier than not to have it in there, and then later discover I want it and try to fork it in after the fact, or whatever. So yeah.
Michael Dyrynda:
Here's one thing, because we just spoke about it on the Laravel News podcast that we recorded this week, the auth colon, colon routes method, not using Jetstream, using the current UI auth presets, it will add the auth colon. colon routes façade call into your routes/web.php.
Michael Dyrynda:
Now, what a lot of people might not know about that is that you can pass key value pair into the routes method and disable certain endpoints.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So for example, if you are building an application where you wanted users to be able to login, but you didn't want them to be able to register.
Matt Stauffer:
Yeah.
Michael Dyrynda:
You can pass as an array key register, and then false as the parameter, and it won't register the register route, so you don't have to worry about figuring out how to remove that from your application.
Michael Dyrynda:
So if you're building an invite only platform, or if you're building something where you want to have a login form, but you want to manually create accounts to an admin area or something like that, that kind of stuff is really cool.
Matt Stauffer:
Yeah. That's a really good point and I think that locking those things down when you're not using them definitely can save you a world of pain when you didn't realize that users, and really, when you've got people signing up for your app and you didn't want them to, there's often you get one of those spam bursts where all of a sudden there's 500 entries in your users table that are all just jumble.
Michael Dyrynda:
Yeah.
Matt Stauffer:
So speaking of situations like that, what are some circumstances where you or people that you see in the Laravel community have been tripped up by the auth situation? Common challenges people run into or things that you wish everybody knew.
Matt Stauffer:
You just told us one of them, it's really great. In auth routes, you can disable certain things. What are some other common gotchas or tips.
Michael Dyrynda:
That's a good question that I had not thought of.
Matt Stauffer:
Take your time.
Michael Dyrynda:
Other than disabling things that you're not using, I think that's really important. If you don't want people to register, forgot passwords. It's an interesting one because in most scenarios, you'd probably want most of those things.
Matt Stauffer:
Yeah.
Michael Dyrynda:
But in fact if I look at it here, what are some of the options? You've got login logout, register, if you don't want people to be able to reset, or you don't want to do password confirmations. If password confirmation or password verification is not something that you want to do, those are probably things that you want to nut out.
Michael Dyrynda:
Confirmation, you can use the confirmation stuff. So you could wrap your routes in a password.confirm middleware. Not really a problem but just something that you could -
Matt Stauffer:
Tip or trace is good too.
Michael Dyrynda:
... actions.
Matt Stauffer:
Tell us more about it. What happens if I wrap it in that password.confirm?
Michael Dyrynda:
These are all stolen from Povilas, from the Laravel Daily, but yeah, these kinds of things, maybe we just link to this directly.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Rather than me doing it. Honestly, the login stuff is fairly bulletproof. The only thing that might trip you up is redirection where you can have a redirect property, or you can have a redirect method. Actually, that's a good one. Let's talk about that.
Matt Stauffer:
Yeah.
Michael Dyrynda:
On your register controller there is a redirect to property, and if you're just wanting to redirect your users to a static endpoint, by default, this would be route service provider colon, colon home, so this is a constant defined in app service provider. There is also a redirect to method. And if that method exists, and Laravel use that over the property.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Why the method, what's the difference between the method and the property? The method allows you to put some logic around the redirect. So if you just want to redirect everyone to slash homeless slash dashboard, use the property.
Michael Dyrynda:
But if you wanted to detect that an administrative user has logged in, or if you wanted to detect that someone had logged into your SaaS with an expired subscription, you might redirect them to the payment page. "Hey, you're expired. You need to re-up the subscription. Your credit card is expired.", or whatever.
Michael Dyrynda:
Admin users, you might not want to take them to the default homepage of your application, you might want to redirect them to the admin dashboard. So you can do checks like that inside the method so that's a handy thing and maybe people get tripped up on that.
Michael Dyrynda:
But, yeah. Creating users is always a pain as well, if you're wanting to do it manually and you haven't got an admin area. The only real answer to that is to use Tinker.
Matt Stauffer:
Yup. That's what I do.
Michael Dyrynda:
And to create the user. I created a package for it ages ago but it's just one of those things. When you're creating your application that you don't have register endpoints for and you need to get a user in there, just fire up Tinker.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And just do it that way.
Matt Stauffer:
Yup.
Michael Dyrynda:
But, broadly speaking, all of this stuff is so ingrained in the framework now. It's so ingrained in Laravel. It's been around basically since, I don't know, at least as long as I've been using it, so Laravel 4, the ability register users, I'm pretty sure. It's stretching my memory.
Michael Dyrynda:
It's tested, it's had thousands of eyes over it, it's secure, it's all of that stuff. There's not really much, and the last of the things that might have irritated you around the redirect to has been fixed, because it used to be a string, right, and now it's a constant that's defined in your route service provider, so it's in one place.
Michael Dyrynda:
If you want to change it, you don't have to go and change it in your login and control, and your register controller, and your forgot password. You used to have to change it in three places, and that's all fixed now. It's just a constant.
Michael Dyrynda:
So I don't know. It's fine. It's all pretty good. I don't run into too many issues. I don't hear of too many issues. I don't have as much time as I used to sit on Laracast and in the Discord, and all of that kind of stuff, so maybe there are som beginner challenges that aren't there but the Laravel team, and Taylor in particular, are really good in seeing those things and addressing them.
Michael Dyrynda:
And I would suggest that you, and the work that Titan does, would be better positioned to see the kinds of issues because you're building way more projects with this kind of stuff as well.
Matt Stauffer:
Yeah. We're also rescuing a lot of projects, and that's the easiest way to say it. So yeah.
Michael Dyrynda:
Yeah.
Matt Stauffer:
It is in rescues, which is probably close to half of our work these days. Not rescues but half of our work is some mixture of either rescue or just legacy upgrade, or whatever, and I think the most common tip I would have or mistake I see made is not knowing what the presets can do, the auth system can do and the presets can do, and therefore doing it on your own.
Matt Stauffer:
And when you do it on your own, not only are you duplicating work but you're also working against the framework, and anytime that you're doing something that the framework can do but you're doing yourself you're missing out in the benefit of all the stuff that Michaels been talking about all these eyes on it.
Matt Stauffer:
You're writing code yourself that you didn't have to, and also you're writing code that you know it's very unlikely that the average Laravel programmer is as excellent at creating secure user interactions, as every single set of eyes that's been put on the auth thing.
Matt Stauffer:
I sure am not. I can tell you that for sure. I do not know nearly as much about auth, and safety, and all that stuff as the sets of eyes that have looked against these presets you know do.
Matt Stauffer:
And so, I think the biggest gotcha is just not knowing what you can do, and so it's things like that. You mentioned the password confirmation thing and some of these are new, right, so it's great.
Matt Stauffer:
We need to learn that they exist and then use them, and so the password confirm that Michael was talking about is something like, you can do all these things with your saved password, you've been logged in for however long, but then if you want to go to do a very specific thing that's a little bit more touchy and a little more important, then you have to confirm that you still know your password, so somebody can't stumble across your computer and change your billing information or whatever.
Matt Stauffer:
Those types of things, or things like the password reset, or disabling the password to reset if you want it, or user has to, I forget what the name of the trait is, but where a user has to confirm their email address before they actually are able to use your application, and that kind of stuff.
Michael Dyrynda:
Yeah.
Matt Stauffer:
Knowing those things-
Michael Dyrynda:
Must verify, I think.
Matt Stauffer:
Yeah, must verify email or something.
Michael Dyrynda:
Yeah, something like that.
Matt Stauffer:
Yeah. So knowing that those things exist and taking the time to read the docs and learn what is there, takes you to the next level with the presets, because the presets give you the basics, right?
Matt Stauffer:
The presets give you what the vast majority of applications will need, but the presets also give you access to all these other tools, but they're not going to stick them all in there, so use the presets, and then go read the docs and see what else is there so that when the time comes for you to need that you don't have to get in and go write it yourself, so.
Michael Dyrynda:
Yeah. I think that's a fairly common things throughout Laravel is, to quote JMac, "Grok the framework." Try and use the framework as much as possible. Rely on the thousands of eyes, rely on the durability of the framework. There are very few circumstances that I can think of, none that I can think of, where you would want to do something beyond what the framework offers in terms of authentication.
Michael Dyrynda:
It's got hooks. For example, if you wanted to do something when a user registers, there is a registered event that is fired when a user registers, and if you needed to create a team or apply a role to a user that's freshly registered, you can listen to that event, and then make whatever modifications to that brand new user that you need to do.
Michael Dyrynda:
So Laravel does a lot of the legwork for you, but it also gives you points to hook into the framework and do, again, that stuff that is unique to your application.
Matt Stauffer:
Yeah. And for those who don't know that the person you just quoted is Jason McCreary the creator of Laravel Shift. I realize I should have done that at the beginning because we throw around names of people we know and not everybody knows, so yeah.
Michael Dyrynda:
Yeah.
Matt Stauffer:
All right. So because we're trying to keep it short this time, I'm going to try and start reaching the second half of our questions much faster than I would if I had my druthers. So what else do you want to talk about on this topic? Is there anything about, as you think through the presets?
Matt Stauffer:
You've maintained the Tailwind preset for ages, so had the opportunity to see people's issues, as stuff like that. I assume you still do, but I think the presets are starting to deprecate a little bit.
Matt Stauffer:
Is there anything that you want to talk about or you think is really important for people who are new to the framework to really understand about presets or Jetstream? Again, Jetstream is brand new. We considered delaying this talk a little bit but we said, "You know what? This is enough. This is enough to get started with it."
Matt Stauffer:
But Jetstream, or presets, or anything like that, is there anything you really want to make sure we get a chance to cover?
Michael Dyrynda:
I think probably the main thing that I see on the Tailwind preset itself is pull requests to update the minimum version. So we've got it set as carat 1.0. And every time Adam Wathan tags a new release of Tailwind, when someone submits a pull request to make it caret 1.1, 1.5, 1.7.
Matt Stauffer:
Yeah.
Michael Dyrynda:
You only need to do that kind of stuff, and this is a Composer thing in general, or a versioning thing in general, you only need to make that kind of change if you specifically only want to ever have that version, right?
Matt Stauffer:
Yeah.
Michael Dyrynda:
Or if you're having issues. I know lots of people are having issues with Composer at the moment where if you've got version 1.0, but 1.35.37 is available and there's a hundred releases between that, it can have a bit of a problem resolving dependencies through there.
Matt Stauffer:
Yeah.
Michael Dyrynda:
But generally speaking, caret 1.0 means anything 1.0 up to 1.99,000, whatever, right?
Matt Stauffer:
Yup.
Michael Dyrynda:
So that's the main thing. Most people don't really have too many issues with the presets themselves. If the next hotness comes out to dethrone Tailwind CSS, you might want to create a preset for that. Presets are really good for setting up scaffolding of CSS and JavaScript, setting up your default state for an application, something that won't change between applications. That's why they work well as a preset because you could Composer-install or Composer-create a project for Laravel new, your project.
Michael Dyrynda:
You can Composer-require your dependency for whichever preset you choose, Tailwind or Bulma, or whatever, and then you're ready to go with that. You don't have to go to the Tailwind docs and figure out. You need to NPM install Tailwind CSS. You need to run NPX in it, or Tailwind in it, or whatever, and then go and modify your Tailwind config, and then go and add that into your webpack.config, or webpack.mix, or whatever it is for getting Laravel mix to then compile it.
Michael Dyrynda:
All of these steps before you even get to run NPM run dev. And a lot of that, if you ever wanted to create your own preset, document the steps, put it into a file, and then publish it.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And if nothing else, the next time you want to use that stack, you are ready to go.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And the benefit is that other people might use it. So there's the Laravel dash front end dash presets organization on GitHub, which has a whole bunch of these. It will be interesting to see what happens with that stuff in the future with-
Matt Stauffer:
Yeah. Jetstream.
Michael Dyrynda:
... Jetstream. We're entering a new era at the moment. I think we're going to start seeing more applications in the wild, it's like, "I know that."
Matt Stauffer:
Yeah.
Michael Dyrynda:
That kind of thing. I've seen that before. It's funny whenever Adam tweets that he's seen another website that's using Tailwind, because you can feel. Every time I say a website where it's got that slightly bold code.
Matt Stauffer:
Yeah.
Michael Dyrynda:
In backticks.
Matt Stauffer:
Yup.
Michael Dyrynda:
That's Tailwind's-
Matt Stauffer:
Yup.
Michael Dyrynda:
... topography plugin.
Matt Stauffer:
Yeah.
Michael Dyrynda:
But you can pick it now.
Matt Stauffer:
Yeah.
Michael Dyrynda:
And there are elements of Tailwind that you can pick, right, but it's not like every Tailwind website looks the same.
Matt Stauffer:
It's not like Bootstrap.
Michael Dyrynda:
Except we're all using Indigo.
Matt Stauffer:
Yeah, but that-
Michael Dyrynda:
If we all would stop using Indigo, please, because that's my color.
Matt Stauffer:
Yeah, he had ownership on that one ahead of time. Yeah. I should have asked Taylor this beforehand, but do you know whether or not Jetstream presets are going to be as easily extensible and community addable as the UI presets were?
Michael Dyrynda:
I don't know. I think, because, the current Artisan UI, it's not an extendable thing. You can register a command that listens to Artisan UI, and then your thing here.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So I haven't looked at it closely but it doesn't look like that would be any different.
Matt Stauffer:
Okay.
Michael Dyrynda:
There's obviously more views that you would need to build, because there's now a team component, and a two factor authentication component, and all that kind of stuff. So these extra things that you would need to build if you wanted to create your own, for me personally, I could almost definitely see maybe the Tailwind one that I built going away because it's included with Jetstream.
Matt Stauffer:
Right.
Michael Dyrynda:
Now, now everyone will want to use Jetstream and that's fine, but I think if you want to get some really high quality components that look good, that are highly functional, and that are going to have thousands of eyes over them, then Jetstream is the way to go.
Michael Dyrynda:
I think it's possibly more likely that the tall stack one might disappear before the Tailwind, because the Tailwind one, you may just want Tailwind and not worry about any of the other stuff, right?
Matt Stauffer:
Right.
Michael Dyrynda:
You might not want Jetstream, you might not teams, you might not want any of that, but might want to build a Laravel application that just has Tailwind.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So I think in this instance, more generic has probably got a little bit more longevity-
Matt Stauffer:
Yeah. That's good point.
Michael Dyrynda:
... than the more opinionated tall stack one.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Or the lid stack which is Laravel shared Tailwind, right?
Matt Stauffer:
Yeah.
Michael Dyrynda:
Because they're more generic, they probably have a little bit more longevity, because you're just getting the bits you need, but as the maintainer of the Tailwind one, if you need teams and users, and thins like that, I would say, just install Jetstream.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Because it's going give you all these components, it's all going to look coherent, it's gonna look good, not that the previous set looks bad, but it all ties together and it all fits, and it gives you the extra functionality that you need to get to that next step of ready to build your app.
Michael Dyrynda:
But if you're building, for example, a Jigsaw style page, where it's just, I just need Tailwind, and I want to scaffold out a thing, and then I'm going to cache that behind a Cloudflare forever, and whatever, then yeah, sure, the Tailwind preset is great, or the Bulma preset is great, or whatever. So yeah, I think the longevity is in the basic nature of the generic nature.
Matt Stauffer:
And if anyone doesn't know that distinction that Michael's talking about there, so when you use something like Jetstream you're going to get multiple things You're going to get the back end auth routes, which is actually extracted to a separate package called Fortify, but it's just being pulled in by Jetstream so you don't have to think about that.
Matt Stauffer:
You also get all the front end views and components and stuff like that, and then you also get the bootstrapping, the work it takes to set this site up that he was just talking about for this to be a Tailwind site, pulling in all the dependencies, configuring your webpack configuration. Right?
Matt Stauffer:
What happens if you want this to be a Tailwind site and have your configuration, right, and you don't want all the rest of it? Well, that's what those older presets still are going to be very useful for. So how often will people continue using the older presets that are full auth? Probably not that often, which is why Michael was saying there's a good chance they'll start going away.
Matt Stauffer:
But the older presets, there's plenty of them that are useful purely just for setting you up to work in a particular stack, and like we were talking about, if you do have sales sites, and I said almost all my sites have auth and I should actually step back from that, because we do a lot of sites that are purely public-facing that attach to a different site that has auth.
Matt Stauffer:
And so, there's an entire Laravel app that is purely just public-facing, and we don't need auth in those and we wouldn't use Jetstream in those and that's a time that we still would want that convenience of having Tailwind set up without having to go look up the docs, right? So that would be a perfect time for looking that up.
Michael Dyrynda:
Yeah.
Matt Stauffer:
So last question before we start rolling up. Are there any really great articles or tutorials, or really just places you think that people should go to learn about Jetstream or presets in general?
Michael Dyrynda:
If not now, in fact, definitely not now at the time of this recording.
Matt Stauffer:
Right.
Michael Dyrynda:
But hopefully, by the time this episode airs, which will probably be in a few weeks from now.
Matt Stauffer:
Yup.
Michael Dyrynda:
The Laravel docs will be updated and the Laravel docs are almost always the best place to get the most up to date information on how to use any of this stuff.
Matt Stauffer:
Yup.
Michael Dyrynda:
So if you're looking for scaffolding, you can search Laravel docs for scaffolding, and you'll find the authentication stuff in there. Once the Jetstream docs are up, you'll find that.
Michael Dyrynda:
I don't know of any specific articles. I will give you a link the article on Laravel News-
Matt Stauffer:
Oh yeah.
Michael Dyrynda:
... for the auth tips and tricks, because I think there's some really cool stuff in there around the things that we discussed around auth routes, and the route service provider, and the redirections, and things like that.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So they're the main things, but the documentation is almost always really good. Having seen the code for Jetstream, just reading through the code and seeing how that behaves is really good. It made me feel like a competent developer looking at it.
Matt Stauffer:
Which you are.
Michael Dyrynda:
No. Well, sometimes I don't feel it. I think we're all like that.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Sometimes you bash your head against the wall and usually it's me, this is after midnight Michael, where after midnight Michael is, "This is easy. This is just one little change and I'll just get it working.?
Michael Dyrynda:
And that part of my brain is always much louder than the part of my brain that saying, "Go to sleep and this will be immediately obvious to you in the morning." Right? So Jake and I were going back and forth about this with the project that we're working on at the moment, around how we manage the current team.
Michael Dyrynda:
This was before Jetstream, this was before any of this existed, so we're like, Jake had a get current team method on the model, which would go and get the current team, and I, being the belligerent developer that I am, just got rid of that and replaced it with the current team model and put a current team ID on the user model and left it at that.
Michael Dyrynda:
And we went back and forth and we recorded a podcast episode about the pros and cons of both, and he was still firmly in his side, and then Jetstream came out and as the code scrolled past I said, "Look, Jake.
Matt Stauffer:
I win.
Michael Dyrynda:
"Taylor just put a current team ID on the user model and the current team relationship."
Matt Stauffer:
I love it.
Michael Dyrynda:
So he said, yeah, he had a few people over to where he works to have a little viewing party, a socially distanced, very responsible, viewing party with adequate distance between everyone, and he said he about ripped out the projector and went home when he saw that because he was not happy about it.
Matt Stauffer:
That's odd. Yeah. You feel validated, you feel good about yourself. I like that.
Michael Dyrynda:
Yeah, so there are things like that. I didn't know what Jetstream was at the time and Jake had messaged me and he's like, "Dude, this is freaking sweet.", and I sent him a screenshot of me half built in two different states of a team management thing. I said. "I'm going to cry myself to sleep now.", because I was halfway through building this from scratch and now I don't have to do it.
Matt Stauffer:
Don't have to.
Michael Dyrynda:
Because it was similar enough.
Matt Stauffer:
Yeah.
Michael Dyrynda:
I can keep some of the stuff that we had and just swap in Jetstream.
Matt Stauffer:
That's awesome.
Michael Dyrynda:
So I'm definitely going to play around with that a little bit later on.
Matt Stauffer:
That's awesome. And you were already a Livewire so you could just plop in the library one.
Michael Dyrynda:
Yeah.
Matt Stauffer:
Yeah, I love that.
Michael Dyrynda:
Yeah, so presets. And now that we have the rage, and the sadness, and all of these all these feelings that I had, when I found out about this thing I'm like, "I could have saved all of this time and worked on the next step.", which is the next step from having teams is application-specific logic around what happens with those teams.
Matt Stauffer:
Yeah. Yup.
Michael Dyrynda:
The team can only have three members, so instead of worrying about how to get the three members into the database-
Matt Stauffer:
You could have been doing that, yeah.
Michael Dyrynda:
... I can worry about stopping you from adding a fourth member, or stopping you from adding something beyond your subscription inclusion, and things like that. So, these are all those little things.
Matt Stauffer:
Yeah. But it's like the, do we want everybody to have all their college debt paid off? Hashtag politics here. Is it bad that everyone else gets it easier even if we've had to do this before? No. If you ever hear me and me and Ian Landsman talk about what the olden days of SaaS writing was like or like, "Thank God for Laravel. I don't care if it was hard then, I'm happy it's easy now.", so.
Michael Dyrynda:
Yeah, that's right.
Matt Stauffer:
All right, so your personal fun moment. On the Road to Laravel podcast, I gave you my list of songs and you were very, very, very surprised by the pedestrian choice I made in choosing YouTube. So I wanted to know for you, what is your guilty pleasure listening, that maybe not everybody knows? When you're about to listen to this, you hit pause on your Spotify listening history. What is your guilty pleasure music?
Michael Dyrynda:
I'm a sucker for pop music.
Matt Stauffer:
Okay.
Michael Dyrynda:
When I drive my son to childcare is usually just the radio in the car until he demands... You know what? It's The Wiggles at the moment.
Matt Stauffer:
That's awesome.
Michael Dyrynda:
I will message my wife, and I will just be like, "Wiggles lyric."
Matt Stauffer:
Right.
Michael Dyrynda:
Just The Wiggles lyric. The other day I was outraged about a Wiggles song about wearing glasses. I can see clearly now I've got my glasses on. The detail on the ant's antenna, I'm like "No. I'm getting outraged that the purple Wiggle, because there is no way known that you can see the detail on an ant's antenna just because you put your glasses on."
Matt Stauffer:
So unrealistic, Wiggles.
Michael Dyrynda:
I'm calling them out on it.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Yeah so Eli is past the phase, he'll go in and out of Wiggles at the moment. But, yeah, there was a period of time when I was at work, a song would come into my head and I would just have to listen to a Wiggles song.
Matt Stauffer:
Yeah. Yep.
Michael Dyrynda:
So any of the parents out there, I think would understand that. They're just catchy and they're kind of good. And maybe I'm wrong because Rhi doesn't necessarily-
Matt Stauffer:
She doesn't like them?
Michael Dyrynda:
... agree with me on that.
Matt Stauffer:
Okay.
Michael Dyrynda:
But if it's not The Wiggles, it's probably a Taylor Swift, or something like that.
Matt Stauffer:
Okay, yeah. When you said pop that's what I was wondering if you were going in that direction. I asked you to do the semi-embarrassing thing I'll do the same. I've never seen The Wiggles before. My kids never got into it. I know who they are but I've never seen it.
Matt Stauffer:
But it's similar, I have a pop guilty pleasure and a kid's guilty pleasure, and my pop guilty pleasure is Taylor Swift as well. I didn't get into her music at all until a couple years ago, and now I'll just blast her music and I have no shame.
Matt Stauffer:
But the other one is the Frozen II soundtrack and the Moana soundtrack, and my kids won't even be here and I'll just be playing them and singing along. I'm like, "Yup. This is dope. I love this. It's great. No shame here."
Michael Dyrynda:
Who know, 20 years ago, when Dwayne, The Rock, Johnson was just The Rock that would be Samoan God, demi-God Loki telling us all that. You're welcome.
Matt Stauffer:
Yeah.
Michael Dyrynda:
It's so great.
Matt Stauffer:
If you haven't seen it, there's an Instagram video of him singing one of the songs on his daughter.
Michael Dyrynda:
To his daughter?
Matt Stauffer:
Oh my God, it's hilarious she doesn't know it's him, and it's so freaking funny. My daughter makes me play that one over, and over, and over again. Oh, hold on. One more guilty pleasure song.
Matt Stauffer:
This is not my guilty pleasure, it's my children, but I don't know if you saw on Twitter about I had seen this little clip of a woman dressed up as Anna or Elsa, and she runs into the Let It Go song, and then it comes in this, I don't know, it's a trap version of it, and she just starts twerking to this stuf-
Michael Dyrynda:
Yeah.
Matt Stauffer:
And it was six seconds long. It's like, "I must have the song.", and so somebody found the remix for me, and I played it for my kids, and now it just plays basically non-stop at my house, and it's just over, and over, and over, and over, and when it plays, everyone has to get up and dance, so that's that's an additional as well, so.
Michael Dyrynda:
I love it.
Matt Stauffer:
Okay, so you have mentioned multiple times a project you're working on that you've done a fantastic job of not naming and I appreciate you know you trying to be all thoughtful here, but now is the time for the plugs.
Matt Stauffer:
So how can people follow you? How can they pay you mone?y What is this mysterious project you've been working on? And what else would you like to plug at the end of this show?
Michael Dyrynda:
Yes, I'm on Twitter @michaeldyrynda, which you can put in the show notes so that I don't have to spell it out.
Michael Dyrynda:
The project that I've been working one is something that I've been working on since this time last year, and in anger since April, and it's a project called Then Ping Me, and it is scheduled task monitoring specifically for Laravel. We were going to launch it last week, and a combination of things stopped us from doing that. And number one, we didn't want to get swallowed up by the Laracon news cycle.
Matt Stauffer:
Yeah, the hype.
Michael Dyrynda:
Number two, we found a really nasty bug that caused very bad things to happen, which I'm actually thankful we found in beta.
Matt Stauffer:
Yeah.
Michael Dyrynda:
So we've got probably 50 or 60 users in early access at the moment.
Matt Stauffer:
Love it.
Michael Dyrynda:
And it's ticking along nicely. You can check it out at thenping.me. Now that Jetstream is out, we are going to be integrating that-
Matt Stauffer:
Nice.
Michael Dyrynda:
... for all of our team stuff, and getting that up and running. So I'm hoping by the time this episode is out that it is out there.
Matt Stauffer:
I like it.
Michael Dyrynda:
If you are unsure about the difference between scheduled task monitoring and error tracking and why your error tracker is not necessarily the best tool for tracking your scheduled tasks, I gave a talk at the Laravel Meetup, which you can check out on meetup.laravel.com, where I go into a lot of detail about the kinds of things that can happen with your scheduled tasks and how monitoring them is the better approach than just relying on Century or Flair, or whatever, shouting at you that something broke, because it may not necessarily break.
Matt Stauffer:
Love it, that's good. All right, so we got you on Twitter, we got you on that. Is there anything else you want to plug or anything else people can follow you on? We talked about your podcasts and all these things will be in the show notes as always, but anything else you want to plug before we go?
Michael Dyrynda:
I want you all to be safe and healthy, and look after each other, and be kind to each other.
Matt Stauffer:
Yeah.
Michael Dyrynda:
Because if you've taught me nothing else, then you've taught me that.
Matt Stauffer:
Oh, my God.
Michael Dyrynda:
To be kind to one another.
Matt Stauffer:
I'm going to cry. Thank you, Michael. Well, I think this is the most appropriate ever Laravel podcast episode where I get to talk about how I could talk for hours, because first of all, we have a history of having talked for hours and enjoyed it, and second of all, I had to keep this so short, but we did it.
Michael Dyrynda:
Yeah.
Matt Stauffer:
It's basically right around an hour.
Michael Dyrynda:
Yeah. It's my fault.
Matt Stauffer:
I'm not going to be late, and I really appreciate you, but also, I just appreciate everything you do for the community. You are so freaking giving, and kind, and wonderful, and positive. Thank you so much for everything you do for all of us, and you're the man.
Michael Dyrynda:
Cheers, man.
Matt Stauffer:
All right, I'll see you next time. Bye.