Ruby Evolution with Bridgestone - RUBY 639
In this episode, they delve into the world of Bridgetown - a progressive site generator and full-stack framework powered by Ruby. Ayush shares his journey of discovering and contributing to Bridgetown, leading to career opportunities in freelancing. The team discusses the platform's capabilities, deployment aspects, and advanced customization using Ruby. They also explore the limitations and possibilities of Bridgetown, including themes and CSS frameworks. Join them for an insightful discussion on the evolving landscape of static site generation and the innovative potential of Bridgetown.
Show Notes
In this episode, they delve into the world of Bridgetown - a progressive site generator and full-stack framework powered by Ruby. Ayush shares his journey of discovering and contributing to Bridgetown, leading to career opportunities in freelancing. The team discusses the platform's capabilities, deployment aspects, and advanced customization using Ruby. They also explore the limitations and possibilities of Bridgetown, including themes and CSS frameworks. Join them for an insightful discussion on the evolving landscape of static site generation and the innovative potential of Bridgetown.
Socials
Socials
Picks
- Charles - Legendary: A Marvel Deck Building Game – World War Hulk
- Charles - Vite Ruby
- Valentino - Sublayer - Bring Generative AI to Your Product Development
- Valentino - Olympia | Better Than ChatGPT
Transcript
Charles Max Wood [00:00:04]:
Hey, folks. Welcome to another episode of the Ruby Roads podcast. This week on your panel, we've got Ayush Noatya, and I'm Charles Max Wood from Top End Devs. So, Ayush, you're kind of our expert guest or expert host or however you want to swing that cat. And, yeah, we're talking about Bridgetown. Now we lined this up before you were a host on the show because we were talking about the the codecs, the rails and hot wire codecs. And then, you know, you met it came up that you were on the, Bridgetown core team, and I was like, well, cool because I've been wanting to talk about it. So
Ayush Nwatiya [00:00:49]:
Yeah. It's good to be back. It's good to be on the other side of the metaphorical table. Alright. As a guest rather than a host, but, Yeah. Let's let's start Bridgestone. So
Charles Max Wood [00:01:01]:
Yeah.
Ayush Nwatiya [00:01:02]:
Yeah. We why why do you wanna start?
Charles Max Wood [00:01:04]:
Well, we have a grand tradition on this show starting with a definition. So why don't you tell us what Bridgetown is?
Ayush Nwatiya [00:01:15]:
Right. So, Bridgetown is what we call a progressive site generator. So hi, Valentino.
Valentino Stoll [00:01:24]:
Hey there.
Ayush Nwatiya [00:01:26]:
Yeah. We just got started.
Valentino Stoll [00:01:28]:
Yeah. Awesome. Mhmm.
Ayush Nwatiya [00:01:30]:
So let me read out the, the tagline from the website. We we call it a next generation progressive site generator and full stack framework powered by Ruby, which is a mouthful. What the hell does that actually mean? Well, it's kinda like a successor to Jekyll. It was forked from Jekyll 4.2, but it's kinda turned into something that's a lot more than just that. So it's still, like, primarily a static site generator. Like, I would say, all the features and everything are geared towards, like, I would say 90% of it is geared towards just building static sites. And we refactored quite a lot from Jekyll. So, like, obviously, the whole world of static side generation kinda evolved quite a bit from when Jackal first arrived on the scene.
Ayush Nwatiya [00:02:22]:
And there are a lot of quirks under the hood where, you know, things like, a collection of posts in Jekyll. It's kinda like a custom collection, but not really. It's slightly different in different ways. And then, yeah. There's, like, a whole, it was just under the hood very messy in certain ways. So we kinda refactored the entire generation engine. So the way, like, the content is either read off disk or, like, acquired from some other source and then built into this site. And then the site is written, The actual website with HTML pages is written to disk for you to do as you want.
Ayush Nwatiya [00:03:09]:
So I I say we rewrote it. Jared, the Jafu started the project. He rewrote this whole thing. And then, a common use case is also like, you know, you have, like, 90, 95 percent of static side, and then suddenly you need one tiny bit of dynamic functionality. Like, let's say you have a marketing website and you want to put a contact us form on it, and you need some weight for that form to, like, an endpoint for that to submit to, which sends an email to yourself or some something like that. So, we used a a framework called ROTA, which is like, Yep. It's kinda like a toolkit to build a framework rather than a fully formed framework in its own. Right? And using we kinda plugged that into Bridgestone and now you have the ability to write a few dynamic endpoints in addition to your static site.
Ayush Nwatiya [00:04:05]:
So, we kinda cater to this whole use case where you cannot most of your content is static, but you need a little bit of dynamic functionality. And, we'll provide that to you in the context of, like, a Ruby full stack framework. You don't need to go reaching for Lambda functions and all that stuff because that kinda goes against our philosophy of, like, everything should should live in the single repo and everything should be runnable locally.
Charles Max Wood [00:04:33]:
Yeah. We've had Jeremy Evans on to talk about ROTA. And I mean, I remember back in the day when Jekyll came out. I mean, the use case that everybody used was a blog. Right? And so Yeah. You were talking about how you have this collection of posts, and it kind of, you know, does magical things for your posts. And, yeah, I mean, that was very much how it was used. That's how I mean, that's what Tom wrote it for was so that he could run his blog on it.
Charles Max Wood [00:05:01]:
And so Yeah. Yeah. It made sense, but, yeah, the the I guess those limitations are the things that kinda kept me from, like, fully adopting it. So, you know, you look at something like top end devs. Right? Because I've used static site generators to run top end or dev chat dot TV top end devs. Right? And then I've moved it back to a Rails app, I think, three times now. Mhmm. And so you're right.
Charles Max Wood [00:05:31]:
We're now on the 3rd time. And the reason is is because I have other dynamic stuff I wanna pull into it. Yeah. And the other the the other end of it is is if I have a Rails app and I want a blog or something like that that Bridgetown does well, then, you know, that's the hiccup on the other end is, okay, how do I integrate the 2 so that every time I change, say, the layout on 1, I don't have change it on the other because I may want it to live under top endevs.com/blog as opposed to having blog.topendevs.com. Right? So I can get the SEO and the other benefits of having a part of the website. So so those are kinds of the things that I've been looking at with it, But I have to say a couple of the things that I do really like about it are that it seems to have a lot more options, and it seems a lot more friendly to front end manipulation. Right? So if I want to bring in a hot wire and wire things in, that's not terribly hard. Jekyll, you kinda had to play with it a little bit, I guess, to make it really nicely do that.
Charles Max Wood [00:06:39]:
And then, yeah, I didn't realize that you had kind of the dynamic aspect of it with Rota. So, yeah, I mean, it let's say that I wanna give this another look. Right? Because Yep. You've kind of gotten my interest here. Like, where do I start, and and how do I make it do what I want without having it be a giant pain in my rear end? Because I have to maintain 2 systems.
Ayush Nwatiya [00:07:05]:
Yeah. Of course. So, a lot of the, like, the dynamic stuff is still, like, early days, so there will be, like, teething trouble. It's not gonna be as soon as it is real. It's just such a mature framework. But, honestly, the best way to get started is just gem install bridge down bridge down new my site. Mhmm. Honestly, the best way to do it is just, get your hands dirty, and you'll see a a directory structure out there that'll instantly look familiar for anyone from the Jackal world.
Ayush Nwatiya [00:07:33]:
That'll be, like, endpoints for server side stuff and all that, kinda created for you. And the docs are are really good. Like, one of the things that attracted me to the Bridgestime project early on before I was in on the core team, but the docs were so good. And I think I first stumbled upon the project when I was, like, literally 2 or 3 months old, and I didn't realize how new it was. Looking at the docs, I thought this is, like, years old. So, yeah. We're very proud of the quality of the documentation. So, yeah, just create a site.
Ayush Nwatiya [00:08:04]:
Go to bridgestownrv.com. Check out our docs. You should find whatever you need out there. And just to take the point that you said earlier on about, like, bridgestown being a bit more friendly towards the front end, So that was I clearly think when when the the framework was first launched, I think the dialogue or something about it being like a web pack aware site generator or something. And, yeah. So that was always a core thing for us was, like, we needed something on the front end that was built in that because, no one wants to wrangle webpack and ES build. I mean, I blame half my gray hairs to just having to use webpack and webpack. But, we've got a pretty good setup right out of the box.
Ayush Nwatiya [00:08:45]:
So if you need to install, like we got a good ES build setup now. We're we're deprecating webpack. But if if you need to install anything on the front end, we've got, like, NPM and ES build and all that just, already set up for you so you don't have to deal with any of that. Right.
Charles Max Wood [00:09:04]:
Valentino, have you used Bridgetown?
Valentino Stoll [00:09:07]:
You know, I haven't. The the last time I did a static site, with within Ruby, it was it was with middle man.
Ayush Nwatiya [00:09:18]:
Yeah. Okay.
Valentino Stoll [00:09:19]:
The middle man gem. I'm curious because, like, it has a lot of similarities to middleman. And I'm curious, like, maybe if you like, if you're aware of middleman, maybe how, like, you can dissuade some of the older, like, Ruby heads like us. Right? Like, hey. What does it bring that Middletown, you know, or middleman, like, kind of, is where it strays away and maybe some of the the highlights from it?
Ayush Nwatiya [00:09:49]:
So I'm aware of middle man. I'm aware of its existence. I've probably browsed its website once a couple years ago, but I couldn't give you a good critique because I just I just don't know middle man well enough. So I can I can talk to the strengths of Bridgestone, but I couldn't compare it to middle man because I've never used it?
Valentino Stoll [00:10:06]:
Gotcha. Yeah. I mean, the deployments aspect of it, It's very much like a build local, you know, and then deploy static. Whereas it seems Bridgetown is much more built up around,
Ayush Nwatiya [00:10:25]:
you
Valentino Stoll [00:10:25]:
know, having that dynamic key aspect of it. Like, being able to augment it. Right?
Ayush Nwatiya [00:10:31]:
Yeah. That's true. But, I mean, if you wanted to use it purely as a static site generator, you still can. In fact, all my Bridge on websites are purely static. I don't think I've got dynamic functionality on any of them just because I'd have I haven't needed it. So, with bridge time, we kinda we we like to promote render dot com as our preferred host just because, well, I really like it. And, Yeah. It's once you set it up, what Randall do, just, it'll trigger a build every time you do a git push, which is pretty normal.
Ayush Nwatiya [00:11:01]:
And then it'll it'll just run, a bridge down build or bridge down bridge down deploy rather, which will generate the site and write it to disk, and then it'll each stake your output folder and deploy that to a CDN. So you don't really need to do a whole lot. It's, and and we have something we have something, a feature of Bridgestone called, like, bundled configuration. So that's kinda like workflows or recipes or whatever that, you you can run to configure certain things. And what we have one for render dot console, when you run that, it'll create a render dot yamil file, which is like infrastructure as code. So then literally all you need to do is link your repository to render and point it to that file, and that's it. And you have a website up up and running. Gotcha.
Valentino Stoll [00:11:53]:
Yeah. You know, this this looks a lot more feature rich than middle man does. You know, again, like, we keep saying, like, focusing on the front end aspects of it. Seems like you could build, like, maybe, some JavaScript apps, potentially.
Ayush Nwatiya [00:12:08]:
Yeah. You can. Nothing's stopping you from doing any of that. Yeah. It's, I mean, Ruby is always gonna be front and center, so we have features. Like, you can write, components, which are just Ruby classes, which is built right and we have, like, a concept of bridge down components. So you don't need to pull in, like, a third party thing for that. It's just there.
Ayush Nwatiya [00:12:28]:
So Ruby will always be front and center and, it's quite easy to also do quite advanced things like you can hook into the build process and start doing, like, dynamic stuff at build time. So one of my websites, which is, f/42.com, which is like a a photo gallery. So, if you wanted to look at it, it's f s l a s h42.com. It's a photo gallery. It's like a lot of my photography on there. And all I need to do is really copy paste photo photo files into the repository and run the build. And then I have Ruby code that reads the photos off disk, extracts x f information, things like shutter speed and all all that stuff, extracts it from the file, writes it to a YAML file and, dynamically adds HTML pages to the build. And then when the build concludes, it will write those HTML pages out.
Ayush Nwatiya [00:13:27]:
So for each, like, album or each photograph, I'm not creating those pages manually. That's just all done by Ruby codes. All I need to do is copy the photos in place and run and run the build. So, like, that's pretty, like, advanced advanced ish Ruby code that I've just hooked into the build process.
Charles Max Wood [00:13:47]:
So I'm imagining something similar with, like, a JSON file or something. If you just have a, you know, kind of a how do I put it, a static or an you know, it doesn't change very often, so I'm comfortable committing the data to the repo.
Ayush Nwatiya [00:14:05]:
Yep.
Charles Max Wood [00:14:06]:
You can do the same kind of thing. Right? It's the same idea as the markdown with Jekyll. Right?
Ayush Nwatiya [00:14:10]:
Yep. Exactly.
Charles Max Wood [00:14:11]:
I have another blog post. I just commit more data.
Ayush Nwatiya [00:14:13]:
Yeah. Exactly. The difference here is just that, I'm just copying photo files into place and then there's Ruby code that's reading and doing some stuff with those photo files because, yeah, there's no there's obviously nothing built in to handle JPEGs.
Charles Max Wood [00:14:33]:
Right.
Ayush Nwatiya [00:14:34]:
Well, handle JPEGs in the way that I want them handled. You can obviously just paste them in and reference them in your HTML.
Charles Max Wood [00:14:41]:
Right. So you've got some kind of renderer or data extractor that you've just Yeah. The code.
Ayush Nwatiya [00:14:48]:
Yeah. A data extractor basically, and then, and then a dynamic way to, add pages to the to to the build because I don't wanna manually create a new markdown or dot HTML file for each and every photograph. I've just got some code in there that generates those pages for me at build time and adds them into the or I think it's a site dot pages collection. And then when the site is output, it'll just render out all those pages.
Charles Max Wood [00:15:16]:
That's cool.
Valentino Stoll [00:15:17]:
That's really cool.
Ayush Nwatiya [00:15:18]:
Yeah. Because, like, we we unified the concept of, like, collections, from like like I said earlier, Jackal kinda treated different types of collections slightly differently. Like, post is treated slightly differently to a custom collection. And so we kinda unified all that. And now we have built in collections like pages and data and posts. Those are built in. You get them out of the box for free, but they they behave in the exact same way as a custom collection be would behave. So that just makes doing advanced things like this, like, when you're manipulating the build, it just makes it a whole lot easier.
Charles Max Wood [00:15:53]:
That makes sense. So in essence, you know, kind of the how do I put it? The, the blog, you know, that we typically see for for sites like this things like this. Right? That it it just does that nat natively, naturally. How far can you push it? So what I'm imagining is okay. So I have a different kind of entity. I mean, you've talked about, you know, images. So I can write my own plug in for it that does the image thing. Can I build, like, like, to take payments on it or to restrict, access to content, you know, to members or right? Because I'm imagining, okay, how far do I push this that might be easier than writing a fully blown Rails app?
Ayush Nwatiya [00:16:49]:
Yeah. You can push it as far as you want. If you wanna do payments and stuff, that's what the road I think is there for. That's where you, you can write all that. I think, a couple years ago, we'd run, like, a virtual bridge down conf, I think, at the end of 202022. And, I I'd given a demo as part of my talk, and I think the demo was, a simple photo gallery where you can buy photos. I hadn't actually integrated Stripe or anything. I just kinda faked the payment stuff.
Ayush Nwatiya [00:17:19]:
But the demo was basically that that you have the static thing with which lets you view the photo gallery and then you have this little dynamic buy button where you can buy the photo and also you just fake the back end stuff. But, like, I I demonstrated how it can be done. So yeah. Absolutely. With regard to to, paywall and content, of course, you you can do that as well. So, actually, Jared, who who runs who's the started the Bridgestone project and still runs it, to, a a large degree, Just released a CSS course that, is fully built on Bridgestown. If I could actually find the link to that, that would have that would be quite useful. But, yeah, essentially, it's all just a bridgestown, app.
Ayush Nwatiya [00:18:08]:
And he's, it's a subscription service. So he's built, like, payment and he's obviously paywalled his articles because it's a subscription cost. And that's all, all done using Bridgestone. So, yeah, you can push it as far as you want. It just depends on how far do you wanna push it until you start wishing you had rails. But you can still, you can still plug rails in because a router is rack, rack compliant. So you can still you can plug in you can mount rails as an app within it.
Valentino Stoll [00:18:40]:
Yeah. I got a bunch of questions here.
Ayush Nwatiya [00:18:42]:
Yeah. Go for it.
Valentino Stoll [00:18:43]:
Because I because I mean, I I think of, like, typically, like, we have, like, some core tenants more thinking about, like, static sites. Right? Like, where we have, like you know, SEO is probably, like, the number one, like, thing that people start thinking about when they just wanna get, like, some static marketing page up. Right?
Ayush Nwatiya [00:19:02]:
Mhmm.
Valentino Stoll [00:19:03]:
And the I guess the next one would be, like, you know, the caching layer. Like, what what is provided, like, to just, like, make sure that all of the files are, like, gzip compressed or whatever and optimized for, like, the server layer to be able to, you know are there, like, plugins and stuff for this kind of stuff? Is this come out of the box? Like, you know, what what what, I guess, optimizations are built in that, like, gives you that peace of mind. Like, oh, yeah. I should use bridge down, and I don't have to worry about all this stuff.
Ayush Nwatiya [00:19:35]:
Hey. Yeah. Absolutely. So actually, we we don't build any other stuff into the framework because, like, again, 90 95% of it is aimed at static files. And the way to host them is just dump them on a CDN. So if you have static HTML files on a CDN, it'll any decent CDN will automatically gzip your files and cache them properly, before sending them down anyway. And then, like, with render.com, which is my preferred host, you can set caching headers and stuff, manually using the the YAML infrastructure as code thingy. So, yeah, we don't handle that in the framework.
Ayush Nwatiya [00:20:13]:
The dynamic stuff again is very much, kinda like a bolt on, so we don't have anything built in for that. But, yeah, it's it's a tool you reach for when most of your content is static, and you don't have to worry about that if you're hosting it on a CDN. So, yeah, we don't do it in the framework.
Charles Max Wood [00:20:32]:
Well, I'm just gonna throw into that a lot of the SEO stuff. I mean, some of it's just your content. Right? But some of it is also, like, meta tags in your HTML and things like that. And so you're gonna see a lot more of that in your layouts and themes as opposed to from the framework itself. Right?
Ayush Nwatiya [00:20:52]:
Yeah. We do have a Bridgestone SEO plugin, which generates a bunch of those meta tags for you. So that's one of the plugins I can reach for when I'm starting a new site. Anyway, I think I'm pretty sure it's a first party plugin. So it's let me just double check that. So, that like, then you yeah. Bridgestone SEO tag, it's a it's a first party plugin. It's under the Bridgestone organization on on GitHub.
Ayush Nwatiya [00:21:18]:
And, yeah, then you just, like, drop in, an ERB tag or a liquid tag in your, in your layout and it'll pull stuff out from configurations. I mean, it's all at the read me. And it'll just generate those meta tags for you. Awesome.
Valentino Stoll [00:21:34]:
Problem solved.
Charles Max Wood [00:21:36]:
Right?
Ayush Nwatiya [00:21:37]:
Yeah. Oh, and another huge advantage, of Bridgetown over Jackal is you can use ERV. Jackal is liquid only, and I I lower the liquid. I mean, it's it's great when you kinda when your users are writing templates because you can't give users the ability to execute Ruby on your app. But if you're writing your own templates, then, ERV all the way. And Oh, yeah. And we're yeah. We were still currently, Bridgestone is still defaulting to the liquid, but in Bridgestone 2 point o, we're gonna switch the default to ERB.
Ayush Nwatiya [00:22:09]:
Liquitals will be there as an option, but the default will be ERB because that's I just think is the way forward.
Valentino Stoll [00:22:14]:
Yeah. You know, I always despise GitHub pages because of the
Charles Max Wood [00:22:18]:
Yeah.
Valentino Stoll [00:22:19]:
Templating. Yeah. Honestly, all of the crap that comes with Jekyll, which I do see, like, you have you provide easy deployment to air configuration with GitHub Pages, which is really fun.
Ayush Nwatiya [00:22:31]:
Yeah. We do it. Well, it's a pain to, to kinda maintain that. It keeps breaking and, it, like, I die a little bit inside every time someone in the bridge time this call out. How can I get this working on GitHub Pages? I'm like, really? Like, I mean, render.com. It's free. It's the exact same thing. It's free, but it actually works.
Valentino Stoll [00:22:51]:
Right. So how does render.com work? I mean, we don't have to dive in too much of this, but, like, I I was always under the assumption that they, like, you know, there's, like, kind of the upcharge for, like, location observability. Like, not observability, but location, like, where where you want to deploy it to? Like, fly that o style?
Ayush Nwatiya [00:23:12]:
No, Randall. It's just your standard platform as a service. It's kinda like Heroku but living in 2024, not 2014. And
Valentino Stoll [00:23:22]:
How old
Ayush Nwatiya [00:23:22]:
is it? Yeah. Shots fired. Right? It's, it's just a platform as a service, and they offer, static sites for free. So instead of, like, on Heroku, you kinda think of, each thing as a site on render.com. You think of, like, you think in the con within a concept of services. So, like, let's say a Rails application, you would have a web service, which is a Rails app. You'd have a database service. You'd have a background job service, and you'd have a Redis service.
Ayush Nwatiya [00:24:00]:
So you'd have 4 services on render.com, which comprise one application or one site. But, for a static site, you just need one static site service and that will link it to a GitHub repository and it'll do the build and deploy for you every time you do a git push. All three things get a bit more complicated when you wanna do dynamic socket, then you'll need a second service that, that handles the dynamic things. Essentially, what you'd have is one instance of your application running statically and another instance of your application running dynamically. And then you just, like, punch holes through 1 to kind of call the other when needed. So, like, through your static site, you can you've probably hosted dynamic thing at, like, API dot example.com. And then your static site just calls out to API dot example.com for the dynamic stuff. So, yeah, that's, yeah, that's how render works.
Ayush Nwatiya [00:25:00]:
So it just their their model just kind of fits my brain really well, just the concept of services. I just like how that kinda is conceptualized because, yeah, I just understand it quite well.
Charles Max Wood [00:25:15]:
Right. One one thing that I'm wondering about with the deployment story on this is, yeah, going back to the example that I used before, right, where it's, hey. Look. You know, I'd like to have a blog on topendevs.com. Right? Topendevs.com/blog. And I don't necessarily want to have to manage all of the different fields and have my database do the thing, plus statically rendered files tend to, you know, they they load faster. There are a lot of good reasons to do it that way. Is there a way to deploy it up underneath the Rails app? And do you typically just add it to your Rails repo in some way and have it build into a folder, or do you deploy it separately and then use, I don't know, NGINX or something to say, and this folder loads this other thing?
Ayush Nwatiya [00:26:12]:
You all those are valid approaches for me personally. I'd probably keep it in a separate repo and, either have NGINX to kinda take care of the routing or, I would just bite the bullet and host from a subdomain just because I'm lazy that way. So like, my, for example, my my app, scattergun.email, is a Rails app, but the blog, the product blog is at blog.scattergun.email and that's a bridgestone app. I mean, I could have hosted on, like, forward slash blog and then done some funky stuff with redirects or URL rewrites to kinda make that work, but, and I just it seemed cleaner. So I I do lose all the SEO benefits here, but it's just cleaner that way. So that's how I would do that. Whether you'd wanna mix it up with your rails repo, probably not depending on how Mhmm. Your use case is, actually set up.
Ayush Nwatiya [00:27:12]:
I mean, you could. I know I know that Jared has done it with Jekyll in the past where he's gonna have drills and Jekyll sitting side by side. I mean, there's no nothing stopping you from doing that. There's no technical reason why you shouldn't. I probably just wouldn't because it's against just my sensibilities to a point where it's a personal thing. I have there's no technical reason that this is a personal thing. I don't wanna be mixing those 2.
Valentino Stoll [00:27:39]:
No. Yeah. I I was doing research for this, and I I'm it made me think of high voltage from thought, but which I guess there it's in maintenance mode, which is kind of a bummer. But, maybe there's opportunity here for, Bridgestone plug in for rails.
Ayush Nwatiya [00:27:57]:
Yeah. We were working on something, but then, Jared kinda lost interest in it. It's probably not gonna happen because it's so the the the thing is, it's, like, bridgestone is, like, I would say 80 to 90% Jared White, probably 10 8 percent me and then 2% other contributors. So, it's still very much his show. I'm quite happy to just support him in any way he needs, which also and because it's, like, it's all volunteer stuff, it does mean that the things that him and I are interested in are the things that get done. And, his interest in Rails is dwindling pretty significantly. And I don't have a massive interest in integrating Rails with Bridgestone. So if we have contributors who wanna come in and help us out with it, we'd be more than happy.
Ayush Nwatiya [00:28:48]:
But I don't think it's something that's on either of our radars. Right. At this point. But that said, one of the, legacy bits we're kinda carrying from Jackal is the fact that the web server was kinda hard coded into the tool itself. So, Jackal because, Jackal only used a web server for dev development. So they had hardcoded WebRic in there as part of literally, built within Jackal.
Charles Max Wood [00:29:14]:
Oh, that takes me back.
Ayush Nwatiya [00:29:15]:
Yeah. In a part of Bridgestar at 1 point o, Jared ripped out Jackal and put Puma in because Right. We needed Puma for for Rhoda. So but now you are in a position where Puma's kinda built into Bridgestone, and I wasn't particularly happy with that. So I've taken some steps to, make Bridgestone just gen generic rack compliant. So we wanna be at a point where you can, or you can bring any rack compliant web server you want and bolt it onto Bridgestone. We'll also still supply Ploom as a default. But once we get to that point, Bridgestone will be like any other rack app.
Ayush Nwatiya [00:29:54]:
So you could just put it in alongside your rails repo or whatever and mount and just mount it as a as a, as a as an engine in your roots dotrb in in rails. So there is a path to that. It's just, yeah, we'll we'll get the we'll get that soon enough.
Charles Max Wood [00:30:14]:
Yeah. I found a few posts as well when I looked at this last that we're using a gem called Rails reverse proxy. And, effectively, what it does is it takes the request to railsapp./blog/whatever, and it just knows that that has to get passed off to your Bridgetown instance or Jekyll or Hugo or whatever you're running in the, you know, that's running somewhere else, but it'll just hand it off and then, you know, return the response. Yep. But the downside to that is that then if your layout on your main page changes and you want it to look the same, you have to make the change in both places.
Ayush Nwatiya [00:30:55]:
2 places. Yep. Exactly. So that's always gonna be, like, a tricky thing if you're handling 2 separate repositories. But it comes down to, like yeah. Whether you want to run it as, whether you wanna run it as 2 different projects or you wanna run it as a single project because I think if you're trying to run it as a single project and using 2 different tools, that's probably gonna get gnarly at some point or the other. So So like going back to my scattergun example, I the scattergun blog, which is bridge on power and the app itself which is rails powered. I treat them as independent products.
Ayush Nwatiya [00:31:29]:
So the the blog has the same color scheme and, like, fonts and design language as the app, But it doesn't share any of the layouts or design or anything like that. So it's just a very it's just it's got a similar look and feel, but it doesn't share any components or code or anything like that. And that was intentional just because I wanted to run them. Because I I wanted to avoid that exact problem that I make a change in one place. And then I'll have to make a change in in another repository. I didn't wanna do that.
Charles Max Wood [00:31:59]:
Right. So one thing that I'm gonna whine about here for a minute, is lately I've gotten very much into Tailwind, and I I really like it. I paid for Tailwind UI, so I use a lot of the stuff that's in there. But one thing that I found with, like, podcast show notes is that if I type them into, like, the tricks editor or something, when it renders it out, it doesn't add the tailwind classes to the right, to the paragraph tags or the header tags or whatever. Right? And that that's something that I would like to be able to do. And so what I find myself doing is effectively finding ways to add those styles in some other way under, like, the dot tricks, whatever, tricks content, class. Right? So tricks content class h one looks a lot like an h one out of Tailwind. Right? But I have to go and I have to kinda hand code that myself, and that's been a huge pain.
Charles Max Wood [00:33:04]:
So does Bridgetown give you ways of doing that when you render stuff out as far as I I get the the whole, like, wrapper around things in the layout is gonna have all that stuff, and I have that in Rails. But, you know, from my markdown or wherever I'm pulling the content from, can I tell it to build it out that way?
Ayush Nwatiya [00:33:26]:
Short answer is no. Because, unless you're hand coding HTML and and putting the classes in, which should be like yeah. It's like writing HTML. We don't provide any we can't do that in knockdown because we just use cram down as a render. So Right. I think whatever way you can add custom classes to a cram down file, you'd be able to do it that way. We don't have anything specific in Bridgestone for that. And I doubt there there will ever be because Jared and I are both vocal opponents of the whole tailwind approach with utility for CSS and things like that.
Ayush Nwatiya [00:34:04]:
I would I would hold my breath on that. It's unlikely to happen, I think. Right. That is, like, that is one thing that, I I don't wanna say never, but I think if even if someone proposed some functionality to make that happen, I think Jared and I both both would just put a stop there. But sorry, this is not happening in Bridgetown. I don't wanna put words in his mouth either, but I'd, that is just one thing where I think we would probably draw a line and say that because, see, I think I just don't think it's a good approach for web development, and I get why people like it. And I I don't, I don't wanna dissuade people from from using it. It's a very like, just for me personally, I think you should give CSS the respect it deserves.
Ayush Nwatiya [00:34:49]:
And, I like the concept of separating styling from from from content. So, everything in Bridgestone will always kinda be in the spirit of the open web, which is, you write your content, which is which is an HTML. You style it using CSS, and you add, dynamic functionality on top of that using JavaScript. So that'll always be, like, a core tenant of Bridgestone and mixing up your CSS and HTML, to me, in my opinion, goes against the spirit of the open web.
Charles Max Wood [00:35:23]:
So you don't wanna be my friend anymore. I got it. No. It's okay. It's
Valentino Stoll [00:35:29]:
Yeah. I
Ayush Nwatiya [00:35:30]:
got that. No.
Charles Max Wood [00:35:30]:
No. I understand what you're saying. And I can only imagine what a headache it would be to try and make something like that work. But
Ayush Nwatiya [00:35:37]:
Yep. I mean, there there's always ways around it. Right? Like,
Charles Max Wood [00:35:42]:
Oh, yeah.
Ayush Nwatiya [00:35:42]:
Yeah. But, I think, again, if if you're if you're wrestling against the tool, you're probably, in my opinion, not
Charles Max Wood [00:35:51]:
May not
Ayush Nwatiya [00:35:51]:
be the tool. Not doing something right. Yeah. Yeah. Because I I think one workaround in Bridgetown might be to because, like I said earlier, we have the concept of Bridgetown components, which are just Ruby classes. So you could, just use those to define your styles in there. So you could just have a method which returns all the table 1 style classes that you need, and then just call that in the HTML template. So that that would be one way of going about it within Bridgestone, within
Charles Max Wood [00:36:22]:
Right.
Ayush Nwatiya [00:36:23]:
Within the tools that are provided, and I think using them in the spirit that they are meant to be used.
Charles Max Wood [00:36:30]:
Valentino, you said you had a lot of questions. So and then I keep jumping in with mine. So go ahead.
Valentino Stoll [00:36:38]:
Yeah. And I wanted to touch on theming because, like, I feel like next to, like, SEO, maybe theming is, like, the the next frontier.
Ayush Nwatiya [00:36:48]:
Yeah. It's, it's a bit sad at how few community creative themes there are out there for Bridgetown. It's something we we've tried to push a number of times for the community to create a few more themes, but it hasn't been something that's materialized. I mean, there's a few out there. I think there might be a a GitHub tag, Bridgestone Themes or something like that. I think there might be something on the Bridgestone website as well. But, yeah. It's it's a bit of a shame that there's not more out there.
Ayush Nwatiya [00:37:20]:
We have, an API for things. We have a guide on how to create them as well. It's just I think the tool is not popular enough to have a wider variety of themes. So Mhmm. Yeah. If you're listening and you wanna use Bridgestone and you like it, please create more themes.
Valentino Stoll [00:37:42]:
What is that process like? I'm curious. Like, I see, like, there's there's you basically create a new plug in, but, like, what happens after that?
Ayush Nwatiya [00:37:50]:
Yeah. It's it's just a a so we have a plug in generator. You generate a plug and you read the docs, follow the instructions on how to create a theme. You publish it to GitHub, and I think you add a a tag to it. I think, I can't remember the tag is. I think it's either just bridgedondash plugin or bridgedondash theme or something like that, and it'll show up on our website. Yeah. That's this is not a massive, process to it.
Ayush Nwatiya [00:38:16]:
You just publish it on GitHub and then anyone can use it. It's just it's just it's the same as publishing a Ruby gem. So, yeah, you'd have to create a gem and push it to Ruby Gems as well. But, yeah, it's it's literally just like creating a gem.
Valentino Stoll [00:38:31]:
Gotcha. And is that like a, you know, you pick your CSS or, like, JavaScript, like, all the asset bundling, like, that's the responsibility of the plug in kind of thing?
Ayush Nwatiya [00:38:43]:
Yep. Yep.
Valentino Stoll [00:38:45]:
Yep. Is there, like, you know, because what I would love is, like, you know, something like Bootstrap or something like that. Like, you said apply to to the
Ayush Nwatiya [00:38:54]:
Yeah. I mean, that's a I think I'm pretty sure you can configure Bootstrap, using the like, the thing I mentioned earlier, bundled configurations. Yep. So let me check. Do we have Bootstrap? No. We don't have Bootstrap. But we could, yeah. That's easy enough one to add.
Ayush Nwatiya [00:39:10]:
We'd so we have you can configure things like shoelace, open props, things like that. We're just running one command. I'm surprised we don't have, Balmain there actually. That's something we should probably add. So, yeah. Balmain is my favorite CSS framework if I was gonna use 1, which is, in fact, actually very rarely that I actually use a framework. But, yeah. I mean, these things can be installed quite easily because you have, NPM there.
Ayush Nwatiya [00:39:38]:
So you can install them and they'll be they'll be there in your build for you to use, just a couple of command in a couple of commands. So even if you don't have it, like, even if though there are no, like, community created things, there are a few but not a lot. Stuff like Bootstrap and Balmain, you can configure very easily, And, then you have all that power at your fingertips.
Valentino Stoll [00:40:02]:
Yeah. I do see that in that front end bundling, section here now. You can just, you know, yarn add the the framework of your choice and then include it in the styles. Yeah. That's cool. Where do you take it from here? I mean, it looks pretty feature complete. Like,
Ayush Nwatiya [00:40:18]:
Yeah. The we have we have, we have a few, road to Bridgestone 2.0 blog posts that have been published. So if you check out the, Bridgestone blog, you'll see some of the things we're working on. So one of the things for me is getting bridge time to be rack to plan so we're not relying on a specific server. Jared is working on, like, speeding up how the hot reload works in development. So right now we're gonna rebuild the entire website every time you make a change, which for bigger sites is is not very efficient. So he's working on something that does, like, incremental bills. So your hot reload when you're developing is is, super snappy.
Ayush Nwatiya [00:40:59]:
Mhmm. Got a whole bunch of other stuff, like small improvements as well. I think the big one is we're we're aiming to drop our dependency on active support. It probably won't happen for bridge hunting point over long term. We wanna drop our dependency on active support.
Charles Max Wood [00:41:15]:
Is there a reason for that?
Ayush Nwatiya [00:41:18]:
Jared's written out a long, blog post about it. For him, the reasons were were largely personal. So but, the my view on it is, I think there's a lot of there's a lot of scope for different ideas in the Ruby community. We've kinda gone too close to rails with Bridgestone a number of times, I think, with with the use of things like active support and, stuff like that. I think we were just trying to just fly very close to rails. But I think it's good to have different ideas, around the Ruby community. So we're just trying to see what what else we can come up with that doesn't have a hard dependency on on Rails frameworks and just try to just try to have a few different trains of thoughts, different solutions to problems, see see where that takes us really. Yeah.
Ayush Nwatiya [00:42:10]:
But the the the the reason for dropping, active support was a largely personal thing by Jared because of his disillusionment with rails and with 37 signals. So, yeah, like I said, he's 90% of of Bridgetown, so, there's no point in going in a direction that he wasn't happy with or felt motivated to work on because it's still largely a volunteer driven thing. He doesn't get paid for it. He has we have a small number of GitHub Sponsors, but it's, very much a labor of love. So, I'm quite happy to support him with whatever direction he wants to take the project in.
Charles Max Wood [00:42:50]:
So one thing that I'm wondering about with some of these static sites,
Ayush Nwatiya [00:42:55]:
they
Charles Max Wood [00:42:55]:
do a great job on a bunch of stuff, but one of them is search. Right? So if you have a large amount of stuff in your website, you know, people are gonna want to find it. So do you recommend something like Algolia or some of these engines out there that kind of hook into your site? Or do you push people more toward, hey, You know, here's a really simple way to do it with the ROTA implementation that you have, or and where where do people end up for that?
Ayush Nwatiya [00:43:26]:
So, yeah, we we recommend, like, a JavaScript approach, and I I think Algolia is one of the 3. We have search on the Bridgetown website, which is a Bridgetown powered website, and it's not so it's not a server site it's not a server powered search. It's client only. I am just trying to see where Yeah.
Charles Max Wood [00:43:46]:
But if you use Algolia, you're using their back end to do the search. Right? So
Ayush Nwatiya [00:43:54]:
I'm sorry. You have it. It's using the Bridgetown quick search plug in, which runs, lunar dotlunr.js. So it's not Algolia. That's my that's probably just confusing myself. So this is purely client side. So I think it builds like a JSON document or something. Okay.
Charles Max Wood [00:44:11]:
So it builds its own index and post that statically.
Ayush Nwatiya [00:44:15]:
Exactly. It's a purely JavaScript powered search. Lunr.js is the solution we're using. Yeah. That's and the plugin is called bridgestown quick search. It's another first party plugin. So, yeah, that's that's what we recommend for search. But if you wanted something a bit more involved, then again, you can always just reach out for the service, like any service side solution.
Valentino Stoll [00:44:37]:
Yeah. I I always like Lunar. Yeah.
Charles Max Wood [00:44:40]:
I never
Valentino Stoll [00:44:40]:
heard of it. There there's a there's actually quite a few, you know, JavaScript search, client side search now, which work really well that are very much like I think there's one like that's like an Elasticsearch clone even.
Ayush Nwatiya [00:44:56]:
Oh, okay. Wow.
Valentino Stoll [00:44:57]:
And they're they're really easy to use, and, it's pretty wild, like, how fast they are.
Charles Max Wood [00:45:03]:
Mhmm. So besides kind of the cleanup on, like, active support and getting rack support in there, are there other things that are coming to Bridgetown? Or
Ayush Nwatiya [00:45:14]:
nothing, nothing big. We're pretty much like we wanna keep Bridgetown core, fairly slim, so we don't wanna be putting stuff in just for the heck of it. I'll I think a lot of the, big features and stuff will be largely plugins. So I think Jared had an idea where he wanted to, have, like, really good first party support for flex. Do you know the the library flex? P h l e x by Joel Draper? It's a it's a way to write components using, HTML. It's way it's a way to write object oriented HTML using pure Ruby, I think. I may have got that completely wrong. It's something to do with writing.
Ayush Nwatiya [00:45:56]:
It's like a DSL to write HTML using Ruby. And
Valentino Stoll [00:46:00]:
It's like if Vue components had a a DSL. Okay.
Ayush Nwatiya [00:46:07]:
Yeah. What what Valentino said?
Charles Max Wood [00:46:09]:
I put it on the Internet. It looks cool.
Ayush Nwatiya [00:46:12]:
Yeah. So initially, I think he proposed adding that to core, but then I said as something that I should live in a plug in. So, yes, they'll they will probably at some point be a plugin. There might already be one that I'm not aware of because flex isn't really for me. But, yes, things like that will always live in plugins. There'll be first party plugins under the Bridgestone organization on GitHub. So and we'll have good support for them out of the box. But we're not looking to add a whole lot into Bridgestone core.
Ayush Nwatiya [00:46:40]:
It's gonna be largely incremental changes, and just getting it to a stable place. Because we don't want, we don't wanna start making BridgeTime too complex because it's already it does quite a lot and I and, just judging by the vibe at the large BridgeTime count, people are just getting a bit daunted by it already.
Valentino Stoll [00:47:03]:
Right.
Ayush Nwatiya [00:47:04]:
So we definitely, like, our philosophy is very much the simple stuff will always be simple. So we may have all the advanced to, like, server side rendering and all in there for you to use. But if you want something as simple as just a blog, that'll always still be very simple to do. They're not gonna stand in your way in any in any, way, shape, or form. But, honestly, when you have a lot of advanced features, people inevitably tend to get distracted by those. So, I I can't think of anything that's like a big feature that we have coming to the pipeline. It's all just gonna be, like, incremental stuff for for the foreseeable anyway. Unless unless someone has a really solid proposal that I that we we, the core team, like.
Ayush Nwatiya [00:47:47]:
And I'm like, okay. Yeah. Then we can go ahead with that. But, for now, there's nothing that I'm aware of other than let's just keep cleaning this up and keep keep stabilizing it.
Valentino Stoll [00:47:59]:
Alright. So so the $1,000,000 question here is, can can we use AI to, you know, generate static pages for us
Ayush Nwatiya [00:48:10]:
and build and
Valentino Stoll [00:48:10]:
build content generation. Copilot. Easy would that to be, yeah, to just have a thought. But right? Like, if if there's a a Bridgetown GPT, right,
Ayush Nwatiya [00:48:21]:
can
Valentino Stoll [00:48:21]:
I use it to just quickly, spin up ideas?
Ayush Nwatiya [00:48:25]:
Yeah. Of course, you can. Yeah. There's nothing stopping you. You're just writing Ruby code. You can do you've got the whole power of Ruby at your disposal, so you can do whatever value you want.
Valentino Stoll [00:48:35]:
Alright. Bridgetown plug in coming. Bridgetown again.
Charles Max Wood [00:48:39]:
Right? I'm I'm kinda curious. What what's your story with this? How did you wind up working on this project?
Ayush Nwatiya [00:48:50]:
Yeah. Good question. So I think it was quite early on in my time with Ruby. So for those who aren't familiar, I only started working with Ruby in 2020. I used to be a mobile developer for that, and I spent, the first half of the pandemic pretty much, learning Ruby and Rails. We're glad you saw the light. Sorry?
Charles Max Wood [00:49:12]:
We're glad you saw the light.
Ayush Nwatiya [00:49:14]:
Yeah. I'm glad too. And I think I was, at some point, I was doing something with Jackal. I can't remember what it was now. And I was trying to integrate web pack with it, and I was losing the will to live because integrating web pack with Jackal is, not for the faint hearted. And, while I was just googling around, I think I found, because at the time, Bridgestone was marketed as, like, a a Ruby powered webpack aware static site generator. Mhmm. And I just stumbled upon this thing, and I was like, okay.
Ayush Nwatiya [00:49:47]:
Here we go. Here's another deal that thinks it's better than Jacqueline. I was very unimpressed just because of my skeptical, pessimistic nature. But it kinda stuck in my brain, and then a few days later, I got so fed up. I was like, let me go give this thing an actual try. And I just installed Bridgestone, and that's when I realized it's actually a fork of Jackal. So when I installed it and created a site, everything was super familiar. And to get my old Jackal site to work, all I needed to do is copy the files over, and and that was it.
Ayush Nwatiya [00:50:15]:
Because, it was just a fork and the directory structure was so similar. I could get up and running with Bridgestone super fast, and I was like, okay. This is pretty cool. And I just started customizing it in ways that I wanted. So I think when when I first used it, it was, it had Sass by default, but I was getting into post CSS at the time. And I was, I was reluctant to use a full blown preprocessor because even, at the time I could see how good vanilla CSS was becoming. And I liked the whole concept of post CSS where it just kinda lets you write next generation CSS today, kinda like a babble kind of thing. So, Bridgestone had no support for post CSS.
Ayush Nwatiya [00:50:59]:
I I customized my template to kinda add it in there. I made a few other changes, just out of personal preference, and I wrote a blog post saying, I really love this new build bridged on. There's some things out of the box I didn't like, so here are all the things I made like, I I I made to, change it to to my liking. And I shared that around the Bridgestone community. I think at the time, they had a discourse and a discord, and so I just shared it around there. And I got a reply from Jared saying, if you wanted to make a pull request for any of these things, we'd be happy to accept it. So I pulled request some of the stuff back, like, I think post CSS and stuff, can't remember now. But I made 3 or 4 pull requests back into the repo from customizations I'd made just for myself.
Ayush Nwatiya [00:51:44]:
And I just kinda got involved with issues. I was I was commenting on issues, commenting on pull request, giving my opinion, just getting involved with the community. And then I got a message from Jared, one day. And I I should mention I mentioned him a few times already. Jared White is the person who started Bridgestone back in April 2020. He forked it from Jekyll because of his own frustrations with Jekyll and its kinda lack of progress. And it was basically him and another guy, Connor Rogers, who's quite well known in, like, front end circles, who were on the core team, when when I joined. And, yeah, I just got a message out of the blue from Jared saying, I really like your contributions.
Ayush Nwatiya [00:52:24]:
Would you consider joining the core team? I was like, hell, yeah. Why not? So, yeah, that's how I ended up on the core team. My contributions have been largely selfish. I think apart from maybe 1 or 2 things, I think literally everything I've contributed has been stuff I wanted for myself. Mhmm. Which is one way of getting involved in open source, but I was also careful that I didn't want to I didn't want to get, tired of it. I didn't wanna start resenting the project because
Charles Max Wood [00:52:58]:
Right.
Ayush Nwatiya [00:52:58]:
I'm I'm freelance. I don't have a job, that has a consistent paycheck coming in. What whatever I do on open source is stuff where I could be billing a client, but I'm not billing a client. I'm doing my own stuff instead. So, it needed to be very much something that comes from within. So that's why my contributions tend to go in in spurts. Like, there'll be a couple of months where I'll make tons of contribution, then I'll go a few months without making any. But behind the scenes, I'm always, like, supporting Jared and the core team with decisions and and things like that.
Ayush Nwatiya [00:53:34]:
So, yeah, my my role is is a bit weird with with the project in the sense that kinda there, but not always there. It's it's very much a choose your own involvement kinda thing.
Valentino Stoll [00:53:48]:
Right.
Ayush Nwatiya [00:53:49]:
But, yeah, that's how I ended up, and that's, on the core team, and that's kinda, like, the role that I play within it at the moment.
Charles Max Wood [00:53:55]:
I love that too because, yeah, you start contributing and
Ayush Nwatiya [00:53:59]:
Yeah. That that's the best way to get involved with any project. Right? You just, start contributing, see where that goes. And, actually, another point I should make is my freelance career is, what I have is very much well, slightly indirectly thanks to Bridgestone because I was, I I had no contacts in the Ruby community whatsoever. Mhmm. And, I just ended up on on the Bridgestone core team in December 2020. And it was around Jan 2021 when I was trying to start freelancing and finding clients and stuff like that and wasn't really making much of a headway. But there was, someone who I had got in contact through my work on Bridgetown was, a chap named Mike Rogers, who is sadly no longer with us.
Ayush Nwatiya [00:54:45]:
But, he was also a contributor on Bridgestone. I just got in I'd I'd got in contact with him through my work on the project. And he retweeted someone looking for, Ruby and Rails freelancers. And I think he sent that tweet directly to me as well because he knew I was looking for freelance work. And I replied to that message and that was how I got my first contract, which got me started with with Rails freelancing and, it has been, like it's always getting your first client's always the hardest. Right? And I was with that client for well over a year. I'm still in touch with them. I'm still, like, good good friends with them.
Ayush Nwatiya [00:55:24]:
And, yes. I think Bridgetown was instrumental in giving me a freelance career. That's the power of open source.
Charles Max Wood [00:55:31]:
Alright. Well, anything else we wanna go into, Valentino?
Valentino Stoll [00:55:37]:
No. I think we've said it all. I mean, I'd to be honest, I didn't know much about Bridgestone before today. Yeah. It looks awesome. It solves you know, it it solves a little bit more problems, than my original solution of middle man. So I'm I'm I'm excited to try this out, in my next static project for sure.
Ayush Nwatiya [00:55:58]:
Cool. Glad to hear it. Yeah. If you if you wanted to travel, you can always, reach out to me for help. And, yeah, we just wanna try and make it as simple as possible to, get started with static sites and have the advanced functionality there when you need it. So, yeah, I don't know a whole lot about middle man, but I can say with a fair amount of certainty that you'd be happy with bridge time.
Valentino Stoll [00:56:20]:
You know, it's funny. There's a lot of similarities, in some of the design decisions. I I imagine, some some more pulled, you know, maybe copied, and that's great, because, you know, why repurpose? Yeah. Yeah. Why why rebuild it from scratch? And it does from from my example of as a, you know, middleman user, it makes it easier.
Ayush Nwatiya [00:56:42]:
Yep.
Valentino Stoll [00:56:44]:
But, yeah, I mean, I I love all of the you know, you can have, like, data files that allow you to, like, use some, you know, data objects and reference to your templates and gives you all of the how to host static files and all that stuff is built in and, you
Ayush Nwatiya [00:57:01]:
know Yep. That's actually stuff we just inherited from Jackal, actually. We just that's like those conceptual decisions we just inherited from Jackal and they're good decisions, so we just stuck with them. Like, why why change it if it if it ain't broke?
Valentino Stoll [00:57:15]:
Right? Maybe maybe middle man also stole it from Jacklyn. Could be. Yeah. That is amazing.
Ayush Nwatiya [00:57:19]:
Yeah. I mean, like, this whole, just the whole ecosystem of static side generators in Jekyll is what kicked it all off. So I'm not surprised that it's had such a far reaching effect.
Charles Max Wood [00:57:31]:
Yeah. I'm I'm curious if, middle man is a fork of Jekyll as well. It really wouldn't surprise me.
Ayush Nwatiya [00:57:39]:
I don't think it is, but, yeah, if it was, I
Charles Max Wood [00:57:41]:
don't think it is either, but it wouldn't shock me if it were. Yeah.
Ayush Nwatiya [00:57:44]:
So
Charles Max Wood [00:57:44]:
well, I'm gonna push this into the picks. Valentino, why don't you start us off with picks?
Valentino Stoll [00:57:51]:
Sure. Yeah. I've got 2 picks today. Last week, I was at, the, there was a meet Ruby AI meetup in New York City, that I attended. It was awesome. It was hosted by a company called Sublayer, which, if you're not familiar, is an awesome company. Awesome product. Sublayer, they, they basically give you, like, some cogeneration, in a Ruby ecosystem, and they provide some awesome tools.
Valentino Stoll [00:58:22]:
I've been experimenting with, their blueprints, which basically let you save, like, code snippets as AI generation, like, seeds. So if you have, like, common patterns that you use in, all of your applications or your teams, you can get AI to clone those patterns and say, oh, I want a service object or I want, you know, a factory or or all these different patterns that, evolve over time. And you can get it to code it in whatever styles that you have. So it's really neat. And, yeah, just met a ton of great people there. My my next pick is from, the Olympia chat team. If if you're not familiar, Olympia is like a, you know, AI robots on steroids. You you basically get, like, a team of assistants that have various purposes.
Valentino Stoll [00:59:23]:
So you can have a copywriter. You can have a marketing strategist, like, all these different kinds of very specific assistance. And there's just, like, so many incredible features in it, and they just keep pumping it out. Like, as an example, when I was, you know, about to attend the, you know, event in New York City, I just said, hey. Here's a list of attendees. Like, tell me who I should, like, be connecting with. Right? Like and it goes and it summarizes all the people, and it was it was it's just fantastic tool. If you wanna do research or, it even sends emails for you if you want, which is kind of wild.
Valentino Stoll [01:00:02]:
And all of the systems can talk to each other. I I could talk endlessly about it, but I think we'll have Kobi on soon, so we can dig in
Charles Max Wood [01:00:10]:
there. Yeah. Next week, actually.
Valentino Stoll [01:00:12]:
Oh, awesome.
Charles Max Wood [01:00:13]:
Yeah. I'm looking forward to that. Alright. Ayush, what are your picks?
Ayush Nwatiya [01:00:16]:
So I've got one pick which is gonna be, pretty alien for, I think, most people in America, but it's a thing that's happening in America. The Cricket 2020 World Cup starts on Saturday in the United States and West Indies. And the first match is USA versus Canada and Dallas, Texas. I know cricket's not a thing at all in America, but given that the World Cup's happening there and it's, shortened form of the game I mean, the traditional form lasts for 5 days, and only muppets like me enjoy that. But this is more like it's a 3 and a half hour version, way more fast paced. And I am I'm aware of the popularity of another sport in America, which involves throwing a hard ball and whacking it with a wooden stick, and then chasing it around. And cricket's basically the same thing. It's also chucking the hard ball, whacking it with a wooden stick, and then chasing it around.
Ayush Nwatiya [01:01:11]:
So, Yeah. I don't know if you're vaguely interested. Cricket World Cup starts, on Saturday in in America. And the biggest I think one of the most valuable, sporting events in the world is India versus Pakistan at cricket, and that's happening in New York City. They've they've built, like, a temporary stadium in Central Park, which can hold something like kinda 25, 30000 people or something like that. And it's primarily built for the India versus Pakistan match. It's like their flagship match, and they wanted to have that in America. So that'll be interesting to see how that goes, but, yeah, that's my pick.
Charles Max Wood [01:01:52]:
Cool. And by cool, I mean, it's cricket, but okay.
Ayush Nwatiya [01:01:56]:
Well, I mean I mean, you like baseball out there in America? I mean, crickets are not that different.
Charles Max Wood [01:02:02]:
I don't follow baseball either. So, you know,
Valentino Stoll [01:02:05]:
it's it's funny because this seems to be like a a new, like, recurring thing, because I know, like, I was in Nashville, and they they had, like, a a, you know, a not in the World Cup, but they had, like, a international soccer event, like, where they built a stadium. You know, but all the locals, you know, that you talk to, oh, like, do you know what's happening down there? And they're, you know, they're like, some soccer thing. I don't know. Yeah. But but, you know, it's packed. It was so like Yeah. It's just funny.
Ayush Nwatiya [01:02:41]:
Yeah. It is. I'd be I'd be, really curious to know, like, when that India Pakistan match happens in New York. I think it's just gonna be largely immigrants from those two countries. I'd be absolutely astonished that there are any, like, Americans there.
Charles Max Wood [01:02:57]:
Alright. Hey. Look. There are 3 Americans in here. Alright. Alright. I'm gonna put out a couple of picks. So I always do a board game pick.
Charles Max Wood [01:03:08]:
The one that I've been playing lately is legendary, Marvel legendary. It's I picked it before, but, the other day, we were playing with 1 of the expand we have, like, 6 or 7 of the expansions. And the one that we were playing was the World War Hulk expansion. And, so legendary has a board game geek weight of 2.43. So it's you know, people can pick it up not not terribly, outside the range of, you know, what you'd expect from a competitive game. The World War Hulk expansion has a board game geek weight of 2 point 33, so it's slightly less complicated than regular legendary. And, yeah. I mean, it's comic book characters.
Charles Max Wood [01:03:58]:
Right? So you you have comic book heroes, you recruit, and then you have, comic book villains that you're trying to defeat, and they have some scheme that they're trying to accomplish. And so you're playing against the game. And, anyway, it's really fun. I really enjoy it. It is a collaborative game, deck building game, and so I'm gonna I'm gonna pick that. Couple of other things that I'm gonna pick really quickly. I don't know if I picked Vite Ruby yesterday. We talked a lot a little bit about Webpacker here, but, I've been using Vite Ruby, and I'm liking it.
Charles Max Wood [01:04:33]:
Is it blasphemy to say that I like it better, import maps and prop shaft? Anyway
Ayush Nwatiya [01:04:40]:
No. It's not really. I, I haven't used Vite, but, I mean, import maps and ES. But they're all quite frustrating, so I wouldn't be surprised if there's a tool that does something better than them.
Charles Max Wood [01:04:50]:
Yeah. Vite is like magic, and I get the hot module reloading that I want and everything else out of it. So I'm pretty happy with it. And the setup wasn't heinous. So, I'm gonna pick that. I'm also gonna pick another gem. It's standard r b, which is the it's a I think it's built on top of Rubocop, but it essentially just does your linting on your, Ruby. And, it just follows a set.
Charles Max Wood [01:05:21]:
Like, you can't configure it. It just gives you your linting, which honestly, I don't wanna make those decisions. Right? So I and I've been pretty happy with that as well. And then, yeah, I guess the last pick is just Ruby Geniuses. Go check it out, rubygeniuses.com. Still kind of bolting some of the pieces together. But if you wanna get together with other Rubyists and see what they're doing and see what's happening and get trained by people you know, then, definitely check it out. Yeah.
Charles Max Wood [01:05:54]:
Those are my picks. This is awesome, Ayush.
Ayush Nwatiya [01:06:00]:
Yep. Thanks for letting me ramble on again. That's 2 weeks in a row now. It's just been me talking.
Charles Max Wood [01:06:05]:
It's all good.
Valentino Stoll [01:06:06]:
We gotta break you in, you know. Yeah. Yeah.
Ayush Nwatiya [01:06:11]:
Yeah. Trial by fire going on. But, yeah, it's it's good fun. It's, yeah, it's just good to talk about Bridgestone because, honestly, I think, I I just I find it a bit sad how few people in the Ruby community are even aware that it exists, so it's good to chat about it.
Charles Max Wood [01:06:23]:
Alright. Well, till next time, folks. Max out.
Hey, folks. Welcome to another episode of the Ruby Roads podcast. This week on your panel, we've got Ayush Noatya, and I'm Charles Max Wood from Top End Devs. So, Ayush, you're kind of our expert guest or expert host or however you want to swing that cat. And, yeah, we're talking about Bridgetown. Now we lined this up before you were a host on the show because we were talking about the the codecs, the rails and hot wire codecs. And then, you know, you met it came up that you were on the, Bridgetown core team, and I was like, well, cool because I've been wanting to talk about it. So
Ayush Nwatiya [00:00:49]:
Yeah. It's good to be back. It's good to be on the other side of the metaphorical table. Alright. As a guest rather than a host, but, Yeah. Let's let's start Bridgestone. So
Charles Max Wood [00:01:01]:
Yeah.
Ayush Nwatiya [00:01:02]:
Yeah. We why why do you wanna start?
Charles Max Wood [00:01:04]:
Well, we have a grand tradition on this show starting with a definition. So why don't you tell us what Bridgetown is?
Ayush Nwatiya [00:01:15]:
Right. So, Bridgetown is what we call a progressive site generator. So hi, Valentino.
Valentino Stoll [00:01:24]:
Hey there.
Ayush Nwatiya [00:01:26]:
Yeah. We just got started.
Valentino Stoll [00:01:28]:
Yeah. Awesome. Mhmm.
Ayush Nwatiya [00:01:30]:
So let me read out the, the tagline from the website. We we call it a next generation progressive site generator and full stack framework powered by Ruby, which is a mouthful. What the hell does that actually mean? Well, it's kinda like a successor to Jekyll. It was forked from Jekyll 4.2, but it's kinda turned into something that's a lot more than just that. So it's still, like, primarily a static site generator. Like, I would say, all the features and everything are geared towards, like, I would say 90% of it is geared towards just building static sites. And we refactored quite a lot from Jekyll. So, like, obviously, the whole world of static side generation kinda evolved quite a bit from when Jackal first arrived on the scene.
Ayush Nwatiya [00:02:22]:
And there are a lot of quirks under the hood where, you know, things like, a collection of posts in Jekyll. It's kinda like a custom collection, but not really. It's slightly different in different ways. And then, yeah. There's, like, a whole, it was just under the hood very messy in certain ways. So we kinda refactored the entire generation engine. So the way, like, the content is either read off disk or, like, acquired from some other source and then built into this site. And then the site is written, The actual website with HTML pages is written to disk for you to do as you want.
Ayush Nwatiya [00:03:09]:
So I I say we rewrote it. Jared, the Jafu started the project. He rewrote this whole thing. And then, a common use case is also like, you know, you have, like, 90, 95 percent of static side, and then suddenly you need one tiny bit of dynamic functionality. Like, let's say you have a marketing website and you want to put a contact us form on it, and you need some weight for that form to, like, an endpoint for that to submit to, which sends an email to yourself or some something like that. So, we used a a framework called ROTA, which is like, Yep. It's kinda like a toolkit to build a framework rather than a fully formed framework in its own. Right? And using we kinda plugged that into Bridgestone and now you have the ability to write a few dynamic endpoints in addition to your static site.
Ayush Nwatiya [00:04:05]:
So, we kinda cater to this whole use case where you cannot most of your content is static, but you need a little bit of dynamic functionality. And, we'll provide that to you in the context of, like, a Ruby full stack framework. You don't need to go reaching for Lambda functions and all that stuff because that kinda goes against our philosophy of, like, everything should should live in the single repo and everything should be runnable locally.
Charles Max Wood [00:04:33]:
Yeah. We've had Jeremy Evans on to talk about ROTA. And I mean, I remember back in the day when Jekyll came out. I mean, the use case that everybody used was a blog. Right? And so Yeah. You were talking about how you have this collection of posts, and it kind of, you know, does magical things for your posts. And, yeah, I mean, that was very much how it was used. That's how I mean, that's what Tom wrote it for was so that he could run his blog on it.
Charles Max Wood [00:05:01]:
And so Yeah. Yeah. It made sense, but, yeah, the the I guess those limitations are the things that kinda kept me from, like, fully adopting it. So, you know, you look at something like top end devs. Right? Because I've used static site generators to run top end or dev chat dot TV top end devs. Right? And then I've moved it back to a Rails app, I think, three times now. Mhmm. And so you're right.
Charles Max Wood [00:05:31]:
We're now on the 3rd time. And the reason is is because I have other dynamic stuff I wanna pull into it. Yeah. And the other the the other end of it is is if I have a Rails app and I want a blog or something like that that Bridgetown does well, then, you know, that's the hiccup on the other end is, okay, how do I integrate the 2 so that every time I change, say, the layout on 1, I don't have change it on the other because I may want it to live under top endevs.com/blog as opposed to having blog.topendevs.com. Right? So I can get the SEO and the other benefits of having a part of the website. So so those are kinds of the things that I've been looking at with it, But I have to say a couple of the things that I do really like about it are that it seems to have a lot more options, and it seems a lot more friendly to front end manipulation. Right? So if I want to bring in a hot wire and wire things in, that's not terribly hard. Jekyll, you kinda had to play with it a little bit, I guess, to make it really nicely do that.
Charles Max Wood [00:06:39]:
And then, yeah, I didn't realize that you had kind of the dynamic aspect of it with Rota. So, yeah, I mean, it let's say that I wanna give this another look. Right? Because Yep. You've kind of gotten my interest here. Like, where do I start, and and how do I make it do what I want without having it be a giant pain in my rear end? Because I have to maintain 2 systems.
Ayush Nwatiya [00:07:05]:
Yeah. Of course. So, a lot of the, like, the dynamic stuff is still, like, early days, so there will be, like, teething trouble. It's not gonna be as soon as it is real. It's just such a mature framework. But, honestly, the best way to get started is just gem install bridge down bridge down new my site. Mhmm. Honestly, the best way to do it is just, get your hands dirty, and you'll see a a directory structure out there that'll instantly look familiar for anyone from the Jackal world.
Ayush Nwatiya [00:07:33]:
That'll be, like, endpoints for server side stuff and all that, kinda created for you. And the docs are are really good. Like, one of the things that attracted me to the Bridgestime project early on before I was in on the core team, but the docs were so good. And I think I first stumbled upon the project when I was, like, literally 2 or 3 months old, and I didn't realize how new it was. Looking at the docs, I thought this is, like, years old. So, yeah. We're very proud of the quality of the documentation. So, yeah, just create a site.
Ayush Nwatiya [00:08:04]:
Go to bridgestownrv.com. Check out our docs. You should find whatever you need out there. And just to take the point that you said earlier on about, like, bridgestown being a bit more friendly towards the front end, So that was I clearly think when when the the framework was first launched, I think the dialogue or something about it being like a web pack aware site generator or something. And, yeah. So that was always a core thing for us was, like, we needed something on the front end that was built in that because, no one wants to wrangle webpack and ES build. I mean, I blame half my gray hairs to just having to use webpack and webpack. But, we've got a pretty good setup right out of the box.
Ayush Nwatiya [00:08:45]:
So if you need to install, like we got a good ES build setup now. We're we're deprecating webpack. But if if you need to install anything on the front end, we've got, like, NPM and ES build and all that just, already set up for you so you don't have to deal with any of that. Right.
Charles Max Wood [00:09:04]:
Valentino, have you used Bridgetown?
Valentino Stoll [00:09:07]:
You know, I haven't. The the last time I did a static site, with within Ruby, it was it was with middle man.
Ayush Nwatiya [00:09:18]:
Yeah. Okay.
Valentino Stoll [00:09:19]:
The middle man gem. I'm curious because, like, it has a lot of similarities to middleman. And I'm curious, like, maybe if you like, if you're aware of middleman, maybe how, like, you can dissuade some of the older, like, Ruby heads like us. Right? Like, hey. What does it bring that Middletown, you know, or middleman, like, kind of, is where it strays away and maybe some of the the highlights from it?
Ayush Nwatiya [00:09:49]:
So I'm aware of middle man. I'm aware of its existence. I've probably browsed its website once a couple years ago, but I couldn't give you a good critique because I just I just don't know middle man well enough. So I can I can talk to the strengths of Bridgestone, but I couldn't compare it to middle man because I've never used it?
Valentino Stoll [00:10:06]:
Gotcha. Yeah. I mean, the deployments aspect of it, It's very much like a build local, you know, and then deploy static. Whereas it seems Bridgetown is much more built up around,
Ayush Nwatiya [00:10:25]:
you
Valentino Stoll [00:10:25]:
know, having that dynamic key aspect of it. Like, being able to augment it. Right?
Ayush Nwatiya [00:10:31]:
Yeah. That's true. But, I mean, if you wanted to use it purely as a static site generator, you still can. In fact, all my Bridge on websites are purely static. I don't think I've got dynamic functionality on any of them just because I'd have I haven't needed it. So, with bridge time, we kinda we we like to promote render dot com as our preferred host just because, well, I really like it. And, Yeah. It's once you set it up, what Randall do, just, it'll trigger a build every time you do a git push, which is pretty normal.
Ayush Nwatiya [00:11:01]:
And then it'll it'll just run, a bridge down build or bridge down bridge down deploy rather, which will generate the site and write it to disk, and then it'll each stake your output folder and deploy that to a CDN. So you don't really need to do a whole lot. It's, and and we have something we have something, a feature of Bridgestone called, like, bundled configuration. So that's kinda like workflows or recipes or whatever that, you you can run to configure certain things. And what we have one for render dot console, when you run that, it'll create a render dot yamil file, which is like infrastructure as code. So then literally all you need to do is link your repository to render and point it to that file, and that's it. And you have a website up up and running. Gotcha.
Valentino Stoll [00:11:53]:
Yeah. You know, this this looks a lot more feature rich than middle man does. You know, again, like, we keep saying, like, focusing on the front end aspects of it. Seems like you could build, like, maybe, some JavaScript apps, potentially.
Ayush Nwatiya [00:12:08]:
Yeah. You can. Nothing's stopping you from doing any of that. Yeah. It's, I mean, Ruby is always gonna be front and center, so we have features. Like, you can write, components, which are just Ruby classes, which is built right and we have, like, a concept of bridge down components. So you don't need to pull in, like, a third party thing for that. It's just there.
Ayush Nwatiya [00:12:28]:
So Ruby will always be front and center and, it's quite easy to also do quite advanced things like you can hook into the build process and start doing, like, dynamic stuff at build time. So one of my websites, which is, f/42.com, which is like a a photo gallery. So, if you wanted to look at it, it's f s l a s h42.com. It's a photo gallery. It's like a lot of my photography on there. And all I need to do is really copy paste photo photo files into the repository and run the build. And then I have Ruby code that reads the photos off disk, extracts x f information, things like shutter speed and all all that stuff, extracts it from the file, writes it to a YAML file and, dynamically adds HTML pages to the build. And then when the build concludes, it will write those HTML pages out.
Ayush Nwatiya [00:13:27]:
So for each, like, album or each photograph, I'm not creating those pages manually. That's just all done by Ruby codes. All I need to do is copy the photos in place and run and run the build. So, like, that's pretty, like, advanced advanced ish Ruby code that I've just hooked into the build process.
Charles Max Wood [00:13:47]:
So I'm imagining something similar with, like, a JSON file or something. If you just have a, you know, kind of a how do I put it, a static or an you know, it doesn't change very often, so I'm comfortable committing the data to the repo.
Ayush Nwatiya [00:14:05]:
Yep.
Charles Max Wood [00:14:06]:
You can do the same kind of thing. Right? It's the same idea as the markdown with Jekyll. Right?
Ayush Nwatiya [00:14:10]:
Yep. Exactly.
Charles Max Wood [00:14:11]:
I have another blog post. I just commit more data.
Ayush Nwatiya [00:14:13]:
Yeah. Exactly. The difference here is just that, I'm just copying photo files into place and then there's Ruby code that's reading and doing some stuff with those photo files because, yeah, there's no there's obviously nothing built in to handle JPEGs.
Charles Max Wood [00:14:33]:
Right.
Ayush Nwatiya [00:14:34]:
Well, handle JPEGs in the way that I want them handled. You can obviously just paste them in and reference them in your HTML.
Charles Max Wood [00:14:41]:
Right. So you've got some kind of renderer or data extractor that you've just Yeah. The code.
Ayush Nwatiya [00:14:48]:
Yeah. A data extractor basically, and then, and then a dynamic way to, add pages to the to to the build because I don't wanna manually create a new markdown or dot HTML file for each and every photograph. I've just got some code in there that generates those pages for me at build time and adds them into the or I think it's a site dot pages collection. And then when the site is output, it'll just render out all those pages.
Charles Max Wood [00:15:16]:
That's cool.
Valentino Stoll [00:15:17]:
That's really cool.
Ayush Nwatiya [00:15:18]:
Yeah. Because, like, we we unified the concept of, like, collections, from like like I said earlier, Jackal kinda treated different types of collections slightly differently. Like, post is treated slightly differently to a custom collection. And so we kinda unified all that. And now we have built in collections like pages and data and posts. Those are built in. You get them out of the box for free, but they they behave in the exact same way as a custom collection be would behave. So that just makes doing advanced things like this, like, when you're manipulating the build, it just makes it a whole lot easier.
Charles Max Wood [00:15:53]:
That makes sense. So in essence, you know, kind of the how do I put it? The, the blog, you know, that we typically see for for sites like this things like this. Right? That it it just does that nat natively, naturally. How far can you push it? So what I'm imagining is okay. So I have a different kind of entity. I mean, you've talked about, you know, images. So I can write my own plug in for it that does the image thing. Can I build, like, like, to take payments on it or to restrict, access to content, you know, to members or right? Because I'm imagining, okay, how far do I push this that might be easier than writing a fully blown Rails app?
Ayush Nwatiya [00:16:49]:
Yeah. You can push it as far as you want. If you wanna do payments and stuff, that's what the road I think is there for. That's where you, you can write all that. I think, a couple years ago, we'd run, like, a virtual bridge down conf, I think, at the end of 202022. And, I I'd given a demo as part of my talk, and I think the demo was, a simple photo gallery where you can buy photos. I hadn't actually integrated Stripe or anything. I just kinda faked the payment stuff.
Ayush Nwatiya [00:17:19]:
But the demo was basically that that you have the static thing with which lets you view the photo gallery and then you have this little dynamic buy button where you can buy the photo and also you just fake the back end stuff. But, like, I I demonstrated how it can be done. So yeah. Absolutely. With regard to to, paywall and content, of course, you you can do that as well. So, actually, Jared, who who runs who's the started the Bridgestone project and still runs it, to, a a large degree, Just released a CSS course that, is fully built on Bridgestown. If I could actually find the link to that, that would have that would be quite useful. But, yeah, essentially, it's all just a bridgestown, app.
Ayush Nwatiya [00:18:08]:
And he's, it's a subscription service. So he's built, like, payment and he's obviously paywalled his articles because it's a subscription cost. And that's all, all done using Bridgestone. So, yeah, you can push it as far as you want. It just depends on how far do you wanna push it until you start wishing you had rails. But you can still, you can still plug rails in because a router is rack, rack compliant. So you can still you can plug in you can mount rails as an app within it.
Valentino Stoll [00:18:40]:
Yeah. I got a bunch of questions here.
Ayush Nwatiya [00:18:42]:
Yeah. Go for it.
Valentino Stoll [00:18:43]:
Because I because I mean, I I think of, like, typically, like, we have, like, some core tenants more thinking about, like, static sites. Right? Like, where we have, like you know, SEO is probably, like, the number one, like, thing that people start thinking about when they just wanna get, like, some static marketing page up. Right?
Ayush Nwatiya [00:19:02]:
Mhmm.
Valentino Stoll [00:19:03]:
And the I guess the next one would be, like, you know, the caching layer. Like, what what is provided, like, to just, like, make sure that all of the files are, like, gzip compressed or whatever and optimized for, like, the server layer to be able to, you know are there, like, plugins and stuff for this kind of stuff? Is this come out of the box? Like, you know, what what what, I guess, optimizations are built in that, like, gives you that peace of mind. Like, oh, yeah. I should use bridge down, and I don't have to worry about all this stuff.
Ayush Nwatiya [00:19:35]:
Hey. Yeah. Absolutely. So actually, we we don't build any other stuff into the framework because, like, again, 90 95% of it is aimed at static files. And the way to host them is just dump them on a CDN. So if you have static HTML files on a CDN, it'll any decent CDN will automatically gzip your files and cache them properly, before sending them down anyway. And then, like, with render.com, which is my preferred host, you can set caching headers and stuff, manually using the the YAML infrastructure as code thingy. So, yeah, we don't handle that in the framework.
Ayush Nwatiya [00:20:13]:
The dynamic stuff again is very much, kinda like a bolt on, so we don't have anything built in for that. But, yeah, it's it's a tool you reach for when most of your content is static, and you don't have to worry about that if you're hosting it on a CDN. So, yeah, we don't do it in the framework.
Charles Max Wood [00:20:32]:
Well, I'm just gonna throw into that a lot of the SEO stuff. I mean, some of it's just your content. Right? But some of it is also, like, meta tags in your HTML and things like that. And so you're gonna see a lot more of that in your layouts and themes as opposed to from the framework itself. Right?
Ayush Nwatiya [00:20:52]:
Yeah. We do have a Bridgestone SEO plugin, which generates a bunch of those meta tags for you. So that's one of the plugins I can reach for when I'm starting a new site. Anyway, I think I'm pretty sure it's a first party plugin. So it's let me just double check that. So, that like, then you yeah. Bridgestone SEO tag, it's a it's a first party plugin. It's under the Bridgestone organization on on GitHub.
Ayush Nwatiya [00:21:18]:
And, yeah, then you just, like, drop in, an ERB tag or a liquid tag in your, in your layout and it'll pull stuff out from configurations. I mean, it's all at the read me. And it'll just generate those meta tags for you. Awesome.
Valentino Stoll [00:21:34]:
Problem solved.
Charles Max Wood [00:21:36]:
Right?
Ayush Nwatiya [00:21:37]:
Yeah. Oh, and another huge advantage, of Bridgetown over Jackal is you can use ERV. Jackal is liquid only, and I I lower the liquid. I mean, it's it's great when you kinda when your users are writing templates because you can't give users the ability to execute Ruby on your app. But if you're writing your own templates, then, ERV all the way. And Oh, yeah. And we're yeah. We were still currently, Bridgestone is still defaulting to the liquid, but in Bridgestone 2 point o, we're gonna switch the default to ERB.
Ayush Nwatiya [00:22:09]:
Liquitals will be there as an option, but the default will be ERB because that's I just think is the way forward.
Valentino Stoll [00:22:14]:
Yeah. You know, I always despise GitHub pages because of the
Charles Max Wood [00:22:18]:
Yeah.
Valentino Stoll [00:22:19]:
Templating. Yeah. Honestly, all of the crap that comes with Jekyll, which I do see, like, you have you provide easy deployment to air configuration with GitHub Pages, which is really fun.
Ayush Nwatiya [00:22:31]:
Yeah. We do it. Well, it's a pain to, to kinda maintain that. It keeps breaking and, it, like, I die a little bit inside every time someone in the bridge time this call out. How can I get this working on GitHub Pages? I'm like, really? Like, I mean, render.com. It's free. It's the exact same thing. It's free, but it actually works.
Valentino Stoll [00:22:51]:
Right. So how does render.com work? I mean, we don't have to dive in too much of this, but, like, I I was always under the assumption that they, like, you know, there's, like, kind of the upcharge for, like, location observability. Like, not observability, but location, like, where where you want to deploy it to? Like, fly that o style?
Ayush Nwatiya [00:23:12]:
No, Randall. It's just your standard platform as a service. It's kinda like Heroku but living in 2024, not 2014. And
Valentino Stoll [00:23:22]:
How old
Ayush Nwatiya [00:23:22]:
is it? Yeah. Shots fired. Right? It's, it's just a platform as a service, and they offer, static sites for free. So instead of, like, on Heroku, you kinda think of, each thing as a site on render.com. You think of, like, you think in the con within a concept of services. So, like, let's say a Rails application, you would have a web service, which is a Rails app. You'd have a database service. You'd have a background job service, and you'd have a Redis service.
Ayush Nwatiya [00:24:00]:
So you'd have 4 services on render.com, which comprise one application or one site. But, for a static site, you just need one static site service and that will link it to a GitHub repository and it'll do the build and deploy for you every time you do a git push. All three things get a bit more complicated when you wanna do dynamic socket, then you'll need a second service that, that handles the dynamic things. Essentially, what you'd have is one instance of your application running statically and another instance of your application running dynamically. And then you just, like, punch holes through 1 to kind of call the other when needed. So, like, through your static site, you can you've probably hosted dynamic thing at, like, API dot example.com. And then your static site just calls out to API dot example.com for the dynamic stuff. So, yeah, that's, yeah, that's how render works.
Ayush Nwatiya [00:25:00]:
So it just their their model just kind of fits my brain really well, just the concept of services. I just like how that kinda is conceptualized because, yeah, I just understand it quite well.
Charles Max Wood [00:25:15]:
Right. One one thing that I'm wondering about with the deployment story on this is, yeah, going back to the example that I used before, right, where it's, hey. Look. You know, I'd like to have a blog on topendevs.com. Right? Topendevs.com/blog. And I don't necessarily want to have to manage all of the different fields and have my database do the thing, plus statically rendered files tend to, you know, they they load faster. There are a lot of good reasons to do it that way. Is there a way to deploy it up underneath the Rails app? And do you typically just add it to your Rails repo in some way and have it build into a folder, or do you deploy it separately and then use, I don't know, NGINX or something to say, and this folder loads this other thing?
Ayush Nwatiya [00:26:12]:
You all those are valid approaches for me personally. I'd probably keep it in a separate repo and, either have NGINX to kinda take care of the routing or, I would just bite the bullet and host from a subdomain just because I'm lazy that way. So like, my, for example, my my app, scattergun.email, is a Rails app, but the blog, the product blog is at blog.scattergun.email and that's a bridgestone app. I mean, I could have hosted on, like, forward slash blog and then done some funky stuff with redirects or URL rewrites to kinda make that work, but, and I just it seemed cleaner. So I I do lose all the SEO benefits here, but it's just cleaner that way. So that's how I would do that. Whether you'd wanna mix it up with your rails repo, probably not depending on how Mhmm. Your use case is, actually set up.
Ayush Nwatiya [00:27:12]:
I mean, you could. I know I know that Jared has done it with Jekyll in the past where he's gonna have drills and Jekyll sitting side by side. I mean, there's no nothing stopping you from doing that. There's no technical reason why you shouldn't. I probably just wouldn't because it's against just my sensibilities to a point where it's a personal thing. I have there's no technical reason that this is a personal thing. I don't wanna be mixing those 2.
Valentino Stoll [00:27:39]:
No. Yeah. I I was doing research for this, and I I'm it made me think of high voltage from thought, but which I guess there it's in maintenance mode, which is kind of a bummer. But, maybe there's opportunity here for, Bridgestone plug in for rails.
Ayush Nwatiya [00:27:57]:
Yeah. We were working on something, but then, Jared kinda lost interest in it. It's probably not gonna happen because it's so the the the thing is, it's, like, bridgestone is, like, I would say 80 to 90% Jared White, probably 10 8 percent me and then 2% other contributors. So, it's still very much his show. I'm quite happy to just support him in any way he needs, which also and because it's, like, it's all volunteer stuff, it does mean that the things that him and I are interested in are the things that get done. And, his interest in Rails is dwindling pretty significantly. And I don't have a massive interest in integrating Rails with Bridgestone. So if we have contributors who wanna come in and help us out with it, we'd be more than happy.
Ayush Nwatiya [00:28:48]:
But I don't think it's something that's on either of our radars. Right. At this point. But that said, one of the, legacy bits we're kinda carrying from Jackal is the fact that the web server was kinda hard coded into the tool itself. So, Jackal because, Jackal only used a web server for dev development. So they had hardcoded WebRic in there as part of literally, built within Jackal.
Charles Max Wood [00:29:14]:
Oh, that takes me back.
Ayush Nwatiya [00:29:15]:
Yeah. In a part of Bridgestar at 1 point o, Jared ripped out Jackal and put Puma in because Right. We needed Puma for for Rhoda. So but now you are in a position where Puma's kinda built into Bridgestone, and I wasn't particularly happy with that. So I've taken some steps to, make Bridgestone just gen generic rack compliant. So we wanna be at a point where you can, or you can bring any rack compliant web server you want and bolt it onto Bridgestone. We'll also still supply Ploom as a default. But once we get to that point, Bridgestone will be like any other rack app.
Ayush Nwatiya [00:29:54]:
So you could just put it in alongside your rails repo or whatever and mount and just mount it as a as a, as a as an engine in your roots dotrb in in rails. So there is a path to that. It's just, yeah, we'll we'll get the we'll get that soon enough.
Charles Max Wood [00:30:14]:
Yeah. I found a few posts as well when I looked at this last that we're using a gem called Rails reverse proxy. And, effectively, what it does is it takes the request to railsapp./blog/whatever, and it just knows that that has to get passed off to your Bridgetown instance or Jekyll or Hugo or whatever you're running in the, you know, that's running somewhere else, but it'll just hand it off and then, you know, return the response. Yep. But the downside to that is that then if your layout on your main page changes and you want it to look the same, you have to make the change in both places.
Ayush Nwatiya [00:30:55]:
2 places. Yep. Exactly. So that's always gonna be, like, a tricky thing if you're handling 2 separate repositories. But it comes down to, like yeah. Whether you want to run it as, whether you wanna run it as 2 different projects or you wanna run it as a single project because I think if you're trying to run it as a single project and using 2 different tools, that's probably gonna get gnarly at some point or the other. So So like going back to my scattergun example, I the scattergun blog, which is bridge on power and the app itself which is rails powered. I treat them as independent products.
Ayush Nwatiya [00:31:29]:
So the the blog has the same color scheme and, like, fonts and design language as the app, But it doesn't share any of the layouts or design or anything like that. So it's just a very it's just it's got a similar look and feel, but it doesn't share any components or code or anything like that. And that was intentional just because I wanted to run them. Because I I wanted to avoid that exact problem that I make a change in one place. And then I'll have to make a change in in another repository. I didn't wanna do that.
Charles Max Wood [00:31:59]:
Right. So one thing that I'm gonna whine about here for a minute, is lately I've gotten very much into Tailwind, and I I really like it. I paid for Tailwind UI, so I use a lot of the stuff that's in there. But one thing that I found with, like, podcast show notes is that if I type them into, like, the tricks editor or something, when it renders it out, it doesn't add the tailwind classes to the right, to the paragraph tags or the header tags or whatever. Right? And that that's something that I would like to be able to do. And so what I find myself doing is effectively finding ways to add those styles in some other way under, like, the dot tricks, whatever, tricks content, class. Right? So tricks content class h one looks a lot like an h one out of Tailwind. Right? But I have to go and I have to kinda hand code that myself, and that's been a huge pain.
Charles Max Wood [00:33:04]:
So does Bridgetown give you ways of doing that when you render stuff out as far as I I get the the whole, like, wrapper around things in the layout is gonna have all that stuff, and I have that in Rails. But, you know, from my markdown or wherever I'm pulling the content from, can I tell it to build it out that way?
Ayush Nwatiya [00:33:26]:
Short answer is no. Because, unless you're hand coding HTML and and putting the classes in, which should be like yeah. It's like writing HTML. We don't provide any we can't do that in knockdown because we just use cram down as a render. So Right. I think whatever way you can add custom classes to a cram down file, you'd be able to do it that way. We don't have anything specific in Bridgestone for that. And I doubt there there will ever be because Jared and I are both vocal opponents of the whole tailwind approach with utility for CSS and things like that.
Ayush Nwatiya [00:34:04]:
I would I would hold my breath on that. It's unlikely to happen, I think. Right. That is, like, that is one thing that, I I don't wanna say never, but I think if even if someone proposed some functionality to make that happen, I think Jared and I both both would just put a stop there. But sorry, this is not happening in Bridgetown. I don't wanna put words in his mouth either, but I'd, that is just one thing where I think we would probably draw a line and say that because, see, I think I just don't think it's a good approach for web development, and I get why people like it. And I I don't, I don't wanna dissuade people from from using it. It's a very like, just for me personally, I think you should give CSS the respect it deserves.
Ayush Nwatiya [00:34:49]:
And, I like the concept of separating styling from from from content. So, everything in Bridgestone will always kinda be in the spirit of the open web, which is, you write your content, which is which is an HTML. You style it using CSS, and you add, dynamic functionality on top of that using JavaScript. So that'll always be, like, a core tenant of Bridgestone and mixing up your CSS and HTML, to me, in my opinion, goes against the spirit of the open web.
Charles Max Wood [00:35:23]:
So you don't wanna be my friend anymore. I got it. No. It's okay. It's
Valentino Stoll [00:35:29]:
Yeah. I
Ayush Nwatiya [00:35:30]:
got that. No.
Charles Max Wood [00:35:30]:
No. I understand what you're saying. And I can only imagine what a headache it would be to try and make something like that work. But
Ayush Nwatiya [00:35:37]:
Yep. I mean, there there's always ways around it. Right? Like,
Charles Max Wood [00:35:42]:
Oh, yeah.
Ayush Nwatiya [00:35:42]:
Yeah. But, I think, again, if if you're if you're wrestling against the tool, you're probably, in my opinion, not
Charles Max Wood [00:35:51]:
May not
Ayush Nwatiya [00:35:51]:
be the tool. Not doing something right. Yeah. Yeah. Because I I think one workaround in Bridgetown might be to because, like I said earlier, we have the concept of Bridgetown components, which are just Ruby classes. So you could, just use those to define your styles in there. So you could just have a method which returns all the table 1 style classes that you need, and then just call that in the HTML template. So that that would be one way of going about it within Bridgestone, within
Charles Max Wood [00:36:22]:
Right.
Ayush Nwatiya [00:36:23]:
Within the tools that are provided, and I think using them in the spirit that they are meant to be used.
Charles Max Wood [00:36:30]:
Valentino, you said you had a lot of questions. So and then I keep jumping in with mine. So go ahead.
Valentino Stoll [00:36:38]:
Yeah. And I wanted to touch on theming because, like, I feel like next to, like, SEO, maybe theming is, like, the the next frontier.
Ayush Nwatiya [00:36:48]:
Yeah. It's, it's a bit sad at how few community creative themes there are out there for Bridgetown. It's something we we've tried to push a number of times for the community to create a few more themes, but it hasn't been something that's materialized. I mean, there's a few out there. I think there might be a a GitHub tag, Bridgestone Themes or something like that. I think there might be something on the Bridgestone website as well. But, yeah. It's it's a bit of a shame that there's not more out there.
Ayush Nwatiya [00:37:20]:
We have, an API for things. We have a guide on how to create them as well. It's just I think the tool is not popular enough to have a wider variety of themes. So Mhmm. Yeah. If you're listening and you wanna use Bridgestone and you like it, please create more themes.
Valentino Stoll [00:37:42]:
What is that process like? I'm curious. Like, I see, like, there's there's you basically create a new plug in, but, like, what happens after that?
Ayush Nwatiya [00:37:50]:
Yeah. It's it's just a a so we have a plug in generator. You generate a plug and you read the docs, follow the instructions on how to create a theme. You publish it to GitHub, and I think you add a a tag to it. I think, I can't remember the tag is. I think it's either just bridgedondash plugin or bridgedondash theme or something like that, and it'll show up on our website. Yeah. That's this is not a massive, process to it.
Ayush Nwatiya [00:38:16]:
You just publish it on GitHub and then anyone can use it. It's just it's just it's the same as publishing a Ruby gem. So, yeah, you'd have to create a gem and push it to Ruby Gems as well. But, yeah, it's it's literally just like creating a gem.
Valentino Stoll [00:38:31]:
Gotcha. And is that like a, you know, you pick your CSS or, like, JavaScript, like, all the asset bundling, like, that's the responsibility of the plug in kind of thing?
Ayush Nwatiya [00:38:43]:
Yep. Yep.
Valentino Stoll [00:38:45]:
Yep. Is there, like, you know, because what I would love is, like, you know, something like Bootstrap or something like that. Like, you said apply to to the
Ayush Nwatiya [00:38:54]:
Yeah. I mean, that's a I think I'm pretty sure you can configure Bootstrap, using the like, the thing I mentioned earlier, bundled configurations. Yep. So let me check. Do we have Bootstrap? No. We don't have Bootstrap. But we could, yeah. That's easy enough one to add.
Ayush Nwatiya [00:39:10]:
We'd so we have you can configure things like shoelace, open props, things like that. We're just running one command. I'm surprised we don't have, Balmain there actually. That's something we should probably add. So, yeah. Balmain is my favorite CSS framework if I was gonna use 1, which is, in fact, actually very rarely that I actually use a framework. But, yeah. I mean, these things can be installed quite easily because you have, NPM there.
Ayush Nwatiya [00:39:38]:
So you can install them and they'll be they'll be there in your build for you to use, just a couple of command in a couple of commands. So even if you don't have it, like, even if though there are no, like, community created things, there are a few but not a lot. Stuff like Bootstrap and Balmain, you can configure very easily, And, then you have all that power at your fingertips.
Valentino Stoll [00:40:02]:
Yeah. I do see that in that front end bundling, section here now. You can just, you know, yarn add the the framework of your choice and then include it in the styles. Yeah. That's cool. Where do you take it from here? I mean, it looks pretty feature complete. Like,
Ayush Nwatiya [00:40:18]:
Yeah. The we have we have, we have a few, road to Bridgestone 2.0 blog posts that have been published. So if you check out the, Bridgestone blog, you'll see some of the things we're working on. So one of the things for me is getting bridge time to be rack to plan so we're not relying on a specific server. Jared is working on, like, speeding up how the hot reload works in development. So right now we're gonna rebuild the entire website every time you make a change, which for bigger sites is is not very efficient. So he's working on something that does, like, incremental bills. So your hot reload when you're developing is is, super snappy.
Ayush Nwatiya [00:40:59]:
Mhmm. Got a whole bunch of other stuff, like small improvements as well. I think the big one is we're we're aiming to drop our dependency on active support. It probably won't happen for bridge hunting point over long term. We wanna drop our dependency on active support.
Charles Max Wood [00:41:15]:
Is there a reason for that?
Ayush Nwatiya [00:41:18]:
Jared's written out a long, blog post about it. For him, the reasons were were largely personal. So but, the my view on it is, I think there's a lot of there's a lot of scope for different ideas in the Ruby community. We've kinda gone too close to rails with Bridgestone a number of times, I think, with with the use of things like active support and, stuff like that. I think we were just trying to just fly very close to rails. But I think it's good to have different ideas, around the Ruby community. So we're just trying to see what what else we can come up with that doesn't have a hard dependency on on Rails frameworks and just try to just try to have a few different trains of thoughts, different solutions to problems, see see where that takes us really. Yeah.
Ayush Nwatiya [00:42:10]:
But the the the the reason for dropping, active support was a largely personal thing by Jared because of his disillusionment with rails and with 37 signals. So, yeah, like I said, he's 90% of of Bridgetown, so, there's no point in going in a direction that he wasn't happy with or felt motivated to work on because it's still largely a volunteer driven thing. He doesn't get paid for it. He has we have a small number of GitHub Sponsors, but it's, very much a labor of love. So, I'm quite happy to support him with whatever direction he wants to take the project in.
Charles Max Wood [00:42:50]:
So one thing that I'm wondering about with some of these static sites,
Ayush Nwatiya [00:42:55]:
they
Charles Max Wood [00:42:55]:
do a great job on a bunch of stuff, but one of them is search. Right? So if you have a large amount of stuff in your website, you know, people are gonna want to find it. So do you recommend something like Algolia or some of these engines out there that kind of hook into your site? Or do you push people more toward, hey, You know, here's a really simple way to do it with the ROTA implementation that you have, or and where where do people end up for that?
Ayush Nwatiya [00:43:26]:
So, yeah, we we recommend, like, a JavaScript approach, and I I think Algolia is one of the 3. We have search on the Bridgetown website, which is a Bridgetown powered website, and it's not so it's not a server site it's not a server powered search. It's client only. I am just trying to see where Yeah.
Charles Max Wood [00:43:46]:
But if you use Algolia, you're using their back end to do the search. Right? So
Ayush Nwatiya [00:43:54]:
I'm sorry. You have it. It's using the Bridgetown quick search plug in, which runs, lunar dotlunr.js. So it's not Algolia. That's my that's probably just confusing myself. So this is purely client side. So I think it builds like a JSON document or something. Okay.
Charles Max Wood [00:44:11]:
So it builds its own index and post that statically.
Ayush Nwatiya [00:44:15]:
Exactly. It's a purely JavaScript powered search. Lunr.js is the solution we're using. Yeah. That's and the plugin is called bridgestown quick search. It's another first party plugin. So, yeah, that's that's what we recommend for search. But if you wanted something a bit more involved, then again, you can always just reach out for the service, like any service side solution.
Valentino Stoll [00:44:37]:
Yeah. I I always like Lunar. Yeah.
Charles Max Wood [00:44:40]:
I never
Valentino Stoll [00:44:40]:
heard of it. There there's a there's actually quite a few, you know, JavaScript search, client side search now, which work really well that are very much like I think there's one like that's like an Elasticsearch clone even.
Ayush Nwatiya [00:44:56]:
Oh, okay. Wow.
Valentino Stoll [00:44:57]:
And they're they're really easy to use, and, it's pretty wild, like, how fast they are.
Charles Max Wood [00:45:03]:
Mhmm. So besides kind of the cleanup on, like, active support and getting rack support in there, are there other things that are coming to Bridgetown? Or
Ayush Nwatiya [00:45:14]:
nothing, nothing big. We're pretty much like we wanna keep Bridgetown core, fairly slim, so we don't wanna be putting stuff in just for the heck of it. I'll I think a lot of the, big features and stuff will be largely plugins. So I think Jared had an idea where he wanted to, have, like, really good first party support for flex. Do you know the the library flex? P h l e x by Joel Draper? It's a it's a way to write components using, HTML. It's way it's a way to write object oriented HTML using pure Ruby, I think. I may have got that completely wrong. It's something to do with writing.
Ayush Nwatiya [00:45:56]:
It's like a DSL to write HTML using Ruby. And
Valentino Stoll [00:46:00]:
It's like if Vue components had a a DSL. Okay.
Ayush Nwatiya [00:46:07]:
Yeah. What what Valentino said?
Charles Max Wood [00:46:09]:
I put it on the Internet. It looks cool.
Ayush Nwatiya [00:46:12]:
Yeah. So initially, I think he proposed adding that to core, but then I said as something that I should live in a plug in. So, yes, they'll they will probably at some point be a plugin. There might already be one that I'm not aware of because flex isn't really for me. But, yes, things like that will always live in plugins. There'll be first party plugins under the Bridgestone organization on GitHub. So and we'll have good support for them out of the box. But we're not looking to add a whole lot into Bridgestone core.
Ayush Nwatiya [00:46:40]:
It's gonna be largely incremental changes, and just getting it to a stable place. Because we don't want, we don't wanna start making BridgeTime too complex because it's already it does quite a lot and I and, just judging by the vibe at the large BridgeTime count, people are just getting a bit daunted by it already.
Valentino Stoll [00:47:03]:
Right.
Ayush Nwatiya [00:47:04]:
So we definitely, like, our philosophy is very much the simple stuff will always be simple. So we may have all the advanced to, like, server side rendering and all in there for you to use. But if you want something as simple as just a blog, that'll always still be very simple to do. They're not gonna stand in your way in any in any, way, shape, or form. But, honestly, when you have a lot of advanced features, people inevitably tend to get distracted by those. So, I I can't think of anything that's like a big feature that we have coming to the pipeline. It's all just gonna be, like, incremental stuff for for the foreseeable anyway. Unless unless someone has a really solid proposal that I that we we, the core team, like.
Ayush Nwatiya [00:47:47]:
And I'm like, okay. Yeah. Then we can go ahead with that. But, for now, there's nothing that I'm aware of other than let's just keep cleaning this up and keep keep stabilizing it.
Valentino Stoll [00:47:59]:
Alright. So so the $1,000,000 question here is, can can we use AI to, you know, generate static pages for us
Ayush Nwatiya [00:48:10]:
and build and
Valentino Stoll [00:48:10]:
build content generation. Copilot. Easy would that to be, yeah, to just have a thought. But right? Like, if if there's a a Bridgetown GPT, right,
Ayush Nwatiya [00:48:21]:
can
Valentino Stoll [00:48:21]:
I use it to just quickly, spin up ideas?
Ayush Nwatiya [00:48:25]:
Yeah. Of course, you can. Yeah. There's nothing stopping you. You're just writing Ruby code. You can do you've got the whole power of Ruby at your disposal, so you can do whatever value you want.
Valentino Stoll [00:48:35]:
Alright. Bridgetown plug in coming. Bridgetown again.
Charles Max Wood [00:48:39]:
Right? I'm I'm kinda curious. What what's your story with this? How did you wind up working on this project?
Ayush Nwatiya [00:48:50]:
Yeah. Good question. So I think it was quite early on in my time with Ruby. So for those who aren't familiar, I only started working with Ruby in 2020. I used to be a mobile developer for that, and I spent, the first half of the pandemic pretty much, learning Ruby and Rails. We're glad you saw the light. Sorry?
Charles Max Wood [00:49:12]:
We're glad you saw the light.
Ayush Nwatiya [00:49:14]:
Yeah. I'm glad too. And I think I was, at some point, I was doing something with Jackal. I can't remember what it was now. And I was trying to integrate web pack with it, and I was losing the will to live because integrating web pack with Jackal is, not for the faint hearted. And, while I was just googling around, I think I found, because at the time, Bridgestone was marketed as, like, a a Ruby powered webpack aware static site generator. Mhmm. And I just stumbled upon this thing, and I was like, okay.
Ayush Nwatiya [00:49:47]:
Here we go. Here's another deal that thinks it's better than Jacqueline. I was very unimpressed just because of my skeptical, pessimistic nature. But it kinda stuck in my brain, and then a few days later, I got so fed up. I was like, let me go give this thing an actual try. And I just installed Bridgestone, and that's when I realized it's actually a fork of Jackal. So when I installed it and created a site, everything was super familiar. And to get my old Jackal site to work, all I needed to do is copy the files over, and and that was it.
Ayush Nwatiya [00:50:15]:
Because, it was just a fork and the directory structure was so similar. I could get up and running with Bridgestone super fast, and I was like, okay. This is pretty cool. And I just started customizing it in ways that I wanted. So I think when when I first used it, it was, it had Sass by default, but I was getting into post CSS at the time. And I was, I was reluctant to use a full blown preprocessor because even, at the time I could see how good vanilla CSS was becoming. And I liked the whole concept of post CSS where it just kinda lets you write next generation CSS today, kinda like a babble kind of thing. So, Bridgestone had no support for post CSS.
Ayush Nwatiya [00:50:59]:
I I customized my template to kinda add it in there. I made a few other changes, just out of personal preference, and I wrote a blog post saying, I really love this new build bridged on. There's some things out of the box I didn't like, so here are all the things I made like, I I I made to, change it to to my liking. And I shared that around the Bridgestone community. I think at the time, they had a discourse and a discord, and so I just shared it around there. And I got a reply from Jared saying, if you wanted to make a pull request for any of these things, we'd be happy to accept it. So I pulled request some of the stuff back, like, I think post CSS and stuff, can't remember now. But I made 3 or 4 pull requests back into the repo from customizations I'd made just for myself.
Ayush Nwatiya [00:51:44]:
And I just kinda got involved with issues. I was I was commenting on issues, commenting on pull request, giving my opinion, just getting involved with the community. And then I got a message from Jared, one day. And I I should mention I mentioned him a few times already. Jared White is the person who started Bridgestone back in April 2020. He forked it from Jekyll because of his own frustrations with Jekyll and its kinda lack of progress. And it was basically him and another guy, Connor Rogers, who's quite well known in, like, front end circles, who were on the core team, when when I joined. And, yeah, I just got a message out of the blue from Jared saying, I really like your contributions.
Ayush Nwatiya [00:52:24]:
Would you consider joining the core team? I was like, hell, yeah. Why not? So, yeah, that's how I ended up on the core team. My contributions have been largely selfish. I think apart from maybe 1 or 2 things, I think literally everything I've contributed has been stuff I wanted for myself. Mhmm. Which is one way of getting involved in open source, but I was also careful that I didn't want to I didn't want to get, tired of it. I didn't wanna start resenting the project because
Charles Max Wood [00:52:58]:
Right.
Ayush Nwatiya [00:52:58]:
I'm I'm freelance. I don't have a job, that has a consistent paycheck coming in. What whatever I do on open source is stuff where I could be billing a client, but I'm not billing a client. I'm doing my own stuff instead. So, it needed to be very much something that comes from within. So that's why my contributions tend to go in in spurts. Like, there'll be a couple of months where I'll make tons of contribution, then I'll go a few months without making any. But behind the scenes, I'm always, like, supporting Jared and the core team with decisions and and things like that.
Ayush Nwatiya [00:53:34]:
So, yeah, my my role is is a bit weird with with the project in the sense that kinda there, but not always there. It's it's very much a choose your own involvement kinda thing.
Valentino Stoll [00:53:48]:
Right.
Ayush Nwatiya [00:53:49]:
But, yeah, that's how I ended up, and that's, on the core team, and that's kinda, like, the role that I play within it at the moment.
Charles Max Wood [00:53:55]:
I love that too because, yeah, you start contributing and
Ayush Nwatiya [00:53:59]:
Yeah. That that's the best way to get involved with any project. Right? You just, start contributing, see where that goes. And, actually, another point I should make is my freelance career is, what I have is very much well, slightly indirectly thanks to Bridgestone because I was, I I had no contacts in the Ruby community whatsoever. Mhmm. And, I just ended up on on the Bridgestone core team in December 2020. And it was around Jan 2021 when I was trying to start freelancing and finding clients and stuff like that and wasn't really making much of a headway. But there was, someone who I had got in contact through my work on Bridgetown was, a chap named Mike Rogers, who is sadly no longer with us.
Ayush Nwatiya [00:54:45]:
But, he was also a contributor on Bridgestone. I just got in I'd I'd got in contact with him through my work on the project. And he retweeted someone looking for, Ruby and Rails freelancers. And I think he sent that tweet directly to me as well because he knew I was looking for freelance work. And I replied to that message and that was how I got my first contract, which got me started with with Rails freelancing and, it has been, like it's always getting your first client's always the hardest. Right? And I was with that client for well over a year. I'm still in touch with them. I'm still, like, good good friends with them.
Ayush Nwatiya [00:55:24]:
And, yes. I think Bridgetown was instrumental in giving me a freelance career. That's the power of open source.
Charles Max Wood [00:55:31]:
Alright. Well, anything else we wanna go into, Valentino?
Valentino Stoll [00:55:37]:
No. I think we've said it all. I mean, I'd to be honest, I didn't know much about Bridgestone before today. Yeah. It looks awesome. It solves you know, it it solves a little bit more problems, than my original solution of middle man. So I'm I'm I'm excited to try this out, in my next static project for sure.
Ayush Nwatiya [00:55:58]:
Cool. Glad to hear it. Yeah. If you if you wanted to travel, you can always, reach out to me for help. And, yeah, we just wanna try and make it as simple as possible to, get started with static sites and have the advanced functionality there when you need it. So, yeah, I don't know a whole lot about middle man, but I can say with a fair amount of certainty that you'd be happy with bridge time.
Valentino Stoll [00:56:20]:
You know, it's funny. There's a lot of similarities, in some of the design decisions. I I imagine, some some more pulled, you know, maybe copied, and that's great, because, you know, why repurpose? Yeah. Yeah. Why why rebuild it from scratch? And it does from from my example of as a, you know, middleman user, it makes it easier.
Ayush Nwatiya [00:56:42]:
Yep.
Valentino Stoll [00:56:44]:
But, yeah, I mean, I I love all of the you know, you can have, like, data files that allow you to, like, use some, you know, data objects and reference to your templates and gives you all of the how to host static files and all that stuff is built in and, you
Ayush Nwatiya [00:57:01]:
know Yep. That's actually stuff we just inherited from Jackal, actually. We just that's like those conceptual decisions we just inherited from Jackal and they're good decisions, so we just stuck with them. Like, why why change it if it if it ain't broke?
Valentino Stoll [00:57:15]:
Right? Maybe maybe middle man also stole it from Jacklyn. Could be. Yeah. That is amazing.
Ayush Nwatiya [00:57:19]:
Yeah. I mean, like, this whole, just the whole ecosystem of static side generators in Jekyll is what kicked it all off. So I'm not surprised that it's had such a far reaching effect.
Charles Max Wood [00:57:31]:
Yeah. I'm I'm curious if, middle man is a fork of Jekyll as well. It really wouldn't surprise me.
Ayush Nwatiya [00:57:39]:
I don't think it is, but, yeah, if it was, I
Charles Max Wood [00:57:41]:
don't think it is either, but it wouldn't shock me if it were. Yeah.
Ayush Nwatiya [00:57:44]:
So
Charles Max Wood [00:57:44]:
well, I'm gonna push this into the picks. Valentino, why don't you start us off with picks?
Valentino Stoll [00:57:51]:
Sure. Yeah. I've got 2 picks today. Last week, I was at, the, there was a meet Ruby AI meetup in New York City, that I attended. It was awesome. It was hosted by a company called Sublayer, which, if you're not familiar, is an awesome company. Awesome product. Sublayer, they, they basically give you, like, some cogeneration, in a Ruby ecosystem, and they provide some awesome tools.
Valentino Stoll [00:58:22]:
I've been experimenting with, their blueprints, which basically let you save, like, code snippets as AI generation, like, seeds. So if you have, like, common patterns that you use in, all of your applications or your teams, you can get AI to clone those patterns and say, oh, I want a service object or I want, you know, a factory or or all these different patterns that, evolve over time. And you can get it to code it in whatever styles that you have. So it's really neat. And, yeah, just met a ton of great people there. My my next pick is from, the Olympia chat team. If if you're not familiar, Olympia is like a, you know, AI robots on steroids. You you basically get, like, a team of assistants that have various purposes.
Valentino Stoll [00:59:23]:
So you can have a copywriter. You can have a marketing strategist, like, all these different kinds of very specific assistance. And there's just, like, so many incredible features in it, and they just keep pumping it out. Like, as an example, when I was, you know, about to attend the, you know, event in New York City, I just said, hey. Here's a list of attendees. Like, tell me who I should, like, be connecting with. Right? Like and it goes and it summarizes all the people, and it was it was it's just fantastic tool. If you wanna do research or, it even sends emails for you if you want, which is kind of wild.
Valentino Stoll [01:00:02]:
And all of the systems can talk to each other. I I could talk endlessly about it, but I think we'll have Kobi on soon, so we can dig in
Charles Max Wood [01:00:10]:
there. Yeah. Next week, actually.
Valentino Stoll [01:00:12]:
Oh, awesome.
Charles Max Wood [01:00:13]:
Yeah. I'm looking forward to that. Alright. Ayush, what are your picks?
Ayush Nwatiya [01:00:16]:
So I've got one pick which is gonna be, pretty alien for, I think, most people in America, but it's a thing that's happening in America. The Cricket 2020 World Cup starts on Saturday in the United States and West Indies. And the first match is USA versus Canada and Dallas, Texas. I know cricket's not a thing at all in America, but given that the World Cup's happening there and it's, shortened form of the game I mean, the traditional form lasts for 5 days, and only muppets like me enjoy that. But this is more like it's a 3 and a half hour version, way more fast paced. And I am I'm aware of the popularity of another sport in America, which involves throwing a hard ball and whacking it with a wooden stick, and then chasing it around. And cricket's basically the same thing. It's also chucking the hard ball, whacking it with a wooden stick, and then chasing it around.
Ayush Nwatiya [01:01:11]:
So, Yeah. I don't know if you're vaguely interested. Cricket World Cup starts, on Saturday in in America. And the biggest I think one of the most valuable, sporting events in the world is India versus Pakistan at cricket, and that's happening in New York City. They've they've built, like, a temporary stadium in Central Park, which can hold something like kinda 25, 30000 people or something like that. And it's primarily built for the India versus Pakistan match. It's like their flagship match, and they wanted to have that in America. So that'll be interesting to see how that goes, but, yeah, that's my pick.
Charles Max Wood [01:01:52]:
Cool. And by cool, I mean, it's cricket, but okay.
Ayush Nwatiya [01:01:56]:
Well, I mean I mean, you like baseball out there in America? I mean, crickets are not that different.
Charles Max Wood [01:02:02]:
I don't follow baseball either. So, you know,
Valentino Stoll [01:02:05]:
it's it's funny because this seems to be like a a new, like, recurring thing, because I know, like, I was in Nashville, and they they had, like, a a, you know, a not in the World Cup, but they had, like, a international soccer event, like, where they built a stadium. You know, but all the locals, you know, that you talk to, oh, like, do you know what's happening down there? And they're, you know, they're like, some soccer thing. I don't know. Yeah. But but, you know, it's packed. It was so like Yeah. It's just funny.
Ayush Nwatiya [01:02:41]:
Yeah. It is. I'd be I'd be, really curious to know, like, when that India Pakistan match happens in New York. I think it's just gonna be largely immigrants from those two countries. I'd be absolutely astonished that there are any, like, Americans there.
Charles Max Wood [01:02:57]:
Alright. Hey. Look. There are 3 Americans in here. Alright. Alright. I'm gonna put out a couple of picks. So I always do a board game pick.
Charles Max Wood [01:03:08]:
The one that I've been playing lately is legendary, Marvel legendary. It's I picked it before, but, the other day, we were playing with 1 of the expand we have, like, 6 or 7 of the expansions. And the one that we were playing was the World War Hulk expansion. And, so legendary has a board game geek weight of 2.43. So it's you know, people can pick it up not not terribly, outside the range of, you know, what you'd expect from a competitive game. The World War Hulk expansion has a board game geek weight of 2 point 33, so it's slightly less complicated than regular legendary. And, yeah. I mean, it's comic book characters.
Charles Max Wood [01:03:58]:
Right? So you you have comic book heroes, you recruit, and then you have, comic book villains that you're trying to defeat, and they have some scheme that they're trying to accomplish. And so you're playing against the game. And, anyway, it's really fun. I really enjoy it. It is a collaborative game, deck building game, and so I'm gonna I'm gonna pick that. Couple of other things that I'm gonna pick really quickly. I don't know if I picked Vite Ruby yesterday. We talked a lot a little bit about Webpacker here, but, I've been using Vite Ruby, and I'm liking it.
Charles Max Wood [01:04:33]:
Is it blasphemy to say that I like it better, import maps and prop shaft? Anyway
Ayush Nwatiya [01:04:40]:
No. It's not really. I, I haven't used Vite, but, I mean, import maps and ES. But they're all quite frustrating, so I wouldn't be surprised if there's a tool that does something better than them.
Charles Max Wood [01:04:50]:
Yeah. Vite is like magic, and I get the hot module reloading that I want and everything else out of it. So I'm pretty happy with it. And the setup wasn't heinous. So, I'm gonna pick that. I'm also gonna pick another gem. It's standard r b, which is the it's a I think it's built on top of Rubocop, but it essentially just does your linting on your, Ruby. And, it just follows a set.
Charles Max Wood [01:05:21]:
Like, you can't configure it. It just gives you your linting, which honestly, I don't wanna make those decisions. Right? So I and I've been pretty happy with that as well. And then, yeah, I guess the last pick is just Ruby Geniuses. Go check it out, rubygeniuses.com. Still kind of bolting some of the pieces together. But if you wanna get together with other Rubyists and see what they're doing and see what's happening and get trained by people you know, then, definitely check it out. Yeah.
Charles Max Wood [01:05:54]:
Those are my picks. This is awesome, Ayush.
Ayush Nwatiya [01:06:00]:
Yep. Thanks for letting me ramble on again. That's 2 weeks in a row now. It's just been me talking.
Charles Max Wood [01:06:05]:
It's all good.
Valentino Stoll [01:06:06]:
We gotta break you in, you know. Yeah. Yeah.
Ayush Nwatiya [01:06:11]:
Yeah. Trial by fire going on. But, yeah, it's it's good fun. It's, yeah, it's just good to talk about Bridgestone because, honestly, I think, I I just I find it a bit sad how few people in the Ruby community are even aware that it exists, so it's good to chat about it.
Charles Max Wood [01:06:23]:
Alright. Well, till next time, folks. Max out.
Ruby Evolution with Bridgestone - RUBY 639
0:00
Playback Speed: