Andy Hinkle

Andy Hinkle

Laravel Developer


April 23, 2025

Semi-organized

Andy and Dalton recap a minor league hockey game, share clever developer workflow tips like the gateway pattern and personal site automations, and reflect on how recent AI changes changing their coding habits.
00:00 - Hockey Game Adventures
08:24 - Gateway Pattern
18:09 - Migrating Legacy Systems
27:56 - Website Development and Automation
32:58 - Leveraging AI for Content Creation
34:47 - Automating Personal Websites
36:29 - AI in Personal Projects
42:08 - Andy tried Laravel Cloud again
45:56 - AI Workflows
52:35 - Cursor vs VSCode Agent Mode

Transcript

Andy Hinkle (00:02)
Hey everybody, welcome to another episode of The Midwest Artisan. I'm your host, Andy Hinkle.

Dalton McCleery (00:07)
And I'm Andy's buddy, Dalton, your co-host.

Andy Hinkle (00:12)
Dalton how you doing,

Dalton McCleery (00:14)
I'm doing good, I'm doing good, how about you?

Andy Hinkle (00:16)
Hey, yeah, we finally got together. We went to a hockey game. Me and you, we got our wives together. We went to dinner, went to hockey game. it was like a minor league hockey game. And it wasn't just minor league. It was like a few levels below minor league. So they're good. It was entertaining. But we saw the Evansville Thunderbolts. They're a part of the SPHL.

Dalton McCleery (00:25)
Yeah. Yeah.

Yeah.

They're pretty good.

Andy Hinkle (00:39)
And I had to look up what the heck that is. You kind of like gave me a little bit of information that I went, sent me down a rabbit hole after the game. I was like, like, where are they ranked? Cause you know, competitively. you have the NHL and I did some research on this. You may already know, but just for the dear listener out there, um, we have the NHL and then below that we have the AHL, the American hockey league. And if you're listening to show, um, Dalton is doing a tiered list here. Like with his hands. Yeah.

Dalton McCleery (01:06)
I got the visuals.

Andy Hinkle (01:09)
So have NHL, then the AHL, American Hockey League. So the AHL is like a, I learned they're more of a feeder teams, or they're feeder teams into the NHL. So if somebody gets injured or something, they're sending up players to NHL. So then you have the ECHL, which is below the AHL. And if you're keeping up, that's the East Coast Hockey League. Then below that, you have what's called the SPHL, the Southern Professional Hockey League.

Thunderbolts are located. So as the SPHL. So let me tell you, that is some entertaining hockey. The Thunderbolts, think they were, correct me if I'm wrong, but they were like seventh out of 10 in the league or something like that or in their region.

Dalton McCleery (01:58)
Yeah,

they, they were, and I've got, it's interesting that you bring this up because we're going to the hockey game tonight to see the Thunderbolts again. Ironically, they've been on quite a hot streak recently. So they were seventh place when we went a couple of weeks ago. They are in the semi-finals tonight against the number two seed team in, their region right now. And it's a best two out of three game and they've already beaten this other team, the Peoria Rivermen.

Andy Hinkle (02:16)
What? Wow.

Dalton McCleery (02:28)
They already beat this other team at their place. So if they win tonight, they're going to the finals of their, of their like region. So they're, kind of, they're kind of on a hot streak since.

Andy Hinkle (02:35)
Hmm. Wow. Sweet.

Wow. That's wild.

personally, I love to go for the fights. I think if you're a fan of watching the hockey fights, absolutely wild. And so whether it was fueled by just the pure hatred of the other opponents, I guess, or just deep love of the game, they're just putting it all on the ice. But I didn't know that. I thought being seventh of 10 in the league, they wouldn't make it to their semifinals or their playoff play, whatever it is. But I thought that's awesome. It was a really good evening.

Dalton McCleery (02:49)
Mm-hmm.

Andy Hinkle (03:09)
One of my favorite moments came from you and then hearing you talk about this you're passionate about your how you're passionate about hockey But you look over and you go. Hey our goalie. He's pretty good. So I've heard And so and so honestly that was the most like sports related thing I've ever heard you say and so Coming from a guy who like you would you would look physically pained when when I talked about football

or sports or anything when we work together, you just kind of roll your eyes. Hey, did watch the game last night? No. It was a good time.

Dalton McCleery (03:44)
Sorry. Yeah.

Yeah, it was really good. I'm glad you came. I think we had a great time. If they go to the finals, they go to the finals next week. So I'm hoping like you, I got into hockey quite late, especially in this season. don't normally like sports. I always played at sports events for band because I was a band nerd. just, sports lame, right?

Andy Hinkle (03:56)
Gotta go.

Dalton McCleery (04:11)
But now, now that they're like in the semi finals, I'm hoping for like a real heated, you know, especially since they already beat this team on their home turf. And if they beat him again on our home turf, they go to the finals. I'm expecting just like. I'm expecting the game to go like three hours because they're going to fist fight everybody on the roster. This is my hope. So I love it. I don't know any of the rules. I don't know any of the player names. I just know like, yeah, the goalie is good or whatever. And apparently he's like in the top three of whatever league.

Andy Hinkle (04:27)
Wow. Just... I love it. Yeah. Yeah.

Dalton McCleery (04:41)
they're in, you know, that I don't know, I like it. It's fun. It's a great time.

Andy Hinkle (04:44)
Mm-hmm. Yeah, it is a

lot of fun. Yeah. I just love it because that's most I've ever seen you get in sports. So I was like, yes.

Dalton McCleery (04:53)
Hockey's my jam. I don't know what it is. It's my jam.

Andy Hinkle (04:54)
Yeah, good ol' talk. Yeah.

Hey folks, we have some shout outs. It's just long overdue. just people reach out either on Twitter or blue sky, whatever the case or even on other podcasts. So other podcasts we have North Meets South, which is Jake Bennett, Michael Dyrynda various kind of similar podcasts to what we have going on. They talk about just boss Jake. They talk about work happenings and whatever else. I've talked to that. I think I've talked about them many times. They're just thought I love their show.

Dalton McCleery (05:17)
streak.

Andy Hinkle (05:27)
Um, but shout out to him. He, called us at the beginning of the show. said we're semi organized with our show notes, which, which might honestly be the most accurate description of our podcast yet. It's just semi organized.

Dalton McCleery (05:34)
Ha ha ha!

Andy Hinkle (05:42)
We got this little Trello board which helps us remember what we ran into since last episode. But let's be honest, it's usually like three or four weeks ago. So it's just more like jogger memory. also shout out to the Trello background themes. I'm staring at it now. Ours is the background theme is literally a cornfield. It's like a random picture of a cornfield on the of a road. I didn't pick it when I typed in like the Midwest artisan as the title.

Dalton McCleery (05:57)
Yeah

Andy Hinkle (06:08)
It was like, here's some recommended themes. And it was like a cornfield night. Yep. That looks like, that looks like my drive on the way to the grocery store works for me.

So yeah, thanks for the shout out from Jake and Michael. Justin Jackson, this was like a month ago at this point, but he made me more like a couple of months now. He congratulated us on our new jobs and mentioned how weird it must be for us to be in two separate places after eight years of working together.

