Static site generators & personal websites w/ Aaron Francis

00:06.90
Chris Morrell
All right? Welcome back to overengineered the podcast where we ask the very important question. What's the absolute best way to do things that don't particularly matter today I am excited to have Aaron Frans to talk about personal websites which I think is like what a thing to get a chance to overengineer right? That's like our favorite everyone. There's so many easy ways to build websites. But as developers we sure don't want to do it the easy way right.

00:31.19
Aaron Francis
Um, yeah, they're all always are terrible except the way that I have chosen to do it. So I'm ready I'm ready to talk about this.

00:39.13
Chris Morrell
Um, awesome. Well I can't imagine that. My my few hundred listeners don't know who you are but do you want to give a ah brief intro just to to say hello first.

00:52.73
Aaron Francis
Absolutely I am my name's Erarin Francis I'm a developer educator at a database company called planet scale. So what that means is I end up making a lot of Youtube videos about databases I'm also a laraval developer and I mix some Youtube videos about that. And most importantly I am dad to 4 children now which is an insane number of children. We just had our second set of twins and they're like you know three weeks old so I've got a lot of coffee and I'm ready I'm ready to overengineer.

01:24.73
Chris Morrell
Nice, Well I don't know exactly this is this is one usually these shows kind of come from a place of this is a thing I've been thinking about a ton and have have sort of a starting point. But for this one. You Ah you kind of came to me and said let's talk about this website stuff. So Why don't you instead usually I'll do the like setting the stage but you want to set the stage and said like when yeah, go ahead.

01:51.33
Aaron Francis
Yeah, sure. Yeah, so I bought a you know Um I do a podcast with Ian Landsman called mostly technical and it's barely technical but it's a great name. And on the show we were talking about my personal website setup. And he told me I was overcomplicating it and I thought no this is perfect and you just don't understand and so you know we had a nice argument about it and then I thought where can I talk about how overcomplicated this isn't and I thought boss man Chris has a great show for this. So here's here's my like. I don't know here's my thesis on personal websites one I think, static site generators are too anemic and they like make you learn this whole new thing that is only useful for 1 particular use case. But it's also not that useful for that particular use case.

02:42.43
Chris Morrell
Yeah, agree.

02:44.19
Aaron Francis
And I have made extensive use of like Jigsaw Titans jigsaw. Which I loved for a super long time but I kept running into the boundaries and I kept wanting to I just kept wanting it to be full lareve and. It's just not. It's like it uses some of the lareve components some of like the illuminate packages but I just wanted it to be laravell and then I looked at like you know nux because I like Vue Js So I'm not going to do something like.

03:03.83
Chris Morrell
Sure.

03:15.38
Aaron Francis
I don't know next or whatever but I like nut or I like view and so I looked at Nux and I was like am I really going to learn all of this just to make a personal website and so that's when I landed on just make it laraval and then from there. You know it kind of evolved into a whole thing but I'll stop and let you let you respond to the static site generators or a waste of time.

03:38.48
Chris Morrell
Um, yeah I mean I I agree wholeheartedly I think you know I I like I'm sure most developers have had many incarnations of my personal website over the years and I I recently moved from a Gatsby site to. Which is I was just thinking about like remember when Gatsby no one could stop talking like no one was everyone was talking about Gatsby and I haven't heard Gatsby mentioned in in years which is kind of wild. It's you know, unprecedented.

04:03.93
Aaron Francis
Um, yeah, shocking right? shocking that people have moved on. Let's, we'll have to revisit this when Astro when Astro is dead. We can come back and be like man you remember Astros. Yeah.

04:17.56
Chris Morrell
Yeah, there you go but ah yeah I had I had a gatsby site and it was fine. You know I think I think the fun thing about personal websites is that they're like you know a testing ground for new technology that you don't necessarily want to.

04:28.98
Aaron Francis
Totally.

04:32.18
Chris Morrell
Move into production and like your your real job. So yeah, it's fun like all the things that seemed neat about Gatsby I wanted to play with but I didn't you know I wasn't going to commit to using it anywhere else. So I don't I don't regret doing it but you know about I'd say about.

04:43.74
Aaron Francis
Um.

04:51.91
Chris Morrell
Six months ago I just like ran into a situation where it was going to be a pain the ass to upgrade and I just thought it's going to be easier to just rebuild this laravelle than it is to upgrade Gatsby and like fix this bug that I'm running into so I'm just going to do that and so I recently kind of made the same switch.

05:01.96
Aaron Francis
Um, yep.

05:10.28
Chris Morrell
I I will say and I I decided to hold this until I had you on the podcast to say it. But I totally agree with Ian that like ah you are you are trying to say that you're just building a just laraville app.

05:16.30
Aaron Francis
Ah I've been set up. Oh no bamboozled.

05:28.11
Chris Morrell
But you're you're you're kind of doing just because your static site is Sql Lite doesn't mean that it's not a statics. You're basically doing a static site generator.

05:31.22
Aaron Francis
Ah I've been set up.

05:39.41
Aaron Francis
What a scam What a scam I was induced under false pretenses I said. Ah yeah, you made me come on here by planting this idea in my mind. Okay, so here we go all right? Let's talk about.

05:42.29
Chris Morrell
Hey I didn't I I never said anything.

05:56.23
Aaron Francis
My setup for those that don't listen to the mostly technical podcast. It's a larave. It's a full on larell application I make heavy use of Markdown. So like all of my it's at aarinrcis.com if you want to see it but it's it's it's a standard like content website right? and I make heavy use of. Markdown to actually like write my blog posts and stuff I have a few markdown plugins which I have either written myself or installed and I think they're you know, fun and interesting. But at the end of the day. It's kind of markdown then that gets pushed to github and in a github.

06:34.82
Chris Morrell
You see this is this is when you start to this this moment right here is when your argument starts to fall apart when you say oh in a github action I have to do all this this build step to to build my snake and shit to the web.

06:34.90
Aaron Francis
Action I gather a bunch of stuff.

06:43.80
Aaron Francis
Um, no okay so this.

06:46.57
Aaron Francis
Okay, so here this is what I don't understand about the argument that you and Ian are making so like okay forget the build step let's say I so we'll we'll take a really concrete example I have Youtube videos and I want the Youtube videos.

07:06.50
Chris Morrell
Sure.

07:06.51
Aaron Francis
To be on my website because it's like hey this is this is the central location. You can find basically everything I'm up to Youtube has a great api that I can just call and like pull it down and put it somewhere. Okay so that's what I do I have a command that's called Sync Colon Youtube

07:25.60
Aaron Francis
I Run Php artisan sync youtube and it goes out to the Api. It looks at all of both the planet scale channel and my personal channel looks at all the videos and then puts them into a database pretty normal so far right? right? That's a standard layer of all app it it I run a command.

07:37.63
Chris Morrell
Sure. Yeah, yeah, yeah.

07:44.84
Aaron Francis
And I write stuff to the database. But that's normal I could I could never be accused of that being overcomplicated right? That's totally totally normal. Okay so Php artisan sync youtube write stuff to the database. Oh that's super cool. Let's seephpartisansyncpodcasts

08:03.00
Aaron Francis
What that does is that goes to 3 maybe 2 or 3 different Rss feeds and looks for new podcast episodes and it writes that to the database. It's like oh that's pretty cool. So now I'm like gathering my digital detritus from all over the internet. And putting it on my site which is the goal like a central place so you know I'm beefing up my site with all this external content now that's really cool I agree and so now I've got got these? Yes, thank you? I've got these? you know I've got 1 table in the database just called content. It's like this is the title.

08:28.78
Chris Morrell
Take a angry tip.

08:39.50
Aaron Francis
This is the url maybe a description. Maybe some ancillary data like view count and that sort of stuff. Okay so I have another I have another command that's just php artisan sync articles and that sync articles command it just looks on the disc and it's like. Hey, let's just grab all the markdown and put that into the content table. So like looks through the articles folder pulls all the Mark down looks at the front matter and it's like what's the title of this post and when was it published great I'll put that in the database. So now I've got this big table of neat stuff right? and then the website.

09:01.66
Chris Morrell
Sure.

09:17.81
Aaron Francis
Like the actual website just pulls using eloquent just pulls from that table and puts it in a giant list and some things link externally and some things link internally. What's it. It's pretty good right.

09:30.51
Chris Morrell
Yeah I mean I I think you know I most I'm partially just baiting you I I do agree but ah, he says as he as he yells into the camera. But I I do think.

09:34.96
Aaron Francis
Well, it's not working I'm not mad at all. Are.

09:48.49
Chris Morrell
I do think that I agree with Ian's kind of premise that the fact that this is all happening in like a build step where you're well ok sure ok all right.

09:55.45
Aaron Francis
Well we haven't gotten there yet. We haven't gotten there yet I'm just setting up I'm setting up the premise. You don't know where this is going. You have no idea so that's all reasonable though right pulling all that stuff down and writing it to a database that's pretty reasonable.

10:07.80
Chris Morrell
Then then that is all perfectly reasonable. Yes yes I mean I So I do a similar thing with with markdown and I think that that's like I think that that's like ah if I were going to dig into how to make.

10:15.20
Aaron Francis
But.

10:26.84
Chris Morrell
Publishing personal websites with laravell easier. The thing that I would look into is like what I think every developer wants is to just write in Markdown and like how do we make the ergonomics of getting that.

10:30.74
Aaron Francis

10:37.33
Aaron Francis
Um, yes.

10:44.35
Chris Morrell
To be rendered on a site better I Think that'd be an interesting thing to talk about later but setting that aside I mean Okay, yeah on on my end I do the same thing except for I just route directly to the markdown files right? So I Just you know I don't necessarily even bother.

10:44.37
Aaron Francis
Who.

10:50.25
Aaron Francis
Yep I have lots of thoughts on that so we should circle back to that.

11:00.16
Aaron Francis
Um, sure. Yeah yeah.

11:03.81
Chris Morrell
Dumping that into a database but you know there's nothing wrong with doing that. Yeah.

11:07.96
Aaron Francis
Yeah, and for for the actual routing. I do the same thing I just route to and it just like it uses the view like it I think it just uses pulls the view and runs it through Graham Campbell's markdown rendering engine and that's basically that's basically it.

11:22.17
Chris Morrell
Sure, Yeah, yeah, sure.

11:25.73
Aaron Francis
Just put it in the I put it in the database. So I can have a list view I mean it's basically at that point the database is like a cache layer more or less so every request doesn't hit the file system to look for all the markdown it just hits the database instead I could you know you could run that once and just do a cache remember for an hour

11:33.30
Chris Morrell
Right.

11:44.17
Chris Morrell
Right? Yeah and I think that's basically what I do on my end is like it's just it's just cached instead.

11:44.80
Aaron Francis
Forever. Whatever, So yeah, totally totally the same there.

11:54.59
Aaron Francis
Right? And so that leads us nicely to the next point. So I wrap up all of these commands into a Ph B Artistis in Sync Colon All you know a L like sync sync everything and that, that Command looks for all commands in the sync.

12:05.13
Chris Morrell
Um, short. Yeah yeah.

12:12.17
Aaron Francis
Namespace that aren't all and it just friends those commands and it's like great now. That's you know, filling ever filling the database up with all of the content that I could possibly need is iempottent so I can just run it over and over and over and anything new will get populated but nothing old will get duplicated. So that that point. You know I'm like great I've got a database full stuff Now the problem is I don't want to set up a database. So if you guys need a database go to planetscale.com. That's great. Good databases, great databases. But sometimes you just don't need a database right? and then don't this.

12:48.26
Chris Morrell
You heard it here. Folks Aaron Francis says you don't need databases. Um.

12:51.39
Aaron Francis
No clips don't clip this if holly ever finds out that I said sometimes you don't need a database. She's going to be so mad. That's not true, Holly never gets mad. So sometimes you don't need a database right? This is an instance where I'm like.

13:02.77
Chris Morrell
Sure, Yeah, yeah.

13:07.30
Aaron Francis
You know what? I don't want I don't want a bunch of services running this is my personal freaking website I don't want to be maintaining a mysql database I don't want to be maintaining some third -party api connection like I just want to like package up a nice little ball of stuff and send it somewhere which sounds. Dangerously close just that static site generator. So the solution to that is is sql lite. It's just like it's basically as if I wrote it all to a giant json Json ment and then committed the json Json ment to the repo Repo shipped it off. And pretended that the json document was a database that's what sql lite is. It's just nothing. And so what the the super nice thing that I do is I can sync all that stuff locally and then just commit everything including the database dot sqlite and then ship that off. And I can ship that to any server anywhere now I can't ship it to like github pages because it still uses. You know, php to like it still uses eloquent which I really like still uses eloquent to inspect the database but I can ship that to a $5 digital ocean box I can ship that to vapor which is what I do.

14:13.92
Chris Morrell
Um, sure. Yeah.

14:23.20
Aaron Francis
And I just know that like I have a unit which is a standalone basically zip of my website and just kind of send it away. And then I have all the content out there. So that's the next that's the next step is it's basically like a pre-warmed cache just written to.

14:41.54
Chris Morrell
Yeah I mean I think that I don't disagree or I actually think this is a very elegant. Well I'll even go further to say I think this is a very elegant solution to the problem I Just think that it's it also doesn't feel like just.

14:42.25
Aaron Francis
Database.

14:46.63
Aaron Francis
Yes, no stop there I don't disagree. Yes, yes yes, Okay, oh wow.

15:01.10
Chris Morrell
It's just like a regular Laville app this this feels like ah a homegrown static state generator that uses larabel. Yeah yeah I mean that's that's the point. Yeah.

15:05.13
Aaron Francis
Um, yeah I don't know if yeah I think that's fine I'm fine with that. Yeah I think I'm fine with that. Yeah and I think the problem I think the problem I have with like let's let's take. Jigsaw because it is in the Larabelle Community. And Jigsaw Jigsaw is great and so I don't want to disparage it. But I'm going to tell you the the problems that I have with it is I have to learn how the jigsaw collections work and like how the jigsaw.

15:21.20
Chris Morrell
Sure sure.

15:37.31
Aaron Francis
Markdown Rendering pipeline works which I have gone super deep on to make syntax highlighting work over there and so I've I've really gone deep into jigsaw and I know it extremely well. But at the end of the day when I'm like great now. How do I sync my Youtube feed to it. It's like well I would know I would know immediately how to do that in layer bell like it's so so easy. But with jigsaw you got to figure out. Oh I got to listen to this after build before build and I got to write my own pages and it's kind of blade but it's not totally blade and so I don't have a problem I think with building static. Content I think I just want to encourage people to think about using your framework of choice to build that static content instead of relying on some you know? yeah, half half framework implementation of that.

16:31.79
Chris Morrell
Um, yeah I think I mean I think that this is a perfectly fine choice to make for building like building a site of this like of this type and you know I I totally get especially because you're shipping to Vapor like, you know.

16:40.15
Aaron Francis
Like on here.

16:49.63
Chris Morrell
Dealing with the database consideration is a little bit more complicated there and just shipping a sqlite file solves that and I think that's great. Yeah, I I do still think that if you were to say oh my website is just like a regular old laraville app I would expect.

16:53.10
Aaron Francis
Um.

17:08.42
Chris Morrell
Some of these things to happen just a little differently right? I'd expect there to be a Mysql database or a persistent sqlite database just sitting next to your app and then I would expect basically all of these sync commands to just be running on a cron on the server right.

17:11.46
Aaron Francis
Mm. Right? right.

17:23.60
Aaron Francis
Right.

17:26.33
Chris Morrell
And because you're using Vapor, That complicates a bunch of this and the same I mean I I deployed a flight Io and I have to deal with a few of those considerations as well. Yeah, and so it definitely is I Mean in my case.

17:30.90
Aaron Francis
Correct and ephemeral stuff. Yeah.

17:45.50
Aaron Francis
Right.

17:45.71
Chris Morrell
Just don't have a database you know it's just, everything is driven directly either by the files or for the Api calls that I make it's just, just ah, a lazy caching situation. You know the first person who hits the site makes the Api call and then everyone else just gets the cached version.

17:56.70
Aaron Francis
Um, right.

18:01.84
Aaron Francis
I Would like.

18:05.57
Chris Morrell
And I would argue that like the spirit of what I think Ian was saying and the thing that like caught caught me as as sort of like yeah this isn't quite just larave is that feels a little bit closer to just like just laravele the moment that you. Have like ah an extra build step and you're like pushing your like built site somewhere. It just feels you've stepped a little bit outside of the world of just laricol.

18:38.24
Aaron Francis
Um, I think the problem I think the problem that most people have with it is the read Only It's the read only sqlite database that is not a standard that's not a common pattern because like.

18:48.93
Chris Morrell
Um, right right? Yeah, if someone came to your site came to your codebase they would it would take them a little while to figure out what was going on there.

18:53.82
Aaron Francis
Using.

19:02.74
Aaron Francis
See I don't even know about that because it's like it uses proper eloquent models. It uses Artisan commands. You know it's It's discoverable in the database Phb It just says like the the you know the default connection is sqlite.

19:12.38
Chris Morrell
Sure.

19:20.45
Aaron Francis
It uses migrations I think the thing that might take them a minute to figure out is why is php art doesn't sink Colon all why is that not running every morning right? right? Why is that not running at midnight in the scheduler like how do we sync this content if.

19:32.66
Chris Morrell
Right? right? right.

19:39.35
Aaron Francis
It's never run and I think that that's the thing where they would be like a little bit confused. And I think the other thing that would confuse potentially confuse someone but the other thing that would potentially confuse someone is that in production. The database is read only.

19:56.11
Chris Morrell
Right.

19:58.28
Aaron Francis
I mean you can definitely write to it. But it's going to get blown away and I think that might confuse someone but there are no routes or actions or anything that like there's no way to like you know, leave a comment on aaronffrancecis.com and so there are no places where I'm writing to the database in production. But if somebody you know. You know some intrepid intern came to work for Aaron Francis Incorporated and they're like I'm going to add commenting to your website and it's really simple I just post to this route and it writes to the database I would have to be like oops that's going to disappear on the next deploy or honestly whenever you know Aws lambda decides. This container is toast.

20:35.62
Chris Morrell
Where yeah and you could you could pretty simply just swap that out for a mysql connection and and move on though. Yeah, yeah, so.

20:37.44
Aaron Francis
Then that that comment would go away and that that part is weird.

20:46.50
Aaron Francis
Totally yeah, yeah, yeah, and I absolutely absolutely could and at that point like it is super standard layer about like all layerval applications have a deploy step right in my deploy step. Also happens to warm a cache and that cache happens to be a sqlite database. So it's like yeah, that's kind of weird I could you know I could get rid of the whole sqlite database and just run these Api calls on the first request.

21:09.64
Chris Morrell
Right.

21:21.67
Aaron Francis
And then cache it in whatever vapors default caches like dynamodb or something and that would be maybe more normal. It just fills me with immense satisfaction to be like. I'm going to ship the whole website now here it goes and I don't have to worry about you know the scheduler lacron or anything actually turn those off in vapor and which saves me a number of pennies and it's like yeah this is this is kind of nice I actually do want to deploy it to fly because this is 100 % perfect for fly.

21:52.20
Chris Morrell
Right? for sure. Yeah, yeah, so to okay, talk to me about Markdown what's I have I have seen pos here but let me hear what? what's ah, what's your initial reaction there.

21:52.49
Aaron Francis
And that would be fun that would be fun to try out.

21:57.99
Aaron Francis
Let it.

22:04.97
Aaron Francis
I have grand plans for I have grand plans for Markdown and Larabelle and static sites. Honestly, and so I am working I am working on making.

22:11.65
Chris Morrell
Okay.

22:20.45
Aaron Francis
I'm working on seeing this thought to completion of Laraval should be your static site generator and I have a lot of ancillary things around that but that is that is the cohesive thesis of what I'm trying to like feed to fruition. And at the core at the heart of that is markdown.

22:35.36
Chris Morrell
Um, yeah.

22:38.94
Aaron Francis
And so let's start with what is it called common Mark I think is a Php league package. Is it a ph p lee it's by that. It's by Colin O'dell okay common markdot the phpleague dot com so that that makes up like the main engine.

22:46.32
Chris Morrell
Yep, it is yep.

22:57.62
Aaron Francis
And then on top of that I've got Graham Campbell's basically Larall Shim not super necessary but it like you know, gives you some facades and it renders some blade engines and stuff. Alright I'm sorry it registers some blade engines and stuff so it's kind of nice but the crux of the whole deal is league common mark.

23:10.52
Chris Morrell
Okay.

23:16.13
Chris Morrell
So and that that ships with laravelle now like you can do string markdown and it just will give you ht m one. it's the same yeah it's the same thing yeah it's the same common Mark Engine yep

23:17.60
Aaron Francis
And it's.

23:23.63
Aaron Francis
Yeah I don't know who powers string markdown. It might be league its common Mark. Yeah yeah, so it's super duper good I have a few qualms with it in that. They follow all of the best practices and that annoys me a little bit like.

23:40.29
Chris Morrell
Um, yes, it's a pain they asked to configure.

23:40.90
Aaron Francis
Everything is final. Everything is private. There aren't like I've had to break in I've had to use that invade thing where you like use reflection to change properties and I felt 0% bad about it. But it's very very good. It's a great package so that makes up like the core of.

23:51.50
Chris Morrell
Ah, yeah.

24:00.39
Aaron Francis
The rendering of markdown like engine but then on top of that I think there are a lot of things. Um, there are a lot of things that you can add to markdown that meet your specific use cases. So for example, 1 is um blade rendering right? so. You're writing a markdown file and you want like this special blade component that you have like I have one for a Youtube embed I have one for a Twitter embed that like makes the tweet look really nice instead of like giant the way that the real embeds work and when I'm writing markdown I want to just. Like I just want to use my blade component and there are a couple ways that you could do that you could and I think this is dangerous. You could run blade, render over the markdown after it's been turned into html right? So you can write raw html and markdown. That's not a problem.

