Build an RSS feed-powered podcast site (with Amberley Romo) — Learn With Jason

Build an RSS feed-powered podcast site (with Amberley Romo) — Learn With Jason


– Hello everyone and
welcome to another episode of Learn with Jason. Today on the show we’ve got Amberley Romo, one of my amazing teammates
on the Gatsby team. How are you doing Amberley? – A okay. (Jason laughs) – How you feeling this morning? – Bit of a headache, but pretty good. – Good, good. And so what Amberley
and I wanted to do today is a while back we did
a stream with Henry Zhu where we took a podcast theme
that you had been working on and we started playing with that really nice syntax.fm podcast player. And actually do you wanna pull up? So today Amberley’s driving,
so it’s her screen up. So do you wanna pull up
the syntax.fm website so that we can look at
that podcast player? – Yeah. – And so this is a really
cool piece of technology that the team kinda put together. It’s got playback speed
control, volume control, play, drag to seek and it
shows the title of the episode. So a really nice piece of technology and they were kind enough
to open source the website so we just went in and pilfered that and added it into the theme. And so then Henry had
the idea that I loved, which was hey what if
this could just take, what if this theme could
just take an RSS feed and then turn it into a
full functioning website. And I asked Amberley if
she wanted to do that and she was like heck and yes. (laughs) So we thought that would
be really fun to do. Then Amberley got super excited and it’s actually, it’s working. So do you wanna show us the result here? It’s working, but there’s stuff to do. – Yeah, for sure. I definitely think we we’ll have a lotta fun with this today. But do you wanna talk
through how this works? – Yeah, so this is an example site, this podcast site, that is using the podcast theme. And I’m using, I just started
the podcast with Kurt Kemple which is why I wanted to
get this RSS thing working. Also because I know Henry wants to use it for Mainters Anonymous
so I got a little antsy. But this description, these
podcasts are RSS items, the dates, duration, these descriptions. All of that is pulling from
the RSS feed currently. Before I converted it, it was
pulling from the front matter of individual episode, nope content, episode files like this.
– Yeah. – So instead of the title being here it’s pulled from RSS. Dates, duration, episode description. The audio URL is also being sourced directly from RSS feed, et cetera. – And so do you wanna, how does an RSS feed work? Can you kinda talk through
what the internals are on that? – You know I can show you. (laughs) I didn’t know a lot about RSS feeds before I started looking at this. So I pulled up the
Maintainers Anonymous RSS feed and I have this RSS feed
from Fullstack Health and I found, let me pull it up, this. I started looking for
plugins that would source from an RSS feed and I couldn’t
find exactly what I wanted, so I started rebuilding it. But I started with this
gatsby-source-rss project that I found. And I pulled this over and I started making a
bunch a changes to it. – Okay. – Which is what this is and this work in progress
gatsby-source-rss-feed project in the packages directory here. So this essentially just
makes use of this package called rssparser which does everything. Well not everything, but it
does the heavy lifting for us in terms of taking the RSS
URL and turning it into an object that you can use.
– Okay. – See I get all the RSS data using the parser from rssparser. Did you want a higher level explanation, or am I going to deep? – No I think this is good. ‘Cause basically what
we’re doing right now, is we’ve gone even deeper than the theme and you’re building a source plugin. And so I think this is pretty cool. – Cool, yeah so yeah there are two levels of information here. There’s the top level feed information that’s the title of the podcast, the description of the podcast, et cetera. And then there are the the nodes for the actual RSS items, and by RSS items I mean like episodes. I wasn’t exactly sure what to call it ’cause some people call it
show or RSS item or episode. And in RSS they use the
word episode in a lot of it. – Oh they do? I thought they use item. – Well they use both. Like each one is an item but then they have episode numbers. I mean this is from iTunes, but episode numbers and episode types. So I just decided to call it an item ’cause coming from the
RSS itself it’s an item. So yeah, this creates Gatsby nodes for this top level RSS information and each of the RSS items, which I guess I should talk about. This is the, wait no. Here we go. Okay so this is the gatsby-config
for the podcast theme. – Sure. – Which will take this work in progress sort of local package that I’m building and that’ll take the RSS URL which will actually becoming
from the gatsby-config for the podcast site. So I’m handing the RSS URL, oops. You’re unstable. (Jason laughs) – Is your Xoom yelling at you? – Oh did that not show? – It only showed for you. – Your connection is unstable. No I’m not just randomly
insulting you. (laughs) – Yeah, ’cause I mean I was hurt. Okay so-
– Yeah go ahead. – So what’s really cool about this is as we’re kinda moving around, what we’re looking at right now, is that we’re in the
plugins array of your site. So this is where you would
actually install your site. And what’s cool about this
is like this is 46 lines– – Wait can you go back? Install your site– – Or sorry, where you would
install the theme right? If you are someone who
is running a podcast and you want to actually
set this up and use this, the code that you’ll use is less than 10 lines of
config for your plugin. So you install this Gatsby theme podcast and then you put in your RSS feed. And then, up above,
there’s some site metadata where you can set things
that you wanna override or that you want to show. So your RSS sources, where
you can find the podcast, that’s just an array. So you just fill that out. So there’s no coding involved in this. And what I’m really excited about with kinda where we’re headed in this direction is because that’s just config driven, there’s not really anything preventing us from building a simple web interface so that somebody could literally
build an entire website without ever having to
open up a code editor. They could just fill out a form. And say, well what’s your RSS feed? Here you go. Where is the show available? Like here’s the name and here’s the link and you just keep adding those until you’ve got ’em all in. That’s a really powerful model I think. And it gives a lot of flexibility to this that just simply didn’t exist
in Gatsby before themes. There was always code involved
to use Gatsby before themes. – Yeah for sure. I also think it’s cool
because a lotta people who don’t wanna create their own website, they don’t wanna go through
the rigamarole to make it, a lotta people use, like even I, we just created that podcast. I was, eh, maybe let’s just
like point it to anchor. We’re hosting it on Anchor instead of dealing with creating a site. But then I wanted the place
to house the transcripts, which is something we should
talk about later in the stream. – Yeah. – But it, hopefully, makes the barrier to create a space where you
own your own podcast site a little bit lower.
– Yeah. Yeah and so this is something that is actually worth talking about here. Because one thing that we haven’t done is figured out to
connect data to episodes, like if we wanna add a
transcript for example. So something that we
should probably do is, maybe that’s what we can do on this. So let’s take a crack at hooking in transcript
data to our podcast episodes. And we can do that through
probably the content folder. Or we can even change this up and make it a transcripts folder and then just allow dropping in a thing. – Well so I don’t think it
should be a transcripts folder. I think it should be a
generic episode information. So just a block, like an MDX block that can be dropped down here. ‘Cause that could have
show notes and links and transcripts and whole bunch of stuff that you can just do whatever. But I can show you this template. – Sure. (Amberley mumbles) – Okay, so this is another
thing that I need to address is hiding the support thing. This is from the… So just to say again, this whole design and everything is from the
Hope in Source podcast. So when I created it, I
created it just like verbatim to recreate the Hope in Source website. This is just mocked out right now, but if someone doesn’t have a Patreon or an open collective or whatever, we’ll need to hide that. So that’s what that support component is. And then there’s the podcast player. Which is the stuff that
you and Henry worked on, pulling in the syntax player. And then I have this article that will pull in the
title of the RSS item. I’m doing some nonsense here to turn the RSS content into an exerpt. So the excerpt is not straight from the RSS feed, it’s modified. To do. Yeah, so that’s how
it’s currently working. Everything that’s in there right now is straight from the
RSS feed or mocked up. – And so this, and this is kind of starting to show the power. Because if we wanted to change that, what we could do right now, is we could use component shadowing to redeclare that support component. And then it would just
kinda change, right? – Yep. – And so we want to make sure that yeah, and Henry just said, you don’t wanna add the whole transcript to the episode description. – Right exactly.
– ‘Cause then your RSS reader, it’s kind of unusable right? It’s like a big wall a text. They strip out white space and stuff so that’s not a useful way to approach it. So we wanna way on the website
you can add additional stuff. The way that I think we can do that, is we just need to find some kind of a key to link the episodes and the MDX, right? So do you know, looking at… So here’s gonna be the tricky part. The easiest thing would be the ID. – Yep. – Is the ID exposed anywhere
except the RSS feed? Because we don’t necessarily
wanna force people to open their RSS feed to figure out what the episode ID is, to then get at it. So if you’re looking at like Anchor or what’s the other one? Simplecast or any of these
other ones that people use. – Some of them might, but I think the problem is, I don’t think we can rely
on each of them to do that. – Yeah. Let’s see. So the coolest thing to do
would be to add a little CLI. – We have to do the coolest thing Jason. – I think that might be too
much for the time we have. If we have a Chris Briscardi here, maybe we’d have time to pull it off but (laughs) given that I
think one Chris Briscardi is equal to about six
additional developers. I think maybe we should hedge on simpler. (Jason laughs) – Let’s just say, I don’t have
time to do that right now. – Yeah, nor do I. So I think we wanna do is instead, let’s just use the episode ID and we will figure out a way
to make that easier to find later on, but for now we’ll
just have to document it. Like open your RSS feed,
look at the episode ID and then set that as a key in your MDX and that will link the MDX to the episode. – Okay. – My feeling right now is that most people who will be using this
theme in the near term, will be developers, so
asking ’em to open up an RSS feed won’t be a huge ask. In the mid-term we want to solve that. But I don’t think we’ve got time and I don’t think we’ve
really put sufficient thought into how to solve that,
to try to tackle it today. – Yeah, no. – So instead, if we, yeah if you wanna just grab that items… And let’s just grab IDs. Perfect, okay. And this comes outta the RSS feed right? – Yep. – Okay, so then–
– I’ll just pull this up. Straight outta the RSS feed. – Okay, let’s see is there
anything else that is… I mean we could also use the link, ’cause the link, that’s
a unique identifier and that’d be way easier to find. – The RSS link?
– Yeah. That’s gonna be easier to find. – The other problem with this though, is I’m not sure if you publish and then edit
the title of something if that get pushed out
and syndicated to feeds. ‘Cause I was thinking about that too, because one concern I have, this is a little bit of a side note, is the way that I’m
currently creating the, where is it, (sighs) slug, is based on the episode title. But if you edit the name of the episode, that turns into a different slug and then you would have
to make a redirect. So there’s some messiness in here. – Yeah, I mean, okay so here would be my general take on this. Once you put something on the internet, you should consider that
slug to be permanent. And so if you create a URL
and then you change it, I don’t know that we
as the underlying tech can be held responsible
for somebody doing that. That being said, I don’t know… I don’t know that it should prevent you from being able to edit the
title of your podcast though? – The title of an episode?
– Yeah. Maybe we should just
capture a to do on that and kinda punt for now, because I feel like that is
a slightly different question than what we’re trying to tackle and something that we should probably give a little more thought to, because there might be
a way to solve that. But we also don’t want like useless slugs, like using the GUID. So I don’t know. – Wow is that how you say it? I say G-U-I-D? – I don’t know, I don’t
know if that’s correct. So one of may favorite
things about the internet is that we all speak the same language, but we never speak it out loud. (Jason laughs) And so I feel like so much of
what happens on the internet are words that I’ve literally
never heard anyone but me say. – It’s like learning a bunch
of your vocabulary from reading and only realizing that you say it wrong in your late 20s. I’m not talking about myself at all. (Jason and Amberley
talking at the same time) Oh tangent, Hermoine. – Oh God.
– In Harry Potter. I read her-me-own for 10 years. Not gonna lie.
– Yep her-me-own. I also did her-me-own. One that got me really badly was segue. So hey let’s segue from
this into another thing. I read it as se-goo and like in books, it was always just let’s
se-goo into the next thing, and then people would say segue and I thought it was
spelled like the Segway, like the two-wheeled thing that you ride. Anyways, I feel like this is the pitfall of the English language, borrowing from literally
every other language. (laughs) – I have a really good book
that I need to recommend to you that has a curse word in it, and I’m not gonna say it on the stream. – I mean you can do the… (Amberley and Jason laugh) – It’s about the English language. It’s called like, Our Bastard Tongue. (Jason laughs) – Yeah, do wanna just throw
a link to that in the chat, ’cause that sounds amazing. – I will (mumbles). – So now that our grammar
lesson has concluded (laughs). – So the reason why I got into that, I’m talking about the slug is that it’s… These aren’t currently
being used anywhere… So previously, let me step back. Previously, before I
implemented this RSS feed stuff these MDX files were being
used as the data source to generate the episode pages. And the naming convention
is sorta like a blog post, like if you look at our
official blog stuff. – Right so you were using
the folder name as the slug? – Yeah using the folder name as the slug. – Okay. – I was thinking that,
in thinking about like a human readable, decent
API here for people to use, using the slug here would make sense, because it’s sort of a convention already. – Yeah. (Jason sighs) I think we shouldn’t do that. It introduces two problems. One is, the only way you
could publish an episode is by adding metadata, so you wouldn’t be able
to just use the RSS feed. And two, it’s kind of confusing. It’d be a thing that you’d
have to document, then know. So you couldn’t just plug in
an RSS feed and walk away. What we could do though, is we could allow an explicit override. So if you put a slug field in
the front matter of your MDX, we could pull that instead
of auto-generating one. So like that’s how I– – Sorry I lost you there in somehow and how that would let still sync up between the MDX content
and the episode data from the RSS feed. – The RSS feed, right
now you’re autogenerating the slug from the title. – Correct. – And so if you did not
supply a manual slug, it would continue to do that. So if you like no MDX file
whatsoever, you just let it go, then the site continues to work. It pulls in the RSS feed. It generates a slug. You can listen to the episodes and there’s just no episode data. If you then created an MDX file, that shouldn’t change slug. So using the folder name would
be problematic, potentially. But if you were to want
to change the slug, you could create an MDX file and set slug in the front matter and then that’s you explicitly opting in to changing the slug. You want to control what that slug is. – Yeah in which case
you would need the GUID, or GUID or whatever to connect those two. – We could use the GUID. I’m actually thinking that the link generated by the podcast provider is probably just as stable as the GUID and I think that that’s
gonna be easier to find. So like if you go to Anchor. Yeah, I’m pretty sure those
are gonna stay the same. Like I could be wrong, but it seems to me.
– I think you’re wrong. – Am I? – I think you’re wrong because like I said, we just started this podcast and I think when Kurt published these, he titled them like episode
one, the intersection whatever and I ended up editing these to make them more consistent.
– Okay. – And shorter. And that is reflected in this URL. (Jason sighs) – Okay. Okay, so here’s a question then. So there are gonna be trade offs here. To guarantee coupling between
the episode RSS and the MDX, if we use the GUID it’s a manual step where you have to open up an XML feed and look at it to grab out the GUID. That’s complex. However, it’s gonna be a better
guarantee, theoretically. We’re assuming that none
of the podcast providers ever change this GUID,
regardless of what edits happen. The trade-off there is it’s
harder to get it right to start but more likely to stay right for longer. On the other side, if we use the link, the link is gonna be easier to find, because every podcast provider is most likely going to provide that link in a way that’s gonna be
accessible from a user interface. By getting that link we
make it much easier to initially set up the connection, but then add risk that if
you edit your episode title, you will break the connection. – Well maybe we follow that happy path and just document in the Read Me, at like a here be dragons. If you edit your episode
title via your hosting. – And a cool thing that we could do is look for any MDX files
that don’t match a link and warn or something. That would be a DX improvement. We might not have time to do that today, but it’s something that
we could take down, and just say hey if you create an MDX file and it doesn’t match an episode, we’ll say hey you’ve got an episode, episode info that doesn’t match anything. It’s not being used. – Ooh, you could even generate
an email or something. – Oh yeah, I mean you could go all over the place if you wanted. And what’s also kinda cool about this is that starts to open
the door toward this idea that eventually we could autogen these. We could just say hey
you’ve got a new RSS item, so I’m going to generate a
folder with an MDX file in it, so that you can add
episode info if you want. I don’t think that that’s something that we are gonna be able to do today, but it is kind of a cool idea. – I’m gonna write it down though. That’s actually… I say actually like I’m surprised. That is a good idea. – I mean they’re few
and far between from me, so I’ll take it. – No they’re not, no they’re not. (Jason laughs) That was a poorly placed actually. – Okay, so knowing that that’s
what we wanna work toward, then let’s maybe set up our first thing so we can just edit that pilot episode to use the link from one of the episodes. Are we using the link of the GUID? – Link.
– Okay. – Let’s use the link. Okay so it doesn’t matter what it’s called as long as we have this link
data in the front matter? – Right.
– Yeah, okay. So do you wanna do that in the pilot or do you wanna create that in (mumbles). ‘Cause actually this
is a different that I, let’s just keep goin’
down this rabbit hole. Nope, not that rabbit hole. There was this whole
thing that I did when I, I started creating this theme months ago when themes were still really new. I don’t know if you remember. I did this whole hackey… If the user hasn’t created
episodes in their site consumer use these demo episodes
from the podcast theme. If they have, then ignore the content from the podcast them.
– Oh okay. – As a system, we’ve
shifted to the expectation that you’ll need to be running a site to develop your theme for the most part. – Right, right. – So there’s no need to
have this stuff in here. – Right. – So we should be doing this off of… And these aren’t even useful anymore because it doesn’t have anything to do with the way the pages are being created. – Yeah that’s some clean up to do. Okay, yeah so let’s do it here. Yeah. And I would say we just
make these flat MDX files. Well do you see any need to include images or anything in these? – I don’t see why we would paint ourselves into a corner
and not do that actually. If someone wanted to include an image. You wanna just start with a file? – Yeah, let’s descope
this ’cause otherwise it’s gonna get away from us I think. So here we’re gonna have some basic, and a lotta this we won’t need, right, so we can effectively
go up here and say what? We need the link. And if we drop in that. – I’m gonna do intro ’cause it’s shorter. – Sure. And once we have have that, really that should be all that’s required. And any content below, we
want to show up on the screen. So let’s start from that assumption and then I think we can go
into the theme’s gatsby-node and what we’ll want to do is, so it’s gonna be reading from that MDX and so when we create MDX nodes we will want to do a query for… Let’s see what’s the
easiest way to do this? So theoretically what we want is for someone to be able
to get that extra content as part of the podcast query. And so to do that– – And just strictly looking
at the podcast query for that page, it looks like this. – Right, so RSS feed item, and then we would want details or additional content,
or something like that. – Actually, yeah, let’s decide what we wanna call that right now. Notes? There’s already content. – Well so it would be
like notes and transcripts and potentially links and stuff like that. So maybe just like additionalContent. – Sure. Additional crondent. – That’s the time sensitive version. – The what? Yeah. – Okay. (Jason laughs) I’m so sorry. (Jason laughs) – I let it slide by and
you made it a thing. – I’m sorry. Okay so from here we need to figure out how to make that
additionalContent a thing. And the way that we can do that… There are a handful of
ways that we can do this. So the simplest one probably, would be to create a custom resolver. (Jason and Amberley talk at the same time) Super weird. Ah crap, how do we? Let’s do a child link, I think. So if it’s, yeah, if we’re here then… And let’s do a negation check so that we’re not inside of a conditional. So if it’s not MDX just return and then we can work below it. Oh hey Chris is here just in time. (Jason laughing drowns
out Amberley speaking) So what we are trying to do right now is we want to look for MDX nodes. And then once we have an MDX node, we wanna check if the front
matter contains a link. If the front matter contains a link, we need to do graphQL query, or a getNodeById that would
give us the RSS feed item that has that same link. And so for this, we will
likely have to query things. And to do that we’ll probably
have to do some Googling to figure out exactly
what the syntax is here. Specifically, I think, let’s look at the onCreateNode docs, because I wanna see, I
think we have a getNode… I think we can just do
an arbitrary query here, but I don’t really remember
what the API looks like. That gives us… – You want createNode here? – Well not createNode, we wanna see… Don’t we getNode or something like that. I think we get getNodeByID. – Well maybe… – Actually you know what,
I’m just gonna search this. – All right so I’m looking
now at node API helpers. There is a getNode. So this is specifically the
one that I’m looking at here and I wanna figure out what its– – Are you pointing like I can see you? – I just put it in the chat. – Oh okay. So getNode and that’s by ID, so that’s actually not gonna help us, because we don’t have the ID. Crap! What we need, so let’s see. How can we do that? So we need to be able to do
kind of an arbitrary query. There’s got to be a way to do this. And I know that it works, because I’ve done stuff like this before. Yeah, Random Ranger we will post the code and we’ll also post up the recording. It’ll be on YouTube and stuff like that. So it’ll be all over the place. Chris is asking the
schema customization APIs exist at this point. I don’t think they do. I think the schema customization
only works on source nodes and I think it’s called createSchemaCustomization or something, and that’s what we actually need. So we might… Crap, ’cause I want is to create a parent child relationship, but I don’t know how to do that if we don’t have both
nodes at the same time. And if we don’t have the node’s ID, then I don’t know how to
make that relationship. There’s a way to do this. We are gonna figure this out. Let me, let’s see. So we’ve got a getNode. Maybe we can do, oh getNodes perhaps. getNodes and the argument is? Get an array of all nodes. That’s super helpful. We need to fix that doc. – I need to note this. – And there’s a question from Rhino Ranger about refreshing the podcast page when new RSS feed items are posted. This will actually be fairy easy, be we’re very lucky to
have tools like Zapier and there’s another one
that I forget the name of that they basically
setup arbitrary webhooks. If This Then That is another one and then there was one more that Kyle– – Hey we’re on the same page. – But yeah, so basically
you’ll be able to say if a new RSS feed has been triggered, then send a webhook to Netlify which will rebuild the
site with your new episode. So that part, that’s gonna
be the easy part fortunately. – We also might not wanna do that. – Say it again. – Oh I think I froze for a minute. I was saying, but you might wanna make, whether or not that happens optional, because for example I wouldn’t
wanna page to go up live without a transcript. I wouldn’t wanna push that live until the transcript existed. – Oh well, I mean yeah you would have to, that would be if you
wanted to automate, right? So if you’re putting up a transcript you’re going to be doing the push that causes that causes the Netlify build. So you just wouldn’t turn on that webhook. So, okay, so I think what I wanna try, I think we’re just gonna try some stuff and see how it goes. Let’s run, let’s pull in getNodes and I want to see, I wanna see what getNodes gives us. I’m gonna also do some doc
stuff to figure out how. Do we not have a single
example of using getNodes? This is no bueno, all right. – Exposing gaps in the
docs means we can fix them. – Exactly. – I took a note on that by the way. – The first parameter is… In this episode of Learn With Jason, we read the docs for an hour. – It hasn’t been an hour. (Jason laughs) – All right, so let’s
give it a shot with the, let’s give it a shot with getNodes. Oh, maybe we can try getNodesByType and we can pull in the RSS feed item. Ooh if that works, so if we use getNodesByType and get back the RSS feed items then we should have an
array of all of them and we should be able to just filter for the one that matches the link, at which point we’ll have the ID. – Okay. Let’s just do this.
– Oh I have faith. This is gonna work. So we just need to get the
actual type of those nodes which will be in the… We’ll have to look at your
FQL to double check it. Oh I guess you set it, didn’t you? – rssFeedItem.
– Yeah. – Heck yes I did. – Okay.
– Also this pains me. I didn’t wanna capitalize
this because eh, but. – Oh yeah. – Any it’s whatever.
– Whatever. You can be a rebel.
– You just want me to log this?
– Let’s log it for now and make sure that something
actually coming out. – This is what I get for using a keyboard with blank key caps on a livestream. – Yeah.
– Terrible. – So while we’re waitin’ for that, Rhino Ranger had a
follow up question about what if you’re not using Netlify and you wanna do webhooks? Any service could theoretically do this. You could run it on, if you
were using client stuff, they’re gonna have something
like Jenkins or Travis hosted on prem and you
should be able to… Netlify is effectively a
build and deploy service. So they are running CI and then deploying that to a CDN. That’s the really, really
oversimplified version of what Netlify is doing. So you can do the same thing with Jenkins or Travis or whatever
on prem, use Circle CI. You would run your build system and then whatever the
artifact is you build it. You could use Jfrog Artifactory, something along those
lines to then store it and put it up on your
internally hosted CDN. You’re gettin’ real enterprisy when you get into tools like that. Hopefully you don’t have to do that often, but it would definitely work. You could absolutely set up your own CI to do everything that Netlify
does and respond to webhooks. – Thank you very much
with the little interlude while I fixed a couple things
that broke the dev server. – Did we get a log? – We did! Aha, okay! Great so now we can, now what we can do is…
(Amberley laughs) (Jason laughs) Let’s grab the– – That is a happy Jason bear right there. (Jason laughs) – Let’s grab the front
matter from the node. So out of the MDX node, we can do, I think it should just work
as node.frontmatter.link. – Well these are the RSS items. Do you want me to also get all the MDX? – Well you already have the
MDX node, ’cause we’re in– – Oh we’re already in,
we’re already in MDX. – Yeah, so what we want is the… I think our next step should
be, let’s try to filter. So let’s take rssItemNodes
and then filter. And that’s gonna give us, you gotta call it
something other than node, ’cause we’ll have a collision. – Okay. – You can just call it
rssNode or something. Yeah and so what we
should be able to do now is return the rssItemNode.link that equals the node.frontmatter.link. And then if we log that,
theoretically speaking, so try logging the node.frontmatter.link. And then let’s also log filter. And that one you’ll
have to give a name to. – Oh that’s right, yeah. I’m just gonna do this. Key caps! – You gotta–
– I know, okay yeah. – Okay and then you can
get rid of that log. Okay, so fingers crossed,
nothing up our sleeves, we are gonna get back
both the rssFeedItem… Ooh yeah, we need a happy Jason bear emoji for the Slack now. – I like that we both looked
at that at the same time while this was building. (Jason laughs) – Did anything come out? – Agh, no. – Nothin’? That doesn’t seem right. Oh I know why, it’s because we already sourced the node. So do a Gatsby clean.
– Refresh. – I think… Whoa! You just taught me something. I had no idea that worked. – Ay-O
(Jason laughs) (Amberley and Jason talk at the same time) – The frontmatter.link is missing. Maybe we need to getNodeContent. Try just logging the node,
let’s see what’s in there. – Am I gonna need (mumbles) again? Let’s just do it. Why bother? – Yeah, once we get into node creation, it’s typically best practice. Because whenever we create
something it will… See FrontMatter title. Why’d it come back empty? – Wait, is this because… No. – Let’s see. Gatsby plugin MDX. So it pulls in the link,
but then it loses the, oh wait, it’s pullin’ in the wrong stuff. Or wait, that one’s not. That one is pulling in–
– That one’s not. That’s what I would expect. – So go up, ’cause I
think we saw the other one in there a second ago. – But it just had title. – It just had title. – Content, so yeah, this
is that placeholder data. – Right but the front matter.
– Has title. – So it looks like.
– Compile it. – I need to do… – Eco Math, you asked if any thought about adding a cache clean to
the initial Gatsby develop. We don’t do that because there a lot, like in many, many cases, you
don’t wanna clear the cache. That would just make your
development process slower. Where it’s specifically useful is when you start dealing
with the graphQL data layer. So when you start messing with nodes Gatsby will just kind of
assume that the nodes haven’t, Gatsby checks to see if the
content of a node has changed, and if not, it doesn’t change the cache. So when we’re changing the code, but not the nodes themselves, we have to manually clear that cache. Did that change anything? FrontMatter title. Did the… FrontMatter title. So let’s try… Let’s see. – So what I did was when I deleted, there’s some stuff in the theme, the themes-gatsby-node
that made it complain when I deleted, I knew
it was gonna happen. I deleted these episodes
that we’re not gonna need in the theme directory anymore, but there’s something in
there that makes it complain, so I put it back just to make it stop. So what I did was just make this the same format
as what we’re going for. – But it’s still only
comin’ up with the title. – Here. Do you have to have a title? – I don’t think so. Let’s try adding one and see what happens. Nicely done. You gotta appeal to both crowds I think. – I’m gonna call that on brand. – There’s a follow up
question from Echo Math. So on initial dev it
may be useful to clean and then not run for hot reloading? In a lotta cases that might be helpful. But in other cases, like if
you are working on the site and you’ve got hundreds
of images in that site and you stop developing and
then come back to it tomorrow and you wanna continue developing, you don’t necessarily wanna have to sit and wait for Gatsby to
rebuild all those images. You didn’t need to clean that cache. So we wanted to make that
cache cleaning should be an advanced use case,
not a default use case. There’s a limited subset
of reasons to do it. And as a result we encourage
people not to do that. I’m wondering if link is reserved word. Try something silly. Change it to anything else. – A totally random example. – I’m into it. I wanna make boop a thing. I think that should
become a programming meme. – Well I’m doin’ my part. – (laughs) Appreciate you. – Chris Briscardi, I appreciate you. Also, Chris Briscardi,
if you have any idea why this is happening, speak now. – Please save us from ourselves. – Yeah, we’re still getting the title– – So we’re getting the title, but we’re not getting our other content. – Right. – Chris, the fact that you’re
here and just not talking… (Amberley laughs) That’s a joke but also not a joke. (Jason laughs) – All right (sighs) Front matter is processing on createNode. We did clear cache.
– I did. We are in on createNode. – Let’s try getNodeData, or what is it, getNodeContent. – Okay hold on. Does it have to do with the order that we’re querying
this data in the config? – I don’t think it should. So trying running loadNodeContent. And that’s gonna be awaited. So if you haven’t already marked onCreateNode as async, do that. And so let’s do with the, let’s see how would we do this? Probably above line 74 we
can get the loaded thing. – I’m not sure what you’re talking about, do you just wanna tell me what to type? – So do constNodeContent and then that’s gonna
equal loadNodeContent and the argument to that is the node. And we need to import that from
where it says getNodeByType. And then let’s swap out, on line 78, instead of using the node,
let’s use nodeContent and let’s also log nodeContent. The node.frontmatter.link, so we’ll use nodeContent. – And I want this to be
boop now dot front matter. – That is correct yeah. – Well I think, yeah it would be boop. And then let’s log nodeContent on 80. All right, let’s give this a shot and see if we get anything back. – As you would say, coding from the hip. – Oh no, Chris is telling
us this isn’t gonna work. (Jason laughs) – Excellent. – Wait, what just showed up? Nothing. Node content is a promise
it comes back with, no it came back with boop.
– Well there’s boop. But no content. (laughs) – Is it because it’s a, try quoting it. Maybe it doesn’t… – Quoting what? – The link on the MDX file. So like the content of boop in the intro.mdx. So not in gatsby-node, in that one. Yeah, quote that. I would be really confused if
this was the problem, but… And then just for kicks, let’s add a third thing that is another random piece a content. I wanna see if, my thought now is that
Gatsby is doing something helpful with the link,
but I don’t know why. Yeah, so let’s just give that a shot and see what happens, if it changes. Savage Patch Kid, that’s
such a good handle. Welcome to the stream, thanks for comin’. – You have brought us
joy, we appreciate you. – All right, so fingers crossed,
something’s gonna happen. Things are gonna happen. Are things happening? What did we get?
– What keeps happening? We have the same thing. So yeah, I think we’re
just doing something that’s not intended to be
done this way. (laughs) – I’m so confused by this though, ’cause this should totally work. Quickly one thing to
fix, is let’s go await the loadNodeContent, so that
it stops returning a promise. – Yeah. (sighs) – I’m very confused by
why this isn’t doing what I want it to do. Maybe what we can try… (sighs) Ah let’s see,
how should we do this? There’s gotta be a way to
link this stuff, right? So this is maybe not the best idea, but let’s just try export const link. So in the MDX file, instead of relying on MDX parsing markdown and turning it into something,
let’s just export a constant. So export const link, and then let’s make that the, yeah. And let’s see what shows up then. – Where are you expecting to see this? – So MDX will let you just
export arbitrary data. It’s actually pretty handy. Yeah, so Chris is asking, we were using node.frontmatter before. We indeed were. And then when we loaded the nodeContent, it’s still coming back
with our front matter, it’s just not complete.
– Yeah. – So maybe let’s clear the
cache and run that again and see what shows up. – And you’re expecting to see this logged? – I think that’s gonna
show up in the node, because the way that MDX works, is I believe it just kind of
assigns that data in there. Okay so that helped. – Oh I think it was… This is here now. – But that’s just the node content, right? – Oh, yeah, yeah. – The filtered still isn’t working. Okay, so let’s get rid of the nodeContent, ’cause that just loaded the output. So we don’t want that actually. And let’s just use node, instead of nodeContent
on line 82 in the log. – And then instead of front matter… Actually, I’m gonna also
log these on their own. – Yeah and then try just
also logging node.link and log the node itself.
– Yeah. – I mean we’re into full chaos
mode debugging right now. Which, you know, this is
the fun part of development, is I feel like this should work. So we maybe we just
hammer on this for an hour and keeping logging things until something starts to make sense. – This is how I work, it’s just people are watching this time, which is just delightful. – No it’s good. I mean this is how I work too. (laughs) People who’ve seen this stream before, they what’s comin’. – Do you want me to get
rid of filtered for now? – Yeah, I mean sure. – I don’t feel like that’s
doing us any favors. – Yeah, that’s fine. – Bye Chris. – Bye Chris. (Amberley laughs) – All righty. – Okay so things are happening. – Node.link is undefined. Node.frontmatter.boop is undefined. – Mm hmm. Right, but that was
just for the one, so… – Oh, okay here let’s,
this is meow. (laughs) – And that one does export.
– Hey node.frontmatter.boop! Node.frontmatter.boop, Jason. – Okay, so that’s promising. So Chris was right. It was a weird caching issue. We should just listen to Chris. So my export thing did not work. Chris made it sound like maybe we have to use node.exports anyways. But we’ve got something working so let’s get back to the good old filtering. I’m gonna start logging some
stuff in here just to… – No, uncomment the filtered thing, because now that the boop came through, theoretically speaking, that should work. So I mean if you wanna
log the rssnode, yeah. – I’m gonna log both of them, because console log driven development. Oh my God, missing these, by the way when I’m complain
about these screen caps, it’s because my keyboard looks like this. – What the full like ultra-developer
mode, blank key caps. And you type Dvorak right? – And I type Dvorak. – She’s a glutton for punishment.
– Although that’s not necessarily, I’m such a keyboard nerd. Also, my Bluetooth keyboard
wasn’t working today. So I have a Bluetooth keyboard that has a Dvorak overlay. – Oh I can’t even, it hurts
my brain to look at that. And I love that you just
started typing Dvorak. Like didn’t somebody just
tell you you couldn’t, and you were like, yes I can. (laughs) – No someone, we made a really dumb bet, that didn’t even have
anything at stake or anything. I could type 120 words per minute QWERTY, and they were like I
bet you can’t get up to half your QWERTY speed in a month. And I was like oh boy. And it took me a month and three days, so technically they were right. (Jason laughs) – But thanks for rubbing salt in the wound.
– So you lost the bet and now you type in Dvorak. – By the way no, I wouldn’t
recommend that anyone who doesn’t already type Dvorak do it, ’cause it makes things very
confusing for other people. (Jason laughs) – Okay, so let’s give this a shot and I’m feelin’ hopeful. We’re gettin’ so much closer here. Okay so, it didn’t log things. Like it didn’t log at all. ‘Cause it was supposed to log in the– – What is this? There’s something wrong with our filter. – Yeah, like the filter’s
not running at all. So something is up. So let’s check the
content of rssFeedItems. Maybe we have to get into it to see what they are. Maybe it’s like an object and then it has like a
node’s property or something. Maybe we just weren’t paying attention the first time around. That’s gonna be upsetting if
we were right the whole time and we just don’t know
how JavaScript works. – I mean that’s not surprising. (Jason laughs) Speaking for myself, disclaimer. – Wait. Oh no, rssItemNodes is
just coming back empty which is definitely not true. So what happened? – Yeah, no we got all them. That’s weird. – Because it was showin’ up before. – Yeah, I feel betrayed.
– Okay. Try, hmm. What has changed? – And I have been cleaning
the cache every time. – Take a look at (sighs) there’s no way that node
order should matter here. It might matter. – Hey if I said that 20
minutes ago, ooh boy. – Take a look at the plugin order in the theme, the podcast theme. – Yeah I’m here. – So we’re loading… Okay, try putting the
RSS plugin at the top and then we can just weep
if this is the problem. – Mostly I’m gonna weep if
said this 20 minutes earlier. – Did you say this and
I just didn’t catch it? – I said this and you said,
eh, it shouldn’t matter. – Wait, did I really? – Yeah.
– Never trust me. – What, have you learned nothing? (laughs) Okay, so this–
– Watch. Then it’s not gonna be this. Do you want me to just run it? – So the thing that I’m confused about is, so the plugins are an array. The plugins then get executed in order. So if we’re creating nodes, then I guess it would make sense if the nodes were…
(Amberley laughs) Okay, so yeah, so the
rssFeedItemNodes need to exist before we try to access them, which means that it needs to
happen earlier in the array. I can’t wait to find the
timestamp in that YouTube video. – Come on now, don’t torture
me with my own stupidity. Did the filter work? – Sorry. Well we know it’s (audio is garbled). – Yeah but let’s hop up here
and just check it real quick, because it should be in
the first one I believe. If we look at the filtered array. – Here’s the title, link yep. – So that’s all that we want. – Node.link. – And then if you go down. – So I’m gonna comment this out and console these again, right? Or what do you wanna look at? – Well I think in the next log after this, we should see the link. There’s the boop and then filtered and it includes our filtered episode. So this is actually what we wanted. But let’s change it from filter to find, because we actually just want the one and filter gives us an array. So that way we’ll get just a single entry. And then let’s get rid
of the other logging, except for the filter because at this point believe it works. (Amberley screams) I mean yeah, log whatever you want. – I listed to you before. – You’re learning never trust me. (laughs) – It’s said with love. It’s a joke. – Okay so then we have node link.
– Node.link, yes. Front matter.
– And then we get the boop. (Amberley screams) You turn on voice over there?
– So I accidentally just clicked an Anchor link and it started playing things at me. (Jason laughs) – So and then we get our filtered node and it’s just a node not an array. So this is what we wanted. And now that we have this, we are able to do what we
originally set out to do which is create a link. (Amberley and Jason laugh) – This… – Sounds so bad when you say it like that. – No, no this is good. You know this is the kinda stuff that it’s super frustrating
when it’s happening, but we have uncovered
a handful of workflows that I didn’t think we would cover. And they’re useful workflows. So for somebody who’s trying
to do this in the future, if you’re playing with data, if you wanna do a theme that combines data from two different sources, this is the kinda stuff
that you’re gonna be doing. And so we also found
places to improve the docs which I’m takin’ all of that as big win. What’s up? Adarte, you’re Tony, right? I always forget this. Yeah, welcome to the stream. So what this site is going to do, to just recap for everybody who’s watching who wasn’t at the beginning when we kinda did an overview. So Amberley built a podcast theme that will accept an RSS feed and create posts from it. So Amberley do you wanna
pull up that page real quick? – The running site? – Yeah, so we can just see the RSS feed. So if you look at the
Fullstack Health RSS, this give us the individual items and then up above there is the metadata, so the title, the copyright, the author, a summary, those sorts a things. And so what Amberley has done is she’s basically allowed
you to set an RSS feed for your podcast and then that will get turned
into a working website, which is shown on this
Fullstack Health site here. So the cover art, the summary, the episodes themselves,
all of that gets pulled in from the RSS feed. So what we wanted to do is add support for transcripts. Because if we click into
the episode one here, or the intro, yeah, we can see that it includes the overview, and that’s probably what you
want in your podcast feed. Because in a feed reader,
if you put a 1,000 words in it becomes this unreadable wall of text. But on the site itself, you wanna maybe include
show notes and links. You wanna include a transcript. And like Henry Zhu and I,
on a stream a while back, added the ability to timestamp
link your transcripts, so that you could say hey
were talking about this. You can click that and it’ll start playing that part of the audio. So we want to add that support. So what we’ve been doing is adding the ability to add an MDX file that will let you create an MDX file, link it to the podcast episode, and we wanna show that on the page. So what we’ve done thus far, is figured out how to
get both the MDX node and the RSS feed item node into the same part of the
node creation process. From here we need to
create a relationship. And to do that, we are going to add a node field I think. – To the rssItemNode? – Yeah I think so. And the field that we wanna create is… – AdditionalContent? – Yeah. I was looking at this just a second ago. Create node field. – Create node field. – (laughs) Why can’t I find this…. – Can’t find what? – Create node field. So create node field comes out of actions. So we need to… – So really quick.
– Did you already pull that out of actions? – Henry said can just link
to the transcript’s URL in the description instead,
which a lotta podcasts do. Which I’m actually doing here. I mentioned this earlier, that I’m doing some
hackey stuff in the RSS. Where is it? And get an RSS to get, extract this first paragraph, because it didn’t make sense to have this excerpt here be, by the way check out the
transcript at the website at, on the other snippet.
– Oh. Okay.
– So that is technically the full description. It has, I don’t wanna play this. Make sure that doesn’t play. I’m not sure why that’s not…
– Oh does it not show the… – It’s basically stripping
out just the first paragraph of the description so that you can have more underneath in the podcast player,
but it won’t show up here. Anyway.
– Okay. Cool yeah. Is there a way to get
the full description? Do you put it in as a… – So yeah, it’s this content that’ll say full scripts–
– Gotcha. – And show notes are available at, which doesn’t make sense
to have on the site. But then I did this hackey
little transformation to get just–
– To get just the first paragraph.
– Yeah. – Okay cool. Yeah, so that’s great. So I think what we can do then is let’s, so let’s create this node field and I think the node
field that we wanna create is going to be… (sighs) So I wanna create
like a node relationship. Let’s see. Can we create, like we can’t
just create like a node… So if we add the field, the challenge that we’re gonna run into is that it’s not gonna be actual MDX. And so that means that we need. – What do you mean it won’t be actual MDX? – So if we look at the node content, what it’s givin’ us back
is the unparsed MDX. And so to get the parsed MDX, it actually happens after
the create node step. And so what I was hoping to do was create a parent-child link, but I don’t know if we can do that. I’m thinking we might have to do something a little more clever with
this, which I’m not sure is the best idea. Where’s this one available at? Is this an action. Okay, so there is an action for
creating a parent-child link and I think that might be our only option in this particular case. So let’s do that. And I might get yelled at by Michal later. Michal Piechowiak is
our Core OSS maintainer who knows a lot about how these
things are supposed to work and sometimes I do things
and then I get off the stream and he’s like hey you really
shouldn’t have done that. And then I have to undo it. (laughs) – I like that Michal yelling is, um, you really shouldn’t have done that. – I know, I know, he yells in
the most kind possible way. So let’s do this. We’re gonna get
actions.createParentChildLink. And we are going to… So createParentChildLink takes
an object as its argument. – Do wanna throw that doc link in here so I can just have it up? – Yup. – Gracias. – And so createParentChildLink takes a this object with a parent and a child. And so the parent node in this case is gonna be the rssFeedItem and the child node will be the MDX. And the child node is gonna be node. And then we can get rid of
that console log for filtered so that we don’t have any extra noise. And we’re no longer using createNodeField, so you can drop that from your imports. – Yeah we also didn’t filter it at all. – Ooh Rhino Ranger is talking
about a Twitch chatbot that pulls up Gatsby docs via command. That would be sick. I should learn how to
build things like that. I haven’t built a chatbot for Twitch. I looked at it for like three minutes and I was like I don’t have
time for this. (laughs) – We could really embarrass ourselves and do that on a livestream. – No kidding. That was actually, so
when Henry and I did this livestream to work on
the syntax podcast player it was really funny because we, neither one of us had worked
on that particular thing. So we got on and we were like, do you know if this is gonna work? I don’t know if this is gonna work. Let’s see if we can (laughs). So we just struggled through docs and eventually go there. It was pretty fun. So filtered is actually
going to be a single node. You can drop the zero. That’s the benefit of using find.
– We still want this filtered node. (Amberley and Jason
talking at the same time) – You’re absolutely correct. That was me not knowing what was going on. Okay, so… – Should we just run it?
– Let’s just let this rip. Yeah, run it and let’s get
into the graphQL interface and see if we got what we wanted. – Bryce Hull, you’d like to see that live, ’cause it’d be interesting, or you’d like to see that live
because it would be terrible? (Amberley laughs) – Bryce just wants to watch
me captain the struggle bus. (Jason laughs) – Hey man, that’s today. – Yeah, nah, no we’re doin’ great today. Cannot read property
children of undefined. – Interesting. – What did we miss? Cannot read property
children of undefined. Did we… – Did I do something wrong in here? – I don’t think so. Is it supposed to be… – These are both nodes. – You need to add this child node to the children array of the parent. But since you don’t have direct access to the immutable parent node,
use this action instead. So the rssFeedItem doesn’t
have a children node. But that should totally be… – Oh you know you what? Oh, maybe, maybe. – Set children to be an empty array. – Yep.
– Okay. Let’s give that a shot. I thought Gatsby auto-assigned that, but I could be wrong. – Well I’m not sure it does when you’re setting it
explicitly like that. Ah, that was worth a shot. – Tmi.js, so Rhino Ranger’s talking about a way to build this bot. And he mentioned tmi.js, which totally sounds like a risky click, but I’m gonna do it anyways. (Amberley laughs) Okay so here’s a link to
the actual tmi.js project. – Risky click at your own– – Oh it stands for Twitch
Messaging Interface, not too much information. So less risky once you actually click it. – Someone knew what
they were doing though. – Oh yeah, that’s a deliberate. They meant to. This is cool though. Yeah, that’s something
to definitely look into and I think that could be a
fun followup stream for sure, because it would be
really nice to be able to pull Gatsby docs and other helpful links through the chat interface. – Meanwhile…
– Did that change anything? – I still didn’t solve this problem. – Okay. And you did a clean before you ran it? – Yes I did. – Which one is undefined? Oh, oh, oh, oh, do a check. If filtered exists, then we wanna create the parent child link. ‘Cause there are MDX
nodes that don’t have– – Oh.
– Yeah. – Man, we really are on
the struggle bus today. – No we got it, we’re all over this thing. Show me potato salad! – What? – Is it doin’ it? – Who likes potato salad that much? – That’s a really bad joke. It’s from Family Guy. There’s an episode that’s–
– Just stop. Just stop there, that’s enough. That’s fine.
(Jason laughs) – Okay so now, ooh, we got a child MDX. Look at that, look at that! So now if you go in, you can pull in child MDX out of items. – Wait, wait, oh, okay. – And then get the body. – Oh my God did we actually do it? – Yes! Yes! Yes! Okay so this is super exciting. (laughs) Because now what we can do is let’s get that on the screen. So let’s go into our podcast template. And absolutely let’s get, yeah. So we’re gonna import the MDX renderer from gatsby plugin MDX. – Already done.
– And then we’re go to update the query to include child MDX. – Items, or no, child MDX, you’re right. – Yeah, ’cause now we’re
just in the single item body. And now we are going
to feed child MDX body to the MDX renderer. And I realize that was
unfortunate phrasing for what I just said. (laughs) – Feed the child? – Feed the child to the renderer. (Amberley laughs) – That’s actually really good. Okay I want rssItem.childmdx.body. Correct?
– Yep. And I think you’ll have to restart ’cause you just changed your query. – Should I cache clean? – Shouldn’t have to. – Ay-O!
– Oh! All right, now try that link. Try the transcript link. – Oh that’s broken, from like we haven’t hooked
that up to the player yet. – What? Oh. No I thought, if you’re using the player that Henry and I built, it should work. Oh yeah. – Oh y’all are so cool! – Yeah, Henry’s a smart dude. I just ride on his coattails. – I was like oh no,
that’s not hooked up yet. – Super exciting. So basically now we have the ability to publish a full podcast website without writing any actual code. We just get to plug in our RSS feed and optionally add in
additional information in an MDX file. And the timing could not be better.
– I wouldn’t say any additional code, ’cause there
is a JavaScript file involved. – No, no, no, no, not for
the person using the theme. – I mean, yeah you can
download the starter and everything but you still have to put the RSS feed in the config. – Okay, so that’s fair. You have to fill out a config file, but you don’t have to write React. You don’t have to get into the components. There’s no logic.
– But I’m just saying that’s not no code for some. – That’s true, that was dismissive. Ooh, there’s a hype emoji. That’s a good one. (laughs) I’m all about the hype emoji. So Amberley we did it and we did it under time by
a solid two minutes. (laughs) – That’s also very on brand for us. – No this is great. So I’m super pumped about this. So what I would love to see, if you don’t mind getting this committed, I’ll get a link to the
repo added to the… I’ll get the repo added
to the show description. We’ll get this cross posted to YouTube. And we can take that as like a… I think we take that as a win. I think we made great progress today. – Yeah, take that as a win. Next steps include
adding Theme UI themeing, so you an change the colors to be branded whatever you want and then double minimizing the
amount of customization. It needs to get down to making as much feeding just from RSS as possible. – For sure. So Amberley, where can
people find you online, if they wanna follow you? – Best place is twitter. It’s @amber1ey and the l is a one, again, because I’m super elite. Ha, ha, ha, ha.
(Jason laughs) – And then we’ve been lookin’
at your podcast all day, but just a quick shout out that Amberley and Kurt Kemple have
opened up fullstack.health, a couple episodes in. Super exciting there. And we’ve got a lotta
fun content coming up through the rest of July and beyond. Doin’ a lotta theme related stuff. We’ve got the Theme Jam goin’ right now. We’re super excited to support more people as they get into themes
and start building them. So please hit is up. We wanna hook you up with swag. We’re gonna hook up a
couple theme builders with a round trip ticket to Gatsby Days. So yeah, please, get involved,
reach out, get in touch, we’d love to hear from you. And I’d love to see you on a stream. So hit that follow button and I guess we’ll– This will be a really
good one, Jason Bahl, wPGraphQL–
– Yeah! Yeah, so if you’ve ever used WordPress, a lotta people ask us a lotta the time, they’re like hey are you
competing with WordPress? Absolutely not. WordPress is such a good CMS. But you can build a really fast frontend for WordPress using Gatsby. So Jason Bahl, who just
joined the Gatsby team, is the creator of WPGraphQL. And that’s a really, really powerful way to hook your WordPress
backend to a Gatsby frontend with minimal pain. So that’s gonna be a really good one. I haven’t done any
WordPress work in years, so I’m super excited to see how the community has progressed and what kinda fun stuff we can build. Amberley, any parting words? – No thank you all for
comin’ along with us. And this was my first Jason livestream, so I had fun you all. Thank you. – All right, y’all we
will see you next week. Take care.

Leave a Reply

Your email address will not be published. Required fields are marked *