So appreciate you Justin and he's such a good dude. I met him a few times now and most recently I had lunch with him at Laracon in Dallas, but I first met him back in Laracon New York too, which is like the 2019 I think it was he was the MC and He ended up sitting next to

A group of us at lunch and man, he was just like a ball of energy when he came to the table. He was just so super curious about everyone, where they work, what they're doing, what the, you know, how they got to Larry con, et cetera. just their life story. And I remember thinking like, man, I need to take a page out of his book and put myself out there more and, just, just love that guy. So, but yeah, he, it was very nice of him to reach out and congratulate us. So, thanks for that, Justin.

And then lastly, Jason Beggs And honestly, if you have any shout outs on me, this is just some, I jot it down on my list here, but if you had any more, but Jason Beggs, he's always dropping helpful feedback after episodes. he'll DM me on Twitter. Just he'll be like, Hey, like we talked about the carbon type hinting thing. That was just the first one that comes to mind. He's like, maybe it's happening because of this or that, but he's always looking out for us.

Dalton McCleery (07:29)
Shout out.

Andy Hinkle (07:54)
checking in on, asking how things are going and asking about how the new job's going. So just that kind of support really sticks out. And just another example of how great the Laravel community is. we appreciate all the kind words and check-ins. So good folks all around. It really keeps us going. So, yeah, much appreciated. Yeah.

Dalton McCleery (08:13)
Get Andy all worked up now.

Yeah, we appreciate you.

Andy Hinkle (08:16)
Yeah, it was like,

I was thinking, I was listening to all these, and we didn't get lots of love. We just needed to get some shout outs out there. So much appreciated. Cool. Yeah. back to our semi-organized show, we would love to talk about the gateway pattern.

Dalton McCleery (08:24)
Love received, love returned. Thank you guys.

Andy Hinkle (08:35)
We also have the swapping legacy system and keeping data integrity. And so I think that was something you added, which I have a lot of, I'm really curious on that one too, because I've done that numerous times. So yeah. And then some personal websites of how we like to automate them. And so I think that'll be a fun one just because you and I are both like,

Dalton McCleery (08:42)
gonna be a fun one. Yep.

Andy Hinkle (08:57)
we love doing things like this but just having to constantly maintain your personal website. So some things, some tips in there to keep it automated. We could talk about that.

Dalton McCleery (09:01)
Hmm.

Andy Hinkle (09:09)
And yeah, we know some things we might be able to get to as a cursor update, the editor cursor editor and just AI in general. feel like there's this big shift going on right now. And I hate talking about AI because I feel like everyone's talking about it, which is that's just not entertaining. But because I have some workflow things that have changed for me recently. So just curious there.

Dalton McCleery (09:30)
Mmm, little tease.

Andy Hinkle (09:32)
Yeah,

so gateway pattern. A while back, we touched on the idea of one of our shows, we talked about the idea of using local fakes or mocks for services. So something lightweight to help during development. And Jake introduced me to how they do their gateway pattern. And I love it. It's been really nice to work with. The basic idea of this is like you're talking to an external API directly. actually,

Dalton McCleery (09:59)
Mm-hmm.

Andy Hinkle (09:59)
actually North needs South. They just talked about the same subject. I had it on our list and I'm like, Oh, well, they're going to talk about it too. um, but I have some, yeah, Shahabah shaykh. Um, so.

Dalton McCleery (10:05)
Jake.

Andy Hinkle (10:11)
The idea is instead of talking to the external API directly like Stripe, you go through a local gateway. Stripe's good example actually. So you use the card numbers like 424242, whatever, you simulate a charge. Then if you want a bad charge, like a decline, you do like, I think it's like 4,000 and then you do all zeros, but the last number is like, I think it's a one or two. And you do it for a decline.

Dalton McCleery (10:27)
Hm hm hm hm.

Andy Hinkle (10:40)
normally in development you might be calling Stripe sandbox API with those numbers. And so even the Laravel docs recommend that you hit their sandbox directly. They suggest you don't mock it, you just hit it directly. So we did that on a project a while back and we ended up, our tests we ended up taking a long time.

Dalton McCleery (10:51)
Mm-hmm.

Andy Hinkle (11:00)
to run through all the tasks, either on locally and through CI. So if we want to push a quick change, we're like, all right, I'm take a little break and come back, right? So you remember those days?

Dalton McCleery (11:09)
Yeah, take

a lunch break. 20 minute. I mean, because we had to test so much stuff with Stripe, right? Create this user. Yeah, way too, way too long.

Andy Hinkle (11:19)
Yeah. But, with the gateway pattern, you obstruct it behind a service. So. Like, it'd be like a service provider. And so you create along with the service provider, you would have these two different gateways. You would have like a fake gateway and then like the production gate gateway. So, and then each one of these services would have the same interface. So you'd be like, get invoices or like your API calls that you're actually going to make.

So you have two implementations, one for production, calls the role, actual, you know, obviously the role API, then one for local dev. And you might even have a third for like sandbox. And,

In your service provider, you buy the implementation based on the environment. So you could just do a simple conditional in there. And if you have something like I just talked about, more complex, like a sandbox one, or I've been kind of leaning towards environment variables because there's been times where like, I actually do want to test the production and then you have to comment out the production line.

So it's the best part is, is like local or testing. When you're, when you're on local, when you're writing your tests, you don't have to mock their API responses. It just, cause it goes to the fake gateway. It doesn't care. Right? So when you're writing your test or when you're working locally, it's hitting the same fake gateway. You don't have to write the mocks, the

that no more HTTP fake or anything. So that sounds really appealing to me, know, stuff like that. Yeah. So there are, yeah, yeah. There are some cons, but I think the pros heavily weigh out the cons. Like, you know, the, just talk about the cons first of like, you do have some drift of like real world behavior. And I've run into this a few times of like where we'll have a mock, but then

Dalton McCleery (12:50)
anything to not do those mocks

Andy Hinkle (13:14)
Maybe the response isn't what the documentation says the response is. How many times does that happen?

I think the trade-offs on the flip side, it makes testing way easier, consistent, speeds up local development. Yeah, the good old separation of concerns. So just allows for easier testing. You don't have to know if you're hitting a fake or a real service. And,

Dalton McCleery (13:26)
Hmm.

Andy Hinkle (13:37)
you know, no worrying about like hitting rate limits on sandbox API environments or testing credentials or the worst case or the worst thing possible in hitting the production API locally when you don't realize it. So I think all of us guilty of that. so have you, I'm just curious about your thoughts here. Have you used this or, we're integrating with third party API.

Dalton McCleery (13:52)
Ugh.

Andy Hinkle (14:02)
In future would you think about reaching for something like this?

Dalton McCleery (14:06)
Most of the time no if unless it's something wicked complicated then I probably would there are there have been several instances where I I wish I would have because the API was super simple when I started out It's like just easy you call the HTTP facade get what I want done and done I can I could fake that pretty easy in the test, you know the HTTP Fake is pretty easy compared to just like a normal mock but in the instance of like