24:39.12
Chris Morrell
Yeah, sure.

24:57.49
Aaron Francis
But if you run Blade Render over html that you don't control that possibly includes valid blade inside of a code block. They're going to be hostsed right? So if you're writing an article about. Yeah if you're writing an article about label and you have some valid.

25:07.70
Chris Morrell
Yep, yeah now that feels very scary.

25:15.44
Aaron Francis
Php in there and then you run Blade Render over it like oops your toast, especially if you're using that on usergenerated content which I would never recommend doing. So I've written a blade a safe blade component parser compiler. I've written a.

25:22.88
Chris Morrell
Right? so.

25:34.40
Aaron Francis
An extension that like looks through the code blocks on my page and after you know some random number of code blocks. It puts a little ad for torchlight underneath the code block. It's like hey this syntax is highlighted by torchlight a service that I created I have a few of those like.

25:52.56
Aaron Francis
Have one that I'm working on right now that will insert like a newsletter sign up. You know, 75% of the way down the page and so it just kind of like you can encode some best practices into your rendering engine. And then like let's say you're launching a course or something.

25:59.78
Chris Morrell
Um, that's cool.

26:10.97
Aaron Francis
You can swap out your newsletter signup for like an in-house course ad across all of your articles at once by going into this little markdown extension and saying like oh the thing I'm promoing right now is not the newsletter. It's this thing and so there's there's so many things that I think once you understand.

26:23.43
Chris Morrell
Sure yeah.

26:30.38
Aaron Francis
That you can break into markdown and get access to the abstract syntax tree and just like kind of walk around and look at stuff and do stuff then you can really start to take your like your markdown rendered contents. You still get the authoring experience that you desire but you still get the outcome of like no I'm using. It's not just it's not just. Tailwind prose I'm using like blade components and embeds and Mailchimp signups and that makes your site like do the thing that you really want it to do.

26:58.53
Chris Morrell
Yeah I mean I I definitely feel like the thing about Markdown is it gets you eighty ninety percent of the way to what you want and the getting that other ten 20% there's not like a good sort of.

27:09.53
Aaron Francis
Um, yes.

27:16.99
Aaron Francis
This is.

27:17.21
Chris Morrell
Canonical approach to that yet. And you know I've seen there are various, There have been a bunch of different attempts to do it either. You know, extending the markdown syntax directly or like you said just embedding Blade components in your markdown or.

27:27.65
Aaron Francis
And.

27:35.96
Chris Morrell
You know I've looked at just like having sort of a fragment syntax where I can be like right here pull in this other blade file you know and just just render the blade you know or there's a bunch but all those I don't know I I've never got the ergonomics of that right? because there's like.

27:43.33
Aaron Francis
Yeah, totally.

27:51.37
Aaron Francis
M.

27:54.80
Chris Morrell
Most of the time like I want to just do an inline code block if I'm if I'm doing like a code example, but every once in a while an inline code block is not enough but like.

27:58.86
Aaron Francis
Yes.

28:11.85
Chris Morrell
Finding that balance I don't know that's always been a pain and then have you solved the indentation problem because that's like it's not that hard to solve. But that was the thing that I need like I needed to do first was.

28:18.34
Aaron Francis
Yeah, yeah.

28:26.58
Chris Morrell
You know even in Lairville like the the markdown renderables where you have to like keep everything aligned to the left column god that drives me nuts.

28:30.73
Aaron Francis
Of it left or you're gonna blow it up. Yeah, yeah, yeah, that drives me nuts too and that's one of the frustrations with trying to write non markdown in a markdown file is like. You write some pretty html that's indented correctly and it turns the inner part into a code block and you're like f like I don't want this to be a code block. This is actually code and so the way the way that I solved that one of the solutions for rendering markdown in in.

28:55.11
Chris Morrell
So right.

29:06.70
Aaron Francis
I'm sorry one of the solutions for rendering blade in markdown that I like wrote an extension for I think is kind of neat you you open a code block and you say that this code block is you know html or blade if your you know your editor supports blades and text highlighting but I just say that it's html and then I write all of my. Fancy html and I get syntax highlighting inside of Markdown because markdown knows this is a codeb block I'm gonna I'm gonna highlight it as html and then so you know you do three back ticks and then you write html and that's that's the language identifier. What I can do after that is do a.

29:31.42
Chris Morrell
Yep.

29:39.70
Chris Morrell
Okay.

29:44.29
Aaron Francis
Plus sign and say literal or I can do a plus sign and say I think the other one is like Blade and my markdown rendering engine will either put that html literally in there or it will run Blade Render over that code block and input it.

30:01.90
Chris Morrell
Yeah, that's pretty neat.

30:03.70
Aaron Francis
And so that way I have I have an escape hatch. That's like oh shoot I'm about to write some indented. You know Blade or I need this blade component to run or whatever. So I just open a code block and say this is like literally Blade or like Parse is maybe the other word parse this as as Blade and it. It does it and it doesn't put the code block in. Obviously it puts the contents of that code block in.

30:26.29
Chris Morrell
Yeah, that's a great solution. I feel like I've gone the opposite direction where my files are Blade Files and then I have like an X markdown custom component and.

30:39.31
Aaron Francis
Yep yep.

30:43.10
Chris Morrell
It's it's not. It's not perfect I like I like being able to mix like a full like I I like being able to just fully hop out of the markdown context as many times as I need to and just like write full.

30:46.35
Aaron Francis
And.

30:57.82
Aaron Francis
Um, yeah.

31:02.50
Chris Morrell
Blade Views, But you know I've been able to sort of trick the Id into understanding those markdown syntax but it's not. It's not ideal. You know I like I can see the benefit of doing it the other way around.

31:09.29
Aaron Francis
Yeah.

31:17.40
Aaron Francis
Yeah I like I like doing it the other way around because Phb Storms Markdown Editors is pretty good. And it's code highlighting within a markdown code block is pretty good and so I feel like I get the best of both worlds there.

31:21.70
Chris Morrell
Yeah, it's great.

31:29.22
Chris Morrell
Um, right? um.

31:32.10
Aaron Francis
And then whenever I render an article it. It renders inside of like a proper you know Blade layout and so for the ancillary stuff I Just you know I throw all of my blade all around you know, like the. Table of contents I Render with like alpine and blade and stuff but like the actual content. It just takes the markdown renders it and plops it in and then I do all the framing in like real full on Blade layout file a little bit a little bit. Yeah.

31:54.43
Chris Morrell
Right. Now Do you do much with front matter or do you just kind of leave the title and that's it.

32:07.35
Aaron Francis
So let me open it now So I can tell you which with front matter I have recently you know it. It runs that sync articles command and so if we open. Yeah, it's not very much which is good.

32:16.67
Chris Morrell
Boom.

32:25.70
Aaron Francis
I have an id which is just a uuid that I generate with Raycast So I just open Raycast and I type you you it hit enter and that becomes the unique yeah that becomes the the unique Id for this file. That's what makes it. You know this idempotent I don't base it on path or title or anything like that.

32:34.21
Chris Morrell
Um, you you it? interesting. Yeah.

32:40.69
Chris Morrell
Sure sure sure. Yeah, yeah.

32:45.66
Aaron Francis
Have a you you it as the Id this is all in the markdown title date description and then an unimplemented tags list. So like I'll tag the articles but I haven't I haven't actually done anything with that. But I do tag it as like larebel or personal or something like that. But that's it.

32:54.72
Chris Morrell
Sure.

33:00.30
Chris Morrell
Sure.

33:04.40
Aaron Francis
The path is based on the location on the file system. So. It's let's see resources, views articles and then the year Twenty Twenty three and then the name like the actual file name and so I don't have to do. You know there's there's an argument to be made that like I may want to generate I don't know I may want to generate. Yeah, urls differently. But right now it's just straight to the file system for that. And I can optionally this one doesn't have it I can optionally specify an og image.

33:28.50
Chris Morrell
So.

33:37.67
Aaron Francis
Or an Og image path but this article doesn't have Og image.

33:39.65
Chris Morrell
Sure, yeah yeah I worked well we talked about this ages ago. It's still it never went anywhere but you know lareville.com is built using a lot of this same these basic principles and um, yeah, yeah.

33:49.11
Aaron Francis
Um, yeah, same same hodgepodge system. Basically yeah devastating. Yeah.

33:57.50
Chris Morrell
And ah the og images is definitely a tricky thing to figure out. I feel like I came up with a decent approach to it but it is. It's a big buy-in, to like yeah you need a node process to build them. 1 thing.

34:05.83
Aaron Francis
And it requires a service or a server or something to run. Yeah, yeah, that's one of the things I'm hoping to solve with this unnamed. Well it's named but I'm not sharing the name this unnamed you know, laable static site thing is like best practices like Og images that kind of stuff.

34:23.60
Chris Morrell
Yeah, yeah, yeah, that's cool. 1 thing that um, we just did so you know I I implemented the ah the verb stocks a couple like a month ago or whatever and 1 thing. 1 thing that I really wanted to see happen was.

34:31.85
Aaron Francis
Is it.

34:40.42
Chris Morrell
Um, and I and I basically just shamelessly stole this from Caleb with a livewire docs like the idea of just having markdown files in the main project that like when you're contributing a feature or updating feature. You can also just like include the documentation in your your Pr.

34:56.81
Aaron Francis
Yes, big time. Yep.

34:59.91
Chris Morrell
I think that's really nice and 1 thing that he did that I approached a little differently but I thought it was an interesting decision was instead of having like front matter in the individual docs files he had like a single.

35:16.99
Aaron Francis
Ah.

35:19.43
Chris Morrell
He has a single I think navigation mde file that is basically just like an empty markdown file. That's all front matter I opted to just have a navigation Json file. And I think that maybe the difference is for docs.

35:25.99
Aaron Francis
Yeah.

35:35.87
Aaron Francis

35:39.26
Chris Morrell
That feels like a better tradeoff rather than having to like crawl the markdown files and build like the navigation from the front matter. And it gives you a little bit more control over like you know this? this file is going to be called. You know.

35:41.20
Aaron Francis
The app.

35:55.78
Chris Morrell
Quick start or whatever but like the path might be like getting started or something like that like you can change those things.

35:57.27
Aaron Francis
Um, yeah, totally yeah for the um I need to actually update all of this but for like the sidecar and the airdrop and all these open source repos that I have worked on.

36:13.53
Chris Morrell
Um, yeah.

36:14.38
Aaron Francis
They're all pulled onto the hammerstone dev website which is I need to pull that onto my personal website but they use a um, a system you know that I obviously rope from scratch like everybody else does and it uses a similar idea. It uses a manifest Json and so all of the docs.

36:24.94
Chris Morrell
A.

36:32.50
Chris Morrell
Um.

36:33.86
Aaron Francis
Sit alongside the code which has been helpful because people do make pull requests and they update both the docs and the code but the manifest Json just dictates like where the files are what their pretty names are how the sidebar should kind of look like this group has a header of like.

36:49.25
Chris Morrell
Yeah, yeah.

36:53.73
Aaron Francis
You know, lambda or you know deploying to whatever. And so there I can just it's really nice when you've got 50 docs pages to have one. It's kind of like your routes. You know your web that php routes like you want to just go 1 place and be like all right I got to move some Docs around. Let me do that instead of being like.

36:57.22
Chris Morrell
Yep.

37:04.47
Chris Morrell
Yeah, exactly.

37:12.28
Aaron Francis
F I got to open all these files and change. You know this dashed 2 words to a more clever. 1 word that I came up with and that's that's a real pain. So yeah I like the navigation that json manifest that Json for specifically for docs I find that really helpful.

37:26.79
Chris Morrell
Yeah, and I mean even worse would be like you have to go in and you have to change the slug and then you also have to change the like group id and like subgroup id or something like that across 30 files. Yeah, yeah.

37:32.93
Aaron Francis
Yes, now I'm not doing that too old for that. Yeah, oh.

37:41.78
Chris Morrell
Yeah I think I mean so okay, here's here's the real question like I I I totally see the like oh I figure out a good way to do this I Want to turn it into a nice package for people is is.

37:54.35
Aaron Francis
Yeah, we've all been bitten by that haven't we yeah.

37:58.62
Chris Morrell
Anybody going to use it right? because the whole point of a personal website is well I'm going to do it my way.

38:06.31
Aaron Francis
Right? Yeah, exactly. So I hope so I think so so the the thesis that I'm working with is everyone wants to do it their way but I can.

38:21.65
Aaron Francis
I can give you a skeleton that can let you do it your way a lot faster and a lot better and so then you know my my theory is if I if I do a lot of the heavy lifting of all right? I'm going to set you up to write markdown extensions and I'm going to ship you know with a Mailchimp.

38:25.21
Chris Morrell
I.

38:41.33
Aaron Francis
And a convert kit embed ready to go and then you can just kind of tweak. It. However, you want and you can put it. You can put it wherever you want that kind of stuff I'm going to ship with og and og image generator that you can then you can then muck around with right. I think that's going to be compelling enough to people for people to like download it try it. And hopefully hopefully enjoy the authoring experience that they get to authoring faster I think there's always going to be a subset of people that say they're updating their personal website because they want to write. But really don't want to write at all and like those people I'm fine I'm fine with them tinkering like if your goal is to Tinker just Tinker like don't don't lie to yourself about I really this year twenty twenty four I really want to start writing like I don't know.

39:18.63
Chris Morrell
Right? right.

39:28.12
Chris Morrell
So.

39:35.48
Aaron Francis
I think writing I think publishing obviously is is good for your career. But if you just want to tinker or just go tinker. And so I think there will be a subset you know, just yeah, lots of people use staticite generator. So I think there will be a subset of people are like I use Layerl I want to use layer ofl but I want to have a site that I can deploy to github pages. Based off of Blare Bell and that's what I'm hoping this will fill.

39:57.96
Chris Morrell
Okay, so you're talking about going full static site generation. Okay, interesting. What? Okay, there could be a full build.

40:00.12
Aaron Francis
I Think so yeah, yeah, it's gonna be. It's gonna be dealer's choice like you could do it my way or you could do it full on generated? yeah.

40:15.67
Chris Morrell
Interesting. What have you have you come up with a good approach to, like images in your articles. So I feel like that's that's another thing that I keep on finding I want to like I wish I wish that I had the authoring experience of like a github gist right? I Just want to.

40:27.89
Aaron Francis
Um, yeah.

40:34.92
Chris Morrell
Drag an image or a video file into my markdown and just have it work and ah obviously I can't do that in my id and it's not that hard but it definitely is a ah point of friction like I don't include images in these.

40:37.70
Aaron Francis
Yeah, yeah, yeah, right.

40:54.21
Chris Morrell
As much as I probably could just because it's a bit of a pain have you thought about that at all.

40:55.52
Aaron Francis
Yeah, yeah I have yeah I have a couple solutions for that and then I have one that I think I'm aiming for So. My current solutions are, one is I walk the markdown tree looking for images and. Update the urls to be, you know Vapor does this thing where it gives you like this Cloud Frontn front distribution Urls You kind of have to use their asset helper and so I just walk the markdown tree looking for images and I run the asset helper over it and it like makes it right??

41:20.30
Chris Morrell
Sure yeah.

41:32.50
Aaron Francis
The other is I have a route in web Php that is slash asset slash star and anything that goes to /asset/stargetsredirected to the asset helper with the trailing wildcard.

41:39.94
Chris Morrell
Yep.

41:47.79
Chris Morrell
So.

41:50.00
Aaron Francis
And so that's helpful for me if I'm like let's say I'm linking to somewhere so like when I set up on Twitter there's a way that you can set up like, you have products on on your Twitter profile and so I set up screencasting.com as a product and it needed a url for an image. And so there I just link link to you know, screencasting.com/asset/logo.pandg and then on the server it redirects to like the long you youid dot cloudfront dot. Whatever whatever.

42:17.42
Chris Morrell
Um.

42:22.78
Aaron Francis
Those are the 2 solutions to like 1 is you walk the document and you change the urls the other is you just have a really stable url that actually does a redirect. I think for this solution that I'm working on. There will be and I think I'm going to call it airlift because I have airdrop. But I think there will be a. A corresponding package called airlift that takes your public assets and puts it into s three so that you can just like you can just reference your images like with the root of your website being the root and then the barkdown.

42:51.17
Chris Morrell
Um, sure.

42:59.57
Chris Morrell
Um, yeah.

43:00.99
Aaron Francis
On the other side comes out to it references the s 3 bucket or if you want to put a vanity name in front of that you can, but basically I'm going to airlift your assets out. And put them on s 3 for you.

43:07.78
Chris Morrell
Um, sure.

43:13.27
Chris Morrell
Yeah, that's cool I like that I like the name too. Yeah, yeah I mean and even like you may I don't know if you can pull it off but you may be able to because like at least with phpe storm you can.

43:17.33
Aaron Francis
That's good name right.

43:29.40
Chris Morrell
You can write one of those helper files that says like when you're autocompleting this property like it's a file name in this path so you might even be able to like get some ide support if you publish one of those files with the package which would be kind of cool.

43:37.63
Aaron Francis
Um, oh cool.

43:47.12
Aaron Francis
Um, interesting. Yeah I didn't know that that's cool off to look into that.

43:49.26
Chris Morrell
Yeah, we do that with like you know we do ah we're we're working on ah a stripe feature that's got a lot of snapshot tests in it and like there's just like thirty forty snapshot files um not snapshot tests is not right, but it's just like.

43:55.90
Aaron Francis
And.

44:08.20
Chris Morrell
We've basically snapshoted webhook payloads from ah like a manual test run and and we build a test around those and ah yeah, it's just like a nice quality of life thing to just have like ah you know this arrow Stripe snapshot and then it just audio completes from there.

44:11.99
Aaron Francis
Um, yeah.

44:26.84
Aaron Francis
Um, yeah, that's cool.

44:26.97
Chris Morrell
It's ah it's definitely a cool little feature. Okay so what are there any other like things that you feel like really need to be solved for this to be viable.

44:40.59
Aaron Francis
Yeah, I think I think Deploys need to be a single command. So like I think where it breaks down is people are like oh I'm going to build my gatsby site and then I got to figure out how to get it on cloudflare.

44:47.50
Chris Morrell
For.

44:57.67
Aaron Francis
Pages how do I get it on github pages. How do I get it on net netlify. So every one of those is going to have a first party driver that's like I just deploy it to github pages. So it's just like artisan deploy colon github or whatever. I think that's one and then based on the providers.

45:10.11
Chris Morrell
Um, sure.

45:17.57
Aaron Francis
It's also going to write. It's also going to write edge if it has edge. It's going to write edge middleware to do redirect and so that's another one where people are like all right I get my static site now. How do I do a redirect and you're like I don't know man like.

45:32.32
Chris Morrell
Right? Yeah for sure. Yeah.

45:35.78
Aaron Francis
You could use metare refresh or whatever on your html and like that's a last last resort but that's kind of grim but with you know, versll and cloudflare and netlify. You could just write an edge function that looks at the incoming and maps it and redirects to the outgoing. And so like if you go to I think it's erinfranncis.comerinrncis.com/twitter that takes me yep that takes you to my Twitter and so there's vanity stuff like that. But there's also like I changed some yeah urls to old blog posts and I need to redirect those and so.

46:00.14
Chris Morrell
Right? right.

46:08.24
Chris Morrell
Right? right.

46:11.10
Aaron Francis
There will be a way. Um, as you're deploying redirects or it's just going to work out of the box and whether it's fancy with an edge function or lame with an html file with a header that says refresh that kind of depends on the platform. But that's one of those things where it's like the last mile of static sites is kind of. Like figure it out yourself.

46:32.30
Chris Morrell
Right? Yeah I mean that's very cool though to be able to just like have ah a driver-based approach. That's just like okay for this we can write just ah, a edge function. That's just a template where you dump in a bunch of the the fro and 2 and then.

46:43.73
Aaron Francis
Um, yeah.

46:47.29
Chris Morrell
If you are on a platform that doesn't support it. You know we're going to write an html file at least that has a meta refresh. Yeah yeah, that's neat. I was going to say yeah you know I feel like 1 thing that I don't see.

46:52.64
Aaron Francis
Um, yeah, yeah.

47:03.38
Chris Morrell
Talked about a whole lot in the larall world or at least the though the world of laravell that I'm in is Seo you know like I don't I don't feel like there are, tons of like really established patterns for Seo and laravelle and I don't know this is coming.

47:07.60
Aaron Francis
And.

47:23.30
Chris Morrell
I Definitely came up in the era of like doing stuff for seo that in hindsight was maybe questionable. But but you know.

47:32.90
Aaron Francis
Ah, you were gray hat huh.

47:37.94
Aaron Francis
Sure sure sure times for different. Yeah sure I have a private blog Network of course I do.

47:38.14
Chris Morrell
Back in the early two thousand s like the the concept of a yeah gray hat was not necessarily even a thing it was just like oh yeah, sure we'll buy a thousand domains and and and also pay for a thousand. In independent ip addresses and then you know, connect them all together. Yeah no problem.

47:58.45
Aaron Francis
Yeah, what could be wrong with that. Yeah, exactly that seems totally above bore. Yes, that's a different metric though it it worked as a different metric.

48:06.60
Chris Morrell
Um, ah it worked for a long time I mean I still I will yeah my business partner used to put like he knew I had yelled at him so many times but he just like.

48:19.99
Aaron Francis
Um.

48:22.71
Chris Morrell
Sneak it in. He'd like put text in white at the bottom of the page. It's like Nick you got to stop this come on like, yeah, but ah I feel like Seo and Http caching.

