 Hi everybody, this is the my name is Michael Meisner. I'm the director of engineering at Pixel We are a enterprise WordPress firm out in of Knoxville and This is the third time that I have conned the organizers in Asheville to let me speak here And I'm appreciative of it quite a bit. Can everybody hear me? Okay. Yeah, I'm gonna not do this Okay So Yes John's talk earlier today. I think was really interesting and and and I before The actual Technical parts of this are are great but actually I think this is opportunity for us to maybe have a little bit of a conversation about what we're doing and Maybe a way to utilize Gutenberg in a standardized kind of way or maybe use it at all so Who has launched a site where? Lever like Gutenberg is actually being leveraged for maybe like layout building like rather than Flexible content from ACF or CMB to implementation or static page So just keep your hands up real quick. Who's actually launched a site where it's used in a meaningful way other than blog posts Okay, so three four ish five How many How many people have Disabled Gutenberg or classic editor installed all over the place still 90 plus percent of your properties Right. Okay Who has plans in the next year to? To utilize Gutenberg as maybe a layout system So who's been planning on trying to use ACF to do that? Okay, so this is interesting Who's done it that way yet? Okay, okay, so this is maybe very timely to give some backstory to this Elliott from ACF who may think he's been working on it since I don't know probably the better He spent a lot of time on it in 2018 It went into like a decent beta where people could really test it out and I would say October or so maybe a little earlier than that and I've really enjoyed it. I've really really enjoyed it. This is what I was hoping for this has been This is the replacement for how we've been doing flexible content with ACF for a long time. I think it's inherently More accessible content because the results of it all get stored inside of post content Rather than trying to attach a whole bunch of post meta along with it, right? So even if you're taking even if you're doing like decoupled sites That pose every all the results of your custom thing that you had done Instead of reiterating over that or trying to save the result of all that and kind of rebuilding Gutenberg It's it's just all there. It's all a little bit more accessible Maybe some of that makes sense. Maybe it doesn't So I I To me this is like sort of the cure to the Gutenberg problem for my microcosm of WordPress, right? For me WordPress involves client needs I've got to do that in a pretty custom way Custom enough that I can't reliably utilize page builder systems most of the time Really love beaver builder great. They have a great developer API. So when I actually have to do that I love them, but even then generally speaking That's not a very pragmatic thing for us to do for our clientele. So leaning on something like CMB to ACF Gosh the meta box plug-in the WordPress VIP requires that I can't remember the name of right now that stuff is that's what we have to rely on and Gutenberg Was looking like we were gonna be doing a lot of react templating and a lot of state management in order to deal with it just didn't feel Like per per block right or module or whatever you might call it within your own thing If you have that down to four hours of work to set one up at least for like the back end Maybe a lot less than that in some ways you can set up in 20 minutes you know the fields that you're gonna register and you just get through it and You've got like a flow, but now if you're trying to change that over to Custom building it with react and the slightly older version of react where we got their class system It's hard. It's kind of hard and I actually love it. I mean, I took it seriously in Philly Watching Matt Walwitz and learn JavaScript deeply. I did But I understood I've understood that over time That it's for most businesses. It's not a pragmatic choice to be dumping time into JSX templates and trying to Manage state there and saving patterns and hit the rest of that's just kind of a pain in the butt in comparison to a lot of the workflows That we have right now. I hope that gets better With time and some maturity in the JavaScript Community and but honestly that it's probably where it needs to be in it That's a certain kind of approach where you're actually building a super custom block or something really intentional and meaningful For most of us doing and spinning up Brochure-ish sites, right? In even just high-level brochures sites that are custom and maintainable and something that should last five to ten years Right and have kind of a release pattern with it Or or even just that existing as the front end and there's complex back-ends that who knows what approach you're using this This to me felt like the cure so What I was really glad to see is that there's a whole bunch of people planning to try to build a site with Gutenberg Want to try to use ACF and and maybe you're this is the first time you're getting exposed to it because like I said It went to a good beta in October, but it wasn't until May 8th Right. I think it just may eight barely a month ago Not even a month ago exactly That five point eight was released to the public and I bet most of you have not really tried it out First thing to know about it is that you cannot You cannot You cannot just do this with the GUI if you think you're gonna get away with that That's that's not that's not really an option. You're gonna have to register something in code You cannot just use ACF's GUI and as a preachy thing that just Maybe don't do that and try to like use their API anyways and version it You can do that with JSON a little bit, but I strongly recommend doing it in PHP I'll show you a little bit about my workflow and how I do it Okay So what is this talk? This is this is a fairly opinionated approach on utilizing WordPress block editor This is to create these blocks right and how to use ACF in order to have a pragmatic workflow If you've been using flexible content if you Are concerned about the scope and hours that it takes to build custom custom blocks If you are actually at a point your career or your business where you're sort of getting ready to move on From page builders and you need to go a little bit more bespoke. I'm not that I like that word very much You're ready to start leveraging Gutenberg in a meaningful way You're a heavy ACF CNB to user and then I kind of stuffed Timber slash twig into this because for a few different reasons It's the way I like to work, but I also think that It we code better when we use the right tool at the right time And I don't think PHP is a good tool for templating But I think it'll it'll fit in well enough Registering blocks pretty easy They have a couple options the documentation that is up for the arguments that you can feed it This is an example of a really really minimal testimonial block that we're registering We have Some unsurprising things happening here name title description Category is is great because What you've probably noticed with Gutenberg is you have those different categorizations, right? You could use it That's how you designate that icon This will accept any of the dashicon Names and just give you that icon And then keywords what they actually start typing to try to find them That's this is where you can specify the keywords where they try to search for it There's a quick dashcon cheat sheet both you've probably seen the dashcon Resources from the org site, but there's also a really cool cheat sheet the slides are up on my Twitter profile Meisner Meisner ism. You could also just check out the WCAVL hashtag and it's probably I don't know four or five tweets down right now because I posted just a little while ago But yeah, any of those icons on there just for some quick choices When you're creating these things really helpful Once you have it registered once you had registered it with code Then you can actually add fields to it in the way that you've added fields to lots of things with ACF over the years So I'm gonna bounce back and forth real quick if you are a GUI user of ACF right at that point after it's registered Which please do that in a plug-in That's where that's really where that belongs You'll now have this option of block and you will be able to see all the different blocks that are available to to try to register it to Okay, this is what it looks like in code recognize the new Option that we have for parameter block and then we're specifying which one we're using that this would be in this In this example, it should be like ACF slash testimonial Minor note for people that really like to mess with this stuff if you try to feed At least right now if you try to feed ACF a slug For your block name with underscores it will convert them to dashes That's a weird thing. I feel like I need to post some issue or something, but just if that that was that wasted a whole day Okay, so so we have the basics down now on how to register. I mean, it's really simple guys You're just Registering the name and some details right it pops up in the way that you would think or again use location with an array of Array of arrays To designate where your fields are gonna go right that's example just using it some title But now we can bring twig or timber and I Want to I want to show a dichotomy between render template I'm just pointing to a file like hey Here's where the the stuff's gonna be and it's gonna it it would pass some variables that are available to us within that context, but Again There's a couple of things that people like to use I like twig. I also am a big advocate of blade Use a templating language to keep your html clean, please PHP is not really well built for it It muddies up the code in my opinion and if you can get away with it You don't have to deal with standards that disallow that are forcing you to keep with just PHP I highly recommend implementing some kind of templating system so this is us integrating timber slash twig with With ACF frustration so instead of using render template like we see at the bottom there We're just using render callback now. There's a couple different ways. We could try to go about this We could have done that kind of logic in that template or we're sending them I'm just using a simple anonymous function inside of our callback to Kind of set up a format of what what I would do most of the time If you've used timber before which is the integration but like a really great Well-built integration between wordpress and twig This git context is super super powerful So that grabs a whole bunch of data that they predict that we would actually need it's very performant. It caches really well Now we're also adding information that gets passed in from that callback the block Is preview right we're tagging that on and then we're even getting all the fields from ACF This stuff plays really well together and then we pass that entire variable context Into where we're rendering our twig template and now we now we have like a system if we keep doing this this way You can set up a whole bunch of your custom blocks of sort over time right so if you have 25 Each site that you build for your clients most of the things that you're building are not unique Right, they're just not they're they're using the same fields There's headings and descriptions and buttons and it's called action and You can you can pre-register and pre-build these things over time and you're the way that you like to do it with maybe whatever the accessibility standards that you want in there with the html html5 tags that you want So you can build that up over time and and have these Set up what like what you've probably done with flexible content already Most of us that do this work this way have that We do the same thing in fact depending on how those templates are set up for your flexible content It's not too hard to just use exactly what you have and make sure that the data is mapped the same way To that new template you don't have to rebuild it right just now you can just switch over to Gutenberg Okay, I Quick anecdote Get fields always kind of freaked me out and feel like that was very performant, but the way it leverages The caching system within WordPress. I think it's I think it's plenty fine So if that's anywhere in your brain like ooh, I don't know about doing that actually it's decent. It's fine It's just fine Okay, so trying to actually utilize twig This is this where I get to show off why I why I think it's simpler and why I think it creates Dryer code literally have to type less. I don't know about you But I but I get real sick if I'm in HTML and I'm bouncing in and out of rock from the PHP file And I'm bouncing in and out of HTML. I really hate brackets and question marks and PHP and I mean It's it's just it's a little infuriating It's not a very good system and if you've ever used anything like blade or mustache or Any templating language anything else? It feels pretty darn nice, right? It's a lot easier to pass stuff around And to keep so this is an example of how I do like BEM structures where My selectors all over my my small component will kind of match up And this is this is one strategy of doing that to keep things really dry if I've got If I've got another developer who is really technically proficient, but isn't very good at naming things And I and I go, oh, okay. I will understand that you name that image left text right block Can we just call it like a feature ad or something something that's gonna feel a little bit more meaningful to and that's content driven rather than being so literal That's this is a this kind of approach can help with quick quick renaming of things like that I'm a quick refactoring without making many changes are touching much code to do it Here's a more complex example a more realistic example. I think this is like taken from a hero thing that I set up so The security on it is pretty darn decent and there's some really good filters and features for it You'll see at the top. I'm I'm kind of listing out classes and I'm interpolating block a line with width so that I can feed in the choices from Basically every block or most most blocks that you have right you can kind of like choose the width and how That's where we're feeding that in And and I've got CSS written right that aligns with modifications to it It'll join those together an array and then I can Spit them out and sort of implode them with join and separate them with a space so I can really pretty easily Feed classes in and then your your bar e is just a general Escaper that's pretty good. It's pretty good. You can get a little bit more specific. You can jump like a Timber which implements twig for WordPress, right? It'll add a couple of extra abilities like escaping URL There's also internationalization features that are pretty pretty decent So Maybe the last thing I would say about this is You can also really get into making your code modular Buttons we we like to keep all the buttons approximately the same. I don't like rewriting the button Markup every single time. That's kind of silly so I can just feed it And I can even scope it so they have literal language like include this path with this object and feeding things to it Only and then all of a sudden I've really narrowed how much that component knows as it's being brought in so that feels very secure and very scoped to us and A note about is proof. So one of the great things about this workflow is that you can create a really content-centric Version of the layout right if content is king. Yeah, I know I said it And We're we're really trying to push users and our clients and everybody to think about what they're saying that should be Meaningful it's not really about what it looks like It's about what you're trying to convey first and then everything comes on top of that I think Gutenberg is giving us a really great opportunity to I I am I actually believe in it more than something like beaver builder in some ways because You are abstracting the thought of what is visual from what is Communicated without aesthetics And I think that's good I think the the focusing on language is a really good opportunity and they're trying to create a seamless ish version of that so Is preview is the way that we can? Limit or control how it looks Otherwise you probably run into that a little bit or had experience with that if you've been trying to build these like custom custom and doing them in JSX So at this point I want to show you some of the code, right? I want to show you what some of this looks like I need to un Maximize this which side of the screen did it want to go to Okay, this whole thing over this is going to be difficult for me I'm not gonna actually turn how bad is this camera gonna be mad at me if I actually turn around a little bit I feel like I should I feel like I should turn Just place thank you for the reasonable suggestion. There we go much better Sometimes you just need someone to say the obvious thing Okay, so ACF has a pretty interesting like visual and editing mode that they that they turn on after this is Maybe yeah. Oh, well, I mean I could try. Oh, that's not bad I really would defend it folks. I think I I think Gutenberg It at least in the context of giving us a more universal way like Fine Divi beaver builder Elementor all these people building these things. These are commonly These are common practices of on how people are building WordPress sites Well, maybe they start putting their energy into the blocks Right and they kind of sent, you know rally around an API Who knows what we'll see in the next five years, but I hope that it becomes something like that and For us custom builders of things. I think I think ACF and the way Elliot's implemented this is really really strong Okay, so yeah, there's this little switch to editor view I Am wanting to bring the Julian I need one more Unstupid thing to happen and that is how did I turn off the sidebar on the right-hand side? I guess I just never do that Good Lord. Okay. Thank you whoo All right So by default it's gonna be like this There's some some presets with Gutenberg if you haven't already noticed where you can sort of change your style Right of how you're interacting with it But this is a this is about what it'll be by default So I'm going to swap this back over to like preview mode and instead of editing the content directly on the block He puts it over on the side here, right? And it gets a little scrunched. I'm not super in love with this But it's reasonable and plus you can always switch back over to something like this view So here's my heading here's my subheading I'll also show you the component how I've got it registered When I'm using this I'm you I'm current Yeah Yeah, I might have to switch to the mic anyway when I'm using When I'm using these tools I like to try to build that out in a class that I'm extending Right, I've got I've got most of that already set up and I keep it really minimal So I have a register method where I feed it just a couple of things Including like a custom way where I've got I'm sort of deciding whether or not there's on queues that go with this And I'm trying to heavily leverage htb2 and really break up this css and javascript for every single component into its own thing We're loading only as much code as we absolutely need But that's that's a little bit more of a custom build But that's what Gutenberg is trying to push you to do right and the that block system is trying to push you to do Which is very good practice with htb2 which we can all kind of reasonably assume at this point Because if it's not there then there's bigger problems at play usually Okay, so um Yeah, this is me registering a block this is Imagine how long this takes me Not very Right I've already got like Predefined things of how what my fields are and how I like them in acf like I've just got a little associative arrays set up ahead of time I've got A whole method system and like I'm hooking into the right things For that register method so that I just feed it exactly what it needs to know and no more And I'm sort of just registering my own little models Right, and then I have little pseudo controllers where I can filter the results before it gets to the template If I really want to most time I don't really need to And it's just hooked up with a pattern of views that I take into the theme And my hero For this my hero module or block for this Is really simplistic. You'll see similarly Good Yeah, this is this is how this is how I kind of will divide my work Right on the left hand side here So here's my twig function. This one's actually passing into here because we're using here all over the place of itself But yeah And I keep the code that is associated with a particular component or section thing All together and To me this has felt like a very very good workflow And I know that it for front end performance. It's pretty great Uh, it's actually leveraging the on cue system in a way that I think that wordpress one of us to please Over here, yeah, okay So let's take the uh, the question was is roughly Can you help connect the dots between the code that you're showing me and what that white screen is actually doing? Uh, yes, I can So let's take All right, so I've got uh Content in here custom hero Whatever I'm just throwing in some text We'll swap back over it's hard to do this while holding a mic It doesn't feel right Right, okay, and on the top right hand side. Uh, I've got all this nonsense in here What is what this Is my actual larger object with all my settings To make this exist. This is coming from acfs api to create a block So in actually using Gutenberg I am number one key tip filter like like whiteness blocks You should you should just nuke everything and then start allowing only things that you want So for me, I don't have most of the out of the box Gutenberg blocks All right, I only have a few that I allow And I take them and only if I know that maybe my view actually has styling for them And I've I've actually built it out is what I'm going to use them Usually it's just the I give it just as much as I want. Okay, so Uh, yeah, I have all these layout elements I've got this hero custom one where I typed a bunch of garbage and I can keep selecting those and right and pull those in And this is that's kind of like choosing the modules that you have with flexible content if you use it that way So, um I think this is the path forward. I don't see a huge advantage over flexible content at this point one and two Can we open up the database and look at it? Let's just look at it That's just all I'll take a look at it right now. I'm dumb game. Let's do it Okay, so, uh, what do we got we got post 38? All right So let's get into 38 Yeah, right just write down all the md5 hashes or something Decrypting them Um, okay, so let's see post content. Uh, we want id 38 This is what we've got to work with so This Yeah, here, um Meet more hands to do things That'll be maybe kind of visible kind of So, uh I think there will be some some degree of complications there, but It can also be set up pretty easily to to I don't know. I I think I think that's a fair a fair concern The state it's still there's still stuff definitely saved to post meta We don't necessarily have to access it that way because you sort of have like a pre-rendered pre-cached version of that So, uh, I'll just just clicking pretty well. That's lovely That's what you wanted. That's what you wanted Okay, so here's a heading example. So Right Okay, I'm not hitting updates Right nothing. Yeah So I think that's fair, um And I'd be curious on why like How much of a form is concerned can we actually quantify that to be Now if this so, uh What this is probably saving It very well could be yeah the rendering mechanism there that that I could see that I could definitely see that that'd be interesting Now so so Well, I we probably ought to dig into this separate from from this particular talk, but Breakout session for that, but uh, I think that even just even minor saves I don't know the the kind of save versus update. I think is an interesting discussion Anyways, we'll break out. We'll break that out later John For me personally if I let me restate that question how am I handling portability of The blocks Sure For me it is a minimum of two things. I've got to bring over I I treat it In an mvc ish kind of way, right? I have a model. I have to copy a model over And then I have that the view which is really sort of being handled almost in a React component kind of way where I've got my little chunk of pieces Uh, so I have to bring over those two things specifically. Um, So here's blocks, right and I have Or here let me go back to my plugin. So this will be my my core plugin of the custom work that I'm doing and I've got a model for Hero or whatever one of these I've got to bring one of those over And it's likely using the exact same or extending the exact same class of how I'm registering them So as long as that syntax is the same it matches my version numbers or something. I'm good Uh, and then I copy over the Files inside so I have blocks inside of my I have a views folder in my theme and here's blocks and I would copy over my You know directory that Match that model. That's it. I just got to copy over those two things and I'm good Uh, does anybody have more questions before I yeah, please I don't know that I have an opinion on that um Yeah, uh What is my opinion auto generating? Sorry Yes, the uh, I think that how twig handles their generation of php is secure I do. Um now I've got the bigger problem of another third party Right What I cannot speak to is whether or not that should be a valid concern I don't think it is It could depend on the environment. Sure. Um And I would need to see a specific use case in order to understand the kind of problems that we would run into but I I kind of understand what you're saying But I don't think that that's a real problem But I but it sounds like you actually think that it is and I would love to Get beer and try to hear that out because I would like to know actually um More questions Okay, so so you can see sort of my workflow Maybe the maybe the only other thing that I would tack onto this because you've gotten a very literal version of how I Do this personally and I'm doing it right now um is in order for If you're using any kind of like modern tooling for front-end assets That can get a little bit of it gets a little bit of a pain in the butt. Um I I have like kind of a complex modern gulp file thing where I am Globbing all over the place and spitting out lots of files. So if we look at my disc folder And we look at blocks And so here's uh, you know, here's hero and I've got You know my javascript version or my javascript my css. These are my like minified production-ready versions of these things And it gets a little dicey because I've got a gulp flow with that That's actually leveraging webpack so that I can do imports and exports for my little snip as a javascript that are That are for those components. It's kind of a pain in the butt to set up the tooling for it Uh, I am working with it and improving it piece by piece as I go Uh to a public repo that we host On github It's just not not enough. I don't know fans It's called outset And I've got a package that needs to be updated. Lovely. Um And so I keep updating this right now It's on a version two is where I where I swapped from flexible content to real good and berg support So feel free to look at how I do it and Steal from it as much as you want. Um, if any of it's helpful at all More suggest to me how I could be doing that better Uh, that Questions one two Okay, like the render template, uh, like the like The question is Okay, uh, the question is how how am I handling, uh, uh, registering those assets? In order so that they can be on cute conditionally So the a cf or so this is what Gutenberg does anyways, right or the the registering block functions like if this is how this works but, uh They may get pretty easy or elliott made it pretty darn easy And inside I will show you how I'm handling it So I'm doing a little bit of a facility thing where I wanted easy on cues. And so I uh, I created a A check for for options. And if I feed it Styles or script then it will on cue an associated Or it will look for one. It'll look for hero.css or hero.js. What have you The actual on cue happens I'm taking crazy pills here All right, so view disfile. Great. Great. All right those. Oh, that's right. I took it into a separate thing All right, so, um, I am generating the paths based on the structure that that I've kind of predetermined of what that I want I know it's always going to be disc blocks hero hero dot whatever, right? And uh, and then I'm just using a traditional on cue system to do that Right, I'll just register them all and then if those blocks are called Then Gutenberg's already set up to pull those in Does that make any sense? It's it's similar to too traditional. You don't the only thing that's different is you don't have to when you're when you're registering them with Gutenberg, you don't have to actually call the the on cue per time, right? If hopefully some of you are registering them and then using, you know on cue script The slug of whatever it is that you've registered before that way that asset only loads in if that thing is being brought in Rather than having to do that The blocks are set up to kind of think that way to begin with Does that make sense? Um, I'm not I'm not Setting that up there. Uh, that is actually all I have to do is Feed the path for the on cue script, uh, or on cue style To Gutenberg. So that's this is where I'm doing that part. I didn't explain this very well, sorry So I am feeding it The url that I have kind of figured out above here And only if I have said essentially yes look for styles or yes look for A script would it try to on cue? Does that make sense? Okay, uh two ready so I think I think the version of this where you could try to hit it with a GUI is Um, you've got to grab one of the tools that can dynamically register Blocks you'd have to grab that first Because I don't think you can do that in a CF. I don't think so Um, so I don't I don't think he's going to do that I don't think elliott's going to create anything that allows you to dynamically register blocks Um from the GUI, but there are plugins that allow you to do that. So if you did that Then it would show up Um Similar to how when you're choosing a different post type and you're trying to associate those fields to them You'd be able to match those What you do from there and in getting that to show up could probably roughly match what you already do But i'm not i'm not sure exactly what that flow would look like without having Some explicit control on the render callback part Um or the render template part. Yeah for me it's um Is I'll create a small one of these files and then I start and then I have an option like kind of an opt-in controller against really not a controller It's just a filter Uh, and then I have the view Um, and I just I'm taking a direct correlation from my heading subheading image Whatever whatever fields that I set up here are things that are going to be available To me directly in the template that I that I use in this case. I'm using twig, but it doesn't have to be twig, of course There is absolutely nothing preventing you from uh registering the fields with the GUI nothing I Off the top of my head the only like I said the only thing I don't have solved is Uh controlling the the template at that point the block template um Yeah, I I think I think that you have to have a little bit of code in there Or maybe somebody's going to create a plugin or some some kind of assistive utility to make it easier to to control that but um But mostly at least in its current stage It it has to some of these things in my opinion have to be registered A little bit more manually, please I'm actively not concatenating As much as possible Funny enough three years ago I gave a talk on concatenating your butt off right And and the change is htdp versus htdp2 Um, it used to we used to have to write like walk across the room have a handshake get one image Okay, then come back handshake grab the other image right now. Just walk over once. Oh 40. Okay. Well, okay I have all of them now And because we can do that we do the same thing with css javascript so long as long as they're the same domain Therefore we can highly leverage That that far more performant tool Right like htdp2 becomes super super helpful for us to minimize the amount of code that we're delivering and making and at least attempting to make it so We only get exactly as much as we should have Rather than here's the whole theme. It's no no Here's the header footer Here's the modules that you see and then those can get cached and now you've got them Right and ultimately it's just less less code that you're delivering Sure On the air for so the the question was what our approach was specifically with a project that we did almost two years ago So different development team. I wasn't in charge of the team at that time different practices And I think some We're probably utilizing the GUI if I'm not mistaken, which is fine. There's nothing there's nothing wrong with it Personally, I like to to really try to bring that out of the GUI and restrict that down and Register them in a way that I know that can be highly versioned I don't like I don't like leaning on the database for anything that I don't have to lean on it for Does that answer the question? Sure I mean to me a tremendous amount of the security is really it's it's really on where you've got something hosted I really I'm not there certainly not paying me anything for it, but managed hosting is is there for a reason. Yeah WP engine pantheon flywheel these companies that are doing managed hosting Are working really hard on catering to All the edge cases that wordpress installs specifically would run into And if you're if you're just throwing up wordpress things on some vps and you don't know you're not really really good at what you're doing You're putting that site at risk in a meaningful way, which is when problems like that actually come up but if you can keep things on safe hosts that have a degree of Guarantees via a sla Then I think that's the best kind of coverage you can get from a dev ops security level Everything else should be like basic stuff that we're going we should be escaping output. We should be doing like obvious things, but Does that help? Unit Oh, how many preconfigured blocks? So we usually I I keep mine down to about 15 or so and they have variations Right like you've got a hero and there might be an option to make it a Full height hero or something right some basic stuff repeatable pattern stuff that we do all the time I mean kind of reasonably build those Exactly exactly and that That can be the difference on being able to give the client what they need in three weeks rather than three months Is having some of that work pre-built, please The question was if I'm exclusively using custom pre-defined blocks Or or am I actually just custom registering all my or only only customer Am I only modda am I only doing custom work for My blocks are only using them at all or am I actually using some of the Default booting block. It's a mix. It's a mixed bag when I mentioned earlier that that I that I think everybody should white list This is what I was talking about So that's a little compatibility thing and here is big list Of all those friggin blocks Obviously, you can see I only enable a handful and I support those in my base styles for the theme right And then occasionally like the new and upcoming group block which I'm super excited about I will maybe grab a package of something something new that's coming out and then I'll have to filter and enable that here, right Um This is this this is part of thinking like the way john was asking us to earlier today Where we're simplifying the admin UI if there's just a tremendous amount of blocks for people to sort through that's a bad user experience in my view Um, and and honestly, I think I think what we have out of the box It's a better user experience than tiny mce and short codes But there's still room for improvement Um, and if you're delivering a custom website for a client that's paying you good money And you've got at least a little bit of hours to work with you should maybe be thinking about doing that by default So hopefully that's helpful One two Yeah, it's me that makes sense It it it it makes Yeah Uh, I think I think we'll need to write an uh article on it for Russell so that We can prove it It could be a Meisner issue Yeah It's like kind of hidden but it I know twig does by default I'm a little unclear on certain things that timber does if that makes sense So with the three minutes that I've got left, um What i'm proposing is that this is the way that we swap over Right is that this is the way that we build those sites this year And uh, and I think it can help say I mean don't me not necessarily my way where i'm I'm abstracting it to some crazy class and I've got my weird on cue system and stuff, but But if if we uh, if you're or if you've been building sites with acf for years like most of us This this ends up being a way that you're not blowing another 30 hours of a project on playing with react Right And save that approach for the right time for the right budget And this gets you kind of back to business as usual when it comes to how we've we've been building work press Sites with acf and flexible content for some time now So it from all the head nods. It looks like a lot of you relate to me and how i'm thinking about this and uh Please don't hesitate to reach out to me on uh twitter For help or or file an issue on that repo Uh, I would love to see us actually utilizing Gutenberg sooner rather than later So thank you everybody