Stripe is a great example. I would love to have done this gateway pattern on that site that we were working on because instead of waiting 20 minutes for tests to run just to essentially save the customer ID in the database so that the site could see that it was a real customer isn't necessary in my opinion. So something like this would be perfect for that. So anything wicked complicated,

So gateway pattern would be perfect for those large scale integration things.

If you're just going to call like, the YouTube API and say, give me all the YouTube videos for this channel. Hmm. It might be a little bit too much boilerplate for, for that. But if you're going to build out like a whole YouTube scraper, probably should look at doing something other than trying to fake and mock a bunch of stuff in your tests because you're never going to get it one to one. And if they change the API, then now you're screwed because now you're going change all of those tests. So yeah.

Pros and cons, I probably wouldn't reach for it unless it was something big. Like a big site. Is my opinion.

Andy Hinkle (15:39)
Mm-hmm. And I could see

Laravel's side of it because Stripe is so fluent and Laravel's been vocal in about their API changes of how they've been frustrating over the years, like some breaking changes. So can see on their side of like, you know, test the sandbox API, because if something goes wrong, you really, especially when you're dealing with payments, you probably want to determine that. So I can see like actually wanting to hit a sandbox.

Dalton McCleery (16:00)
Mm-hmm.

Andy Hinkle (16:03)
And I think in some cases, think in CI I would love to hit a sandbox, but I think locally it's just like, want to get going, you want to move quickly. And so it would be nice to have like a, in this pattern of like, can either a production sandbox or local where it's just completely faked and you don't have to think of anything. I would love to see something like where it uses maybe like the either saloon package or the Laravel HTTP facade or something where.

Dalton McCleery (16:09)
Mm-hmm.

Andy Hinkle (16:30)
It hits more of those directly like you can set up some mocking through there maybe snapshots like you hit a production API and Then it it makes a snapshot response based off of that and makes me a fake like the use of the faker class so there's something a package idea been like thinking about but of Something like where it can create it can implement these this gateway pattern where it can create a fake Generated from the response of that

Dalton McCleery (16:38)
That's a good idea.

Mm-hmm. Mm-hmm.

I like that.

Andy Hinkle (16:59)
Saloon is something where it can it can kind of generate like DTOs from the response But it doesn't generate like a like a fake response. They don't have anything like that. So Yeah, it's a kind of a really interesting Concept and I've been really a big fan of it lately lately

Dalton McCleery (17:16)
If you can make that package and make it like super smart, like where it just like web scrapes all of the Stripe API documentation, it takes those test responses and saves them in like a cache or something or whatever. So whenever you call customers, it now it has that response instead of hitting production and faking that response like primo, primo.

Andy Hinkle (17:25)
All that.

I'm my wheels turning because

theoretically you could give it like the swagger JSON. know, that you could just plug in swagger JSON and generate it from that. So I my wheels turning. We may, we have to collaborate on this idea. So cool. Yeah.

Dalton McCleery (17:43)
yeah, yeah.

Yeah, yeah, yeah, yeah. That's good. I like that

idea.

Andy Hinkle (17:55)
Yeah, well, we'll have come back to revisit this and see, do we build a package? Yeah, that's it. Yeah, sounds good. All right, have the next one, which is I'll let you take this one.

Dalton McCleery (18:01)
Yeah, TBD, TBD.

Okay, yeah, I'm curious on what you would do first because the to give you the context, there are two applications that I work on currently. There's an old version of it that's written in Vue and it has a Laravel API backend, right? Two separate things. And then there's a new version of this app that's built strictly in Laravel and filament, right? It's essentially the same app, just rebuilt and filament. So it's easier to maintain. There's nobody who works on view, view JS here where I work. So we were going to rewrite it in filament.

The problem is now that you have these two systems and you want to switch some of the users from the old system to the new system without losing any data and you still want some people to use the old system but not the new system. You following me so far? So you've got this system, this system. They both share one database that has some common things in it but they both have two separate databases for the users. So you've got users over here and you've got users over here and a couple common tables in the middle.

How in the world do you get some users from the old system to the new system and keep them in sync with their user tables?

Andy Hinkle (19:23)
So when you talk about the, like just the migrations, they're two separate apps, right? And you want to merge them, right?

Dalton McCleery (19:24)
It's a nightmare.

Yeah, what's like the first thing that comes to your head when you're like, I want to move some people over and keep some other people on the old one, but I also don't want to lose any data integrity from like the users table from one system to the other. Yeah, you set up some cron jobs that say, hey, know, sync the users from this system to that system back and forth. And how often do you do that? How, you know, stuff like that.

Andy Hinkle (19:44)
Feature flags, like.

Yeah, I'd probably do feature flag that that's where I would lean of like of their migration yet and just do like 10 at a time and just see how it goes, you know, and then just make slow incremental migrations and then it'll just help uncover things. So instead of like flipping the switch and then all hell breaks loose. so, yeah, I'd probably just reach behind a feature feature flag of like if 10 and a 10 to be.

Dalton McCleery (19:59)
Mm-hmm. Mm-hmm. Pin it.

Right, right.

Andy Hinkle (20:25)
That's we talked about multi-tenancy. It just becomes a mess. But we talked about it the show before, but I hate the idea of adding code just for a migration purposes and then having to go in and rip it out again later. It just feels dirty adding it in. But like if you did a multi-tenant setup in that case, then you have to rip it back out. So did you end up solving this or is it current? Okay, let's hear it.

Dalton McCleery (20:27)
Mm-hmm.

Agreed.

Yes, it is a,

it is a very clever solution that I didn't think of my shout out to my shout out to my boss, Jeff. He, he figured it out. We were on a pair programming session for a couple hours trying to figure out, we were going down the same route that you, had initially started. We were like, we'll do some feature flags. You know, maybe there's a, you know, a column in the database that say this user uses the new system. This user is the old system.

And we'll set up some cron jobs to essentially sync that data back and forth from system A to system B based on whatever that flag is. Right. And there are, there are some changes from, from database to database, like database, the old database uses usernames and the new database uses emails. But the old system was still just like the email address was the username. So it wasn't that crazy, but it was like this weird complicated of like usernames, email, emails, username on the sync. So Jeff.

had the idea of why don't we migrate all of the users from the old system to the new system's database once instead of continuously, and then we set the database connection of the old system to the new system so that everybody logs in and still pulling the user data from the new system, but they see the old system. Unless we do that feature flag of, they can now see the new system.

Andy Hinkle (22:15)
Mmm, okay.

Dalton McCleery (22:16)
So everybody's

still using the new systems database, but can see the old system. And there's no, there's no syncing And it's just that it's, I think he did it in like an hour and like everybody just, I mean, there were a couple of bugs to, to, be fair, there were some bugs, but I was like, that's, that's clever as hell. You just, you, you do the migration once and just point the database connection, you know, for the user's model to the new system instead of the old system. And then boom.

Andy Hinkle (22:22)
just by database connection. Yeah.

Wow, yeah, that's really clever

So to be clear, all users are using the same table now, no matter what. That's explicit. Every user's on the new system, as far as the users table goes. then every other table is just, there's a feature flag, and then that'll do a database connection name, and then flip between the two. man, that is really clever. I like that. Yeah, simple way. Yep.