48:24.55
Aaron Francis
Oh brutal? Yeah, yeah, that's full on black hat. Yeah yeah.

48:40.37
Chris Morrell
Are 2 areas that like especially for a static site solution where you know the the nature of the content is going to be like a more like public facing content website. You know those things really matter and I feel like there are a lot of opportunities for.

48:51.36
Aaron Francis
Um, yep.

48:58.86
Chris Morrell
You know, just better better systems to make it easier to do the right things in those places. How much are you thinking about those 2 pieces for this this thing you're working on.

49:13.65
Aaron Francis
Yeah, ah I mean a little bit I think, a huge part of Seo that we don't you know all of us don't talk about very much is having it be super duper fast. And basically static. You know you get that for free.

49:27.84
Chris Morrell
Sure.

49:30.40
Aaron Francis
You know anyone? That's running their marketing the marketing side of their website on something like inertia js I think is is a little bit misguided. If you're using if you're using livewire for your marketing site. That's great because you know to the search engine. That's just html. But you know. Google can parse Javascript now. So it's not you know it's not stupid I just think yeah exactly it's not stupid, but it's not very good at it. Yes, even even inertia has its first party server side rendering stuff and so.

49:52.80
Chris Morrell
Um, well sort of they they have claimed for years now. Yeah yeah, yeah, um, right.

50:06.87
Aaron Francis
Yeah I'm thinking I'm thinking about that a little bit I'm not I'm not going down the Seo Rabbit hole but because it is you know standard Larevel You'll have full control over your meta description and your headers and your tags and all of that stuff. And I think it'll be.. It'll be interesting to see where that portion of it. Evolves but having it be fast and well Structured. With the appropriate cash headers you know is going to get a lot of stuff for free.

50:35.70
Chris Morrell
Yeah, exactly yeah and I mean with static sites. How much control do you have over cash headers like I don't know that you have a lot I Yeah yeah, so for some of them. You probably can.

50:44.49
Aaron Francis
Pretty platform specific. Yeah so like with cloudflare you could say you could say cache everything everywhere all the time. And that might be like that's what I do on my site and then on Deploy I Just tell cloudflare hey blow away the cache we're going to start over.

50:54.15
Chris Morrell
Um.

50:59.68
Chris Morrell
Right.

51:01.51
Aaron Francis
And so there are options. There are options like that and that's really nice for me because I don't have to think about what's the e-tag on this like has this when was this content last updated. It's just like ah I mean with with no cash whatsoever. It's still pretty fast and so I don't mind.

51:07.53
Chris Morrell
Right.

51:19.17
Aaron Francis
Blowing it away every time and telling cloudflare all right, build it back up I Just don't care about that.

51:20.47
Chris Morrell
Right? Yeah yeah I I Definitely think that they're I mean and this is something We have an internal tool that we use for some of this stuff that I you know one of these days I want open source but like yeah, just. Generating etags like returning. Ah you know content not changed responses. You know doing caching stalewall revalidate like all that stuff like there's not I mean let's let set aside larael.. There's not.

51:43.90
Aaron Francis
Um, yeah.

51:48.28
Aaron Francis
Yeah.

51:55.77
Chris Morrell
I don't feel like there's a single canonical resource for like Http caching headers anywhere you know like even understanding the difference between like the cache control header and like the last modified header and like which one do you use?

52:01.69
Aaron Francis
Now. Um, yeah, yeah and cloudflare doesn't even support stale while revalidate yeah which sogs like they've they've said you know for a long time. They're going to support it. But there's no,, There's no.

52:14.50
Chris Morrell
It? Ah okay, yeah.

52:25.59
Aaron Francis
Ah W R with cloudflare. Yeah.

52:27.32
Chris Morrell
Interesting. Yeah I didn't know that yeah we don't use Cloud Cloudfare Flare I You know I use it for some personal stuff. But I I haven't dug very deep into what they what they handle. Yeah, that just feels like a thing. Where you know just like getting it's it's it.

52:31.53
Aaron Francis
Um, yeah.

52:36.30
Aaron Francis
Um, yeah.

52:44.87
Chris Morrell
Really comes down to like the dx like the ergonomics of it. Obviously there's the there's the education piece of like knowing what to do around Seo or knowing what to do around caching and I think that's a huge that's a huge piece too but just like I don't know there's not there. There are not easy ways.

52:48.78
Aaron Francis
Um.

52:54.77
Aaron Francis
And.

53:04.76
Chris Morrell
Right now to do a lot of these things and in in you know and in our case like I know for a while we would like wrap up the response like instead of just returning the view. We'd have to like. Grab the view render it wrap it and like wrap it in a response object and then set like the headers on the response object if you want in like fine grain control over those headers or else like you're doing it at a middleware level which is fine but then you know it's a little bit more brute force.

53:23.63
Aaron Francis
Gap.

53:34.53
Aaron Francis
Yeah, yeah, yeah, and there's one there's 1 kind of gnarly got you with livewire. The way that it does something related to the back button unless you unless you disable some livewire feature it.

53:37.70
Chris Morrell
Feels like there are a lot of opportunities there.

53:47.70
Chris Morrell
Oh yeah.

53:53.00
Aaron Francis
Forces like no cash headers on everything because otherwise it like the back button remembers the wrong thing or displays the wrong thing or something.

53:58.19
Chris Morrell
Um, oh interesting.

54:03.87
Chris Morrell
Yeah now.

54:06.90
Aaron Francis
So I ran and I ran into that 1 at 1 point too. So yeah, there's there's a lot. There's a whole lot around caching that we don't super talk about and that frankly I don't really understand which is why I really kind of like my my crude blunt force like cash it all blow it all away cash it all plo all way.

54:20.73
Chris Morrell
Yeah, yeah, and for a static site generator That's like a super appropriate take you know that's like a really nice that's ah, that's a nice approach. Yeah yeah I I years ago I worked on the livewire like.

54:26.74
Aaron Francis
Yeah, that's the ticket. Yeah.

54:40.30
Chris Morrell
History state stuff and that is a dark dark like horrible place to be the. Ah.

54:41.10
Aaron Francis
Oh yeah, there you go? Yeah yeah because it like sometimes doesn't contact the server. It just pulls the page right out of the cache or something and yeah, it's it's a mess right.

54:56.93
Chris Morrell
Um, there's I mean in theory it feels pretty straightforward but there are so many browser specific gotchas and there's like a bunch of like storage limitations and like you need to make sure that you're.

55:04.51
Aaron Francis
Right.

55:13.29
Chris Morrell
Pushing and popping things on and off the state in a way that feels appropriate because you know I Still this is this is the thing that I'd still love to see livewire do is like you know you can do the query string based routing but I think that you should be able to do just full. Yeah url routing.

55:15.75
Aaron Francis
Um.

55:27.92
Aaron Francis
Um, yeah.

55:31.44
Chris Morrell
With Livewire where you you know it actually just changes the yeah url. But yeah, we spent probably two weeks working on it and bill the whole feature and it was great but it was just like ah you know Caleb was not confident enough in it. To be like yeah this is this is good to go and it was It's you know I hate I hate these moments in programming where you're just like I know this is not good enough but I don't know what like I don't know what would need to happen for me to feel comfortable about it. You know.

56:01.77
Aaron Francis
Right? Yeah I know I hate that too.

56:10.38
Chris Morrell
Yeah, well is there. We're we're right at an hour is there anything else that ah you were thinking about with this ah with this secret project of yours trying to think if there's anything else I I definitely.

