so i i'm gonna introduce this because this is my show and the thing is here i don't have an intro i what do i even say i say like i think i just say hey how's it going or like hey folks or whatever so so let's do that welcome to another episode of no plans to work i'm your host caleb porzio joined today by my friend mr ian lansman in flesh what's up
uh it's great ian uh so ian is here because well we've been having like just discussions i mean we just have discussions about stuff there was this whole react tweet crap and there's all these things that that crop up to emotionally derail Caleb. And it's pretty easy to do. It's not hard to do at all. It doesn't take much. You just kind of blow in my direction and I'm like knocked off kilter.
Um, so whatever there's, there's whatever competition of the day or doomsday thing happening. Um, I I'll end up in a conversation with Ian telling me, I guess a few things, some themes here. It's like, one of them is like. it's fine like don't worry about it like right which has always been true for the most part and it's like just freaking focus on your thing like and focus on flux and make flux better and keep doing that
And it doesn't matter what these people do because flux is good and it'll answer all these problems and nobody's going to be looking elsewhere. I'm, I'm, I'm not, I'm not repeating the things you're saying. I'm filling in some blanks, but what do you think about that? It's like the theme of a lot of these conversations.
Yeah, I think that usually there's a tweet or there's a podcast where you're a little flustered. And then, yeah, I just say, dude, everything's fine. You're selling software. It's selling. People like it. Yeah. The rest of it doesn't really matter because I think an interesting aspect of you guys who come from the open source angle on things is it's very personal. Yeah.
as the godfather says you know it's strictly business like it's not personal it's strictly business right like so that's the thing like nobody cares what you're doing the reality is nobody cares Right. Talk about this before we came on. But like nobody cares. Like none of your customers care. They don't care how you built it. They don't care about the API in a sense. They definitely don't care about anything they can't see and touch directly. Right.
They don't even care about the competition in a lot of cases. Right. Even when they do care about the competition, it's in ways that you might find counterintuitive. I'm going to own Flux, and I'm going to own Tailwind UI, and I'm going to sometimes use ShadTN, right? Like, I'm not even like, oh, I picked my component framework, and then...
You are trying to win the business of somebody who will never buy another component system, right? Like, no, people buy component systems probably buy lots of component systems is my guess. And so... you're you're not necessarily fighting in this in the way you might think you are yeah so it's so directly okay so let's let's set the stage on that so the ultimate goal of this conversation and it it started as like
Ian's uses flux and has a lot of ideas and there's a lot of things like let's make a roadmap for like the next chapter of flux which is a lot of stuff to talk about there but right here this concept of like nobody cares about your thing so this is let me give you the window into things this is things that will make ian go what that's the segment right here and this is like okay so
What Flux uses under the hood, I was going to release as an open source project called LoFi. It uses custom web elements. They're all prefixed with UI hyphen. So if you have a dropdown menu in Flux, it's like UI.
drop down and then a button as a child and whatever there's we could talk about that forever but we're not gonna the point is is that like i i put just as much work into that as i did to everything flux styling in apis and blade like just as much work in fact like i think that's all the good real innovation of the flux project and it just never made sense to like give it the light of day
Because what am I going to make it like an open source project and then everybody else is going to make Flux competitors and I'm going to do all the hard work. But that is the hard work of Flux is this like JavaScript core that uses custom web elements. So Adam is now building his JavaScript core that uses custom web elements for, you know, tailwind UI. And he's totally fine to do that. There's plenty, you know, whatever.
uh one of these derailing things that's like oh like now there's this thing that's just like the thing and uh anyway but so to your point it's like there's a lot of people who would hold a flux license and a headless ui license um or sorry and a tailwind ui license in some ways because they're like slightly different products but even like shad cn is somebody you know i do think they're kind of in different worlds but
What if there was another LiveWire component library, like straight total competitor? That question of like, I guess I'm answering two things. The question of like, are they going to hold both licenses? My gut is usually no, or I actually think it's useful to just act as if it's a winner takes all, you know, like, I think you have to act that way.
That like everybody's going to choose flux. Completely disagree. We continue. Well, it results in psychosis. That's good, I guess. No, that's bad. Okay. I don't know if you were using it as motivation. Oh, it's motivation, which is good.
So, okay, there's that end of it. But the other thing that you were pointing to in that realm is like, nobody cares what Adam uses under headless UI to make the buttons do buttony things. Nobody cares what you do under flux to make the buttons do buttony things. I'm like... That is everything. And Ian, if you saw the meetings that me and Josh have where we stress forever on like, we have to build this one feature. Oh, but it has to be perfectly sound.
in the javascript core with a perfect api that could be used outside of flux this is insanity yeah that's insane this is what's happening inside this team and inside my brain it's like this javascript core has to be a completely separate thing that could be a completely separate project that people could use and it's but nobody knows sees cares that's not how it works and this is revealing the fundamental
business brain difference here that you keep pointing out that's like caleb this is not how you see it is not how people see it right and it's a detriment that you see it that way yeah i yes i agree with all that yes You know, I think this is, again, I think coming from the open source side, right, that being your first big success was on the open source end. Yeah. I think.
does you know i think it's very useful and i think that craftsmanship comes through in the flux components at the surface too so i don't even think it's like all bad but i do think there's a point where it reaches it's bad right we're taking you down it's bringing you down like that's bad and like you don't need that level of perfection in this because when you're building open source thing it's like once i put this api out there man if if i want to change it later
It's a huge production. People are going to be mad. You're breaking this shit. It's a whole thing, right? So, you know, you felt all that pressure in the times you've gone up big live wire versions, right? You're like, well, we're going to change this thing. Right. But this isn't like that because this is commercial. You're the only one using that underlying library.
not that it should be shit right but it doesn't you can change api whatever you want right so yeah i treat it like alpine where it's like no we set out this precedent we'd have to do a whole major change it's like right Because in theory, somebody could be using this outside of flux components in their own way.
I never committed to that. Exactly. That's not even communicated anywhere. Exactly. You don't even talk about this. Is it even mentioned in the docs anywhere other than maybe like that works on web components or something? I don't know. This is, dude, Ian, I am ill. I do not mention anywhere. And when I was building this and it was one of the most exciting building experiences of my life, I didn't talk to anyone about it for months. No one knows about it.
No one knows about Caleb's secret side, like, you know, framework that's going to just like end all, you know, or, or begin all front end. non-javascript world um anyway so yes it's not mentioned anywhere in theory i could rip it all out tomorrow and put something else yeah um as long as i support what people publish in their stubs that's the main thing i'm beholden to then then every
Everything's good. But it is it is silly that I have added this constraint of having to adhere to two public facing APIs now. You know, I have to keep the flux. front API, the props you pass in your flux component, I have to keep those consistent and beautiful and backwards compatible. And I also have to do the exact same to all the JavaScript layer. And that's like...
a whole burden that is kind of unnecessary. Yeah. I mean, you know what I would do. I would totally get rid of that burden. Like I would not be beholden to that at all. That is your internal. Imagine flux was a SAS app. Yeah. Right.
and you have this business logic yep and you had to change the api to the business logic you wouldn't be like oh man like we got to keep this pure because what the customer right no nobody depends on it right you know for sure in a sass app nobody depends on it like it's all internal you have full control to change it whenever you want it might be the same thing here well in some ways it might be like like that sass app that
also exposes an api you know and you have to maintain that but like you can change your internal everything right adhere to it or you can bump the new version whatever so there is some like i do feel in some ways that there is like ui drop down like somebody could use that outside i don't know maybe they don't know they can't they can't because it's undocumented if you use undocumented stuff there that's on you right that is on you and they're operating under that they if i was them
And I went, you know what? I'm just going to take this little bit and use it over here. I would feel like I'm hacking and I would be in that mode that like, oh, well, this could change on me and I could be screwed. A hundred percent. If you go spelunking through the code base and you find an interesting nugget.
That's totally undocumented. That's not even just undocumented, but is it a completely different language, right? It's like, this isn't Blade. This isn't some component that you use internally that's kind of hidden, like... which is what beef I have, like popovers, the undocumented things that should be documented. Like this is low level in JavaScript.
has nothing to do with anything you shouldn't be down there you know you shouldn't be down there yep and you're using it that's fine that's great use it but then you know that's on you like you know what you're using yeah that's literally If there's more than five people doing that, I'd be absolutely shocked. Shocked. I think you're probably right. Here's where it's when I'm using Flux. So I use Flux to build.
the flux doc site and on the theme page, you ever been in the theme page where you like change the colors and stuff? Those. color switchers are obviously not a flux component. There's no flux colon color switcher. There should be, but there should be, but that thing is totally custom. You know, it's just divs, but I wanted it to have all the accessibility juice. So it's like, Oh, this is what I built lo-fi for.
So I use it in that way and it's like awesome. And I think there's a future where the flux user is empowered to do that. And that's a great future, but it, it requires me to do. it's even a risk. Like I don't want to confuse people. I don't want to. Yes. You know what I mean? Like that's kind of why. I think that you have to be very cautious with that kind of thing. Like when you expose the lower level.
I think that you want to be very, very cautious about that. I would much prefer to see that done again through like a blade component. Yeah, right.
right there's some kind of generic blade component that's a lower level blade component that you can access and that's what's documented and don't worry about what happens under the hood like right right um yeah yeah that's that's a good point that that's a whole other tricky thing is like well okay let's transition the conversation into flux roadmap um hold on no no no we we jumped over that we have a whole other question we didn't finish what was the question
With like the competition. Oh, yeah. Great. Yeah. All that stuff. We need to talk about the competition before we get to the roadmap. Please. There's a lot of competition. It gets you very sad and we need to talk. It does. It gets me sad as. is uh well one of the emotions yeah it's in there that's sad sad uh yes um so that does happen and it seems to happen quite often um and all of it is stuff that i'm i either foresaw
Like you remember, we've had conversations about this. We were talking about probably even publicly. It was like, you're building a component library. You're begging for competition. It's the most obvious thing to build. There's nothing innovative about the idea of building a component library. It's something everybody wants and needs. So it's a very obvious thing to build. So I'm going to build this thing.
Then I'm going to be fending off competition for a long time. And when I started building this, I remembered at least telling people that's like, I'm going to build this and capitalize on it right now. Well, there's no other good option for what I want to build. And then.
because it's only a matter of time till the shad cn comes in the live wire or something and it's like there's a better free version then my lunch is is eaten that i have to transition into like some sort of sass like some sort of um i was thinking like a web socket like live wire infrastructure project or something you know uh so that that was kind of like so i've always i knew that this was coming i knew that this would happen it's always been happening but it
but it does derail me every time and i go you know with adam's thing i'm like oh it's all over with aaron's thing it's like oh it's all over anytime anybody comes out with anything that's like that has like a overlap in in like value and api and spirit and market I go, ah, it's all over. That's the way I think. Yeah, but it's not all over. Has it been all over yet, right? No. It's such an obvious idea that there was all these live wire component libraries before.
No, I was begging for people to make Livewire component libraries. Like, yeah, there's a couple open source ones of various quality levels. None of them are anywhere near complete. None of them are anywhere near what Flux UI already is.
the implementation is like the hardest thing in the world right so it's not so easy right and like flux has been out almost a year i think right ish yeah didn't come out yeah well so no not oh no not a year yeah september was like real real release there was some pre-release in august but yeah okay so Are there a bunch of paid competitors yet or new open source competitors even? No. And even if there were, even if there were. Caleb, I want you to close your eyes.
I want you to, all right, I want you to think about customer service software, okay? Okay. I want you to think about how many, you could probably just name off the top of your head. You got your Zendesk, your Freshdesk, your Help Scout. You got all these options, right? Like this is just the big dogs that you've heard of. I love where you're going with this. There's literally, literally thousands.
of competitors thousands i'm not i'm not overestimate i'm probably underestimating there are thousands of competitors yep this is this is how it works when there's a good idea yeah and people need a solution to a problem companies will step in to try to solve that problem and yes
So that is just part of what you're taking on here. And I think your stuff's a little different. You know some of the people involved personally sometimes, which does add a layer versus just like the generic board competition. Yeah. But you also have tremendous advantages. It's like if I had helped that software and I controlled the email protocol, that would be a freaking huge ass advantage to me, right? Yeah, yeah. Which I don't, unfortunately.
And nobody does, which is what makes it all possible. And that's great fun. But your thing, right? This is a whole element we need to discuss, which is your underutilization of live wire and flux, in my opinion, right? And so like you have this huge advantage.
You have this huge platform. You have all these advantages. If I started today, I was like, I'm going to build a component library. I see Caleb over there. He's making all that sweet, sweet money. I'm going to do a live wire component library, right? Yeah.
it's going to be hard for me to compete with you, which in and of itself dissuades people from competing with you, right? Because like, well, I can build it, but Caleb didn't open source his underlying thing, which was very good of Caleb. So I still have to do all that hard work.
And then I have to build a platform that people know about my product. I have to get distribution. People have to find it. This thing is linked in the live wire docs. So how am I going to compete with that? What's going to be my differentiator to make somebody.
who you know dislike flux enough to keep looking for other things like there's a lot there so very hard to break into especially the more you think about your niche and the less you think about components think about components is is not even really your market like it's you know i mean like it's the it's the it's the big market of components but you don't really sell in there that much you sell in the live wire niche
of that bigger market and so you're the huge dog in that niche yeah and that's the main thing i think you have to kind of remember Yes, that's true. And so the underutilization of live wire and flux components is a great topic. And yeah, there are some it's like there's a million help desk, you know, software out there. And it's great, like.
exercise to put myself in ian landsman's shoes yeah how many how how often you know there's there's competition it's just everything it's everywhere i've never i've never looked at new competitors ever
Is there ever an innovation that you believe that you made and somebody else took in your software? I think in my world, I don't think I've done it quite – I mean I'm sure like – the code like in the way you're saying of like did i do some code that did something interestingly i guess maybe but like yeah i don't really think about it that way um there are innovations in terms of like how the you
aspects of the ui i would say yeah at the time if you go way back to the beginning there are probably some unique things but also everybody does all those things now so nothing is unique now for sure um And you only get those unique things kind of at these inflection points, like...
you know maybe with the ai stuff now we're getting a new one in the help desk world of like where things are going to be different in the future you've talked about you're building your own little support solution right for flux with ai that handles some of that stuff and like So we'll see about where all that goes. But yeah, I never thought about it that way. I mean, I came at it from a very different perspective in that regard. Like I'm here to make a good solution to sell for money.
the opposite caleb for a long time like i don't even care the code whatever who cares like if it does the thing it needs to do right that the customer's happy That's what I care about. I don't care. That's how you get in business, stay in business. Yeah, when you're not a genius coder, right? I'm around all you guys who are genius coders. I'm not a genius coder.
I'm just trying to survive. And now the tools are so nice. You built up new. Laravel gives you so much. Livewire gives you so much. You're getting so much of your guys' knowledge. skills for free which is unbelievable um yeah so yeah that kind of guides even in terms of your decisions like well how should i structure this well i'll just do the the laravel way of structuring that right
People go off and make it harder for themselves. Well, we're going to do modules or whatever. But you could just go with the generic. This is how Laravel recommends you do it. And you're going to be totally fine, right? So, yeah. That's how I would put you.
so i mean i think right i think uh i think it's different so the emotional side of it i think it's more triggered so there's the the personal just like this is my baby thing like you don't necessarily have that well you do but i do have that baby part right you definitely have the baby part um maybe it's like yeah it's because innovations spread like um you know like ideas just spread so when you're in the
I feel like in a lot of ways I'm in the business of coming up with ideas and APIs and different ways of approaching a problem. This is interesting, though. This is maybe something you should think about. Yeah. I wonder if you've ever thought about this. Great. So people in the real world, the rest of the world in business, when they say the exact thing you said, they have a solution for the problem you say you have. Does it start with a P?
Yes. So they go to the patent office and they say, Hey, I invented this. This is mine. This is how it works. Right. You know, seven years later, whenever somebody comes back and says, yes, you're approved for your patent. And then you can tell people to not do it your way. Yeah. Which is very interesting. Bootstrappery, small software companies never patent anything, but big companies do all the time. Did OpenAI patent...
Think about all the kind of UI bits and like OpenAI that Anthropic might have taken or vice versa that like now Anthropic has like, you know, oh, we'll make it more code friendly in an XYZ way.
did they patent any of that are there patents for any of this stuff i'm not an expert on this stuff but i would say i don't i think the ui parts are harder to patent yeah um i think it's different than if you go down into like the deeper logic uh where you can like it's more like mathematical and things like that so i don't know for sure if like even could you patent the api of a you know
web components to do this thing maybe you could maybe you couldn't i don't know yeah cost you a hundred thousand dollars to find out of course with lawyers whatever but like i doubt the ui stuff is but i'm sure open ai has a bunch of patents on other things and uh transformers which is what it's all based on is a google patented thing i don't know how they all work that out i maybe they're just paying google or google made it free what are transformers like like machine learning type
Yeah, it's like the machine learning underneath the LLMs. So how does OpenAI use that? When they build their models. Oh, how do they use it legally? Yeah. Yeah, I don't know. I kind of think Google actually made it all free. Okay.
i believe because they were like publishing these papers and like yeah made it free and then people built on top of it they wanted people to build you know it's like back before people were like oh this is going to be a quadrillion dollar industry let's like all be nice and play together like researchers and stuff yeah um
i think it's free but it could be they're just paying them but i think it was open source because i think that's how they got like the interest of like other people then building on top of it and all that stuff but uh yeah yeah yeah yeah um yeah i mean the patent thing is like i mean that sounds like a dreamland although then you have again this is the the caleb um i gotta come up with a good name for this but the like uh
hey, you stole my thing dichotomy of like, I have the eagle eye for an innovation that I came up with that somebody else uses, but I have a massive eye patch on the other eye. I'm looking at, you know, just inheriting good ideas like you do. And so at least there's no precedent for a patent here in open source and web and whatever. It's just like.
You know, I wouldn't even know how to go about. So the idea sounds. The flux part is not open source, though, you know. Right. And I mean, so the benefit, it's not. But all the ideas are open for the taking, you know. Anybody can take them at any time. And they will. And they do.
Like as soon as I come up with a good, um, yeah, like whatever, anything that I come up with that is good. Similarly, anybody else who does, it's like, now that's the best way to structure dropdowns, you know, or whatever, to structure that part of the API. And then. we'll just do that because it makes a lot of sense so so for me the edge is like being first to the you're in with if you're the one innovating you're first for it
And I remember when I put Flux out, it was a big debate. Do I open source this JavaScript side of it? Part of it was forehead so that Adam could use it in Tailwind UI because that would be good for that project. But I just foresaw this world of like everybody building competitors on it. So I thought, okay, well, let me at least give myself the first mover advantage with this innovation. And then I can figure out if I'm going to open source it.
Which I don't think I'm going to because there's still no benefit. But I guess what I'm saying is you get that first mover advantage when you innovate. But that's about it. Now the idea is out there. And the only thing you have now is the moat of how hard it is to implement that thing.
yeah and just hoping that nobody else wants to try to attempt the same level of difficulty you know yeah but i think also like so that's what a patent would be for right uh it's like no you can't use the idea is out there but you can't use it yeah yeah economically right but i think the bigger issue is like what is the economic value of the lo-fi api
And I think it's minuscule, probably zero. Like, right. Like, because if you had a patent, it doesn't even like, you have to keep bringing me back to that because yeah. If left to my own devices, I just, that's a given. Like this is the thing that matters the most, you know, this is the thing that matters that would spread like wildfire in rails and Django. And I would build flux for rails and flux for Django and whatever. And maybe you will.
all of these unaddressed markets. And that's your version of it. You're going to take this library and do other cool things with it at some point, and that's great. But that's not... At the end of the day... Can I create a dropdown another way other than this way? And the answer is absolutely yes, right? People have been doing it. Does this way really provide a big benefit? that the end user can see. It does actually, in this world, because in the JavaScript world...
You know, you pick whatever. If I did this in JavaScript, it wouldn't matter because everywhere gets you a drop-down menu with submenus and safe areas. Well, it is JavaScript. So you mean React or... Yeah, I guess you're right. I mean, I guess, I mean, in... in a backend server rendered paradigm, maybe a non.
a non-browser rendering paradigm i guess if you need to get like really specific um that's what this is for is a js sprinkles thing so if you're using stimulus if you're using htmx if you're using live or whatever any of these things nothing is out there that gives you what lo-fi gives you like nothing show it to me because lo-fi gives you what radix gives you what react aria gives you what headless ui gives you
which is like accessible focus trapping roving tab index aria rolls sub menu safe areas all of these things that are really hard to build super painstaking like when you open a modal And the scroll bar disappears because you lock scroll, but you don't want to shift everything over that.
20 pixels so you've to calculate before and after that padding and you add it yourself so all of these things but that's not that's stuff that those things are doable other ways it's not like lo-fi has a unique technology that cannot be done in a different right so angle so this is like i think there's maybe this is touching on something you're right of course i mean anybody can build this
it's just difficult. You could port over any of these things, but to the user, a modal is a modal, a dropdown is a modal. Like when you build these things, you see it as like, Oh, I mean, Yeah. Like Daisy UI. Let me pick on Daisy UI for a second. I don't know them. I don't know him. Hopefully he doesn't listen to this. I'm not trying to. Whatever. You go to Daisy UI and you look at their dropdown or something and you go, okay.
It's a drop down. I've been here. I wrote a whole framework for building drop downs, you know, that just open. It's like, no, the drop down you get with lo-fi is 200 times more capable, complicated.
and robust and checks all these boxes, these invisible boxes. So there is that difference where when you're a user, most people don't give a shit about that. They don't even see it. I was talking more even on the patentable end of like... okay literal apis you can use different apis to still do all that hard work to make it accessible to do all those things like you could do it a different way right so on that level that's what i'm saying it's like yeah that aspect of it now
You have done all the hard work. I don't think that has zero economic value in and of itself. like you could license this to somebody to use an htmlx or whatever or you could build your own library over there or whatever right like so it definitely has a lot of value to you because you built it it does what you needed to do you know it does it well you control it um you can extend it and expand it all those things so that's all great um but when it comes to selling flux
Yep. I don't, it's like, it's the, you know, this is always true. There's the foundational element that without it, you could not build the thing you actually sell. So of course it's incredibly important on that level, but also it's totally irrelevant. because nobody actually pays for that nobody actually thinks about it when they buy it's it has nothing to do with their purchasing decision at all right so like yeah it cuts both ways in that regard but um yeah i just think people are
not thinking about that when they buy flux. I don't think they are. So this is clear business brain versus psychosis builder having a baby brain. and i when i i had known like you know adam this is a pro this is a problem to solve in adam's business is like the non-react view world
That wants, you know, his templates or whatever, but wants a menu to work. It's like he needs to solve years. Yeah. You got to solve this problem. I don't want to use react. Yeah. You got to solve this problem. Caleb had nothing for me.
So I was like, nobody had anything for me. Yeah, right. Yeah. I was out in the desert for years. Yes. So Adam needs to solve this problem for his business, right? So I've known that this prospect, and we've talked about like, he wanted me to open source my lo-fi thing so he could use it. I thought I was going.
And then I realized it doesn't make sense for me, blah, blah, blah, because he, okay. So then I remember thinking, okay, well, if I don't build it and open source it and let him use it, he's going to build his own thing and open source it. And then my initial reaction to that.
is like oh no like adam's gonna build his own thing right and then i thought like well wait a minute if he makes them if he does the thing of open sourcing it where everybody else can use it and you can use i can use his thing and then i don't have to like maintain any of it he can maintain it all and i can just benefit from it on a higher level of abstraction and make money on it you could just be the guy you were trying to avoid yes
This is the road to business enlightenment is where you just like any problem like that, that flusters you and you're like, it's like, wait for a second. Can you just use that like flaw in the opposite direction? Can you use that?
that asymmetry in the other way to just be like, Oh, well then I can, if, if you're, Oh, I'm so mad. Somebody's ripping me off. It's like, okay well you can do the same thing like you know it's this is the open source world right or open source whatever yeah it's like open source also build on somebody else's innovation
you know if you're mad about everybody else building on your innovation so yeah anyway um all of this to say that uh to sum this part up is like the live or the lo-fi thing is like an implementation detail as it stands right now it doesn't matter Okay. Yes. Doesn't matter. So don't waste a bunch of energy and effort on being scared of competitors to it or being, you know, like beholden to it, to maintaining its API or whatever. All of these things. That's an important like thing to nail down.
The emotional side, like clearly, like I have some of the prescriptions to my emotional psychosis, but it doesn't help that much. It's like probably I still feel those visceral reactions. Of course. But I'm working through it. So. so the thing that i think i really want to talk about is this live wire as um not as flux under utilizing live wire yeah because it does massively so right now
And I remember I was actually messaging Taylor about this when he was, when they were working on the flux starter kit, it was like, do you want me to, I can drop the live wire dependency in the composer.json of flux because.
it doesn't actually use live i know it's crazy isn't that crazy it's crazy like it doesn't actually really use liveware there's one place we did with the editor uh one place that we do with editor that uses liveware but literally not even for liveware just to load the editor javascript on demand like that's a live wire thing but i think it even works outside anyway so it's crazy to even remember that and go and and he's like his response was like no like blade
like nobody uses blade like it's right like live where it's just a better blade like just keep it like you know so okay so let me first just get out of my system why it under uses live under utilizes live wire was just to focus on the bedrock so that this thing, and part of doing that, I think I'll say a mistake that other people made building these component libraries for LiveWire is over-utilizing LiveWire.
It's like, no, like a dropdown shouldn't make a network request. All these things, like the more you can do, like that's actually the benefit is like all the parts of building a live wire app. There's a lot of things that shouldn't be in live wire.
You know, a lot of front-end interaction-y things. So Flux is like, the Flux philosophy is we're going to do all that really hard JavaScript-y, whiz-bang-y, widget-y stuff. Then you can just focus on gluing it together with your eloquent models with LiveWare. So that was sort of...
And I think that was an important thing so that it feels lightweight and fast and cutting edge and JavaScript like ready. So that's what people want. And I think that's all good. So that's why it's that way. I think that's good. Yeah. But the experience of using Flux, let's say you're using. There should be a Flux image uploader that's tied perfectly well to your backend. File upload, all that stuff. It's a total across the stack, beauteous experience. Yep.
that right so that's something that doesn't exist in flux yep but i feel when i look at the things people want it's all stuff like that yeah and when i encounter it i go oh, I can't do any of these things without making a new version of LiveWire that has all of these APIs that I want to use to make this the most bulletproof, fast, efficient thing in the world. That's where I am right now. I think that's great.
I think that's awesome. I'm glad you're there because that's where I feel like it needs to go is like, that's a great use of your open source time. Like I'm going to make live wire better in a way to help flux be better. So now we have a beautiful synergy, right? And I'm sure there's going to be just.
as you make live wire better people who aren't even using flux live wire is going to get better in these other ways and that's going to be great for people who are just using live wire for their own weird stuff fine but uh yeah i mean it's like i would i just discovered the other day that on certain elements yeah If you copy the code, there's Livewire version of the code in the comment. Yes.
in the table i think or whatever it's like well this is yeah there's the code you're sorting and then there's like yeah then there's like this hidden comment that you don't you would never know it's there unless you use the copy paste button and then you paste it in um
So I didn't think little things like that. Like, I think there should be like, here's the dock, like a tab. Like you see another type of like, here's the plain vanilla. Here's the, if you were, if you were using this with a live wire component, here's like what this would look like.
like even just the like wire clicks and the whatever like all that stuff is there for you and like it's ready and just to even make it clear that you use this with live wire in this way sort of um like the docs don't even hardly mention live wire mentions live wire it's like there's no other mention of live wire there's like a big advantage it's unmentioned you know what i'm saying so like
but meanwhile it's also like effectively like a requirement even though it's like it literally is like in the it literally is a requirement yeah but like yeah and just in general leaning on it more like yeah i mean i think i think you were right i don't think i think you've done everything right really and that like you had all this low-level stuff you had all the base stuff it's all javascript stuff
right do all that yeah date picker chart like that has nothing to do with all that stuff that's just hard job and i totally agree with you that like we have used other libraries that are too dependent on the live wire yeah you know one of the hardest things about live wire i feel like is this like
You really kind of have to keep the mental model of like what's in front, what's in back, what should I use live wire for? What shouldn't I use live wire for? What's a blade component? What's a live wire component? So there is a little bit of some of that stuff there that's tricky. And that's part of the flux. Flux is the chosen one because in a perfect world, it becomes so capable and so flexible that it's like...
Well, you just use live wire and flux. You're never thinking about, Oh, do I build this? And you're just going like, Oh, I need this like dependent select or whatever. It's like, I just go to flux, find the place in the docs that shows me about that thing. It has a component for it. If it needs a live wire prescription portion, it has documentation for that. And that's it.
That's the story. Give me a dependent select, dude. That's on my list. I want a dependent select. Yes. Give it to me, Caleb. Make sure we do not hang up without getting that list. Going through the list. I got a list. I got a long list. I'm starting my list. And the first on it is that this doesn't, I mean, this is a class.
classic like mistake that I probably a lot of people make, but I always make is like taking it mentally to the farthest extreme instead of just taking one effective step and one effective step that would require no update to liveware at all.
is documentation that is more like that tabbed docs where like in table there's some way that expresses here's the role on your own like vanilla table pieces that you can put together and then here's like a beautiful copyable like liveware component that gives you all these things the way that like taylor would do with commented you know when i go and build like a an event listener something i don't do that often in laravel or like a mailable or whatever
If I don't use the stub generators or something, whatever, I'll copy it from the docs. Yeah, I always copy it from the docs. And then paste it in. That's what you do. That's what you do. And the story for that right now sucks with Flux because you scroll down. You don't even know it's there. You see the commented code.
have to copy it and paste it's stupid it's like yeah give just expose that stuff and that's something that i could do without adding liveware features at all just liveware examples basically
Library examples everywhere would be awesome. Anywhere it makes sense, I think that makes – because I have this theory, which I've expressed to you while expressed for the people. Okay. Is that you're not going to out – react react right you're not live wire is not gonna be bigger than react right live wire is not gonna be as big as view right because it's it can't be because it's you're constrained by laravel first of all and then within that
you know there's people with different business priorities whatever the live wire can only ever be so big right so it's like yeah how do you get new live wire people so some of it is like people looking for alternatives they want to stay more server side and that's the traditional path right it's like ah this react stuff sucks let me find i just want to stay in php i don't want to think about all that crap yeah
But I think that Flux has the opportunity to grow Livewire. It's like people looking for components, people being introduced to Laravel now as they do all this marketing stuff.
who are gonna be like oh laravel components which is a weird phrase you might not think of but i can imagine a lot of people searching it and it's like oh like we found this thing flux so now you have to like you want to bring them into livewire right like this is like let's bring them in like you're going to get more livewire users because they started at flux yeah so you have to have that transition of like this is a thing that uses this other thing that's super powerful and awesome
and start to make that connection you know yep yes um i think you're totally right i think like flux has the ability to be like um like, like Salesforce or something, you know, I don't want it to be, but like some way that like people use Salesforce and they don't, it's because they're solving business problems. You know, like if it's more similar, if there's React and Salesforce.
flux should be more similar to salesforce in that sense i think it's like yes you're building uh uh tell me your hesitation no i'm just trying to make that analogy work in my head but i think it does yeah well i mean in this so my I say this because my brother-in-laws are Salesforce developers. So they work at big companies that have moved away from technologies like React to Salesforce. I think a lot of people don't picture that.
world they think of salesforce as just like um a crm you know just the app right it has a whole language it has yes it has a programming language it has a database language yes all deployments everything so these people my brother-in-laws they use vs code And they write code. And they deploy apps. And it's all on Salesforce. And they have things like Lightning Web Components is Salesforce's Flux. And they have every component you'd ever need. And it's all prescriptive. And it's all there.
So when a client says that they need a button that does this, it's called a quick action. They create a quick action and it's a file that's got a template and a file that's got the backend portion. And they just know magically to co-mingle kind of like live wire anyway. But Salesforce is so much more prescriptive, you know, and it. and it sort of just like allows these teams to, to stay, to not get bogged down in what fricking react library they use for animations, you know, dude, like, so.
This is like if any of the real platforms, big are real, right? Salesforce certainly is that. iOS, Android, right? Yeah, like SwiftUI. every component right like yeah people still build their own components to be different whatever Maybe they have a super edge case thing they want to do, which they build their own component. But like for 99% of the app, it's like, boom, I'm taking it out of the iOS component library. It all works. It's tested. It's by Apple. It's great.
that's where like flux should be that for laravel it's like this is the laravel component library like you might have business reasons to use react that's fine but the default case is like I use Flux with Livewire in Laravel. This is the happy path, right? And I just think there's going to be so many people. So, for example, a couple of years ago, I was like, well, let me learn React. Livewire 3 wasn't out yet.
Flux didn't exist. You paid me a bunch of money. You paid me a bunch of money. And then I didn't deliver fast enough. It took like a year. But I got his money. it all it all worked out it all worked out yet because i ended up getting sick we ended up not doing other stuff we were gonna do it's all it's all worked out fine now we're using flux and help spots great we're gonna use flux for other stuff fantastic so yeah but
I was like, well, let me just see what React is all about. You got all the component libraries, right? And that was my angle. My angle was I want component libraries so I don't have to build all this shit. Right.
that was how i came into it right and then from there it's like okay well then that means i have to learn react okay that means you have to learn inertia right so you go down that whole tree starting at the components the components is the top of the journey right right and then i'm just this is what i have to learn in order to use the components like that is the thought process not i know react
and then let me figure out what components there are for react yeah the total opposite right i want components what do i have to learn to use these components so i think that is where there's like a bunch of opportunity which you haven't done any of this kind of marketing yet i don't think but like getting out there on people having people review flux on there to their developer audience right like right all that kind of stuff being on
primogen and building a flux thing in front of a million developers this is a flaw a personal flaw that maybe is like the builder flaw or something i don't know but it's at least me when i I never want to go up against him, but anybody else will for a few reasons. But even just aggressive marketing like that, it's like, oh, it's not good enough yet. It's always been that way. It will always be that way. I feel that way.
For sure, too, at times. Like, oh, it's not good enough yet. I can't go and be like, throw it at me. Let's build it. Who does that in React? The guy, Ryan Florence, who's just, I mean, it's not his tool, per se, React. Right. But, you know, remix route route or whatever, you know, he's very much like, let's step in the ring in the Coliseum and go toe to toe and may the best man win. Having that attitude, I think, is a dangerous. in a good way and a bad way. And I'm always scared to do that.
but uh but i envision a future where it's like when i answer if only when i have an answer for these things for like interruptible stream you know eventually it's like then then Then I can go in the Coliseum and take Livewire and battle it out. But anyway, that's why I haven't done it. I think you could do that before. It's feature complete, per se, because it never will be, right? And I think that's the kind of thing you can build with somebody in an hour or two.
hours on their stream is probably not going to require like the most advanced set of components right it's like okay let's like Slopped together a few of these basic things. Look how quick we made an app that looks like really cool and real and nice. And we just did it on stream in an hour. Right. Because the Laravel stream was partially that. Right. Yeah.
But that, I mean, I've been working off notes from that ever since. And you have that demo of that app or whatever. Right, right. More of those demos would be great too. Yes. But on that note, this kind of ties in with the LiveWare thing.
a lot of the things that they hit were either like blade or live wire points of confusion, you know, or even a bug. And then it's like, like, ah, you know, this, it's kind of like you, you do the component thing, but you also have to make sure that the other side is really good, you know?
because yeah this is where though i think like having taylor go do that not not that you obviously he just did that on his own right nothing to do with you but like um you know he doesn't know flux right as well as you know it and also it's like you doing that you being on prime would actually be a totally different true yes right because you know it
intimately and perfectly and you're gonna be like boom like it's gonna go way smoother because you know oh this is actually a thing i can't even do let's skip that let's do it this other way you know what i mean like they're gonna go down a path of like oh shit like after 20 minutes we realize this doesn't
work and double back and whatever all that stuff yeah yeah yeah yep so you being out there i mean i think for you like you could start with friendly faces you know i don't think it has to be like primogen like you know you start with like
I don't know. I'm not really up on who's doing all the YouTube stuff, but whatever, Aaron Francis, anybody, right? There's people you know in the community who aren't going to be looking to bust you up, but you can... start to build get that skill set of doing that and just being out there more with it yeah get people component first people are looking for components yep you know yep component first um
So one little nugget came out, you know, this conversation is going to like, like when, when I have a conversation like this with anyone, but especially you, it's going to like shake out all the big things that I'm. that the big truths that i often ignore or forget about but need to like you know graffiti on my apple on my monitor like and one of those is a having like this is essential
Business fundamental, having a continuous, what I wrote, continuous feedback loop of improvement of like things. I need a stream of people telling me these little paper cut things. I need some way to know that people are confused by the live wire comment block at the bottom of a flux thing so that that gets added to a, here's a little thing we could do in a day. Yeah. And that.
That single improvement in a day when you do a thousand of those, you know, it adds up to a truly great product that dominates. Yeah. And I mostly work in like big. pushes and hauls and a lot of isolation a lot of my own vision of what i think is the best
And there is some feedback with like Josh. He's on GitHub every day. But anyway, just making that like there's so many things in the live wire docs, even whatever. It's not even directly related to what you said, but I think this is a crucial keystone thing. So the business community has a solution for you. You don't have to invent this. Okay.
so again open source is like well the people are on uh on uh on github issues complaining about things or whatever like with the commercial even in components i think you don't get as much of that as like pure like when you release something for live wire imagine you get more feedback negative positive changes than like a new flux component necessarily generates potentially i don't know if that's true or not maybe but
I would survey the customers is my point to you. I would survey the customers. You know the customers. You got their emails. Once a quarter, you throw a survey at them and you keep it simple. and it's like hey what sucked what was great yeah uh get some quotes for the website right from people who loved it yeah and then boom you're gonna have more shit than you can do right just you're gonna get tons of feedback and you won't want to do it all and that's fine like
I like the DHH approach, honestly, just like let it wash over you. Right. Don't necessarily like try to put it all in like a, you know, to-do list and try to actually do all. because they're going to ask for it in different ways you need to still assimilate it all and figure out what people actually want right but like um but yeah it's good to read it and get the feedback and see what what yes it's right and there's like
a lot of this stuff comes through on GitHub. Josh is mostly the one who sees it, but there needs to be another component. I've thought about this and I've never done it. I could probably explain a few reasons why, but they would be bogus.
is sending a, like a survey email or something. I have a lot of emails. I would love, you know, I'm dying to know what people think of things and know the little paper cuts that they experience. And I have a way to mostly, I think it's not the full story because.
People, if you just ask them what the, you know, there's things that only you're going to see them experiencing. They won't even know. And that's where there's like another level. So there's like the broad GitHub income, the inbound stuff. Right. You know, that's just. coming inbound then the outbound stuff where you go out and you get it like a survey yeah then the like in the field guy with you know headphones and microphone like
going around and that's a primogen stream and watching that and seeing what people do. That's talking to you right now. That's a user test. It's user testing, basically. Yeah, you could do user testing. You could do actual user testing. I could do actual. You've got a little money now. You've got some budget. You could do actual user testing. I think we need to do some user testing.
That would be fun. We need to do surveys and user testing. Yeah. Those are two things. Yes. And then integrate that feedback. Yeah. And then also, even the feedback that Josh sees, I think... Like what we do in HelpSpot is every two weeks we have like this HelpSpot meeting and like we'll go through and not every two weeks we do this, but usually at least once a month. Like we go through all the feature requests and things people send in.
yeah and like we just read them and sometimes we say they're for later and sometimes we say they're sooner and sometimes we say we're not doing it but this way is you since you're not in it every day like i'm not in it i'm not on the front line of like getting the feature requests so like yeah this gives there's a mechanism built in right yeah for you to see that so i can see it every month at least and see what's going on and maybe we're gonna do something with that maybe we're not
But, you know, it just gives you that opportunity because otherwise you're going to be hidden from, it's not going to be washing over you even because you're not going to actually ever see it to begin with. And so then you're not actually getting that feedback. That is something that happens where Josh.
I will find out that Josh knew about something. And then I'll go, wait, what? Like, you know, you didn't tell me about that. But there's a million things like that that, you know, it's like he can't. What's he going to do? And maybe he did. But there needs to be some sort of mechanism where Josh is out.
on github seeing every little thing anybody is struggling with yeah he can't take every one of those things and create a big master plan and surface it to me and make that our big mission no but he can you know aggregate sort of the average of those things so that they at least right there needs to be a way for them to pass through one ear and out the other yes somehow
Yeah. Anything that he sees that's like real-ish for lack of a better term, right? Like goes on a list somewhere and you guys just go through it. You go through it fast. Like it takes an hour or two. You know, but you go through it once a month or whatever. It could even be less than that. One, two, two months, whatever. And it might be a hundred things and it's going to be annoying, but then you're going to go through it and then you'll have experienced all that. It should be a toilet bowl.
That he just fills up and then we flush it together and watch each one go down. That's what we do. Instead of like, you know, because you know, whatever, the DHH thing, like you're saying, the wash over you. If it's a cue of to-dos, if these things become a cue of to-dos, they're doomed.
It's totally doomed. It's going to build up. It's things will never, whatever. If it's something that we just flush and I just watch everything go down the toilet, then it touches me. Pull a few out before they flush, right? It's like, oh man, that's a good one.
You can do whatever you want with them. Right, exactly. And then for most of them, you're not going to do anything right now with them, and that's fine. You clear it out, and then it builds up. It's software. It just builds up again, always builds up, right? And then you flush it again, and yeah, I think that would be perfect.
Okay. So this is our side. Totally. Like, this is the business problem that just had to quick, take a minute and solve. It's like, we need a better, uh, we need a better feedback. Loop. Yeah. That's what it's called. Feedback loop. So feedback loop is, this is a literal feedback loop. I always use feedback loop as a metaphor.
you know right like if you're yeah um if i'm as a metaphor for iteration based on the effect of something you do like a feedback loop like on a microphone i see what you're saying right like right you know like more for yourself like i keep doing this thing and the world is telling me that that's not a thing but it's more like it's not direct in that way or even like working on a system it's like you need a feedback loop of performance or of errors it's like
I say this word a lot, but this is literally feedback. This is literally a system. This is a system for building software. You are in it, in the middle of it. Feedback is already the metaphor because feedback is just... you know, it's not even a word, right? Like, like when we say feedback, we think about like customer feed, but that's actually like feedback is more accurately the microphone making the ringing in your ear.
So anyway, okay. Customer making the ringing in your ear, you know. Yeah, yeah, yeah. Anyway, customer feedback loop. We need one. The plan is... you have the big bucket of like stuff josh sees on github that stuff right and that piles into a toilet that we flush whatever right we do a quarterly or something survey that we get like we do inbound kind of like or outbound whatever we go
to other people and give them a chance to tell us stuff. And then the final like thing is user testing where we're looking for problems. And all of this, we make sure all of it washes over us on that cadence. Probably the big stuff is more frequent. The medium stuff's less frequent. And then the really attention to detail stuff is more. Right. Right. Yeah. And then we just let all of that wash over us.
As long as we have a good process of like, I think this is where an employee is really important because it's easy for me to identify this is a problem with the business. It needs to be solved. Go solve it and not have that part in the middle where I go. oh, that's going to be grueling or not fun or I want to work on this thing. It's like that's where you can just.
make the good business decision by assigning a task yeah and i think some of the stuff like you're testing that you have some fascinating opportunities that other businesses wish they had which is like so obviously there's like legit user testing in a facility even you know with professionals right whatever forget all that like you could be approaching coders who have youtube right and like not only asking them to do it but paying them to do it
Like it's marketing and it's user testing. Like I'm going to pay you to spend an episode building something with flux. That's it. Like maybe it comes out like shit. Maybe it comes out awesome. I don't care. There's no.
i'm not putting any prerequisites on you yeah but like just i'm paying you to expose your audience to this and also i find it really useful to see somebody new build with it and get the feedback like so now you're doing double duty you're seeing a new user sees and the problems they hit
And you're also exposing it to a new market, you know? And you think Theo would be the best person to start with? I don't know if I'd start with Theo. I'd probably start a little less hot than that. But the spirit of like, I love that. And going to people and being like, let me pay you. Yeah. And we're going to pair whatever and you're going to use this thing. And the goal of it is to unearth.
There's two goals. One of it is visibility, but the other one is to truly unearth unergonomic things, any little paper cuts. Let's unearth like fundamental problems. Let's make this your opportunity to encounter something for this first time. And let's see if we can make it.
better because of that whatever that's the goal no matter what happens it goes live yes and that's it like totally and it's like i think especially i think if you started with like not big time people right both for yourself so you can get used to it right but also even they're gonna be really excited about it like hey this guy with a bunch of followers and product wants to be on my stream and i have yeah i have 4 000 followers or whatever you know you can start with small you don't start with
theo and prime right like part of it is all the pressure of that like it's like no it's like nice little thing a few thousand people are going to see it cool and you know go from there this is where so like doing something with prime like they like that laravel did
Something that I would want to avoid, at least initially, now that we're brainstorming something that doesn't even really, but it's just interesting to talk about, is you got to know PHP, you got to know Laravel. That's where so much time on that stream was wasted.
and like... prime decided he's like i can't use an orm he's literally writing my sequel by hand it's like oh my gosh and now like kudos to taylor for even remembering how to use some of his own like query builder stuff i guarantee you he hasn't used them forever yeah but he he did pretty good with that um but yeah that that stuff is like oh what a waste of you know like marketing potential is just query building half the stream like so stupid
and so anyway um yeah having making sure that like the environment it's like a josh series like perfect you know somebody yes you know or even you know who's more perfect or somebody like that those guys okay those are perfect we start with those guys Then the people who are really, really perfect is the inertia heads. Yes. Especially ones who haven't encountered live wire or in a long time. The guy who posted that thing.
about inertia or you know the guy like that dude get him on and like you saw the last he saw live was liveware v1 you know and he didn't even build it like let's get him on a stream and like touch this and let's see what you think okay anyway Yeah. And once you get good at it, I think even JavaScript guys, like you could go over there to the people who don't know PHP, I think. You just have to spend more time like getting them to understand a variable in PHP. Right. And I think also.
the dynamics of like i think it's a it's like about picking the right people like prime doesn't want to be like prime is the showman and he's running the show do you know what i'm saying yeah and i think you can pick a different kind of person where like you could run the show a little bit in order to like smooth over some of the rough like prime wants the rough edges right he wants to be like ah like and then he's gonna code up his own thing and see to fix it like you know i mean like
Somebody was not quite that guy. Yeah, the ridiculousness, the fun, the, you know.
the and and neovim like side quest that they went on forever so it's like and i'm just picturing i'm picturing lairville cloud money just like crying like just like why are you doing why are we doing why are you doing stuff but if i were them i would want to be doing whatever the hell i want to do for fun you know right exactly that's the condition you can pay us but we're just gonna do our thing yeah the dynamic there is i think you could maybe make different type of selections where you have
more say in the dynamic versus that's like obviously you're going on prime he's running the whole thing and also there's personality differences like taylor's like more just passive in general right where like i'm i'm much more like shut the freaking thing like let's shut it shut it down you know yeah
Okay. All right. So we got that. Okay. We got a side quest complete. So maybe should we just start with the list, with your list? We'll start with that. I got a big list. We can do that. Let's do it. These aren't in a particular order, but I would say this top one sort of is I feel like tags, like everything tags. Like badges? See, that's not tags to me. Tags are like, I want to be able to add tags to things. I want to be able to remove tags from things. Oh, taxonomy.
Yeah, I can type to autocomplete the tags. I can have the tags appear below. I can have the tags appear in the input. Okay, you want a pillbox. pillbox whatever you want to call it i call tags okay so tag select we'll say with variations though right there's like yeah tag select there's like this is tough tags underneath you know i'm saying like sometimes you don't want it in the in the oh you have too many
you're going to have 50 tags i want it to be underneath with a with a removal icon and like you know all that stuff the stuff this is right this is where we are with flux and i imagine all your suggestions are going to be this way work to the hard stuff right this is the stuff that's like it's not even hard to build like it is but i've already built all the foundations for it it's the decision it's how to componentize something like a tag select yeah it's like okay
Are they pills? Are they badges? Are they tags? Are they bespoke? Can you add bespoke tags? Or is it just from a predefined list? Do they wrap around inside the input and the input? like text boxes at the end one and if you hit backspace you remove the previous ones or is the input in the drop down and freed from the tag thing do they have x's on the individual tags
Because if they do, you can't have a button inside a button. So now that trigger can't be a button. I've heard you talk about it. Right. And do you, okay, we can escape all this by putting them above or below. But if there's too many, do you have some overflow system?
like plus 10 and is that overflow system based on the width of the container or a specific number and how do you and how do you componentize all that to express and you know uh whatever countries and the plural of countries is different than countries so showing one different icons and different things oh man so i want
yeah literally everything you just said okay and not always in the same project right because it's like i think that i've always been most impressed with the component libraries where they really try to handle the different use cases a lot of them just have like tags
And it's just like whichever one of those things they built, right? It's just the input or it's just the below thing or whatever, right? But there's just different times. You need the different – to do it right you need it done differently sometimes in the same this is like date picker where it's like like i started out hoping
to have just one prescription but then unified and i remember looking at other people's things and going oh they're handling which day of the week the week starts on they're handling weak numbers on the left like all these things minimum ranges maximum ranges disabled
and then eventually going you know i'll just build it all because that's how you do it and not have everybody just because they're just going to request it to death anyway they are pillbox is a build it all i think it is it's a build it all and to me it's a way to do it
I don't know if other people feel this way. Maybe the people can chime in. This is literally one of the ones – it's like the first thing I always look at in every component library because I feel like this is like a litmus test. Yeah, this says a lot about your library. Yeah, I feel like it does. Do you even address this? Right. Are you too scared to address it? Right. Are you just going, no, we don't do that. We don't do that. Go get, you know.
And honestly, I think you see there's a very interesting distinction here from what I recall in the component world, which is like for the most part, I feel like the open source ish ones do ignore it. Either they completely ignore it or they have a very simple story. And then when you go to those ones, the component libraries you've never heard of.
but are actually huge things right java ones yes those ones have like oh there's 48 variations of tags like here you know whatever you want right it's like yeah yes because those are the ones charging a thousand dollars or whatever license and it's like yeah people ask for every variation so we built every variation and that's just right that's just what we did right so i think it's kind of interesting
So the hurdles in front of that, you know, like this could obviously be a pillbox episode, but we'll try not to make it that. One of the hurdles that might not be so obvious is... So I started down this road because we have that list of big ticket items to tackle and pillbox is right on there. If you recall, right before Flux was launched, like I had it kind of built sort of. Right, I do remember. I thought you were talking about this. Yeah, I yanked it out.
right because it was like okay this is dumb it's too much i shouldn't be holding up flux right rushing all these decisions for this huge component I should just get flux out and then tackle it. And I've heard some people give me like some flack, like on Twitter, been like, like, yeah, well you said it'd be the next thing you tack or whatever. Just like, you ever going to get around to that? Like searchable one, like pill box select thing. So.
It is a big one. So I endeavored to do this. So right now I'm in this phase of, I'm in a derailment phase, if you couldn't tell. The Flux updates have stopped rolling. I've basically been silent. I haven't tweeted in forever. You'll be podcast. We need the podcast, man. Yeah, it's true. So derailment. We're in a period of derailment. Sometimes you have to. This all started. because of the damn select and here was the goal and i'm curious about your take on this i went all right
If I'm going to build this pillbox thing, you need to be able to search through thousands of entries. My user story at the time was assignees, was like assigning people to a task. You might have 10,000 users or contacts or whatever. And you want to search to them to assign them to a task. What is the best way to do that? And then I found all, and I was like, okay.
were you trying to avoid live wire in this is that what's going on here well yes and no i i went down that road for a while i was like okay well it's actually pretty fast to render like even if you even if your database is quick and you can get that many quickly and render them quickly You have 10,000 items in a list in HTML and that's very slow. Like the browser has a hard time with that. So I spent a week making a virtualization layer so that, you know, that scrollable window.
So it's just like, it looks like you're scrolling through 10,000 items, but it's only 10, you know, at a time. I did that and was like, okay, maybe this is the way just allow people give, make. make it fast for people to render a ton of entries and just the experience is fast. That was one kind of path I went down. And the other path is like,
So that place has its complexity in all that JavaScript stuff I just mentioned. Right. And making blade components fast when you render them in loops. Two problems there. Yeah. The other path to searchable multi-select is making it fully Ajax driven.
So you're searching 10,000 databases, but you're only showing 10 at a time, and they load from the server. The problems with that are twofold. One is... blade components still need to be fast so that's shared you know that's kind of something i'm trying to tackle because i have to tackle that no matter what yep
The other part is in a live wire parrot, how do I express that in the component and whatever? I don't have to bog you down with that, but it's like, I need a way to make a parallel request. so that i'm not holding up other requests in the component you know or make it so that i'm not re-rendering your entire page every time you're searching for a thing
That's what I was wondering, if this is a thing where you're just returning JSON in LiveWire for some reason. So I explored that. And I think I tweeted about some of this. It was like maybe the experience is like flux. Tag select.
colon options or something like that options equals and then you reference the name of a method in your live wire component where you just return a collection of eloquent models right we internally turn that into json or it's turned into json or whatever happens there somehow it
gets sent over to javascript and somehow flux renders it all that would be amazing but now you have and maybe this is actually a good like this problem might be solved by our premise earlier but let me ask you this is like Now this is unprecedented.
you have flux or javascript rendering your options because if it's json you can't render those in php right so now you're rendering them in javascript and that's a totally different paradigm so yeah do you have like two flux components one flux option component that renders in javascript and one flux option component that renders in php you know do you have a blade component that you just provide you say this is the blade component that is the rendering of the option
And you just convert that and you send it over and turn it into a JavaScript template thing. Like you just send it over once and it's there. You know what I mean? It uses the blade syntax, right? So it's like variables.
like but but i stay in blade and i might even think it's being rented on the server but it's actually not it's gonna be sent down okay interesting so maybe like the slots of a flux option thing have like a little marker on the element wrapping them that's like data maybe it's data slot data slot option innards or something whatever sure and i use that
just to stick in there once with a hidden tailwind or something and mark it as a template. And then in JavaScript, I ingest that and go, this is the template. Pull out, instead of making, that's pretty interesting.
this way you don't want no new language don't be using mustache whatever like there's it's just blade even though it's not going to be executed on the server and it's just like swap variables and because because it's just an option it's going to be pretty simple presumably um so i think you get away with it it is weird it is a different thing that you don't do now so i don't know it would be taking yeah it's at least an interesting concept to like not try to invent
a new templating language because that's what i found myself doing is like yeah i'm literally inventing a new front-end templating language which i already have in alpine I could just make it an Alpine component. That's an option, but I prefer... Right now, I'm still keeping a pure distinction between the Flux JavaScript stuff and Alpine. Flux can use either, but anyway.
Okay, so something new to explore, but in your mind, it would be great. Like, JSON is the way for something like this. It's super fast. It feels like it, right? I feel like if you try to get into, like, how am I going to render 10,000 blade...
things in the loop which i like that you're trying to make that faster and i think that's all great yeah but also like there's just gonna be some things maybe it's a hundred thousand but you know who knows at some point it's gonna be might be a lot um even a hundred thousand for json probably a lot but
yeah i think that that makes sense to have i think this is yeah edge cases this is an edge case right like you can't it doesn't fit nicely into all the way everything else works but right i do love what i love yeah is that you're taking on the real business use cases yeah because i think so many component libraries like oh well you got 10 people you're gonna assign to that look it works great for 10 people right but like nobody's got 10 people like i have you know hundreds of tags or thousands
of things or 200 countries in a list or whatever like there's always big long chunks of things and like yep uh when you go to a compartment library like oh actually it sucks because I need to be able to search across this huge amount of data, which is most apps. And it's built just for the guy in the basement who built this thing. And he only put 10 sample items in his database.
that's you know unusable so yeah it's got to handle a bajillion so so there's still a few things that would need to happen a this unprecedented thing here where you're taking json and rendering it even if it's blade driven making blade faster that's if it's if it's ajax driven you don't need to make blade as fast because you might only render 20 30 at a time i think once you get above like
honestly when you get above like 300 then it's like why are you slowing your whole page down for your select drop down yeah yeah um probably even less than that it's already kind of weird but this this thing where picture you have a live wire component that's a form you know There's one component. It's really nice to keep that one component.
You could make this select drop down a sub live wire component, but then you have to do the communication. I do hate the communication. I love having it, but it also is annoying. You don't want to do that. That's not the happy. It's not a happy path. Right. It would be great if it was just one component.
but now as you're searching you know and you're sending a request you don't want to be re-rendering the whole form rehydrating your whole component you know there's all these things that are like how nice would it be if this was if there was just a little sidecar thing Like one method that was isolated. This select dropdown could make requests to and get its JSON and be completely stateless, super fast, just a dedicated thing like it's its own route.
I think that makes sense. It does, but there's all these little things. It's like, oh, why don't we do that? What new APIs for LiveWare are we inventing? You know what I mean? It's just like, oh. That's where this all died. I guess you could punt and just be like, you just give me a route and it returns this format. True. And that's it. Just old school. It's a controller route. Here's some JSON.
i just worry about what i do i cash it or i don't i yeah uh you know whatever number probably some options for how many in the page or whatever but like oh you know or some chunking or whatever but like um I mean, I don't think that's unreasonable for a weird side car sort of feature. Yeah. If it gets too crazy to do it as pure live wire, I think it's fine.
if it's not right you know yeah i mean that's a way to really kind of like preserve the integrity of the feature you're not making any technical trade-offs meaning like there's no extra overhead and the alternative being let's just use existing live wire for this it's like meh
just escape hatchet make your own route you know you make your own ajax route and it's like you know not ideal but it's a way to move past this from the flux perspective i think shipping this is way more important than like You getting caught up in like a big whole new paradigm for live wire. Yeah. It's probably not ideal. And then meanwhile, like you don't, it doesn't feel to me like you have the new paradigm, like totally fleshed out. So then like it could maybe.
over a year right yeah like you see people actually using it you see what's going on you come up with some different ideas or maybe as you build more components you're like oh this is actually a thing that a few different types of components need yeah
now i can see the different angles on it or whatever and you can always update it right and be like okay well we still support the old give me a route method but also here's the new hotness where it's just all magical live wire methods and whatever right
i think that would be totally fine i mean everybody right now is like i go download some random javascript select pillbox thing right that's just like a one-off package rolling it themselves that way or they're rolling it themselves or whatever and they're just doing that same exact they're just here's a route that returns json like that's what they're doing right so
So, I mean, there's still the complexity there. That helps with a part of it, but it's still like, well, you're still taking JSON and JavaScript and turning it into something visual. How do you render that? How do you render that? And even like this idea that you had that I do like where you render like a faux option, you know, so that even if you extend, you've published the stub of your option and you make it so that all my options are purple. I really want them purple. So you customize that.
And you don't have to even think about some new templating. It just looks like Blade. You made it purple. And because I render a test one and then make it generic internally and whatever, that all works. But consider if... one option has a conditional to optionally show a badge or something yeah well the the test one the one that i used to drive out the stub right only has the one path yeah it only has the one path so you can lose conditionals you know
you do like like that's like oh now we hit up a wall then we already charted this path you know a conditional inside the option yeah Like a badge, a sub tax, sub label, you know, that kind of thing. Well, a badge would be fine because it's just going to be like dollar sign count, right? If dollar sign count and then.
output dollar sign count i think you'd be able to do that in javascript but how would i know you know if i'm taking a pure blade component that has this conditional in php yeah and i'm having you render it once and you render it without count you know how am i i render it with count equals zero or whatever sure but i have but i'm saying i don't think it should render blade at all so maybe that's where we're confused i don't think it should render it at all
I think it takes the raw. Oh, man. The raw HTML blade template sends that down the wire. It's huge. and on on the javascript and you are going to go through and check for ifs and check for dollar sign count but just a limited set just a limited set this is very interesting though this is like um
This is crazy, Ian. Yeah, I know. Ian, you know, okay, so you say you're not a genius developer, you know, and you get people on these podcasts thinking that they're just like, oh, we just talked business with Ian. We don't know. Business dad. No, you think outside the box. This is interesting stuff. So Blazer.
you know, in, um, C sharp. So they, so C sharp has, uh, has blazer, which is their blade. Okay. And I'm maybe is why I think didn't Taylor come from.net. So it's probably, so I think it was late as a take on blazer. Yeah. so blade blazer came out with razor at some point and that's their live wire for their thing blazer okay okay their live wire is similar to mine but their components can optionally be rendered in JavaScript using WebAssembly. Ooh.
they you could in theory like you make a counter in livewire in php that sends an ajax request to update that count you can mark it as like a lot or like a whatever front end component or something and the front end will ingest it and be able to render itself and update count whatever without because they can take whatever both ends so they built both sides right so what you're saying is like i've explored that as an option
The problems with it are, I mean, it's insanely complicated. It's stupid. Like, oh, and you use a string helper from Laravel in your thing. So now we have to have the whole layout. That's like, yeah, everybody who uses your site has to download like. 100 megabytes of your php into memory no right um but what you're describing is like well actually the templates are kind of the only things that need to be
you know, front end rendered. And if you impose constraints on them, that's like, you don't get to use the Laravel global string helper. You can use at if. You can use props. You can use the dollar sign variables. But dude, even this is tricky, man, because you have like that attributes bag thing. You know, like this is not simple. It's not simple.
I don't even know. To me, it's more even like maybe it would end up just being cleaner to be like, for this, there's this little syntax thing. It's not bleed. Here it is. Here's the five things you can do. But I also think you leaving a blade and just being an asterisk, like for this literally one thing, we only support this because it's rendered on the front end. We support props. Yeah. And we support, you know.
Tailwind can be in there, of course, and you can have if and else. And I mean, it's literally the line of the option.
so like they're very fascinated by this only be so much to it do you know what i'm saying like like you get it so it would have to be this is a concept i've been kicking around with all this fast blade stuff is maybe you you mark certain components as pure in the sense that like a pure function that just has a strict set of inputs and then a deterministic output so you can't be aware of the world around the props right and you can't have any side effects and in blade this is things like
accessing the error bag like errors have that comes from space right that's not a pure component um also relying on well whatever okay so that's a pure component we could extend the definition of a pure component to be You can't use any dependencies. Like you can't use a string helper. Right. If you want it. This is dumb. This is for dumb HTML output. Yeah. This is like the cell of a table. Like the option of a select list or a tag builder or whatever. Like this is just visual.
like really it's like it's just the vis the very end of the visual part of something not there shouldn't be any logic in there at all really or very very minimal so we're doing this with so flux select is in the pro version maybe so list box option let's find select option maybe select custom variant yeah okay so options variants custom i'm just looking here and it's like
there's really nothing there's some loading stuff but i if value wire key there's it's basic if statements and uh i don't know it wouldn't i'd have to rewrite it in such a way that was like extremely dumb but this is where all right so what i'm working on as an experiment is like these pure components that i described when you think about it it's like there's really no reason if it's a pure component you should be able to at least
look at the inputs and then render it once. And then next time say, Hey, these inputs are the same. We rendered it last time. Let's just render that same thing again. Basic caching. I love this. It's like, that's great. But then you run into things like, well, what about that slot? You know, that slot's different every time. So you make it a slot whole, like render it one time, mark what area is the slot.
And the next time string repaste that slot. And now you're not, you're skipping the whole render and you can render a list of. You're not instantiating a class, I assume. Exactly. And all that stuff. There's no file required. There's no instantiating class. There's none of that. And now you get something that's incredibly fast. So if.
Let's say that this is the world where blade doesn't matter. It's not blade anymore. It's just pure speed, literally raw. It's as if you wrote 10,000 options by hand in an HTML file. It's not going to get faster on the backend. Right.
now what do we do with is that fine like we're just gonna send maybe we just send html over every time you you know you're typing we're just sending html maybe this is a partial that maybe this is the way to do it that would depend how fast it actually is you know right like with a big list but i think it'd be pretty freaking fast like i mean nothing's gonna be faster than json and there's gonna be
There's going to be a little more to it, but let's just say, like, is that the way? Is it ridiculous to have, what about a route like we're describing, but instead of returning JSON, it returns HTML?
of those list options you know yeah what about that is that stupid unergonomic i i wouldn't care but i don't know if you would that's that feels like a thing you might not like in the being feels a little yeah when you do the json thing then you can do the virtualized scrolling stuff you know because then you can easily like re-render and destroy things where if it's an actual element it's a little tougher so
Okay, well, let's... Because like I said, this could be... another hour we've gone through one one item okay let's get to the second item here but you see where we're at do you feel it we're in the valley of despair basically is where we are I think you just got to ship some of it. Just ship some of it. It won't be perfect. It'll be fine. It's tough because I really don't want to regret it, but I have found...
Like, here's one thing I can do. Right now, it's flux select variant list box. Let's say this pillbox v1 flux select variant pillbox. If I want to reimagine it, I call it flux pillbox. And it's a totally new component. And that's no breaking change. And it still is a good API. So there's these little escape hatches. I also think it's just, you've got to remember, you're used to thinking on an internet scale, like all the Livewire users.
thousands tens of thousands hundreds of thousands i don't know how many there are right hundreds of billions billions of live right there's only so many people who bought fox yeah several thousand whatever you don't say the exact number but it's much much smaller than this
total total number of live wire users yeah so even if you have to change something even if it's breaking like you're not talking about like oh boy there's like hundreds of thousands of people are going to update their apps like they're not even paying attention and
So it's going to break. It's a smaller group. They are paying attention when you do releases. For the most part, it won't be 100% true. But there's some ability there to update, especially if you do it in a major version where it's like, hey, you want three?
now pillboxes work this way you got to change this yeah and that's part of version three of flux and whatever like it's totally doable i mean i've made insane changes dude we fideliper spent like a year working on help spot originally was built before utf-8 and databases okay so the database was not utf-8 no we wanted to get everybody utf-8 because people want to do emojis and whatever right yeah
I mean, we literally had to touch every single piece of data in every single customer's database and convert it one piece at a time from Latin one.
to utf-8 right rebuild the whole database a whole new database with all new tables with all the data converted over and all this stuff so it's possible like yeah it's possible to change like how the component it's called or whatever like you can totally there's always there's often a way yep yeah once once the constraint is there you end up finding a way yeah um i wouldn't worry about that yeah all right well they're okay number two
all right number two um i think like uh there's a few there's a few tied in together but updating tables so like both ui type stuff like groupings sticky columns responsive yeah things right um as well as like just data tables which is a bigger thing obviously more connected to livewire
but having a like, this is what, this is the official flux data table. Like I know we can build it. I've watched your video. We're like, why do people have data tables? It's so easy. You just do this and the other thing, which is true.
but it's also nice to just be like i just dropped this in and i magically got it as long as i use the standard thing because this is just some admin screen and i can just throw my shit in there on the standard data table and it's super easy um you know okay so tables Also a huge one. And entire projects are data table projects. Yes. Filament, I would say it's primary. It's like most flagship offering data tables. Yeah. Inertia tables, Pascal, which I think he's, well, whatever.
inertia tables yeah entire project um here's what i'm here's one thing one piece about tables that scares me that is what we're working on right now is uh what i and i think we saw this with filament and now they're addressing it is speed of rendering tables is like tables is the most loopy here select options are pure loopy you know right but they're simple it's a simple thing that you're losing optimizing it's not that hard tables are complex loopies yeah so you got the loopy but you got like
Your table that you configured because you had all these needs, a business need. You have this massive thing with 10 dropdowns, 10 sub items, 10 sub menus. And when you're in the real world, you know, they're huge. They're huge. And they're ugly and they're huge.
and that's where that's where blade starts to crumble and by blade i mean flux also and so i don't want to go all right flux has all these data table affordances and everybody goes flux is slow right and it's like well no blade is slow and it's like who cares who's slow it's just slow like make it faster so again that won't be blades problem if you layer
on top of it, just like we talked about with the other things, right? It's like, no, flux is slow will be the outcome. Exactly. They don't care about Blade. They don't care about that at that point. They've never personally tried to render 10,000 Blade templates. They've never seen Blade be slow.
yep this is just flux being slow so yeah i agree with that so so that's one part of it yeah yeah okay so let's just say that part is fixed and we make it all fast yeah then there is again this you know what i struggle with This is, this is the common thing between all of this is precedent. I'm super careful about precedent because I, when I make decisions, I like adhering to precedence and it just makes decisions easier and whatever. And I try to find other.
authorities to defer to like even if like view already made a decision that this api does this or if i'm inventing a new api it's like i don't want to invent it i want to find something to grab from you know So with flux, the precedent that we're talking about here is having a, having a component that like a data table thing, like opinions, filtering, you know, this could all be, you could in theory, build all this without.
The blade part, you know, like you have a method, you return flux colon colon table, arrow columns, arrow rows. There's a few things. A, do I use the precedent established by tools like filament and Nova? Or are they going to be super pissed and be like, I really sweat, sweated out that like those APIs. And it's like, you know what I mean? What do you say?
I don't care about that at all. But doesn't it make sense? Like if I'm going to build this, I would want to look around at what everybody else is doing. No, yeah, I think you should. I'm saying I wouldn't care. People are going to be mad, whatever. Yeah, right. This is not like new, whatever. They took stuff. Again, they took stuff from other people.
I don't know if I'd use the filament one exactly myself. It's a little, not to my taste, I guess I'd say, but they are dealing with, it is a complicated thing. So there is a lot of just weird trade-offs involved in all that. Yeah. I feel like there's a Caleb level solution to this, like where it's like.
not like filament is like all the way right like it's like yeah yeah huge method names because there's 28 variations of everything and like you're in there and all stuff i don't know what it is i'm not the genius yeah all right but you want you want something You don't want to have to write like you don't want to have to have your own managing of like which columns are being sorted by which direction.
it's managing that in your liveware component and then referencing that in blade you don't want to do that right well i guess there's a couple layers here right there's like yeah there's that stuff but that's also easy to do right so like the
I think you would do that because it's there and everybody's going to want sorting. So of course you're going to have sorting and whatever. Right. That's fine. But the really interesting bit to me is like filtering because like to do filtering, everybody does filtering and it's crap. Because it's like, yeah, look at the thing pops up and you can have three options in here. Well, nobody has to go to linear and look at their filtering. That's real filtering.
No, there's like 100 options. And within the 100 options is all these other options. And it creates a UI for whatever. You know, it's a huge undertaking to build the filtering system of a table. Right. filtering whether it's separate even from a data table like just a filtering element that you can use or uh that's just like the most how do you think about how that could be componentized because in my mind that's like totally different for every application
I don't think it has to be. It just is because everybody has to invent it. I have to invent it every time. So it's different. Do you know what I mean? There's text search always. or whatever that's a common text search there's visible columns configuring which columns are visible yep there's um what else is not bespoke per se what else could be
You know, I mean, there's things like sort direction, whatever, that kind of thing. I mean, I think the whole filter, I mean, we have a filtering thing for help spot and it's like generic in the sense of like the base, the output of the UI is the same. for every option what is it you define the different options it's like in the help spot case like a drop down list okay like it's rows you add to the filter right it's like plus plus plus to add items to the filter right so like first name so
A select list, first name, equals, not equals, Caleb, right? Oh, like that, like Stripe, like that kind of thing. Plus, okay. Email starts with whatever. So Aaron's hello query. Aaron's thing. Aaron's thing. Buy the remnants of Aaron's thing off him.
it's a huge thing so i don't know how much it can be put on you i'm not saying it's not huge we could at least scope it to ui because there's a lot of parts of that that like okay yes like if we're just doing the ui there's like stripe has that interface for like you're describing like yeah
Like their date interface isn't like a calendar. I think for some of their tables, it's like you select a field and then you select like greater than equal to less, you know, like a set of like modifiers. Right. It's like a subject.
modifier predicate or something you know what i mean it's like subject linear one works also it's like it creates a little bar at the top you have different things you can do in the bar all the items in the filter in the bar if you want to get fancy and really real you should be able to group those things i don't know if linears does that i would suspect it probably does since it seems pretty advanced but
Because you might want to have this or that in these two different groups. That does get super advanced. But even if you go short of the grouping, just the flexibility to be able to make... a basically unlimited number of potential options of filterability things to filter on and then as you select them it builds you the nice little thing where people can edit it and all that stuff
we're not limited artificially to like well it only really fits three in this spot and that's not enough you know like that kind of thing i'll have to check out linears thing um linears is pretty it's pretty slick i have to say i'm not We use linear, not the biggest fan. The UI has got like a lot of stuff going on, but I do like the filtering. I will say in terms of that type of filtering where it's like right in line on the table.
It's probably the best I've seen. It's like above the table, right? It's like above the table. Yeah, yeah, yeah. Yeah, filter front matter and maybe you collapse it or like...
just to hide it away or something but yeah if you go in there and take a look you'll see but it's like right or whatever that aaron called the thing well that that was their product that was a little different the the filtering part was um it's like refine i think it's called okay that's what i'm talking about but that didn't have a
front end or maybe it did but it was yeah they built front ends in different languages i think they yeah maybe that's why everyone did um so yeah this is like convert kit you ever use convert kit yeah you know when you go to like
uh send an email and you decide on the audience and you have like different blocks you're like including not including and it can be like plus inside of that and it's like this tag doesn't include you know it's those types of things yeah because that's the stuff you really need to do that's the thing it's like build this filtering stuff and it's like oh you can filter by three things but nobody needs to filter by three things like they need to do this more complicated business logic
And then you always have to roll your own and it's super annoying. It's very difficult. This is dark. This is so dark because like, how do I even, I can build all this in a UI, but how do I make it so that even, even just a bare bones version that you can.
bind to all this data in like a way that makes sense you know it's like what is how is the data even represented how is field modifier target or whatever like right i guess like quality would be like create it'd be field modifier and then quality right so it's like user less than or like created at field less than and then the value that's what it is so it's
yeah yeah so then okay so those three are they separate bindings like all three of those things i feel like you could separate if you didn't want to get involved in like the back end part of it which then adds obviously a super huge layer I feel like you could just be like, it just returns to you a JSON object. Right.
that's the tree of all the groupings and options right that's not a bad idea that's and that's it yeah you take that json object which because a lot of times you just need that like i'm going to store it in the database because somebody wants to save this filter whatever right but i'm just going to take that json object and then i do whatever
query building shit i need to do based off that like that would be huge like i would pay you ten thousand dollars for that right now like legit like because just it's so the building ui for that is so difficult and annoying and hard and all the edge cases and all the stuff
Whereas like, just give me the JSON of a nice builder. Yeah, that's the way to do it. And then I'll build the backend part, right? And then you can cache that JSON. You could store it as raw JSON. You do whatever you want to do. Whatever you want to do. Yeah. i've tried my darndest to stay away from json with flux purely because it's like once you open up that can of worms you don't close it yeah and
But I found needs for it, like with values for the date picker and like date ranges and presets. So that is JSON because there's no other way to represent it. It's just like if you try to get too fancy, it's going to be...
harder right if you're trying to like bind a bunch every everything in this filter needs to somehow be bound to something in a live wire compartment like it's going to be insane like the tricky part with json is it's like a lot of my stuff i try to make it so that in theory it's all like html oriented Like a value can be represented as an attribute of an element. JSON, that's unprecedented. It's like you're not used to seeing, unlike some custom input, value equals and then a JSON string.
you know right because like there's special characters in that is it is it pure like parsable json with commas at the end of every item or is it like faux json like x data so anyway there's all these things that have been like you know that's but whatever it's it's like this is standing in the way if we embrace this and then we just commit to these schemas like we're doing we already have a precedent with the right date range thing it's like this is the filter json schema it's an array
Each filter is an object. There's a field name or something, or maybe it's just an item or something. It's like created at or whatever you decide. And then it's modifier or conditional or condition maybe. And then, yeah, it's like, and I'm sure there's, there's like names for this that somebody else, like it's a standard and then condition and then value. And then those three things and you just bind to changes in that. And that's what we do.
Yeah, I mean, there could be some tricky parts, especially in the value end sometimes because, like, you might actually have multiple values, like, in a range. You know, so there's some stuff there. Oh, yeah.
you know what i mean potentially like a date range or whatever it's other stuff but like yeah and maybe like yeah like could be uh you know it is like in array or in value inside of and then you right you have you add this bespoke amount of options dude it sounds like a nightmare that's what you love nightmares i do so okay it could also be maybe it's not even json and just i don't know whatever the transport mechanism is like but maybe in my livewire component i just get a php array
like a nested yeah you would right yeah and then maybe and then the way to layer on top of all this is like you then offer this is we did a lot of this in in the data tables thing where with date ranges It's just JSON, but we also offer a date range PHP class that you can type in your property to, and it knows how to hydrate itself.
based on that some nicety stuff yeah yeah and the presets like there's stuff like that like date range presets that are all represented in php so similarly with filters it's like maybe we offer a base class called filter that already knows how to how to like hydrate and dehydrate itself based on that schema you could just use the raw json yourself or
you can have an array of these filter objects you extend them for your own bespoke filters so i have this folder in my app that says filters baby and there's like a hundred of them and they all extend because they have to have a whatever three methods and then like an apply method that takes a query builder in and returns a query builder out. They all have that. And every time you say like through filters and then, you know, whatever.
goes through that hydrated array of things and so okay we did it it's great it's done and i think the filtering being separate from data tables is important like this could be freestanding right this is very interesting
Yeah, because I might not want to use it in a table. Yes, I don't necessarily want my output to be a table. Often I will, but not always. What else would it be? Well, sometimes it's like a divs of like cards or whatever. Sure. Like I might have a filter on a... why it's like user cards or whatever like ian filters are separate the tables yes they are crazy that makes this actually way nicer because now it's like distinct
yes like missions here and you're not just taking on like the one yeah i gotta do like this filters and i have to do like scrollable sticky toggleable columns that are cached in memory it's like no you can there you can sever the head
yes and then that's just a separate thing and then maybe it would be useful in other places like of course we use a lot with tables but i think that there's other places for this ui i mean definitely for me i know i have other places and i think that's probably not that uncommon Okay. Number three. Okay. This one was just, I touched on this, but like I just discovered the other day that there are popovers and I needed a popover.
And I was like, God, it's so annoying. Flux doesn't have popovers. And then randomly inside some other element, there's a popover. And I'm like, wait a minute. I can just call this popover. Give me the documentation, Caleb. Of all the things, if there's a component, just document it. Document it.
Okay. So pop over full ownership here. This is the lowest hanging fruit in all of flux is pop over because it's already all built. It's there. It's totally bespoke. It's not, I don't have to add any, I don't have to add anything. this is what happened i reached out to hugo and i'm like let's do popovers i sent him a bunch of examples um and then he's like i'm busy and like it died in the water and then uh so i have reached so this
So Hugo, this is, let me just blame Hugo. I need to just get Hugo on. I could attempt it myself, but this, I think this is a great opportunity. How many times do you want a bespoke popover? with a few checkboxes inside of it, maybe a dropdown, maybe an arrow to a second pane of the popover. There's so many. Maybe the popover's toggled on hover. It's like a Twitter popover. You hover over an avatar, it pops up, it shows all the stuff. It's not a dropdown menu with items. Nope.
It's a popover. It's a popover. It's a modal, but it's targeted to your mouse. I need popovers. OK, we got them now that you saw that. But there needs to be a. So basically, the popover page will be world's simplest. component giant heap of examples that are very useful that's what my vision for it yeah um it's just that if i design all the examples they won't be very good so i'll have hugo do them hugo hasn't done them so yeah we need to force hugo to do them
Hugo, let's do this. Or we need to just get off the pot, do it ourselves. It's low-hanging fruit. Yeah. Bingo. Okay. I'm just going to give you – we're going to go back to business dad for a second here. I'm going to tell you something you don't want to hear. Yeah. Which is in business. People come, people go. This is what happens. I know. If Hugo's busy. Right.
It might be time for another Hugo. That doesn't mean that Hugo can't ever come in and help when Hugo has time to help. Right, right, right. But Hugo being busy can't keep flux from moving forward. That's the thing. It's true. You know what I'm saying? So. this is you're right and i think this is a that's a big part of the so there is a world where if hugo gave me let's say five hours a week yeah five hours of hugo's time turns into
a hundred hours of my time in a good way he can give me five hours a week and that can fill so much developer time because he'll spend five hours designing a bunch of filter you know ui stuff and then we'll spend two months building it all out right so it's like that's that's sort of my fear of like i would love to have a full-time designer but i'm picturing them twiddling their thumbs half the time and being like i can't do any of this like this takes so long
amount of devs you need for a full-time designer is like you need a lot of devs right that makes sense okay so you're familiar with this this paradigm where it's like design work produces an outsized it's not equivalent time it's like
No. One day of design work is a month of developer work. Right. Because I can just go in Figma and be like, oh, here's 30 variations. Isn't this cool? Yeah. Like two hours. Now you've got to build all those variations. Even the simple stuff. Figuring out the APIs for like how to. Yeah. So anyway.
hugo's time to me is incredibly valuable because a small amount of it goes a long way for the project um when i think about somebody else it's like hugo to me is just the best and and i guess it's just a belief in like there's nobody else who would work on this part-time that would be as good let me let me and i'm not i love hugo and i think what he's done is great so hugo do not take this this is not negative you're just busy um
I had Taylor Otwell working for me as a developer. Okay? Taylor Otwell. Dude, this is great. I love this. And yet, he hasn't worked here in 13 years or 10 years where it's been. and we are still here we have moved forward the product still people like it people buy people spend money on it so like you know nobody's irreplaceable like you can do it it is possible
And I think that's fine. Like, maybe you just have to have a discussion with Hugo. Literally, I only need five hours, man. Like, that's it. Like, five hours a month. Like, just can we do that? Yeah, we can literally five hours a month. Maybe he can. Great. Like, yeah, then you'll know. He'll know. And everybody will know.
You got five hours a month of Hugo's time locked in. And that's great. You can queue up stuff. You can be ready. Yeah. He hits it hard. You get more than you're even going to be able to do in a month. Yep. Fantastic, right? Yes. But then at least still on the table. Maybe he really can't do that.
which is fine then you know that you need to find some other way to do these things because they need to get done right right yeah yep it's it's also a network problem like i i this is the problem i had with the employee number one of like i don't know how to find the right person you know it's like this is how it goes that's always the worst part and then you find like
The right person was there all along with Josh Hanley. If Josh didn't exist, I still can't picture myself having gotten through that successfully. This is where it's unfortunate. I like Josh. I'm happy Josh is working with you. You need to break that bubble at some point. You're going to need to go out into the world and hire someone at some point you do not know or isn't already working for you in some way. That's just going to happen at some point.
Yep. Yeah, that's a whole other thing. But I'm at least on, although through unconventional means, like I didn't work for it in the sense that I didn't like do a hiring process or anything. It just sort of like. I just was like, let's do this, Josh. And it just worked out perfectly. Being on the other side of it is like, oh, yes, this is absolutely the right decision. I can't imagine.
I literally can't imagine you were doing all that stuff, dude. I would not have continued to do that for that many months. Like there's no way I would get up every morning and.
do the inboxes and check the GitHub and fix the issues and create new stuff. There's no way. Yeah, it's too hard. It's too distracting. Because they always get caught up in something and then it pulls you out of the coding and then... takes you three hours to get back into that mindset and then the day's over and the kids need you and then you do it all again like yeah in my mind though i mean this is like one of the things with me and business is like and this makes me good and bad for it is
Like, I don't feel like if I'm going to bring somebody on and they're going to cost me, let's say $100,000 a year, $150,000 a year. It's like my profits need to be... like five times that like i like if i'm bringing them let's just keep the numbers even you're gonna cost me a hundred thousand dollars a year i need to have like 500 grand in profit like that's going into my pocket because otherwise It's like for a handful of reasons, my psychology is that like, well, then that's not.
worth it like okay maybe i have a better business but i don't make the money i need to be making to retire on it like right so and it could yeah there's i mean so uh there's different ways to think about that but i think like yes i think you should always have a certain amount of headroom there yeah you built this
business for yourself and your family and that's has to be a priority right um but there are this is a very common struggle because like In a small business, the salary, especially developer type salaries are like such a large percentage.
uh you know you're not just adding people for like 30 grand and like it's not that much like when you add somebody like it's a big chunk it's like just having a business that can support a single developer salary and your own salary right it's incredibly hard like you have to have like a five hundred thousand dollar business you know in revenue for the year that's not that's not easy you know and that's just for one you know and most you know
small dove shops that are doing well that have stayed in the business are actually like pretty efficient really if you look at it like i think it's something like i think the average revenue per employee at like a lot of like apple maybe not apple because they're so profitable but like Your big software companies, I think it's like three to $400,000 per person is like the revenue per employee.
and oh nice yeah so that's cool to have like a number like yeah yeah a lot of times it's more than that like we're more than that um so it can you know Because it's also you need more buffer when you're just little you because. If you have a bad year, you don't want to have to fire everybody. Right, right. That kind of thing, yeah. So what's a good number for me to have? What's a good number for X amount of money per developer? So let's say I'm paying a developer.
I don't know. Let's say 125 grand. Right. What's a good, like, I should have this amount of revenue per developer? You've got to give me just a quick number, Ian. I don't know. I think if you go with those type of like three, four, probably 400,000 would be reasonable, right? Yeah, 400,000 per employee, yeah. Something like that.
Okay. $300,000, $400,000. Okay. And it goes up and down a lot because like sometimes your revenue goes up and down. Yeah. If you had a second employee, now it's like doubled your costs, right? So like... so that can affect that ratio you just have big swings in that kind of ratio in a small business because like everything you do radically affects the ratio but uh if you always adhere to the ratio you might never make a risk move that
gets you to the next level you know yeah exactly so you want to be you want to strike that's why like it's important which i've not always been the best at this but i think you are better at it which is saving along the way so like if you did have to like cut into that ratio yeah for an opportunity, then you could make that decision more easily without affecting you so personally. Right. So I, I think mentally you're still in the same place of like, it does affect you.
But if financially you feel like you've saved enough and you've been cautious enough in other areas where like, ah, if your salary went down 30% for a year. Yep. But what you're buying for that is an opportunity to maybe. grow it 300 percent right because there's a chance to do something important then you can make those kind of trade-offs or whatever so yep i think that's a good thing to be aware of but yeah so i love josh i'm glazed there hugo
We're going to figure that out. We love Hugo. Hugo got us here. So hopefully Hugo's my man. I'll ride or die. And if he's like, don't hire somebody else, I'll kill you. I would be like, all right. I got you. As long as he has the time. See, that's fine as long as he actually has the time. Yeah, yeah. That's the thing. Okay, so popovers. What else we got? All right, what else we got? Let's see.
uh i think well you already kind of talked about this but like multi-select um like in my case like you have a category and then the category populates the users that can be assigned tickets in that category so dependent select um yeah okay this is a good one uh which we need uh time file uploads okay well that's coming later okay time picker time picker is more important to me than file upload to be honest because now i have the date picker but i don't have a matching time picker
So it sucks. Time picker, man. Date and time picker, ideally. Separate and together. Brutal. You know, I almost built it. I was pretty much there, but it was just like... It's one of those ones that's like, what do you want? Everybody wants such varied things. It's like, how granular do you want your time? That's a big question. And how do you, how do we make that?
easily configurable um you know i mean all the things these are all the things you know all the this or that 12 for 24 and blah blah blah all the stuff yeah all the stuff is it a select like you can get away with this with this
series of select drop downs right is it 15 minute increments is it one minute increments or is it a scrollable select list thing in which you want to disable times you want to disable time ranges you want to only show it's like this is where it's like oh no we're back in the
in the valley yeah so that well whatever every i could give you the sob story about every one of these things except popovers that's on me i should have popovers that one's easy that's easy we're good on that time pickers is easy in the sense that It's just more JavaScript. We already have all the precedent from date pickers. It's just doing it. And there's a person who's trying to shake me down to build it.
I love a shake. Somebody who's literally like somebody, this dude offered to like fly my family first class for like, or something just like crazy things that this person. I totally believe this because I'm that guy too. Like the time picker, you can't get one anywhere else. Like I need the time picker. I got to have it. I'm always like, just you have it. It's called select. You just say, like, select and make a loop of options. Then it's all weird. What if I need a date with a time as one item?
Right. Now I have to build myself on the back end, I guess. They pick the date and they pick the time. Now I got to merge them. You know what I mean? You want the date and the time as one item. date and time and i'm gonna like be hospitalized with that freaking uh the time zone crap implications with that it's like oh god but actually the answer is you didn't ask but the answer with all the time zone stuff is like
you build it all with UTC or you build it, whatever. And it's, you don't have to do time zone math. You only do time zone math when you can leave that to your users. I shouldn't be doing time zone. No, but honestly, it's just as hard to, to.
get rid of all the time zone crap that the browsers like wants to go yeah they're just like well you're in this time and you're like no no no no trust me dude i know you know okay not easy there's a whole have you seen like there's a whole javascript um thing coming or supposed called temporal it's like a rethinking of date dot now because of all of these problems trouble yeah well that's good okay okay next
These are not in any particular order at this point. So we have like, this is more like a UI thing, which would be cool. Like timelines, you know, like a timeline component. It's a visual thing. It's not even like steps, you know? Oh, is there a step thing? Like, no, but I spent a long time building a step component that never saw the light of day. There's a lot of stuff you've built that's not actually out. Dude, I'm in the era of building stuff and going, nope.
Too custom, too whatever. Can't find the righty guy. Is this like a wizardy thing? Yes. So it's like horizontal. That'd be cool. Horizontal, vertical, dots between them, a line between them. Are they numbered? Are they icons for the thing with the title and the body? Give it to me.
Does that solve your problem with the timeline or do you need no? Okay. Timeline is like a thing like a history of a support ticket. Let's say, for example, this thing happened, this thing happened, this thing happened, just an infinite list down. Here's dates and times.
user icon right like whatever just like yeah when ui has a thing like this you can get hub like at the bottom of everything and yeah a little truncated sub segment between that says load more those things are like to do one to actually build it sucks because make the lines actually line without getting weird. That's the sucky part that Flux should do for you is take the day or... This is just visual.
There are so many, as you can imagine. I'm peaking, by the way. Sorry about that. There are so many of those, like for that line thing, there's like a hundred ways to do it. And the users shouldn't have to bother themselves with that. and users can never figure it out i'll tell you right now every time i try to build one i'm like oh look it works and then you're like oh no like i resized it nothing works now or i added too long a bit of text and now it's broken or like whatever like
Yes. It's complicated. I should resurrect some of my step stuff. But yeah, you want a timeline. Timeline is something that could be next to popovers in terms of easy wins.
because yeah i mean it's just purely visual like yeah yeah there's nothing else it's just like now you have a timeline component um yeah yeah uh okay so here's a tricky one like drop zones for files oh file dropping so okay drop zones for files so i attempted a little some of this stuff i could do drop zones here's here are the roadblocks with with file pickers is drag sorting stuff okay
dropping something on is fine i can do that i can detect a hover i can design a drop or detect a drop that's all simple enough it's just what do you show after you drop that oh i see yeah you know and where you get that information how do you show it now you need like an x button presumably so that people can remove that from like the file group thing and um independent file uploads batched uploads whatever it's like all of those things progress bars for each of the line items like those are
And if it's an image, do you show like a preview of it? Or if it's not an image, do you have a generic placeholder? You know, all these things. It's like, man, what do you know about that? It's a lot. Yeah. Yeah. I mean, well, that would be all we use for a file picker too.
presumably if you did this like a little bit more advanced file management whether it's a drop or a pick like what happens if you do several in a row or if you want to make a more like little ui type yeah thing for it versus now we just have like kind of regular file upload which is fine and this is you know among this is among the greats in terms of like things that are
actually their own packages for people that make their entire living on them rick nick with with file pond you know yeah that's what this is there's a few of these that like that aren't there i think i don't know like yeah but it's a full thing it's like you could spend your whole career making this really good
Well, I think there's also these worlds where – I think Flux has been right-sized on this in a few areas correctly, like even with the WYSIWYG. But like – there's like that there's like people building a cma yeah and it's like they want like oh hundreds of images and you're sorting yeah like all this stuff right or there's just like hey Like I got some attachments for an email and like, just let me do that. Yeah. Nice.
with a border to surrounded that you can just drop the thing i'm not managing assets do you know i mean managing assets yeah that's a different thing but just like making the file uploader be visually appealing and easy to use i think is like lower hanging fruit than the full it's a full-on asset manager that does all kinds of crazy right like you you're on your own to build asset manager or just use file pond or just use any of these services whatever um all right let's keep going
This is not one I really need too much, but feels like a completeness thing could be like a carousel of some sort. It's a little on the marketing end of components, which you aren't dipping your toe into yet. One use case of carousels that's a little more appy is e-commerce. Like if you look at Amazon, half the site's a carousel.
I don't even think of it like that because I think a carousel is like you're saying, like a landing page, testimonials or something. Yeah, or image gallery. But yeah, if you go to like any e-commerce thing, it's always like, okay, related products. Um, what else? I mean, it's categories of things. It's all that. Or even in like a reporting screen, you can imagine like, like a little carousel of like different, a box, right. With like, you can go through different.
report summaries or something like that like you have a grid of like you know you ever see like those multi dots a little carousel but it's just data or it's a little graph or whatever you know it's like those kind of things um explain that to me again so let's say you had like a reporting dashboard yeah right and on there you have a section that's like showing you a summary of a bigger report yeah but like
now you can like swipe it or click to go between different cards it's like tabs except it's swipeable and there's dots on the bottom exactly and there's you don't have to name the tabs just a different ui for the same swipeable that's an important thing like the mobile aspect of that is really important and yeah this is where i mean with care it's just a matter of diving in but it's like we're probably right in the middle of this story being really really good because like
in the days of yore you had to do all this by hand now there's all that scroll snapping css stuff which is so so nice it's actually incredibly powerful and amazing handles all that gesture stuff for you and everything um But there's another level of JavaScript stuff coming and or CSS stuff coming that makes these like really bulletproof or something. But anyway, yeah, having a carousel thing is pretty interesting. You're right. I'm going to note it down. I like your example of like...
of like a dashboard and you have some metric or even like your iPhone, you know how like rent, like I've just never customized my home screens, but on your iPhone, like I have this little thing that often will show like a random picture of my kids. Oh yeah. Yeah. And then like you can swipe.
and like it'll show you the stocks or something like it's just it's just a little thing you know yep just a little widget sort of builder right the problem with it it's yeah whatever it's like people are gonna be like i want to show like three at a time and i want them to get cut off and not like have to snap perfectly and blah blah blah and then i'm like
Now, is that the kind of thing you'd use? There's a big, was it called Slider or something? There's like a big library for it. Would you use a library or you would build your own for that? I wouldn't. I've made it this far, Ian. I would just like.
Just like give up when I get to the carousel. What do you do with pure CSS? For the popover stuff, you use a library though, right? Or no? No. You don't have any libraries at all? Is there any third party code? Yeah. Oh, you're right, right, right. Yeah. The anchor stuff.
Anchor positioning. Anytime something's anchor positioning, it uses floating UI. Yeah, it's called floating UI. That makes sense. I mean, why do you need to rebuild that? No, that's so extreme. No. Okay. I only have a couple more. We build it by hand. Okay. What's next? It feels like there should be progress bars. I don't think there's progress bars now, right? Yeah, there's not. And are you thinking about a multi-step form or a file upload? Sure.
Is this like a barbershop-striped, like, animating progress bar for something that's completing? Or is it like a... Yeah, well, like, I have... Yeah, like, onboarding or, like, you have a bunch of... Like, we have a thing in Hellspot where, like...
you can batch respond let's say like your server goes down 50 people email you hey the server's down you could check them all off you could batch respond to all 50 at once yeah and the way it currently works which will probably change once we're in the flux version but whatever just for the example
it's like you go you go to a screen that's like okay there's the 50 and you see it like boom boom boom it's going through them right and so like you could have a progress bar at the top that's like one of 50 three of 50. 12 or 50. Right. And it's like going through until it's done. Yep. That kind of thing. Right, right, right, right. Yeah. Yep. This is, you know, something that's missing. It's not a big deal to build, but it's like, it's not a big deal to build.
because you can do it with css percentages for the width and then the thing with the flux though right it's like you're not just getting the components. Yeah. You're getting a design system. Huge part of it. Yeah. So it's like, that's where these little things are like, yeah, obviously we can build that, but then it's like, well, now we got to make it look like flux and like,
If you're all in on the design part of Flux, it's nice when Flux just has the thing that you need because then you know it all works together magically, which is nice. The tricky part for me with components like this is it's like, these are all the things that...
you know some really mature long-standing component libraries they usually have something like this yeah and i always wonder like is it just component libraries copying each other for these like categories some of the generic yeah and it's like
like how much are people using this is really the right thing to use. Like I don't, I have, I don't have the need myself, so I haven't built it out that way. You know, I try to have things be built out based on how, what I would put in a product. And if, even if people tell me like, I need this thing.
There's it's like, do you need that? Because because you're not think I don't know. It's like I still want it to be an opinionated project in the sense that like I this is the opinion. I have to believe that this is actually useful and good in an app. And progress bars are along those lines, but it's like, is this the kind of thing that progress bar should really be tailored to its context? And there's 50 different ones and, you know, but I don't know. You're not here to tell me that.
in all software like even flux already even though it's young it's probably already solving like let's say 50 or 60 percent of the use case yeah so like everything you add like what percentage of your users are actually going to use the progress bar if you built it right it's not 80 no right so yep
So when you add these features, it's like, oh, what percentage of the user base is really going to use this feature? And if it's not that high a percentage, then that's just a thing you're maintaining, which is annoying for 3% of your users. use right so but it is a marketing win it's easy i mean if we're building a progress bar this is literally the easiest thing on this list by far so i do think there is something to be said marketing wise for like
The longer that list of components gets, the more valuable it feels. True. I had the opposite perspective when I was building it. It was like... You go to some of these things and it's like, how do you even find the thing? The list is so long. I want the long list. But I'm with you that when you're using something, the experience of going and hunting for the right thing isn't painful.
often it's like you're kind of like oh maybe this could work this could work yeah and then you find something you're like oh this would be cool and you just have the more the merrier you're still happy to find the thing versus like oh i'm gonna now have to spend five hours building the thing because i didn't find the thing in two minutes or whatever you know
All right. I got three more. Okay. Sliders, which is, again, just a visual kind of one. Is this carousel? Oh, slider. Yeah, yeah, yeah. Value slider. Yes, that is a missing piece. Yep. Reason is it's there's a native slider. It's blocks you in one specific way from customizing its styling on all browsers. You have to build it yourself and building yourself is not that fun. It's not that useful component either, honestly.
Again, most people aren't using a slider. You put it in your configurator and the sidebar of the thing when you're like sliding for the width of your email template or something. I don't know. There are uses for it, but it's not as common as the toggle or whatever. I've always avoided it because it's just to me this. these are the ones that are representative of insert component library here that has one of everything and they have this stuff, but it's like the, the,
difference in how often they're needed is so, so much that it's like, don't even worry about that. Like, you know, like, I think the unfortunate part is there is this pain point of like, Since you're adopting the design...
like when there's something missing you yeah yeah it just hurts because it's like yeah and it's like what you're saying well you can't even really do it yourself that easily because there's this weird thing with the browser right so like yeah now it's like i can't even really fix it myself or i'm gonna think i did it but it's actually broken
raw you know i mean like it's all that kind of stuff whereas if i know i plop it in from flux i know caleb has thought this through and tested it on every browser and it's all magical yeah i don't have to think about it anymore um that's where like the completeness it's like
Any one of these, only 5% of the customers are going to use. But the thing is, almost every customer is going to need one of those 5% things. You know what I'm saying? Yeah. So, like, that's where, like, the completeness over the long term, I don't think it's, like, urgent, but, like...
it's useful because it's just being everybody hits it complete um yeah well slider also is one of those things that i am like i i'm sure that i could find plenty of opinions that tell you you should never use one like think about like how like now you want control over the value so isn't it better to have like uh text input that is the value direct
that has a side icon thing like figma where you can like put your mouse on it and then click and drag around to like slide it forward and backward like they do on figma for like font size or something right like As opposed to just a slider where you're, you ever use a slider and you're trying to like get zero. I've done this with like photo editing where you're like, no, no, no. I just want to get the brightness back to zero. One and negative one. Shit. You know? So anyway, slide.
is seems to me like one of those things that like you got mittens on and you're like come on slider like yes so it needs to be done well yeah why we need flux to do it for us right all right Those photo editing apps have a reset. Usually you can hold like shift or option. It's a nice little nice to be too. Truth. Okay, two others. This one's a little edgy. This is when we built our own version out of flux components, but a drill down like tree, not drill down, a tree selection. Don't do it.
Which isn't the same as a drill down selection. Like a horizontal tree, like columns, like column finder file thing? Not columns, like an actual tree, like a file tree. Yeah. Where you could have different things open, different layers that, you know, multiple items at different layers of the tree, that kind of thing. All right. It actually wasn't that bad. You know, that actually couldn't, that wouldn't like just visually wouldn't be that big of a deal.
Yeah, I think Krimo or Dev here, it didn't take him as long as I feared it was going to. I think my memory of it was like... 2007 version of like what was required and now with like flux and alpine it was like oh actually like it was pretty straightforward i mean is this like a sidebar that has collapsible items but nested that's what this is right
Um, yes, it would be like, but you might have like input, but yes, it's, Oh, it's an input. Yeah. An input. How does this work? What are you inputting? So it, so like in our case, it's like, um, It's how you define a drill down selection. So like if the user needs to define, like at this level of the drill down, these are the options. But at this level of the drill down, these are the options.
the way we've done it traditionally is like you have this tree so you can see all the options and then you can yeah this is that insert unnamed java enterprise component library here that charges a thousand dollars per license right um this is that level of stuff to me it's like like Yeah, I mean, we'll write it down, Ian. It's just never going to happen. That's why I put it at the bottom here. No, it's good. Okay. This is also an interesting one. We need...
I don't know how many other people need it. It's a super hard one, I think, but syntax highlighting. We got syntax highlighting editor. Yeah. I'm interested to hear why you need it. You can edit and help spot your... portal templates and email templates and so there's html and php and stuff nice in there and so it's just like you know a little mini github except the one we have we basically have the thing we have now is terrible um okay So not static syntax highlighting, but like...
rich text editor yeah that's for code like a code mirror type yeah thing yeah yeah okay i mean that stuff is is in the realm of possibility also i said floating ui is the only dependency and that's not true because we use um tip tap for the code editor which uses prosmere under the hood and uh so anyway prosmere i consider to be a worthy dependency of like
This is almost impossible to build yourself. Yeah, you don't want to do that. I'm not going to build a code editor myself. CodeMirror exists. I've used it, you know, all that. Actually, Flux used CodeMirror for all its syntax highlighting until recently. And if you recall, like, I built that kind of editor thing. for my Laracon presentation in Codemirror. I've done a ton of work with it and built the thing where you have the suggestion. Tailwind uses Codemirror for their Tailwind play.
it's within the realm of possibility to have like, it's out there, you know, we have editor and we have code editor. I don't know. Right. We have IDE, I guess. I don't know. I think there is. I think there is more use cases out there than you might think for this. It's definitely not super wide, but especially when it comes to like editing, maybe email templates or things like that. Not just like code code. This is where.
Because why I asked you, I was bringing my opinion that developers only need this, so you might think you need it, but... But I actually asked you because you don't think that way and you have a real business. But I feel this way when people ask for a Markdown editor. It's like... Well, I could build that because me and you really want it for our web projects. But most people don't want that in their products. The interesting thing about a Markdown editor...
is like HelpSpot gives you the option to use the WYSIWYG or Markdown or plain text even in terms of like when staff are writing back to people. And... The Markdown editor is, so there's the world where it's like for the people who know about Markdown, which is geeky people, whatever fun.
It does also is sort of interesting in certain places in the UI where at least in the past it was hard for us to have a WYSIWYG. I think when the Flux UI that won't be an issue and we'll just use the WYSIWYG and it'll be fine. it gives normal people sort of this like if there was especially if there was an actual editor like it gives them some editing ability in a spot where you don't want html like you know i mean it kind of
It gives the regular user a way to do this markup. I mean, I'm just describing markdown. But in terms of like with apps, some places, sometimes in certain apps, you don't want people to give you HTML. And they would give you a way to do that for normal people.
uh where they don't have to even know what markdown is right but it's like they could actually mark up their whatever they're doing without it being html nowadays it's easy enough to convert html to markdown and stuff like that too there's like good libraries for that and things so like a less of an issue than there was a whizzy wig editor that is really a like a markdown editor that the user i've never really even seen this like
You know, there's a few out there. Yeah. They're always weird. I think nobody's nailed this UI of like the markdown. Right. WYSIWYG editor. Do you know what I'm saying? I mean, yeah. I mean, get well, not even GitHub. But like, I mean, desktop apps that do this, like Obsidian does this. Yeah. Where like when you're writing in Obsidian, actually Bear Notes is more hardcore. Bear is the best one.
bear is by far the best yeah oh yeah bear is the best markdown editor period yeah because you see the markdown and they hide it at just the right moment they hide it and you're not really looking at it show you at the right moment there if you need it like yeah yeah bear is by far the best that's the only one i've ever this is good my dude there's it's something alpine i don't know like there's a there's a guy with a thing there's a thing it's integration text editors
Okay, so SimpleMDE. That's what you're looking for. Okay, let's say SimpleMDE. Yep, it's called SimpleMDE. Google it or, you know, so SimpleMarkdownEditor. It's a WYSIWYG editor.
yeah but it's not markdown no it's not it no because like i see the like when you bold something you you see the double yeah right you want something that just doesn't you're just looking at the markup which at least it makes it bold and stuff right yeah get that part of it it's not like bear though yeah no it's not so what you want is something you want a WYSIWYG editor where the markdown is invisible but that's the output so it's like the user is just literally dealing with
rich text from their perception it's sort of invisible but yeah i mean it's you know i'm saying i mean i know what you're saying i i'm You could have it in any spectrum. I'm just wondering, yeah, what you want. I don't know. I don't know what I want. Or you could be like Bear. But sometimes the experience of Bear is like maybe a little frustrating where you're like, I just want to edit, you know, that.
the triple hashtag i actually want to put an actual hashtag here you know or i want to edit that from three to two but i can't really easily get over to it but whatever there's a million different ways to do it but i hear you weird i think the easy thing to do is to you know, is to actually just take a WYSIWYG editor because a total rich text editor like Flux has, like TipTap, because people can...
highlight, copy that, paste into Microsoft Word or wherever, and it's all rich text. But then have an internal converter that like used to say, I want this as Markdown so that you never end up in a predicament where you have like, well, A, just so you can work with the ease of Markdown. but you never have injection problems or anything. You don't have to store hard HTML. That's what you want. That's way low priority. That's super low. That's why it's at the bottom.
Ooh, this is the list, man. So what I do is I need to hire another designer. I need to hire another developer for a lot of this stuff. And yeah, your ratio. i just want to do it all temporarily so that i don't i'm not on the hook for somebody forever you know yeah that's the thing people do i i never have luck with that but i know tell me they're scared so it's it would have to be you know what could work actually but it would just cost me dearly
like some of the folks at these these agencies like titan like there's a i hired titan for some help on alpine components and uh am i allowed to say like the name of the person at titan that i that like did the work i think so the person you worked with i think that's all right I think his name is Guillermo or Guillerme. I'm so sorry. But he was sick and was awesome. And he ramped up so quick. It was like adding value or whatever. It just cost me dearly.
because i'm paying like i even paid like a cheap titan rate like that gave me like a preferred rate right man like if i was paying the full rate i'd have to like really to get even like one of these i'd have to buckle up for tens of thousands of dollars right where if i had a full timer you know i could pay him for a year and get maybe all of this right so but then what do you do at the end of that year
should i like this idea should i just hire an agency that with great chops just hire guillermo from through titan just like give me this guy for six months yeah i'm gonna make him expert level at flux yeah and he's gonna just pound all this stuff out for me I like super love this idea to be completely honest with you. Really?
Because finding individual consultants is super hard. I've literally, I don't think I've ever done it other than Andre, who I knew forever, who does our mobile dev stuff. But like, besides that, like very hard, low success rate, finding like random people to work for. 20 hours a week for a few months like so hard um and you're not you know it's hard to find a top person to do that so if you can go through an agency yeah you're gonna pay the big but you know you're hitting the ground running
And you're getting stuff accomplished instantly. It's pretty interesting. Yeah. And your stuff's too nice because it's like there's elements of this that are actually done, which isn't usually true in software. But, like, I feel like.
this component you're gonna build a component it's gonna be done and not totally done that you'll literally never touch it but oh it's way more done than when you're working on it right exactly so like you know it's like you're gonna fix some bugs you're gonna make some improvements but now that's back in the realm of stuff caleb can do
yeah or josh can do as time allows like that kind of thing it's not the like oh man we're starting from zero we got to build up this filtering ui and like all this stuff it's a million files and all the stuff we have to do so i actually like the idea like take the top two or three things that you're know you are not going to do yeah or if you're off on blade land and you know you're not going to be doing anything for a while i mean i think 20 30 grand be like
that'd be fine like why not i mean 20 30 grand i think would give me one component yeah like you know it depends i guess which one it is right like i wouldn't pay 30 grand for a carousel but if it's like a time picker would cost me like You think a time picker would cost $30,000? Maybe I could do it for $25,000. I don't think a time picker would cost you that much. I do. You think? I mean, if I got away for less than $15,000, I would not even believe you.
Yeah, there's a kind of a base amount of money they want to make. But you haven't, I mean, I guess it also somewhat depends on like a, you have a quasi-initiated developer. I could have Josh do all of this, who's incredibly initiated and is great. But then he's not doing all the other stuff.
mean this that's just a whole other another avenue which i think is interesting for you to explore which is like it's tricky in your spot but in theory perhaps you could find somebody who's like technical but not like i love being a developer and they could take over the josh inbox first level support
manage the open source stuff, manage people complaining on the boards. That's not really maximizing Josh's time in terms of the value he could bring other places. So then you could hire somebody who's less expensive to do some of those things. Take some of that off Josh's plate. Maybe now you get 20 hours a week of Josh time freed up, even if this person's working 40, right? You hire a person to work 40 who takes up 20 of Josh's hours. Yep.
josh is still gonna have to help them right it might be cheaper for harder things but that's to get anybody who's like any good even just at thinking right is gonna cost me like 80 grand for like a base salary right yeah but i mean that's that's fine
but if i took that 80 grand i don't know i'm just thinking like how many different ways there are to like like let's say we're talking 100 grand here per year right like what's the best way to divvy up this money is it a new kind of more junior developer who's a generalist is a new person under josh that does this thing is it you know 50 of that and is it 30 of that into a good freelance designer and 70 of that in the titan just like you know um
This is where it gets into your vision. Because it's like, if you believe Flux is going to be here two years from now, and it's going to be going well, right? then the investment in a junior support dev is probably valuable and worth it. The investment of Josh being freed up is probably valuable and worth it. Adding these components is probably valuable and worth it.
I think if you're in the like hundred grand or less range, that's kind of normal salary type stuff. And I mean, you could always let the people go. Like that's the thing that happens if like sales are down.
Because, again, that's also very direct. If sales are down, there will be less people on GitHub asking you for things because there are less people buying it. So this job will not be required anymore. I mean, these things are connected. So. yeah i don't know um i i but i don't really i like that like i said i like the titans or similar or path of like you know again when you go to them you're like hey i want this guy for a long time you can sometimes get a better deal
Maybe you hit them. Maybe you could be flexibly like, hey, when you have nothing for somebody to do, especially ideally this one person, give me some cheap time. Give me the bench time. Yeah. Let me warm your bench. I could be flexible and not require, oh, this project has to be done by this date. It's like, no, I got this huge list. When this guy has two weeks, give them to me at the discount rate. He can pop something off the list.
like yeah i mean they're right the reason i like that it's like to me there's two options there's go for broke hire another josh who trains under josh for like six months to a year basically to get to his point um which is a huge investment and the other option is like pick off these like things like time like don't let josh build a time picker because
it's a deterministic project you know it's like we could have the design for it we could have the specs for it you just implement it the same way we did the date picker you know it's going to take you a lot longer but it's not something where like if i was like uh here do um
do like, uh, whatever tag select. It's like, well, then they're like, well, they're not going to think to reinvent the live wire paradigm to support that. You know what I mean? I have to do. Um, then there's stuff that, you know, Then there's the rest of the stuff. Documenting the popover or whatever. There's just stuff people could be doing. Right. And I think what I'm learning that I didn't know before is it is possible.
to not write something and have it to not do something yourself and have it still be good. Yeah. Because you can be quality assurance on it and you can have a process like with Josh, everything he does, he writes me like an essay. It's all written. It's like, if you do anything, you have to give me a full pitch. Like, here's the problem. Here's the 10 solutions. Here's a full, no questions. Any question you have, you go and you deep dive.
And you explore and you find what everyone else is doing and blah, blah, blah. And then you come to me with that. And by that time, the problem is almost always solved. It turned Josh into an incredible asset overnight. Because now everything he does is so unbelievably thought through that by the time it gets to me, I'm often just like, great. I love it. I trust it. Let's do it. So I've learned process can be huge and also that other people can do stuff. And once they get good.
Yeah. Then they, then you trust them and then they can do stuff on their own and then it's incredibly valuable. Um, but it costs a lot to get a person who can do that and sustain them and blah, blah, blah. So anyway, this is all stuff. Uh, you know, this is hiring one-on-one. I'm still learning it, but yeah, my revenue is not such that I can have like 400 in spare revenue for another person. So, um, so, and it's like flux isn't going to grow in revenue magically.
to get to that level unless there's another a big push of some kind you know yes which is where we started this conversation i think like there's a whole marketing angle like you've just done the low-hanging marketing fruit which is yeah everybody who knows you right you know not just like personally right but who are in your existing audience there is marketing yeah and like none of do marketing could be next on the list of things to do like right um which again is a thing
see this is where like it's not so cut and dry when you think about it kind of in these absolute terms of like oh well if i pay another developer that's gonna cut into my money yeah it's not exactly true because like if you have another developer who's doing a lot of stuff that you would otherwise have to do then if you're doing that stuff now you aren't going in marketing
yeah right and you're like the only person who can go on market see that's like it's like weird things that interact with livewire and marketing are like the things you can only do right right All these other things we talked about, even the hard ones, like they could grind away at it. It's going to take them twice as long. Who cares? It's getting done. When it's done, it's done. You move on to the next thing.
But you freeing up your time and mental bandwidth to be the guy who goes out there and does YouTube streams and writes posts for somewhere who, whatever, is tweeting the cool things you're building, all that stuff. like that's what you need to do to grow the revenue that's how you grow the revenue so yeah it's true somebody needs to be marketing for revenue to grow it's best that it's me um at this point but it would also be sick if some because there's like
I imagine, you know, there's a lot of opportunity for getting flux in front of people's faces that wouldn't even see me anyway. You know what I mean? Like other channels. Like I'm thinking like the Pavalis type channels. Like that's, that's the Laravel underground. That's not, that's not flagship Laravel, like going to Laracon. It's not that it's the Laravel underground. And that has always kind of been my market anyway.
But, but how did those people even get to see me? And it's like, that's where, you know, having somebody that gets the LinkedIn, the button, you know what I mean? The overseas, the enterprise, all these areas that I don't touch at all. I don't communicate with them, you know? So having that. They're building stuff. They need flux. They need flux. Okay, so we got flux. I'm going to get a UTI.
You know, if I, you know, keep two and a half hours. I mean, you know me, like I'm not going to be the one to stop the street, but I've drinking. I've almost I think I have almost completely downed this entire. catalog. And I'm just like... It's just pain at this point. We're setting records on here, baby. This has got to be the longest notes on work, right? It's got to be. Two and a half hours? It's got to be. Totally. It's got to be. There was an Aaron long one, my recent long one.
my money long one they're getting longer those are under two hours though i think right oh this we're busting records so this is a good um i mean this is what we need to have a flux uh follow-up discussion on all this a when i do more of this b because there's a lot of just like business level problems to still solve which are we touched on here um but
Yeah. And all of it comes down to me not wanting to spend money for more people. That's really the fundamental problem I need to solve. It's hard. It's a hard one. It's like money in your pocket. It's hard to take it out.
Try to take it out and not believe that it's going to, while not believing that it will make more than when you take it out. You know what I mean? Because I do think that it's really easy to waste a lot of money on these endeavors. Oh, for sure. I've wasted money. People do it all the time.
and i think that's like business fundamentals 101 that like i think number one mistake that i see people make is just burning money that they aren't going to make back i think for you like we said the closer you can tie it to marketing i feel like you will be happier and it will pay off for you because yeah that you will see the other side of it right when you start if you get out there and are talking about flux you will sell more flux and you will be like oh this person is making me money
because it's freeing me up to go sell flux. Whereas if you just have another developer doing developer things, it just feels like a cost center, even though like they're making flux better and that's helping you sell more too. It's not. So I think starting first with like increasing revenue type.
hires that you can position in your mind is useful it's just like even that like i so the top when i hired titan to do i hired them for alpine components because it was stale and it needed some updates and flux was just way outpacing it quality everything yeah so and they had some bench stuff and i was like i'll take your bench and
Oh, let's do X amount of money. And the whole goal of this is to just make Alpine components better. They did a ton of work on it and massively improved Alpine components. I'm not sure I saw that money at all. Like I was so surprised. it's like i did the whole email thing announcing all the stuff and it was just like that didn't do anything yeah so it's like well because i thought quality would be the most like doesn't sell necessarily and
And you just were announcing it to people who already owned it, right? Like they already had it. I mean, people on the list who might not have purchased, but yeah. you know you're right they've heard about it they were either gonna buy or they didn't gonna buy you know i mean like yeah and now it's better but it's not like well here's you weren't like here's 10 new components for alpine components you were like now it's better
Right. Okay. So your proposal is you think of the person you're hiring or the work that they're doing as opportunity cost for yourself so that like. you are now, so you have to complete that cycle. I have to be intentional about going out and doing the marketing and not just letting it free me up to do more of the geekery, which is my nature. I think for you, that would be the key to make you feel like, I think it could be worthwhile anyway.
But I think for you, you will feel like it's more worthwhile if you are mentally in the spot. Be like, I'm ready to go hit this marketing card. Now I'm making time for me to do that. And now I'm going to go do it. I think that will be a nice cycle for you to be in.
Yeah, you don't think the completely obnoxiously vocal and then completely... silent for months it's like a good cadence of business it's just like i mean the bigger issue with that is you're just speaking to people who already know you like i think it doesn't yeah you're not selling anything you want to sold to those people right like yeah i mean it's good there's of course
people in the audience who haven't bought yet what the right time yeah but you're not reaching new people it's true that's the thing you need to reach the people who are right now starting a project and you're like well i need components for that and you're meeting them where they are not
they've already found you and are had been waiting for the project you know yeah those people are here and that's great but that's who you're already selling to yes you need to sell to new people yes who don't know who caleb porzio is um if i was in a car right now Even the smallest pothole would send tears down my face. Let's go to three hours. Come on, 22 minutes. Hold on, Caleb. Dude, don't tell me. Hold on. I would totally do it. All right, man. Well, thanks for having me on. It was fun.
Thanks for the prompt, Ian. This is all gold. This is very much, for the record, mirrors our own roadmap almost to a T. Awesome. Except with way more flesh on the bones and really awesome... Things like filter doesn't have to be with tables and dropdown, drop zone file uploader doesn't have to be a file pond alternative per se. It's like kind of just, you know, the thing where when you actually roll up your sleeves.
and dig into the thing 50 of the time you go this is way more doable than i thought and the other 50 i was scared you you die It's way more work than you thought. Exactly. It's way more work than you thought. Yeah. That's pretty much how it goes. But most of these have been way less work than I thought. Sort of. I don't know. I'm excited to see them come out at some point. Okay. We'll get it done. I'm going to go pee. Thanks Ian Lansman for hanging out. I'll be seeing you. All right, bye.