Dalton McCleery (22:50)
Yes. Yes.

Correct.

Mm-hmm. Correct. Correct. Very clever. So,

so instead of trying to keep all of this data in sync constantly and managing who can, who can use what system, it's everybody uses the same database system, but just that feature flag says, you go to this site or this site, but the, but the connection stays the same based on that feature flag. Very clever. And it was going to be such a headache the way that we were going down it, you know, to keep it in sync and who can do what and who can do this.

Andy Hinkle (23:29)
Love it.

Dalton McCleery (23:35)
Super clever. I would have never thought of that in, I wouldn't say a million years, but probably like a hundred hours of pair programming. That would probably be my last thought of just do all the migration now and not have any, there was, mean, I think there was maybe like 10 minutes of downtime if that.

Andy Hinkle (23:49)
Yeah.

How did the migration go? Because that's, that's where I would have some caution about moving everyone at once. I may want to do like, like I said earlier, a feature flag of just 10 users. Okay. Let's see how that goes. Okay. Let's do 50 and then let's see how that goes. And maybe if everything is thumbs up, no problems. we flipped the switch and let everybody in, but just like, did you do like a incremental,

Migration orders are just like flip everything over Okay

Dalton McCleery (24:19)
Just everybody. I mean we

did some testing right like well, let's change this little flag for you know, this user Let's see if because he has a user himself. He's like, okay. Let me copy my user over to the new system See if I can log in To the old system and see if it hits the new systems database. that works. Cool. Let's move everybody over Just swap, know, hey, the username is now mapped to the email column Bing-bing-boom

Andy Hinkle (24:45)
Mmm, yeah.

Dalton McCleery (24:46)
You know, there were some code changes that we had to make, know, like when, whenever you're looking for a user instead of, know, where username we had to swap it to, you know, where email, et cetera, et cetera. But for the most part, it was done in like a day. were like, man, you know, it's going to take several days for us to plan and map it out and write all the code and do it. And in that pair programming session, he's like, let's just do it this way. And I think the next morning he had already had it done and we were good to go.

Andy Hinkle (25:01)
Wow.

Wow,

yeah, all set. Wow, I love it. Yeah, those, when you write a migration like that, like an actual database migration, if that was case, it's always scary when you're on that because as soon as it'll say like migrating, you'll see the dot, dot, dot, and you're like, that's all you know. And then you have to like go poke around the database table to make sure it's working. you're really just trusting that it's working and.

Dalton McCleery (25:26)
Yeah. huh. huh.

Andy Hinkle (25:36)
Then if something goes wrong, like halfway into migration and it fails. Oh man, that's just, yeah, it could get a little scary.

Dalton McCleery (25:39)
Now you're screwed.

Yeah, now you're screwed. So this is very clever. I don't know if anybody else has situations of migrating legacy systems to new systems by keeping the same data. But this worked out well for us. I mean, this was over a week ago at this point. And again, there were a couple bugs, a couple code changes to say, hey, know, where username to where email otherwise been fine. And nobody, nobody's none the wiser except for us. know.

Andy Hinkle (26:06)
One thing I did...

Yeah.

Yeah. one thing I did before on an app was I created like a temporary table. Like, so I had an artist in command that kind of did the migration that would move, you know, old records to new records. But I didn't want it to go to production right away. The other thing is we already had new productions writing to the production database. Like it was already live and I needed to move these existing records over there.

Dalton McCleery (26:34)
Mm-hmm.

Andy Hinkle (26:36)
So what I did is I created a temporary table and ran the artisan command just to see what would happen. So I basically created a clone of the table, put it in here and then, cause I didn't want to bring the data in locally cause it was a lot of data and too I just, I didn't want to have that on my local machine. And so what I did is I created an artisan command that wrote to the temporary table and again, I had to put that temporary code out in production. hated that part.

but it allowed me to see if there was gonna be any migration issues, like migrating the table from A to B to the new columns. And it actually did, it showed some issues of like, there'd be like a dashes, there'll be like an empty string instead of like a nullable or like a dash character instead of a nullable, stuff like that. Just like what's expecting a certain character set.

Dalton McCleery (27:27)
Mm.

Andy Hinkle (27:31)
So it allowed me to identify those issues that only people in production would would end up doing

Cool. Anything else you wanted on legacy on the on that? I love that. Yeah, the idea you guys came up with

Dalton McCleery (27:42)
Yeah,

very, very clever. Again, shout out Jeff, my boss Jeff. I'm going start calling him boss Jeff. We can have yours boss, boss Jake. So yeah, shout out, shout out Jeff.

Andy Hinkle (27:49)
Pasta, plastic. JJ, yeah.

Cool. Yeah. The next topic I want to talk about is personal websites and you and I both have personal websites in a Hinkle.com and

Dalton McCleery (28:07)
DomeClear.com. Easy peasy.

Andy Hinkle (28:08)
There you go.

Yeah. Simple enough. the, everything on there is fully automated except for like the blog posts and, um, or, obviously if I want to make some changes or whatever, but for like, for example, this podcast tomorrow at 10 AM, I'll have a pull request open to merge it into as content on the site. And so, um, I prefer that over like just automatically adding it to a database record. Um, just for multiple reasons, just for like, if I ever decide to not.

Like the site doesn't even have a database. So, um, if I decide to like, you know, move it somewhere else or just change the, how it wants to display the content, I'll have to deal with migrations or whatever. It's just like, Oh, just add this field or whatever, you know, make it work. But anyway, um, how it works is there's just a GitHub action, um, that runs daily at 10 AM It'll check transistor for any new episodes.

Dalton McCleery (28:48)
Mm-mm.

Andy Hinkle (29:04)
And so it'll go through and then if there is a new episode, it'll automatically create a markdown file from the content. So how it works is it creates the markdown, it uses the title, puts in the date, and then it'll do a description. And my favorite thing, it'll download the transcriptions about what we say, because I have the transcription on the site. It'll be like a text file, displays those on the site. So create some PR and then the tests will run.

Dalton McCleery (29:24)
Ho ho ho ho hi.

Nice. Nice.

Andy Hinkle (29:33)
I have this podcast model. This podcast model is by, it's a sushi type model like by Caleb Porzio.

And how it works is the, the rows in the model are my record, my markdown records from resources inside my resources folder. have the markdown like resources, podcasts, you know, whatever episode it is. So it pulls from there and then each of the attributes. So it'll be like post published at colon the date. And so that would be like one of the fields. So you could just natively pool like using. Eloquent and query like, Hey, want on this page. I want to show.

Dalton McCleery (29:49)
Yeah.

Andy Hinkle (30:10)
this podcast title or whatever, or in my case, it just lists all the episodes in order by the published at attribute. So works really nicely, fully automated. Like I said, it'll come into pull request tomorrow. And that also allows me to make little changes if I want to for SEO, or whatever, can tweak it slightly. I like it a lot, makes it really easy. I love sushi, the, well, not the food, but the package.

Dalton McCleery (30:32)
clever.

I love sushi too.