56:20.91
Aaron Francis
Me Pull off the dock to see if I have any secret projects there and.

56:28.00
Chris Morrell
I I definitely feel like you know when I was setting up my my personal website just building it in Larevelle felt mostly fine. But I bumped into all this stuff I definitely I definitely feel like having a really good and and I would love to see this be it.

56:39.87
Aaron Francis
Depth.

56:46.49
Chris Morrell
You know a package that you could pull into anything like really good markdown support that like handles a lot of these cases and just has a bunch of like really best practices built in I Love the idea of having those like interpreted code blocks I think that's pretty neat. Yeah.

56:49.32
Aaron Francis
Um, yeah.

56:58.37
Aaron Francis
Um, yeah.

57:03.44
Aaron Francis
Um.

57:06.12
Chris Morrell
That's very cool and I mean I don't know just getting markdown to output like decent tailwind classes. It's kind of a pain you know going back to the the way that the common Mark class is configured. It's like.

57:12.23
Aaron Francis
Yeah, yeah.

57:21.84
Aaron Francis
Um, yeah, got to register so much freaking crap. Yeah.

57:22.10
Chris Morrell
I Have to register all these like custom options. Yeah, and it's all just like an an array with like magic Keys everywhere. Yeah so like being able to just ship like a tailwind plugin that just renders everything as like.

57:29.70
Aaron Francis
Yeah, yeah.

57:38.59
Aaron Francis
Yep, exactly better. Yeah, you need you need to modify pros a little bit. Yeah yeah, so code blocks is going to be a big one.

57:40.60
Chris Morrell
Ta when prose but like you know with a little because you need a little more than just prose, especially for the code blocks? Yeah,

57:52.40
Aaron Francis
Having tailwind you know I think there's going to be like a core package kind of the way that the Layerl Framework works. There's like a core layerve and then there's a starter like there's the Layervell Framework where you start your project right? And so I think that's going to be how it works is. There's going to be like a core package that does a lot of the heavy lifting.

58:01.59
Chris Morrell
Right? right.

58:12.00
Aaron Francis
And then there's going to be a composer create you know new project that has like tailwind already installed and set up and all of the stuff that, actually lives in application land. But I want to get people started on the right foot that kind of thing.

58:29.76
Chris Morrell
Right? Yeah, that makes sense I feel like that you might even be able to like tap into the whole like composer new. Right that the same way that you start a new Laville project with just composer new. Yeah.

58:42.45
Aaron Francis
Yeah, yeah I think you can I think you can just register it somewhere with packages to say like this is a this is a creator starter kit project template. Whatever it is. Yeah so.

58:48.34
Chris Morrell
Um, yeah.

58:54.28
Chris Morrell
Yeah, it's very cool, sweet anything else. Anything else fun that you've been up to that. Just I mean is is is there anything other than babies.

58:58.87
Aaron Francis
Stay tuned for that.

59:06.89
Aaron Francis
So much. Yeah, that's the tough part is ah you know I am on paternity leave right now. So I do have less planet scale work to do but I also have two newborns so I have a lot more home life to do.

59:18.52
Chris Morrell
Um, yeah, oh yeah, yeah, it seems very cool.

59:20.59
Aaron Francis
Been playing with pulse quite a bit and pulse is very very good. You know I started I started working on a like community site and then got just totally poned by babies and Matt Souther came along and was like hey what if I did some of it and he's just done so much of it which is awesome.

59:34.46
Chris Morrell
Awesome! awesome.

59:37.60
Aaron Francis
But yeah, doing that recording some videos I Want to record a video on this this markdown rendering stuff and I'm building out a fathom analytics pulse card which I think is going to be kind of fun. So yeah, just doing like.

59:47.46
Chris Morrell
On E yeah.

59:55.58
Aaron Francis
1 of the great things about paternity is, you can just kind of just do random crap because you don't have to like see these long-running projects through like at work I don't have to be like all right? Let me plan my next six weeks of content and like do my research I didn't just sit down and be like.

01:00:00.27
Chris Morrell
Right.

01:00:11.89
Aaron Francis
I got an hour I got an hour and maybe actually I only have 30 minutes and because someone might wake up here in a second. So what do I want to do and that's kind of fun and is it's yeah, it's a very. It's a very free flowing creativity kind of time.

01:00:18.60
Chris Morrell
Right? Let's just Tinker with something.

01:00:27.17
Chris Morrell
Yeah, for sure. Yeah, we need to catch up on verbs too I I still feel like I need to convince you that ah event sourcing is is a good path for some for some things.

01:00:34.49
Aaron Francis
Hey I'm I'm still you give me you give me a you give me like a solid and setup and use case I'm still willing to give it a honest go. So yeah, we we do need to do that.

01:00:46.42
Chris Morrell
Yeah, yeah, no, ah Daniel and I were talking about we'll we'll follow up later but that's been a fun. It's been a fun and it's been a fun thing to to been working on.

01:00:56.34
Aaron Francis
Um, it seems it seems to have been well received. Do you feel that that's the case.

01:01:01.19
Chris Morrell
Um, yeah I mean I think, you know we're still, we're still very much in Alpha and I think there are a lot of there are a lot of things that are just like we're trying to figure out because you know the the whole vibe of verbs is just like.

01:01:18.23
Aaron Francis
Correct.

01:01:18.35
Chris Morrell
Ergonomics have to be perfect right? like the will we'll write some horrible terrible code so that like the the api is great and you know there are few places especially around testing where like we're you know? Ah, we're very aware that it's not where it needs to be yet.

01:01:24.52
Aaron Francis
So that I don't have to yes.

01:01:38.90
Chris Morrell
So right now there's just like a handful of like true heads in there and it's that's been really fun though to have like you know? Yeah, we've got like a little Discord group. Yeah yeah, and you know people are coming in with real questions and working on real little. You know, either like test projects or or you know.

01:01:44.00
Aaron Francis
Um, yeah, you have a few people that are like into it and they're in like a Discord or something. Love it.

01:01:57.14
Chris Morrell
You know I know that Daniel's um on a production thing in verbs already. So um Think it's it's pretty much good to go. It's mostly just like the main api is there but all the little things around that we're still kind of landing on you know, but yeah.

01:02:01.38
Aaron Francis
Cool.

01:02:15.93
Chris Morrell
That's been great. Awesome all right? Well thank you for ah hanging out I feel like ah we've I don't know that we've solved the problem of personal websites. But I I think that like you know we've touched on all the major major points at least.

01:02:20.17
Aaron Francis
Um, yeah, thanks for having me.

01:02:27.15
Aaron Francis
It's unsolvable.

01:02:32.21
Aaron Francis
And we had some fun which is which is maybe the real journey is the fun we had along the way right? something like that. Yep, see you next time.

01:02:36.83
Chris Morrell
There you go? Yeah, something like that all right sweet. Well thanks for hanging out.

Creators and Guests

Chris Morrell
Host
Chris Morrell
Father of two. Mostly talking about PHP/Laravel/React on Twitter. He/him.
Aaron Francis
Guest
Aaron Francis
Sincere poster. No cynicism. Making lots of videos.Dad to two sets of twins!Educator @PlanetScale.Cohost @MostlyTechPod.Teacher https://t.co/hM9ogEIMlr.
Static site generators & personal websites w/ Aaron Francis
Broadcast by