Andy Hinkle (30:38)
the package. It's so good. Just like you can, it allows you to just to use Eloquent and your code is really clean. You're not doing any like regular expression to parse out these Markdown files. So I'm using common Markdown, which gives you the attributes at the top, so like the published at the top and allows you to do that. I'm now doing that same thing with my blog post. So if I, all my blog posts are all on Markdown, like with the attributes at the top.

So I have another thing I want to talk about on the site, do you have any questions or do you have some cool things you'd to do on your site?

Dalton McCleery (31:16)
I was going to say this very clever that you have all of this like automated. think I mentioned it. It's really clever. It's really cool. I wish I wish I could do that. I think I mentioned it before, but my personal site, I know this is sacrilegious, but my personal site's not built in Laravel. It's a Next.js site hosted on for sale for free because I didn't want to pay for it. I'm cheap.

Andy Hinkle (31:22)
Did take a little bit of time, but now it's completely hands off. Yeah.

Mm-hmm.

Six dollars, dog.

Dalton McCleery (31:46)
So like I can't, I can't do any of the fancy stuff that you have. I wish I could because that sounds awesome. I would love to have something very similar to what you have of like that. just automatically pulls in the latest episode and there's just a little tab on my site that says, yep. You know, podcast episodes and lists them out. And so now I really, I think, I think at this point, you know, that I love to rebuild my website.

Rebuild it like every year or every other year. I just like completely trashed the old one go with completely new I Really really want to try to do that this year. I would love to move it to cloud

but it's too expensive for me, so I'm just gonna keep it on Next.js for now.

Andy Hinkle (32:30)
Yeah, little side note on Cloud. I want to talk about Cloud on this show because I'm glad you brought that up. But I tried Cloud. I totally forgot to mention on here. But I Cloud and we'll talk about it here in a bit. yeah, it gives me a reason to try Laravel things. I actually want to try Wayfinder, but I don't have a React site or anything to play with it now. But it gives me a good reason to try the Laravel's new stuff. And so just a personal site.

Dalton McCleery (32:51)
seen that yeah yeah

Andy Hinkle (32:58)
I also have my church website, which is also completely automated. Like they have their events page, which pulls from an API where they go in, they go and add like things that are happening. And then like when this might, yeah.

Dalton McCleery (33:12)
Hang on, do you have a gateway

pattern on that API by chance? That would have been a great callback.

Andy Hinkle (33:15)
I don't, but yeah,

yeah, yeah, for sure.

but the, like for when there's a service on, on Sunday morning, it'll check the YouTube API to look if there's a, if there's a, live stream scheduled and then it'll automatically make it as a post or like a, like a message post, like, a model. So to automatically put it up there. but this is the really neat part is the, pastor he, he liked when I would name the titles and I told him, like, I'm just putting your.

Dalton McCleery (33:21)
I'm just messing with you.

cool, cool.

Andy Hinkle (33:51)
Your transcript through chat dpt and it's like I kind of note down some like what I think would be good And then I'll put it through chat to PT and it like gives me some really good ones Because he never really came up with the title for his message and so what I would do so I take his entitled transcript put in chat dpt so now what I'm doing is I'm I Go and download the mp3 from me from YouTube. I transcribe it using open open AI's whisper API which because YouTube's

Captions don't come out for like three or four days and they're highly inaccurate. so I go get from whisper, which the API costs for like an hour of audio is like 30 cents. So just for full transparency, it's not bad here. Then I turn around and take the transcript, save it to my database. So I turn around and ask it again and say, hey, using this context here, ignore the music in the beginning, ignore like the prayers, whatever, know, just get the...

Dalton McCleery (34:32)
Okay, not bad.

Andy Hinkle (34:47)
message part of that, the meat of the message, what would be the best title for that? And also what would be a short description for that? And gives me some ideas. So then it it sends me an email with the signed URL link of like some ideas. And I click the link and I massage the title slightly. If it's like, you know, some weird AI stuff, words are generated and hit save. It's like, so I can either just let it roll.

And I get a good generic title or which I get an email about. So I feel like, oh, that's not quite right. That's not, you know, uh, what I heard. Yeah. So, or if, um, so it's pretty much completely automated. So automate your life folks. It's it just like, it's just so nice. I'm like, just, I don't know when we get those emails or when, like I said, that pull request comes through for like the, new podcast episode makes it super easy.

Dalton McCleery (35:34)
super clever that you're using AI for that. I kinda like that. I know a lot of people will cringe at the AI, but the fact that you're just essentially feeding the AI the whole video and it's just like, literally listening to it and saying, hey, this is probably good. That's wild. I like that a lot.

Andy Hinkle (35:51)
Yeah, yeah, yeah, I

I come up with my own title, but then it's like they'll provide even a better one. So what I do is I like, yeah, I tell it give me five, like five options. I'll usually choose one of the five and by default, if I do nothing, it'll automatically if I do nothing, if it doesn't hear from me before noon, like if I don't go click one of the links and edit it, it'll automatically post the first suggestion. So, but I'm always on top of anyway, you know, but

So I kind of have to know to either disable that schedule thing if I'm going on vacation or something, but it makes it super easy to just automate everything. It's really nice.

Dalton McCleery (36:20)
Hmm.

Hmm, so listen, A and D, I'm very clever of you. Very clever.

Andy Hinkle (36:35)
Yeah,

so the last thing I'll leave you with on personal websites, one more automation to do. And so I just have way too much fun with these things. If I make a public pull request to like Laravel framework, Laravel docs, I have a component in there which goes to the GitHub API, pulls all of my public PRs and then puts them in a list. So if you go to my website, it says, and I think I've talked about this in my show before, but if you go to my website, it says like what?

Just about me what I've been writing about like blog posts what I've been talking about like the podcast and then what I've been working on so it'll be any of my public PR so like I'll make like a PR to Docs and I actually have one coming soon for the framework I'm wanting to work on and so it just like provides a list in there of all the PRs I've done and so it just makes it really easy that I don't do a thing it refreshes daily it just goes they get help API refreshes and caches it so but it's just

just a simple Blake component using the GraphQL, which I hate GraphQL, but using GraphQL is the only way I can, because I just wanted to make one API request to GitHub. And before I like, had to make a request to get all my PRs and then I had to make another request to get the contents of the PRs. And then I would have to make another request to see the code because I wanted to show like lines changed or something. I don't know, just kind of adding a little stuff to it. And GraphQL is the only way you could do that.

Dalton McCleery (37:38)
Agreed.

Flair

Hmm you spoken like a like a true content creator Andy Automating all of this like this content publication type stuff

Andy Hinkle (38:03)
Yeah. So.

Yeah, just automate your life, yeah.

Yeah, just like, you know,

it's just yourself and you know, you don't, I mean, how many times do you like set it up like, man, I love this. And then you, you just let it go, but you don't, you don't keep it updated or whatever. You have to go manually do it. I just, I don't do a thing. It's just like, I get a pull request. I'm like, yep, it looks good. So.

Dalton McCleery (38:34)
Interesting. So here I've, I, I just thought of this idea because I went to your website. you know, you, you, you talk about these things like automating, the GitHub contributions to add to your site. And then you talk about feeding the AI, this video to produce titles.

But what if you fed chat GPT this podcast and said, Hey, look for any time that I'm talking, I'm talking as you as Andy Hinkle. When I'm talking about building something like this and then write it into a blog post for you, publish it to your website. So when you're talking about writing these GraphQL API endpoints to pulling your contributions, that would be a great blog post, but you're not going to sit there and rewrite the same thing that you just said.

Andy Hinkle (39:07)
Mmm. Yeah.

Mm.

Dalton McCleery (39:20)
but you have it in video recordings, you send it to chat GPT or just essentially take this transcript, send that to chat GPT, it makes you a great blog post already. Like this gateway pattern, if you're gonna automate it, that's a great way to automate some blog posts.

Andy Hinkle (39:29)
Mm-hmm. I love it. And it's all like...

I think, yeah, I love that idea. Yeah, I to really put some thought into that because I've been wanting to like, I have last one I wrote that was back in February and I have like three ideas I wanna do, like for posts and it's just like, just time is just, yeah, there's no time to do anymore.

Dalton McCleery (39:52)
Mm-hmm. It's still,

it's still you. Like I can see where some people are like, ah, this is just an AI blog, but it's still, it's still you. AI is just gonna massage it into a better written format. But if they, and if you, if you could do it clever enough, you could have a link to the timestamp of this podcast where you literally just talk about the, the thing, you know? Mm, there you go. That's a freebie.

Andy Hinkle (39:56)
Right. AI generated post. Yeah.

Mm-hmm cross reference. Yeah Yeah, I have some yeah definitely have some

Love it. Yeah. Thank you for the idea definitely Get my wheels turning there. Maybe at least if it gets me a starting point, it'd be kind of cool. Like hey you guys talked about this maybe write a blog post just some like

That's where I AI to go in one day is to like, hey, like if it's looking at my database, so like, hey, you maybe want to include an index over here, just like some, just like your helpful coworker or something like coming in like, hey, you may want to do this or, you you talked about this, maybe you want to write about it. It'd be kind of interesting. So yeah, that'd be kind of the cool way to see AI to go to. Yeah. I'll have to, I'll take that a shot.

Dalton McCleery (40:41)
Hmm.

Let me know, follow up. If I see some AI generated blog posts on your website, I will require a 5 cents royalty per blog post. Thank you.

Andy Hinkle (41:01)
And I want to make,

Hahaha

Yeah, I love to I want to make mine open source too that way like I talked about the show that way people can see what I'm talking about and they can feel free to reuse this guy's like if you if when I am able to get from the open source and then Feel free to use that in the components and so that would be like one of the blog posts I want to one of the blog posts I was talking about doing is like the the layer the github contributions thing That's like one thing I wanted to like code or to write about that people can reuse it or whatever. So Yeah

Dalton McCleery (41:38)
be real,

I know we're going to get to some more AI stuff in here in just a second, but it'd be real, real weird if you had an AI generated blog post detailing the things that you use to generate said AI generated blog posts.

Andy Hinkle (41:51)
Yeah.

If it could just generate me a post and then I could just go through and do it like right the way I would, you know, I would like I talk about it and it takes my words, but then I could kind of massage it a bit. yeah, definitely a good idea.

Dalton McCleery (41:57)
Yeah, just like edit it.

Clever.

Andy Hinkle (42:08)
Cool. We talked about cloud. I want to talk about that real quick. I tried cloud and I don't know, man. Yeah, it's not for me. Well, at least for small sites. can like we talked about the one show there's a site that we that clearly like it's the perfect candidate for like using something like that for a bigger site. But I tried using personal site on there and the GitHub contribution things. I need cash for that. Like I get the list and I cash it.

Dalton McCleery (42:11)
Yeah. Okay. And honest thoughts. Yeah.

Andy Hinkle (42:37)
And so the caching alone, I think it starts at $8 a month or something like that. I might be wrong on that, but it's like we start out and you only pay for compute, which then you can allow your database to sleep. You can allow your application to sleep, but then you also, you pay for a cache storage, which is like, you know, just a small fee a month. And like, I don't know. I talked about this the last show of like, I'm not going to fix something that's not broken yet. You know, it's.

Dalton McCleery (42:53)
Yeah.

Andy Hinkle (43:05)
The only appeal to me is like I have everything. I don't have, I have everything on Cloud. I don't have DigitalOcean and Forge. It's just everything's there. So I would end up getting it working, but once I got to the whole cache thing, I'm like, man, just like, just to add a cache, like that's the only thing I'm caching on there. And like just to add one cache layer is like eight bucks just for it. But I don't know. It's, I don't mean to be a cheapskate or anything like that, but it was just like, oh, I get it. It was just like, it's.

Dalton McCleery (43:08)
Yes.

too much.

I am.

Andy Hinkle (43:35)
It's just not for me, for smaller sites. For my church site, same thing there, it's just like I need cash, you know, and we don't get a lot of traffic. And then over on some of the bigger sites, absolutely. We'll pay that eight bucks or whatever it ends up being, but it's definitely more tailored for bigger sites.

Dalton McCleery (43:38)
Yeah. Yeah, yeah, yeah.

Yeah, I think we mentioned it before and I just want to, I want to reiterate again, there there's great opportunity for like a middle ground pricing point from like the free sandbox one where you don't get any like domains and the production one, which is like 20 bucks a month and you get, you know, unlimited domains or whatever. Like I would love to just pay per domain. If I've got one site, let me pay like, I don't know, 4.99 a month for that one site plus the, whatever the compute stuff is. Right. Just let me do that.

Andy Hinkle (44:08)
Yeah.

compute.

Dalton McCleery (44:28)
Like five bucks, five bucks a month plus, plus compute. You know, I would spend the same amount hosting my personal site there as if I would have gotten a forged subscription and used a small digital ocean droplet. Like I would, I would probably be saving money and that would make me switch food for thought.

Andy Hinkle (44:40)
Mm-hmm.

Yeah, yeah,

definitely. Yeah, I got my first cloud bill and it was like seven dollars or something like what the heck about it was in It was in what do you call it? No sandbox, but what do you what's the what's the thing you call it to sleep?

Dalton McCleery (44:52)
Yeah.

same box it was in like the you're like in the free tier or whatever

hibernation

Andy Hinkle (45:03)
Yeah, I got the first bill and I thought it was in hibernation mode. then so was like, what the heck, you know, thought the site was offline or something, or at least, you know, it'd be slow to boot up if it was in hibernation mode most of the time. I go to the thing, it was like, you must redeploy to enable hibernation mode. like, well, okay. So, I just didn't catch that the first time, but I mean, just that was on me. But redeployed and now it's in hibernation. But again, it's just like.

I really want to like it, but I just think it's more tailored for bigger sites. So totally fine. And we talked about AI a bit ago. Talked about AI a bit ago and some of how I've been using it lately has been kind of migrated. used to back, when I needed to reach for it, I would go to chat GPT, like the website or Claude the website and then type in whatever I have going on.

I've been giving cursor a try lately and I've been really liking it, the agent mode, but it's like, sometimes it just like changes things I don't want to change. It'll be like, Hey, what, you know, I'll give an example like, Hey, what would you change about this code? Or can you make, can you clean this up to like one big one that it just monotonous. I hate that word. One big one that I challenged with is like when you want just

Dalton McCleery (46:00)
Okay.

Andy Hinkle (46:25)
stuff that takes a while and that's converting something from like an array to a collection. so just like, hey, so I'll feed it to the like, hey, cursor, can you change this? Currently it's an array. One thing that really bugs me about when in arrays is like if you have that temporary variable in like a loop of it, like, so you have like, you'll have like temporary variable at the top and then it runs through array and fills that array by the result. That drives me nuts. So I'm like, hey, nope, put that in a collection.

And so, but anyway, I'm like, hey, refactor this to a collection, please. And it'll do that. But then like it'll change some other stuff completely irrelevant. It'll be like, hey, also, I noticed down here that you can use a no colas operator and it make in by using that. It's like it doubled up on the colas operators was like two of them now or, you know, like though it just makes it even like ugly and hard to read. You know, I'm just like, that's not what I asked for. And so it's been.

I think they're called hallucinations is what they say in the AI space of like when that happens, like when you tell it to do something and it kind of goes on its own path and does something else. But it's been a lot of that going on lately. It used to be really good. And then just recently it's, was like, what the heck's going on here? And then VS Code had an update.

And they kind of have this agent mode now too. And it's really good. And so I've been using a bit of that. But again, it's just like, there's just a lot of cruft in there. And I'm starting to really tell when something is AI generated when I see a code review or something of like, or vibe coded, you know? And so it's, yeah. And it's just like, I don't know where it's like, there's a lot of good in it. Cause you can, like I said, you can convert those arrays to collections or do something that

takes you time to work through. You can use AI, but has your workflow interacting with AI changed recently? I feel like mine has definitely, just in the past couple months, have really changed the way I code. For me, and I'm curious what you think, but for me, if I see a task that's like, know how I'm gonna do this,

and it's really just going to take time. So let me see if I can eliminate some of it with with cursor or VS code. have you has it changed in recent months for you?

Dalton McCleery (48:51)
hasn't changed like a lot, but I have used it a lot more in the last, like two or three months than I have in a year or so. I use it primarily like I'll stub out something that I want. Like I need to write this query that gets, you know, these records within this date time for this organization. I'll write that out and it works.

But when I push it to production and that query has to then query, you know, millions and millions of records, it takes too long. So I'll just have, I'll just highlight the code in my editor. use PHP storm. don't, don't fight me. jet brains, AI is garbage. it's good to hear the VS code has a better one, but I use GitHub.

Andy Hinkle (49:34)
What, what do they, real quick, what

does Japan's AI use under the hood? you know? Like, do they, okay. Yeah. Okay. Yeah.

Dalton McCleery (49:39)
I have no idea. I think you could choose your model and I was choosing

Claude 3.5. Is that a model? I think I was using that and it was not good. I think the integration in the, the IDE sucks. And which is weird because it's their own product, but whatever. I disabled it. I use GitHub co-pilot. So I've been finding myself highlighting code and say, Hey, how can I make this query faster? Or how could I build a trend that says, get me over the last seven days, get me all of the

Andy Hinkle (49:46)
Mm-hmm. Yep. Yep.

Dalton McCleery (50:08)
the counts for this model for this organization, you know, and put it in a collection based on the day. So that way I have a collection of seven days and it has counts for those stuff. I've been using it a lot for that instead of like, Hey, I need to, I need to write this query. Let me go to AI first and tell it to write me the query. And then I'll massage it afterwards. I usually I'll write it and then I'll have AI massage it. And then I'll massage the AI's massage.

Andy Hinkle (50:32)
Mm-hmm.

Dalton McCleery (50:36)
Does that make sense? That's sort of, that's my workflow. It's like, I already know, I've got it in my head. Just let me get it out real quick. And if it's not great, then I'll have AI double check it. They've even had like in GitHub, you could use GitHub Copilot as a reviewer for PRs. Have you seen this recently?

Andy Hinkle (50:36)
The massage, yeah.

Yeah, it doesn't support PHP though, right? Or, okay. Okay. Yeah.

Dalton McCleery (50:58)
I don't think so because it didn't do anything to any of my PR. So I signed it as a reviewer for

some of my PRs and it's just like, yeah, it looks good. I was like, all right, you didn't do anything. So when it, when it does that, I think, I think that would be my ideal AI solution or AI implementation for how I program. I'll write it. I'll have it review my PR before I send it to somebody else to have them review the PR. Like, is there some obvious junk that like, like you said, whether you declare that variable empty array for each, you know,

Andy Hinkle (51:06)
Yeah, that's what it did for me too. was like, yeah, right.

Dalton McCleery (51:28)
add that into the array, boom, return the array at the end. Like that's dumb, you can use a collection if it's Laravel. Like just flag that for me. Stuff like that. I wish it would do more stuff like that.

Andy Hinkle (51:39)
Yeah, yeah, I agree with, like the, when you tag in a reviewer, that would be just kind of nice to know before I put it, before I have the team review it, like, Hey, just take a quick look at this. Like some of it, it just can be noise, but some of them might actually be useful. And so that would be kind of nice to, there's some startup companies that are doing that, like they're say, Hey, add our app to your, organization. We'll review your code for security vulnerabilities, whatever. But I feel like.

Dalton McCleery (51:49)
Mm-hmm.

Sure.

Yeah.

Andy Hinkle (52:07)
GitHub

is like, no, no, no, we're gonna take that money, know, we're gonna roll it. Cause I feel like they're just doing everything, anything they can, they can get their hands off with AI, they're wanting to do. So they're an AI company now versus a software company, a software first, software building company, which kind of bugs me. Like just focus on like get like, yeah, AI is great, but you have a great product, just keep at it. So, yeah.

Dalton McCleery (52:23)
Mmm.

They get all that Microsoft money now.

I was going to ask you what's specific about the cursor IDE that's radically different than VS Code or PHP Storm, like the AI integration specifically.

Andy Hinkle (52:47)
I like,

yeah, I felt like recently the agent mode was by far my favorite thing, which I tried cursor like many months ago and I just didn't get it. I'm just like, I don't know what all the hype is for this thing. Then recently, one of my coworkers, shout out Chris, Chris Law is his name. He was big in the cursor and he was like, you should really check it out. And was like, yeah, give it a shot. Cause I knew it's using VS code under the hood.

So, so I gave cursor a try and they have this agent mode on there, instead of like on currently on or previously on VS code, VS code can only read a single file. Like if you just give it a single file and tell it like what you're trying to do it in, you might have to give it some context from other relating files. Cursor is intelligent enough to like you tell it the prompt and it'll just start, it'll start navigating through your code to figure out.

what's connected to what, and it pieces all everything together and says, like, you can literally tell it to, like, install something or, one of my, like, recently, one of my things is like, I told it to uninstall telescope and not only did it like composer and install, it'll actually run commands for you. It'll ask you, like, are you sure you want to run this? Like composer remove telescope, like Laravel telescope package. And then it'll go through and it will, create the migrations to remove the records, the existing records. And I was like, what?

Dalton McCleery (53:46)
Pretty cool.

Andy Hinkle (54:12)
It's like remove the telescope records. It's like, that's great. That's what I wanted to do. It did have some issues, like it created them in the wrong order. So like you got four key restrained issues. So I had to like flip those around, but just like a little stuff, like, this works. Like I'm happy with this, like, and flip it around. So, but yeah, it did that. just, it's really good at navigating through the code. But in a recent VS code update, they have agent mode now and it's not as good as cursor, but it's...

Dalton McCleery (54:14)
Okay. Okay.

Okay.

Andy Hinkle (54:42)
It's still pretty darn good. But I prefer just VSCode. I feel like Cursor is just too noisy. I like Coda editors that really clean. Anything that is in my space that I see, it has to be for a very good reason. You shouldn't have things on there just adding noise to your, to your Coda editor. So I just felt like, I was just, I mean, I could probably work with Cursor a bit more and get it to where I want it to be.

Dalton McCleery (55:01)
Agreed.

Andy Hinkle (55:08)
And also my keyboard shortcuts are really like weird. They have a bunch of new keyboard shortcuts over in cursor and they just overrode like some of the keyboard shortcuts and VS code. So was like, you know, but I'm super happy with the update VS code lately. yeah, I just, you to answer your question, I just love how it navigates through the tree, like understanding your code base.

Dalton McCleery (55:31)
All right. Yeah, I haven't, I haven't tried it, but I know that you've tried it in a couple. think Kevin. Cursure. I think, I think he tried it once and he was telling me about it, but I, I might need to just poke around and see. Problem is that I've used PHP storm for so long that if I use anything else, it, it like hurts me on the inside. Like, like emotionally, it hurts me.

Andy Hinkle (55:38)
Mm, shout out Kevin, yeah.

fill the same with VS code, but I don't know. I'm okay with leaving VS code these days, but Jake uses PHP Storm. I just can't get behind it. I don't know. Can't do it. Yeah, so. Just like, okay, let me ask you. Does PHP Storm still have that debug tester? Like when you're in your PHP code, it's like open this in Safari or.

Dalton McCleery (56:03)
Yes.

Yes, yes, yes, yes. Come to the dark side, Andy. Just don't use JetBrains' AI, it sucks.

Andy Hinkle (56:26)
Chrome or whatever and that's just like, why do they still have that darn thing? No one uses that.

Dalton McCleery (56:26)
Yeah. Yeah.

You could, can, you could disable it and customize it. like I had it like open and brave instead. Um, I don't want to get off on a soup. No, hell no. I don't want to get off on a super big tangent here. So I'm going to keep this quick. There are some things about PHP storm that really irritate me. There's a new update that just came out that 2025.1 and they changed how you can commit.

Andy Hinkle (56:41)
Do you ever use that? Yeah? Okay.

Dalton McCleery (56:56)
The commit model whenever I did command K it always opened up this commit model and it showed me all of my changed files in the namespaces that they were. So if it was like app controllers, it would be in this nice little directory. They changed that. it's now in a sidebar and it's just all of my files, willy-nilly, no order, no namespace. I, I hate it. I hate it. And I, I wish I wouldn't have updated.

Andy Hinkle (57:20)
Yeah, yeah, just yeah. Have they got any community

feedback on that? Have you like looked at it? see it?

Dalton McCleery (57:27)
It

I think it just came out like yesterday like and so I was like, yeah, I'll update this. Yeah. No, don't Don't do that. I Feel like one of those things were like they changed, you know, they was working fine. Don't don't change it now now all of my it I hate it. That's probably the only thing I hate about

Andy Hinkle (57:29)
Okay. Okay. Yeah. Yeah.

I don't like that.

I don't

like the one in VS code either. I have also a shortcut or like a command, but it just, it pop opens my terminal and then it has the history below it and I just type in the commit message. It's the very old school way of doing a commit message, but it makes it so simple because I just didn't like having to, you know, remove my mouse or navigate over there. And it was just, it was kind of like, again, it was very noisy. I just wanted to like hit a button, type in my commit. But before I do that, just a quick look at what files I have going on, make sure I don't like committing.

You know credentials or you know somewhere like that I found it kind of just too noisy, but yeah

Dalton McCleery (58:20)
You're

a keyboard warrior, aren't you? I don't mind clicking.

Andy Hinkle (58:22)
I'm trying to.

I'm trying. I'm like, I'm starting to really recognize. And this comes from the primogen because it's his how he moves through like his code. all by keyboard. It's very inspirational. He flies through. He uses Vim, Neo Vim, but he flies through his code editor. it's just like, and it makes me like think when I'm coding, like any time I reach for my mouse, like, can I stop that habit some way? Like when I go in.

Dalton McCleery (58:49)
peasant.

Andy Hinkle (58:50)
One thing I'm trying to figure out right now is when I go to look up a file tree, like how I can start to eliminate like me going over to the file tree so many times, like clicking through my files and looking for a particular thing. So anyway, yeah.

Dalton McCleery (59:01)
I

agree a little bit. I still like to click, especially for my commits. I want to be very specific about what's in my commits and what's not in my commits. But recently I I installed, again, this is a tangent, I apologize. I installed this keyboard alerter thing plugin in PHPStorm. So it's like whenever you do common tasks over and over over again, it'll just alert you like, hey, use this shortcut instead.

So yeah, I've been, I've used my mouse, I'm like, okay, I need to go to this controller, know, this page controller, okay, click apps, you know, control, or HTTP controllers, there it is. And it's like, you just, you know, click the double click shift and you could search for it and it'll open it up for you. So now I've just been using that every day for multiple, I just boom, double shift, page controller, enter, opens up what I need to. And if I need to do the test, I can do the same thing, right? Page controller test, boom, I'm done.

Andy Hinkle (59:46)
Hot tip, yeah. PHP Storm.

Is that like a community extension that you installed for that?

Dalton McCleery (1:00:01)
It's a plugin for PHP Storm. It's like key promoter or something, whatever. Just like it listens to whatever you're doing. like, yeah, this is the shortcut for that. You don't have to keep clicking this button every time. yeah, shout out. I've been trying. I've been trying. Yeah, yeah, yeah. Shout out.

Andy Hinkle (1:00:04)
Okay.

after.

to look for that for VS code. Yo, that's a great idea. I could kind of poke you, nudge you in the right direction.

Cool. All right, well, I think we're at time. Would you like to close this out?

Dalton McCleery (1:00:28)
Yes, thank you all very much for listening to this episode of the Midwest Artisan. That's Andy, I've been Dalton. If you've got any comments, any feedbacks, let us know in whatever, wherever you're watching this at. There's multiple places, but shout out to you. We love you and we appreciate you. Until next time, peace.

Andy Hinkle (1:00:38)
Shut up.

Tune in for our next episode of Hockey Talk.

Dalton McCleery (1:00:52)
Hockey talk. That's our new podcast name hockey talk.

Andy Hinkle (1:00:55)
Yeah. All

right. See you folks.