2 Jobs, Stabilizers, and Torchlight Clients

September 10, 2021

Sean is feeling the weight of his many jobs, Aaron tries to say "stabilizers" as much as possible in one episode, and we talk about new Torchlight clients.

Transcript

Aaron
00:00:01 – 00:00:10
Okay. Hello, friends. Hello. So, Sean, do you wanna start and give us a kind of a status update with the Vue stuff?
Sean
00:00:11 – 00:00:21
Yeah. The Vues the Vue stuff. So that's pretty straightforward. All I managed last weekend was to re understand how the hell the Vue stuff works. So it's from there.
Sean
00:00:21 – 00:00:36
I did like a few code changes and then yeah. So I just got my head wrapped around it again and got a few code changers. The view thing is really cool looking at it again. It's like, it does like, cause it has a lot of different modes. So it's not just the query builder.
Sean
00:00:36 – 00:01:05
You can also do static queries without a blueprint. So you can just like write Vue components and it builds a blueprint for you. And then, of course, it's all completely separated out, so you can build whatever UI you want on top of it with completely renderless components. So it's really turns out it's really, really, really complicated for but of course, all I need to do for this first, you know, release that we're doing is get it to work in, like, builder mode. So that's what I'm trying to just focus on.
Sean
00:01:05 – 00:01:10
But I had 1st to get to where I could even focus on that, I had to remember, like, how does it work?
Aaron
00:01:11 – 00:01:13
Yeah. You feel like you got there?
Sean
00:01:13 – 00:01:40
Yeah. Yeah. I remember now. And I remember like our so, like, we started using Tailwind UI components since I haven't looked at this probably in, like, 6, 7 months, something like that since we started on the the client project. And in the interim, they introduced JavaScript piece, like renderless components to go along with the tailwind UI components.
Aaron
00:01:40 – 00:01:42
Is that the headless UI stuff?
Sean
00:01:42 – 00:01:54
Yeah. And I basically had implemented my own version of that for a couple of them. And one of them is hard. Like, a selection drop down
Aaron
00:01:54 – 00:01:54
is
Sean
00:01:54 – 00:02:17
very hard to do, to be accessible, to have, like, 2 choices, multi select or not, etcetera, etcetera. Like, it's just a very complicated dealie. And then ours is both a renderless and tailwind component. So that's what I'm doing now is the option select. So, like, you know, a condition you could select one of many things, like a hat that has potential 3 like, 4 or 5 potential colors.
Sean
00:02:17 – 00:02:32
So, like, you can choose brown, red, blue hats out of a list. So it's like a multi select option for a query builder, and that is is you know, we already have that working in the the back end, but, like, to make it work on the
Aaron
00:02:32 – 00:02:32
Right.
Sean
00:02:33 – 00:02:38
The drop down, which is totally custom, like beautiful, nice looking, you know Without
Aaron
00:02:38 – 00:02:41
pulling in component. Some janky third party component.
Sean
00:02:42 – 00:03:00
Yeah. Exactly. And that was the choice that I made way back then was like, okay. I'm just gonna write my own because I looked around, and it was like, I don't like I don't like any of these, and this is a pretty important part of our thing, but I'd also pulled in a big scope of work with that. So that's where it's stuck right now is is that basically.
Aaron
00:03:00 – 00:03:07
So Well, if it makes you feel better, none of that is wasted because headless UI only supports Vue 3.
Sean
00:03:08 – 00:03:08
Oh, okay.
Aaron
00:03:09 – 00:03:20
So and and React. But as far as Vue goes, it's only Vue 3. So it's not like, oh, dang. I coulda just pulled in headless UI, because we're supporting Vue 2. So we're good there.
Aaron
00:03:20 – 00:03:35
Okay. I mean, good in that you still have to write it, but at least it's not, you know, it's not a waste. Cool. Nice. Anything else on your side?
Sean
00:03:39 – 00:03:47
That's it. Other than it's struggle to find the time and enter well, it's not really to find the time, it's to find the energy to do it right now.
Aaron
00:03:47 – 00:03:49
Yeah. You seem pretty maxed out.
Sean
00:03:50 – 00:04:00
I am maxed out. I'm like right. So I just got promoted, and then I have 2 jobs to do for now, because we're a small company, so it's not really
Aaron
00:04:01 – 00:04:04
I still Two jobs at the job, at the one job.
Sean
00:04:04 – 00:04:20
Yeah. And I'm doing kind of, you know, as you'd expect, a crappy job of both at the moment. You know, I was, like, focused on the new gig a little bit, which then called the other thing to fall behind, and people are like, no. This is like you really gotta focus on this. What have you been even doing?
Sean
00:04:20 – 00:04:24
You know? And I'm like Oh, no. So I gotta get back to focusing on that stuff.
Aaron
00:04:25 – 00:04:25
What are the 2 jobs?
Sean
00:04:25 – 00:05:05
The context switching costs is high. The 2 jobs, it's like I'm doing product, so I'm like the director of product, and then also I'm still the front end developer. We have Gosh. Another front end developer part time, but it's basically just mean there's parts of this stuff that I'm the only person that can really has the technical skills to do for this other part of the product, so I have to. And it's similar situation actually to our select drop down where it's like, we have this really important input type for time entry, and I can't just put some drop in thing, and I gotta solve it for all of our different clients and customers and
Aaron
00:05:06 – 00:05:06
Mhmm.
Sean
00:05:06 – 00:05:14
All their different devices that they use. And everybody's like, why is time entry so hard? And I'm like, it's very Let
Aaron
00:05:14 – 00:05:15
me let me tell you about time.
Sean
00:05:15 – 00:05:25
Intricate and difficult. And yeah. But then and then this the context switching right now is just killing me. It's killing me.
Aaron
00:05:26 – 00:05:28
Yeah. Those are very different contexts.
Sean
00:05:29 – 00:05:47
Yeah. I got that. And then I'm meanwhile trying to, like, plan the next chunk of work for our team and get that squared away. That's like step like, the first thing that I wanna do in my product role is, like, get any kind of process whatsoever. Well, because that way today, I was like, why am I even working on this time entry thing?
Sean
00:05:48 – 00:06:01
And they're like, because I couldn't even remember. It's like, why are we doing this? Why is this work important? And, like, it would help me decide what to work on or not work on. So I'm trying to fix that problem, and that's important because that's what we do.
Sean
00:06:01 – 00:06:25
We just like jump back and forth, you know, in priorities without really having a plan. And that's what I'm gonna fix, except I have to do it, like, in the middle of everything is very urgent on the, you know, developer work that I have to do too. So it's exhausting and frustrating, and I hate not doing a good job. I hate that. You know, that bothers me.
Sean
00:06:25 – 00:06:26
So you
Aaron
00:06:26 – 00:06:30
know that you're not doing a good job? Like, have other people said that?
Sean
00:06:30 – 00:06:35
I wasn't. Yeah. The time input thing, they were definitely like, why is this taking so long? Hurry up. Go faster.
Sean
00:06:35 – 00:06:58
I mean, I'm doing what I can, and they definitely could've gone faster, if I've been more focused on it. But yeah. And I can also just tell everybody's, like, frustrated that it's just been hanging out for weeks weeks now, which I'm like, I get. Yeah. But I I don't I like being more aligned with, like, where people it it doesn't matter.
Sean
00:06:58 – 00:07:02
I know that's not, my fault, but it I still like doing a good job.
Aaron
00:07:02 – 00:07:21
Yeah. Yeah. That's not a fun spot to be in. I didn't realize you had 2 jobs at the one job. I knew that it was more, like, I knew that from your promotion, it was gonna be more, like, I guess, intense or whatever because you have more responsibilities and you switched to, 5 days.
Aaron
00:07:21 – 00:07:25
But didn't realize you were kind of still hanging out in both spots.
Sean
00:07:26 – 00:07:48
Yeah. That's yeah. Exactly. And there's still enough work for full time front end dev, to be honest. But the thing is, like, what I have to do is figure out once we figure out our priorities because like the whole my whole job, my other job is to one of the main goals is for me to improve developer velocity, you know?
Sean
00:07:48 – 00:08:15
So what's developer velocity? That's a great question. To me, it means like how it it doesn't matter how fast you write code if the thing you write, none of our clients or customers care about and it provides no benefit to the business at all. So, like, if there's so many high value things we could work on that even if I'm not that efficient at it and we don't get as many things done as we possibly could, like, who cares? Because Mhmm.
Sean
00:08:15 – 00:08:44
Before we would have been wasting our time on stuff that didn't really matter. So that's why I'm like, I really wanna focus on the prioritization piece and get us set up for that, even though it sucks that, like, not much is getting done, you know, for me, development wise, because I'm really focused on that. But once it does, then it doesn't I won't need to spend 40 hours a week on the front end stuff. I doubt it. And if if it does come down to that where we have enough projects that, like, we need that, well, we'd hire a contractor for temporarily to, like, bump up the front end time or whatever.
Sean
00:08:44 – 00:08:58
So I that but it can't do any of that until I do the prioritization, but then everybody wants me to focus on the code stuff. It's just a stupid awkward phase where I just like, the solution is to work more for a couple weeks.
Aaron
00:08:58 – 00:08:59
Yeah.
Sean
00:09:00 – 00:09:16
I mean, there's another solution which is prioritize with my boss, but right now he would prioritize time input because we got this very noisy client who would prefer that get done ASAP. So, you know Is the other stuff
Aaron
00:09:16 – 00:09:22
urgent? It sounds like the time input stuff is urgent. Is the sprint planning, prioritization, all of that urgent?
Sean
00:09:23 – 00:09:25
No. It's important. Yeah. But not urgent. Right?
Sean
00:09:25 – 00:09:26
So But
Aaron
00:09:26 – 00:09:26
not urgent.
Sean
00:09:26 – 00:09:44
But if we did it, we wouldn't end up in these, like, urgent urgent urgent situations. That's why I'm trying to, like, remove this from the yeah. Yeah. So I'm I'm a little exhausted of of that right now. Like, I just feel like I'm just working all the time.
Sean
00:09:44 – 00:09:47
So then it's time to go work on hammer some stuff on the weekends, and I'm like
Aaron
00:09:48 – 00:09:49
Punch me in the face.
Aaron
00:09:49 – 00:09:49
Sure.
Sean
00:09:49 – 00:10:02
Yeah, exactly. Yeah. But but it sucks too because I really want to work on the hammerstone stuff cause I'm excited about that. Just like, come on, energy. Come to me.
Sean
00:10:02 – 00:10:08
And so I can work on it. It doesn't help that I'm doing this sleep restriction thing, like, right in the middle of it, which is coming together and getting better.
Aaron
00:10:08 – 00:10:09
I don't know that.
Sean
00:10:09 – 00:10:20
But, like, I'm still not sleeping. I'm definitely sleep deprived, which doesn't help at all. There's no good time to do that. So it is what it is.
Aaron
00:10:23 – 00:10:27
Oh, man. That's a lot.
Sean
00:10:27 – 00:10:38
Yeah. So my my grumpiness levels are a little higher than normal. Colleen, to answer your question from before the podcast started recording, I don't think that I'm normally like this. I think my grumpiness levels are higher than normal.
Aaron
00:10:38 – 00:10:40
Yeah. For the record, she did not
Aaron
00:10:40 – 00:10:40
say grumpy.
Sean
00:10:43 – 00:10:51
I'm calling myself grumpy. I'm definitely grumpy. I think it always helps for people to know, like, when somebody's grumpy and it's not them. Because it's a little bit less you're like Yeah.
Aaron
00:10:51 – 00:10:51
When it's a situation
Sean
00:10:51 – 00:10:56
angry at me. Like, yeah. I'm not. Absolutely. I'm really not.
Sean
00:10:56 – 00:10:58
I'm just grumpy in general.
Aaron
00:10:58 – 00:11:09
Honestly, any kind of sleep deprivation is just the worst. So, you know, layering that with your new work responsibilities and and your other stressors, like, that's a lot.
Sean
00:11:10 – 00:11:12
Yeah. It's all the good stress. Right?
Aaron
00:11:12 – 00:11:12
Mhmm.
Sean
00:11:12 – 00:11:31
Which is fantastic. I'm super happy about where the career is at at the moment, with everything going on, but it's too much. I sometimes am like Yeah. Should I just quit everything and go like, I got my old job is available. I could probably go back to this, like, you know, it's this like, I don't know, I probably work 30 hours a week.
Sean
00:11:31 – 00:11:51
I just go into the office. Now it's mostly remote, so it's like you get paid way more than I'm getting paid now to, like, hardly do anything checkout. Back when I did that, I was like I did that for a few years. For for like a first couple years, I was trying to start a company on the side, you know, as per usual, my usual MO. I'm always doing this.
Sean
00:11:52 – 00:12:09
But then for a couple years, I actually decided to just take a break. It was awesome. I was like, I lost £30. I spent, like, 15 hours a week on my bike. I was, like, racing bikes and super fit and relaxed, and I'm, like, maybe I I wanna do that again someday.
Aaron
00:12:09 – 00:12:36
Man, I totally think about that sometimes. I totally I totally think, like, I'm spending a ton of time on side, like, side project stuff outside of work. What if I just what if I just worked like a normal like a normie? And then when it wasn't work time, I, like, did stuff. I've thought about that, but I keep, like, I keep coming back personally.
Aaron
00:12:36 – 00:12:51
I keep coming back to, like, no. I really, like, I really wanna do my own thing. But it's really it's really tempting to be, like, nope, 5 o'clock, laptop shut, and it stays in the shed, and I go in and just, like, I don't know. I don't even know what I would do.
Aaron
00:12:51 – 00:12:53
What would you do with all that time?
Aaron
00:12:53 – 00:12:59
I have no idea. I have no idea. I have no idea. Like, I guess I could get into Legos or something. I love Legos.
Aaron
00:12:59 – 00:13:04
Haven't done that in 20 years. But I really I really have no idea.
Sean
00:13:05 – 00:13:13
You get so bored. That's what happened to me. And I started that's why I like, okay, can I just oh, just gonna do some exercise? No. Of course, I can't just do exercise.
Sean
00:13:14 – 00:13:18
I have to be riding my bike Yeah. 15 hours a week, like, it's a part time job
Aaron
00:13:18 – 00:13:19
Training for something.
Sean
00:13:20 – 00:13:33
Doing high level races and, like, getting injured and stuff, like Yeah. I don't know. Maybe when I don't know. I don't I don't know if it's I'm capable of not doing that. Colleen Diefer.
Sean
00:13:33 – 00:13:34
What they would do.
Aaron
00:13:34 – 00:13:54
Oh, so this is, like, our ongoing family joke. So the other day, I said to my husband, maybe I'll just sell SimpleFile upload because maybe you saw, like, the multiples are insane right now for small sasses. And then, you know, I'll just take a year off. And he looked at me, and he was like, you will never take a year off. You were supposed to have that 4 day a week job where you had Fridays off.
Aaron
00:13:55 – 00:14:06
Never took Fridays off ever. Like, I just don't want to. Yeah. I don't know. I think my situation's a little different though because I spent 5 years not working when I was staying home with the kids.
Aaron
00:14:06 – 00:14:20
And, of course, that's incredibly busy, but, also kind of incredibly boring. Like, it's great, but boring. And so I've done kind of the lowers well, it's not lower stress. I don't mean to say it is. But
Aaron
00:14:20 – 00:14:21
Different stress.
Aaron
00:14:21 – 00:14:32
Different kind of stressors. I wouldn't know what to do with myself. Like, really. I I don't know. I told you, Aaron, I started, like, baking bread and, like, doing all kinds of weird, like, intense things, kinda like you were saying, Sean.
Aaron
00:14:32 – 00:14:44
Like, I was, like, training for this thing and that thing, and I was, like, arbitrarily, you know, putting restrictions on, like, well, we're not gonna eat processed foods for 5 months. Like because I was just I'm crazy
Aaron
00:14:44 – 00:14:46
like that. Something something to work on.
Aaron
00:14:46 – 00:14:53
I have something to achieve. Right? Like, I just couldn't let it go and chill out like a normal person. Couldn't do it. So, yeah.
Aaron
00:14:53 – 00:15:06
Okay. Good. We're all in good company here. Well, Sean, I'm sorry that it's so much. I did not realize that the the work work was so much.
Aaron
00:15:06 – 00:15:09
That sounds that sounds really stressful.
Sean
00:15:09 – 00:15:30
Oh, that's crappy. Yeah. And I guess I gotta add into it. It's like also because Isaac started the school year this year and we decided I mean, I think it's a good choice, but it's a it's a huge draw like, a huge pain for us, but we decided to keep him at the school he's at, which is I spend 2 hours a day driving him right now. So I have to just, like, devote 2 hours a day.
Sean
00:15:30 – 00:15:38
It's only for this year. We're not doing that forever, but it sucks. Yeah. So I'm like, I end my wrap. I have to I have to finish.
Sean
00:15:38 – 00:16:03
I start. So now I'm waking up at 6, kinda get him ready, and then I start at, like, 6:30, 7. And then I work until 3:30, 3:45, and then I gotta go drive him. I don't get home till, like, 5:30, and then I make dinner, then he goes to bed, and then it's like I have to be real focused with my time too. Like, it just doesn't feel like there's enough time to go around.
Sean
00:16:03 – 00:16:04
Brutal.
Aaron
00:16:04 – 00:16:05
Yeah.
Sean
00:16:05 – 00:16:09
Yeah. It's gonna be a stressful year. Yeah. Just gonna be a stressful year.
Aaron
00:16:10 – 00:16:22
K. Well, if if you wanna drop off now, you can. That's alright. Okay. Colleen, what's going on with you?
Aaron
00:16:22 – 00:16:23
Who's the client?
Aaron
00:16:24 – 00:16:27
Oh, well, I started lifting weights again, and so
Aaron
00:16:27 – 00:16:28
Oh, you did?
Aaron
00:16:29 – 00:16:35
Yeah. He said, what's going on with you? That's what's going on with me. So that's great. So personal.
Aaron
00:16:35 – 00:16:40
That's good. Client is good. There's a lot. There's a lot just a lot of stuff, which is good. Right?
Aaron
00:16:40 – 00:16:49
Like, lots of lots of stuff to work on. So I'm just keep on keep on in there. Nothing really exciting.
Aaron
00:16:50 – 00:16:55
Okay. Yeah. You said lifting weights again. Have you been super into lifting weights before?
Aaron
00:16:56 – 00:17:13
Like, pre pandemic. So I was super into lifting weights, like, pre pandemic, and then, obviously, the gym's all shut down. So then I had that trainer that came to my house, but you couldn't get real weights. I mean, you couldn't find them to save your life. So we had I had my little dumbbells, which was cool.
Aaron
00:17:14 – 00:17:18
Anyway, so I found a new gym, and and I'm getting back into that. So that's been
Aaron
00:17:18 – 00:17:21
fun. Nice. Yeah. That's great.
Aaron
00:17:21 – 00:17:22
Totally.
Aaron
00:17:22 – 00:17:30
And I think I mentioned this in Slack, but you said we should hold off. So should we still hold off on the 5 levels of relationships? Haven't gotten through yet.
Aaron
00:17:30 – 00:17:32
Haven't figured it out yet.
Aaron
00:17:32 – 00:17:32
Great.
Aaron
00:17:32 – 00:17:39
For some reason, you know, walking through that recursion is hard. Like, it's just like when you're trying to walk through it.
Aaron
00:17:39 – 00:17:40
It's very hard.
Aaron
00:17:41 – 00:18:09
So for some reason, it gets it gets 3 levels deep, and then it's throwing off my base query. Not my initial query. When I say base, I mean, like, the lowest level that's actually, like, where this thing is this thing. So it's almost there. I think it might be something, in the way I'm unwrapping them based on because in none of our tests do we test multiple level of, like, children trees, children relationship trees of different kinds of relationships.
Aaron
00:18:09 – 00:18:20
Because all the specs pass. All the tests pass. So anyway, so I wrote a test for it, and I'm sorting it out. But it's a it's an interesting challenging problem. So
Aaron
00:18:21 – 00:18:26
So it's like a has one, then a has many, then a belongs to, then a has one, then a
Aaron
00:18:26 – 00:18:34
has many. Yeah. Exactly. And I think that, you know, it's the double nested remember the pending relationship subquery data structure we built up,
Sean
00:18:34 – 00:18:34
which
Aaron
00:18:34 – 00:18:46
I need to review? It's the 2nd level child in that data structure that's having the problem. So I don't know if it's because when I'm unwrapping a children when I'm unwrapping, like, the children
Aaron
00:18:46 – 00:18:47
Going back out?
Aaron
00:18:47 – 00:18:59
Yeah. Back out, I lose 1. And I don't know why I'm losing 1. So I'm not sure if I'm overwriting it because I didn't account for I don't know what's happening, but I'll I'll figure it out. So I don't really have anything exciting to share.
Aaron
00:18:59 – 00:19:05
I don't know. That's pretty exciting. I I love I loved that. I don't think anyone else followed it, but I loved that.
Aaron
00:19:07 – 00:19:17
I mean Great. The part of the problem, I think, is I don't like, I need to map out the ideal tree structure for the pending relationship subquery data structure.
Aaron
00:19:17 – 00:19:17
Mhmm.
Aaron
00:19:18 – 00:19:37
And just kind of like a tree. Right? Like, walk, basically, walk the nodes of the tree to make sure I'm hitting them where I think I'm hitting them. And so that's what I'm gonna do today and hopefully figure out where it's getting lost. There's some, like, oddities to the data structure, because I decided to change the way I was building it.
Aaron
00:19:37 – 00:19:49
Not the structure itself, but, like, the way it, like, would auto populate the values and the key value pairs. Because, like, in Laravel, you were just randomly making nested keys. Yep. You can't do that.
Aaron
00:19:49 – 00:19:53
Random is a strong word, but, yes, I I was making nested keys.
Aaron
00:19:53 – 00:20:16
So I can make nested keys, but I can't for example, if if hash a doesn't have a value, I can't just go hash a with a key a and then that with a key of b because a is nil. So it's like, oh, you can't do so there's a way around that, which is what I'm using, which is cool, but it might be introducing other subtle bugs. Anyway
Aaron
00:20:16 – 00:20:16
Yep.
Aaron
00:20:17 – 00:20:18
I'm working that out. But Yep.
Aaron
00:20:18 – 00:20:19
That makes sense to me.
Aaron
00:20:20 – 00:20:21
What I'm doing. Okay.
Aaron
00:20:22 – 00:20:33
Cool. Yeah. We have, we have a helper that does that for us. So you can set a dotb.c. And if a and b aren't there, it'll, like, you know, populate them or something like that.
Aaron
00:20:33 – 00:20:45
So I I get that. Yeah. And you've got you've got a you've got a deadline coming up. Right? You said you needed to have filters working and ready by, you know, this event that they have.
Aaron
00:20:45 – 00:20:46
When is that?
Aaron
00:20:46 – 00:20:47
End of the month.
Aaron
00:20:48 – 00:20:49
End of the month.
Aaron
00:20:49 – 00:21:00
It's kind of a self imposed deadline. No one was like, we absolutely must have this by then, but I feel like it would be good to have it by then. So it is an option. So that is my goal. Yeah.
Aaron
00:21:00 – 00:21:15
Honestly, this one is just this is the most complicated one. So once I get this, it's all gonna fall into place. Like, I really feel that way, because this is, like, as we discussed, 5 level deep relationship, multi mixing of relationships, etcetera, etcetera.
Aaron
00:21:15 – 00:21:26
Which this is not our realm. They shouldn't I don't know. Five levels away. I feel like there's gotta be a better data structure for them to be using.
Aaron
00:21:27 – 00:21:31
We can we can talk about this I mean, I don't I don't know that I agree with that. I think that
Aaron
00:21:31 – 00:21:32
There's no other way to do it?
Aaron
00:21:32 – 00:21:47
I I mean, I'm sure there is, but the reason they're doing it the way they're doing it makes perfect sense to me. Like, it really does. I think that you can always right? You can the problem is there's so yes. You could obviously change the data structure so you wouldn't have to do that.
Aaron
00:21:48 – 00:22:04
Mhmm. But there's so many things they wanna be able to do that I think it's smarter to make it work this way, or else you're greatly modifying. Like, you'd have to be more specific in what you want, and I don't know that the
Aaron
00:22:04 – 00:22:06
Oh, I see. So this preserves flexibility.
Aaron
00:22:07 – 00:22:12
That's, yes, that's what I'm trying to say. Yeah. Okay. Well, you're the expert on that.
Aaron
00:22:12 – 00:22:15
Yeah. So So It's making sense. Someday.
Sean
00:22:16 – 00:22:58
You know how like in the front end we have Apollo and we have GraphQL, so you can, like, have this middle layer of a graph database in between your back end and your front end. So that way you can do kind of arbitrary queries on the graph database with like an API that the front end has. I wonder if there's something there for us, you know, longer term of having like a middle layer, supporting a middle layer, which would support faster queries on stuff like this without them having to do, you know, recursive stuff. This is obviously not a small thing whatsoever, but just like if we're we're focused so much on these query things, I wonder if that makes sense for one day
Aaron
00:23:02 – 00:23:02
for us to consider
Sean
00:23:02 – 00:23:07
doing, like actually denormalizing data and pulling things into like a middle layer or enabling that at least.
Aaron
00:23:09 – 00:23:18
That seems super interesting. And you'll have to explain to me at some other time what Apollo actually is, but that sounds fascinating to me.
Sean
00:23:19 – 00:23:47
Yeah. Like Apollo solves the problem of front end needs some bit of data from the back end. The back end would have to then write a special API endpoint for that data, write the queries, etcetera. With Apollo, the front end can say, okay, so the back end you've already defined, like, here's all of the data, here's the structure, and it's in this graph database structure. Then the front end can go and say, Okay.
Sean
00:23:48 – 00:24:16
I just need this swath of data with these criteria. Go get it for me. And it goes and gets it from the graph database. If the data is not already there, the middle layer that you write for Apollo goes and gets it from your database and your RDBMS and then populates it into your graph database and then the front end pulls it in. So it's just like this middle layer, which enables almost arbitrary queries from the front end on the data.
Aaron
00:24:18 – 00:24:20
It seems pretty cool. Mhmm.
Sean
00:24:21 – 00:24:38
Yeah. It just dawned on me. It's like, oh, maybe that's that's an interesting pattern, which might apply to us at some point. Yeah. Because some queries are just gonna be freaking slow if you're going through 5 different levels and joins and Yeah.
Aaron
00:24:39 – 00:24:48
Yep. Yep. That's what I'm afraid of. But Colleen, you'll tell us when it happens. We'll sort it out.
Aaron
00:24:48 – 00:24:49
Report back. Yeah.
Aaron
00:24:49 – 00:24:51
Yep. We'll make it work. Be good
Aaron
00:24:52 – 00:25:08
learning. Yeah. For real. I think Mike, you know, obligatory Mike Buckbee reference. He said we got the deal of the century by having you work on Hammerstone for the client, because we're learning just just a massive amount of stuff, and it's pretty amazing.
Aaron
00:25:11 – 00:25:15
Okay. Shall we move to something else? Anything else, Colleen?
Aaron
00:25:16 – 00:25:18
Nope. Okay.
Aaron
00:25:20 – 00:26:01
Let's see. Staying on Hammerstone, I don't know how much I think, Colleen, you haven't started really diving into the stabilizers too much because you've been working on the other stuff. But I spent a bunch of time over the weekend working on the Laravel stabilizers. So just as reference for everyone else, stabilization is the process by which a filter turns into a reproducible string. So, like, you can put it in your URL, you can put it in your database, or whatever, and then that string can turn back into a filter.
Aaron
00:26:01 – 00:26:50
So it's, like, for sharing filters, saving them, that kind of thing. I got all of the Laravel ones set up with prefixes, so now every stabilizer every stabilizer has a unique prefix. So if somebody's using database stabilization in one spot in their app, and URL stabilization in another spot in their app, then the refine library can correctly differentiate which stable ID goes with which stabilizer. Right? So when you call from stable ID, refine will be able to know, oh, this stable ID, I need to run through the URL encoded 1, and this stable ID, I need to run through the database encoded one.
Aaron
00:26:51 – 00:27:06
Right? Because if we're giving stable IDs to users and saying, like, alright. This one this one's URL, this one's database, and then they come back with a stable ID, we need to be able to tell which stabilizer it came from. Does that make sense?
Aaron
00:27:07 – 00:27:16
Yeah. Makes total sense. So, basically, you're never calling from stable ID on one of the child classes, like URL encoded stable ID or database stable ID?
Aaron
00:27:17 – 00:27:33
Exactly. So I'm always calling filter filter from stable ID, and then the filter inspects the stable ID that it was given and does the differentiation as to how to unstabilize it, how to turn it back into a filter.
Aaron
00:27:34 – 00:27:39
And you're doing that just you're just pulling the string off the front. Right?
Aaron
00:27:39 – 00:28:01
Yeah. So each filter now requires a prefix. So it's just like just like UE for URL encoded and DB for database. So the the stable ID is now 2 characters longer, and we just pull those off the front, instantiate the right class, and then give the stable ID to that class, and it can do its
Sean
00:28:03 – 00:28:05
thing. That makes sense.
Aaron
00:28:06 – 00:28:16
So I committed that, and, Collin, whenever you get to stabilize, no rush at all. We can talk through it again, and it'll it'll make more sense when your head space is there.
Aaron
00:28:16 – 00:28:32
I mean, I think it makes total sense. You're literally just doing a string like a like you said, a prefix string. But you're doing that to help the just to kinda help the developer not have to remember which they've analyzed, or they're uncoding, encoding, unencoding?
Aaron
00:28:33 – 00:29:10
Yes. To help the developer, but also to solve for the situation when so like if it's a tight loop and it's like controller, view, controller, view, we know which stabilizer we're working with because it's the one that we are using in that controller or whatever. Yeah. But in the case where, in the case where we may not know where this stable ID came from, we need to be able to unencode it regardless of where it came from. Don't we always know?
Aaron
00:29:10 – 00:29:40
We don't always know, Because we have I think maybe in the client, we might always know. In in the client you're working on, we might always know. But we have the concept of automatic stabilization, so every filter that gets run returns a stable ID, and that's kind of what we put in the URL bar. Right? And then we have the concept of, manual stabilization, and that's where you would, like, click the save button and name it, like, Colleen's scrape filter.
Aaron
00:29:40 – 00:29:56
Right? And those 2 can be separate stabilizers. Right? So the automatic is probably URL encoded, so we're not, you know, plugging up the database. And the, manual is probably database so that it stays around forever, and we have a record of it.
Aaron
00:29:57 – 00:30:18
Right? So then you've got 2 different stable IDs, and how the user ends up using those is kinda up to them. Right? Or somewhere else in the app, we could take in a stable ID and not know which one of those 2 it came from. Yeah.
Aaron
00:30:18 – 00:30:20
That'll make sense. He seemed quizzical.
Sean
00:30:21 – 00:30:38
I always wondered why why do we even have a database stable ID? Like the stable ID and the URL encoded one contains all of like the entire filter. So why, why do we need anything else? Like we have you, we, why can't we just give developers, here's the stable ID. Save it to a database if you want.
Aaron
00:30:41 – 00:30:53
Okay. Let me see if I understood that correctly. So why why do we give them a database stabilizer versus giving them just a stabilizer and saying do whatever you want with it?
Sean
00:30:53 – 00:31:03
No stabilizer. Just like, hey. Give me the ID for this for the I don't know. Call it I wouldn't even call it an ID. Call it, like, the compressed Right.
Aaron
00:31:03 – 00:31:04
Data Serialize
Sean
00:31:04 – 00:31:08
filter. The filter. Serialize. Yeah. Serialized this filter for me.
Sean
00:31:08 – 00:31:30
And that's the thing that we give them back that goes into the URL because that contains by necessity, everything it needs in order to reproduce the filter. Why do we need anything else other than that? Why I'm not I'm genuinely curious, like, the use cases. Like because, hey, we got this, we got this value, contains everything you need. Why don't we just expose only that to developers and then you decide what you want to do with it?
Sean
00:31:31 – 00:31:35
Save it to the database column, put it in a URL, whatever.
Aaron
00:31:36 – 00:31:51
Yes. So, okay. So I understand the question. One is developer experience, developer convenience. I mean, giving the to and from like, somebody's gonna have to write that plumbing.
Aaron
00:31:51 – 00:32:25
Right? So somebody's gonna have to write the unserialized d c or serialized deserialized part. And so if we can write it for them like, the way that we do it is we take the entire state, encode it, compress it, and URL encode it, and then we run it backwards when it comes back. So that's a nice thing that we can do for our clients, our consumers. And then it's really nice in terms of, like, why don't we just give them that URL?
Aaron
00:32:25 – 00:32:58
Because we can put on the filter itself, like, automatically stabilize this through the URL encoder, or automatically stabilize this through the database encoder, and it handles all of that plumbing at that level for them. So they can just have a database encoder and say it's this model with this column, and put the team and user ID on it as well, And then automatically, like, it's a first class citizen that we have built in, so that they don't have to, in a controller, in a command line, in a whatever, they don't have to do that themselves.
Sean
00:32:59 – 00:33:22
I always felt like the stabilizer was this unnecessary noun. I mean, cause I get what you're saying that we want to make it, we want to save them the trouble of having to put together the boilerplate of connecting and saving to a database column. Mhmm. Right? But how much do we actually save them by having the database stabilizer class?
Sean
00:33:23 – 00:33:32
You still have to write the code that says, get the ID or get the serialized version of the filter, save it to a column. Like that I don't
Aaron
00:33:32 – 00:33:35
have to write that. That's what the database stabilizer does.
Sean
00:33:36 – 00:33:55
Oh, so they don't have to specify the table that it's going to be saved in. They don't have to No. All of that. So should we ship with a stabilizer that you can use that then automatically connects to the database and has in rails as the migrations that we need to add the table and like all that stuff? Yep.
Sean
00:33:55 – 00:33:57
Got it. That makes sense.
Aaron
00:33:57 – 00:34:10
Yep. And if they want to change it, they can extend it and like, you know, change the column name and they don't have to write the whole class. They can just say, you know, I just want to override this one method. So yeah, we ship with all of that.
Sean
00:34:10 – 00:34:12
That's a good idea. I got it.
Aaron
00:34:15 – 00:34:31
Yeah. So did a bunch of work on that this weekend. I think they're better now. Rewrote some docs and I'm much more pleased with it. And I have the huge benefit of nobody has Laravel stable IDs out in the wild, so I don't have to worry about breaking anything.
Aaron
00:34:31 – 00:34:36
So it's not what I did is not backwards compatible and it doesn't matter. So I'm super thrilled about that.
Aaron
00:34:41 – 00:34:42
Yeah. They're doing Oh.
Aaron
00:34:42 – 00:34:43
Go ahead.
Aaron
00:34:43 – 00:35:08
I was gonna say they're doing something with stable IDs, which I didn't really see coming, is every Oh. Everyone has to have a stable ID. So, basically, if you don't if you haven't defined a filter, they make you kind of a a default example filter, give it a stable ID, and give it to you. So it's it's kind of a because it's in your initial form. Like your initial you're creating a new thing.
Aaron
00:35:08 – 00:35:19
They give you our filter and if you don't select anything, they just give you a default. But you're required, then the the model is required to that instance has a stable ID.
Aaron
00:35:24 – 00:35:28
Okay. Why do they I don't know if I fully understand, but why do they do that?
Sean
00:35:33 – 00:35:37
It's like a it's both just the way it's integrated in bullet train, I think.
Aaron
00:35:37 – 00:35:42
Yeah. I think, it's cool though. Like, it's neat. I actually I think it's cool. It kinda threw me off at first.
Aaron
00:35:42 – 00:35:58
I was like, why are they doing this? But I think it's it's kind of a neat way to use it because they always have, like, a default you're basically showing the user, here's how you could use this filter. It's like, here's a default filter. So I think it's cool, but it it's So,
Sean
00:35:58 – 00:36:26
like, in bullet train, you could scaffold a model. So okay. Bullet train scaffolding means, bullet train takes when you're like generating a model in Laravel and Rails, probably the same thing, similar thing where you have to like spit out all the SQL to create it and do all this stuff. So bullet train adds special fields that you can add to the model outside of rails, the rails framework. And in this case, it adds a filter field.
Sean
00:36:26 – 00:37:02
So you could add a filter field to your contacts table, for example, which then when somebody goes to edit the, a contact or sorry, the contacts table. So when you're in that index view, you can add a filter, which then is shared across all contacts. I think. So the idea would be like there's you can you could create product specific filters, which then and you can edit them in the sort of like basic admin CRUD app, and then it would be available everywhere. So it's tied to the table.
Aaron
00:37:03 – 00:37:03
It's cool.
Aaron
00:37:04 – 00:37:23
Man, this bullet train stuff, It's cool. I haven't, I'm not a rails developer, so I like haven't dived into it all, but I think this is gonna be a huge win for us being bullet train compatible and or, you know, first and a half party bullet train.
Sean
00:37:26 – 00:37:28
Yeah. It depends on what Andrew does with it.
Aaron
00:37:28 – 00:37:33
Yeah. Totally agree. Exactly. Exactly. One other thing.
Aaron
00:37:35 – 00:37:38
Let's see. I got us set up on ConvertKit.
Aaron
00:37:39 – 00:37:39
Yay.
Aaron
00:37:39 – 00:37:45
Yeah. So I don't know. Yeah. I don't know how the teams work. I may just share my password.
Aaron
00:37:45 – 00:37:56
I don't really know. But I got to set up on, there with like a proper account. Did the d k I m thing on our domain so we can send and not get, you know, blacklisted or whatever.
Aaron
00:37:56 – 00:37:56
Yeah.
Aaron
00:37:56 – 00:38:01
Because we've got, like, 370 people on the torchlight email list.
Aaron
00:38:01 – 00:38:03
That's amazing, Aaron. I
Aaron
00:38:03 – 00:38:18
know. Wow. People just yeah. So I had been sending them out, you know, manually, the early access stuff manually from Gmail. And finally, I was like, I have got to get because there are things I wanna update them on, like stuff I've added to the API and new clients we've created.
Aaron
00:38:18 – 00:38:46
And it's like, oh, I can't just keep sending it from Gmail. That feels bad. So we've got everybody imported into ConvertKit, and we weirdly have, like, 10 or 11 people signed up for the refine early access list, because I added, I added a link and a form to the home the Hammerstone home page. So now you can go to Hammerstone, and it's like, hey. This isn't released yet, but you can go sign up, and 10 or 12 people have already signed up.
Aaron
00:38:46 – 00:38:48
So once we start, like
Aaron
00:38:48 – 00:38:48
Awesome.
Aaron
00:38:48 – 00:38:58
Yeah. Once we start putting like little teasers out there, I'm going to point people more to the refine, early access list and we'll get, we'll get all of those people too.
Sean
00:38:59 – 00:39:05
So it may be too late for this cause it's already kind of a sunk cost, but it might not have made sense to go with ConvertKit.
Aaron
00:39:06 – 00:39:06
Tell me.
Sean
00:39:06 – 00:39:26
For what we're doing. Because, well, ConvertKit's expensive relative to I mean, it's it's if you are making money with your mailing list, it's not expensive at all. It's a no brainer if you're doing email automation. So if you're building email campaigns, courses David Dobrin:
Aaron
00:39:26 – 00:39:27
For green funnels.
Sean
00:39:27 – 00:39:54
David Dobrin: funnels, all of this stuff, then ConvertKit pays for itself more than enough. But then if you're not doing any of that and you're just like sending broadcast emails, it's a waste of money. K. So what's better? Has for this, just a broadcast email, Mailchimp has like a free tier for up to some number of emails, which we could probably use for a while.
Sean
00:39:54 – 00:39:59
And then it's also a lot easier. Well, it was. I haven't looked at ConvertKit for a few years. ConvertKit is not,
Aaron
00:39:59 – 00:40:05
not my favorite, so I'm not, I'm not really married to it. It's not super
Sean
00:40:05 – 00:40:11
easy to use. Yeah. Yeah. For just a simple broadcast email? No.
Aaron
00:40:11 – 00:40:15
It's not. Yeah. Kind of sucks. Mhmm. Okay.
Aaron
00:40:15 – 00:40:28
I can move us to Mailchimp. I mean, I don't know that we've actually paid yet. I think we're still maybe within the 7 day. I did upgrade to, like, the $29 a month plan, but I don't think we've actually paid. So I can move us over to Mailchimp.
Aaron
00:40:28 – 00:40:28
I don't
Aaron
00:40:28 – 00:40:29
really have a problem
Aaron
00:40:29 – 00:40:29
with Yeah.
Sean
00:40:29 – 00:40:39
If we're just doing broadcasts and from my perspective, I can't see us doing a ton of email marketing with this for a while at least at this number.
Aaron
00:40:39 – 00:40:41
Nothing beyond broadcast, I think. Yeah.
Sean
00:40:41 – 00:40:54
Yeah. So like, I don't know. So like I've right in the old list, I have 20,000 people there, and that's in ConvertKit, and that's over $200 a month. Yeesh. Sucks because I'm like
Aaron
00:40:54 – 00:40:56
Then you don't you don't send them anything.
Sean
00:40:56 – 00:41:05
No. Exactly. Well, there's still people signing up. So they go through my whole automated sequence and randomly from time to time I get a sale. So it kinda almost pays for itself.
Sean
00:41:06 – 00:41:39
It's it was, like, a $100 shy of paying for itself last year. But the but that's just, like, this absolutely tiny trickle of sales that I have at this point from not thinking about that side of the business for, like, 4 years. So that and then now I'm now that I'm paying that, I'm kinda stuck because I'm like, okay. Do I Mhmm. I have to do the work to rip it out, to do something simpler, which is going to take me probably a couple of days.
Sean
00:41:39 – 00:41:44
And then I'm like, I could do that or pay $200. And I make that decision basically every month.
Aaron
00:41:45 – 00:41:45
Yeah.
Sean
00:41:46 – 00:41:50
So, yeah. That's what you said ConvertKit. And I was like,
Aaron
00:41:50 – 00:41:53
no. Yeah. I kinda just stuck
Sean
00:41:53 – 00:41:53
in there again.
Aaron
00:41:54 – 00:42:01
Made the decision and because I didn't wanna bother anyone and just, like, get it done. But I can move it to Mailchimp. That's fine.
Sean
00:42:01 – 00:42:09
Yeah. It's not like it's the end of the world either way because cause we're just using it for broadcast. But, yeah, it gets expensive fast to add emails to ConvertKit, and it's by email address.
Aaron
00:42:09 – 00:42:20
Yeah. That's silly to me. So it looks like Mailchimp has a free plan up to 2,000 contacts. But they have branding. They keep the Mailchimp branding on it.
Aaron
00:42:20 – 00:42:37
And for the to remove the branding and have up to 500 contacts, which is how many we have, it would be $10 a month with Mailchimp. So I kinda wanna go with the custom brand, the no Mailchimp branding, and pay $10.
Sean
00:42:37 – 00:42:38
That's fine.
Aaron
00:42:38 – 00:42:39
Feel good about that? Agree.
Aaron
00:42:39 – 00:42:40
Totally. Okay.
Aaron
00:42:40 – 00:42:41
I'll switch this over.
Aaron
00:42:41 – 00:42:54
Hey. Speaking speaking of the success of Torchlight, how's that going? Didn't you hire didn't we hire someone to build it out on the rail side? Because I totally want it. I'm like, when do I get to use this?
Aaron
00:42:54 – 00:42:55
Yeah.
Aaron
00:42:55 – 00:43:18
So Andrew has put me in touch with his guy that does a bunch of bullet train stuff. Okay. And we're gonna we're gonna I'm writing something up for him so he knows, like, what to do and how to do it, and then we will have it on the rails side. So, yeah, that is that is coming. It's waiting on me to write, like, the specs and stuff, but then I forget what his name is, but then he'll take over.
Aaron
00:43:18 – 00:43:23
So it's coming. I'm thrilled that you won it. That makes me super super great.
Aaron
00:43:23 – 00:43:31
It's so how does it work? Is it if I now if I spin up a Laravel app, do I just add, like, a JS snippet you provide me, and then that lets
Aaron
00:43:31 – 00:43:32
me cut you off? JavaScript.
Aaron
00:43:33 – 00:43:34
What?
Aaron
00:43:34 – 00:43:49
Yeah. It's all server side clients. So, on, let's say, the Laravel side, it so, like, as the request, it gives you a custom component on the Laravel side. So instead
Aaron
00:43:57 – 00:43:58
Okay.
Aaron
00:43:59 – 00:44:04
And so you would use that. Torchlight captures the contents of that tag.
Aaron
00:44:04 – 00:44:05
Okay.
Aaron
00:44:05 – 00:44:19
And, like, leaves a placeholder. So it goes through the page, captures all the contents, leaves a placeholder 1234. And then on the way out, it takes all of the code and sends it out to the Torchlight API
Aaron
00:44:20 – 00:44:20
Mhmm.
Aaron
00:44:20 – 00:44:47
Gets it all highlighted, it comes back, and it swaps it in to the placeholders. So your response going out to the browser has fully highlighted code, fully baked HTML, and everything. So the general theory is gather all the code blocks on a page, send it out, get it back, swap in highlighted stuff, send it to the browser. Okay. So the question then is how is that performing at all?
Aaron
00:44:48 – 00:44:49
Is that the question?
Aaron
00:44:49 – 00:44:50
That is the question.
Aaron
00:44:50 – 00:45:12
That is the question. So we do a couple of things. One is once we we cache the blocks based on, like, a hash, basically. So of the contents of the block, the, options that you've chosen, the theme, etcetera, we you know, all the server side clients cache it based on a hash of each block.
Aaron
00:45:12 – 00:45:12
Okay.
Aaron
00:45:12 – 00:45:39
So most of the time, it doesn't go out to the API at all, because we cache it for 7, 14 days, whatever. So most of the time, it never hit it just pulls it from the cache and swaps it in. Otherwise, when it does go to the API that's why we that's why we, catch them all on one page and then send it off. Because if you were to send off a request each time, you'd be hosed. Right?
Aaron
00:45:40 – 00:46:00
So we get all the blocks and send them to the API at once. And if there are too many blocks on a page, the API itself will fan out back to itself. Right? So if there are if you send a 100 blocks to the API Mhmm. The API will look at it and say, well, that's I'm not gonna get that done in a reasonable request time.
Aaron
00:46:01 – 00:46:12
So I'm gonna break those down into chunks of 10 and send those out to the API so that you basically fan out to 10 processes, and then it puts them back together and sends it back to
Aaron
00:46:12 – 00:46:13
you. Okay. Cool.
Aaron
00:46:13 – 00:46:33
So, yeah. And on that note, just real quick, we're going long, but on that note, speaking of clients, I wrote a common mark to client, which is a PHP markdown parser. Someone else reached out to me and said, hey. I'm writing a Symfony client. Is that okay with you?
Aaron
00:46:34 – 00:46:43
Symfony is another PHP framework. And I was like, yeah. That's okay with me. Like, you're you're writing a a client for us? Like, that's amazing.
Aaron
00:46:43 – 00:47:03
It's like, yeah. I just really want it in Symphony. So I thought I thought I would write it. And then, like, 20 minutes ago, I got a Twitter notification that said, this guy, Tim Klyersberg says, yo, Aaron, on Twitter. Yo, Aaron, you told me in your early access to tell you about things we've built.
Aaron
00:47:03 – 00:47:16
So, yeah, I built a plugin for 11 t to easily highlight, content with Torchlight. So he just linked me to this repo where he's got an 11ty plugin, and you can just, like Oh, wow.
Aaron
00:47:16 – 00:47:19
Can I see that? I'm gonna use it in Netlify. That'd be cool.
Aaron
00:47:19 – 00:47:25
Yeah. For sure. I'll put it in our I'll drop it in our chat. I need to respond to him. He literally tweeted me right before we even
Aaron
00:47:25 – 00:47:25
got on
Aaron
00:47:25 – 00:48:00
the show. But it's like, man, we're getting all of this great, like, community support, people doing all of this really great stuff for us. And I think, like, I had hoped that this would happen, but the split between Torchlight is free for personal and open source, and then it costs money for businesses. I feel like that's a real, like, a real good way to go because then all of these people that are like, oh, I want it, you know, I want it for my blog or I want it for my docs or whatever. They're like, oh, I'll kind of, you know, spend some time and build out a client.
Aaron
00:48:00 – 00:48:09
Yeah. Sure. That that that's fine with me. And it's like it it benefits the community and it benefits, you know, hammerstone. So I'm pretty pumped about that.
Aaron
00:48:10 – 00:48:10
It's exciting.
Aaron
00:48:11 – 00:48:30
Yeah. So I gotta reach out to this guy and say, man, what a legend. So we've got 2 community packages now, symphony and 11 t, and it's, like, just it's thrilling. So and and we'll get we'll get you your Ruby one as soon as we can. Okay.
Aaron
00:48:30 – 00:48:34
I think I mean, I think that's all I had. Yep. Yep. Yep. Yep.
Aaron
00:48:34 – 00:48:53
Yep. I'll get this moved over to Mailchimp, and then I will also I think we talked about this in Slack, but, Sean, I'll handle the packaging of the Vue client so that it people can NPM install it and stuff. So I'll handle that Yeah. Whenever everything comes out of there.
Sean
00:48:54 – 00:49:36
Conditions that I might be able to hand off to you. The thing about that is what that would require would be basically documentation, which I do need to do, but I don't need to do it for our first release, so I kind of feel like I should not do that because I don't think it would save me time given the amount of time that we have. Right. But other than that, the only other thing on the front end you could easily help me with would be writing some tests, which would be just like feature tests, like click on stuff and then, you know, like ingest or whatever.
Aaron
00:49:37 – 00:49:40
Do you have a few of those already? Because the hard
Sean
00:49:40 – 00:49:40
part for
Aaron
00:49:40 – 00:49:45
me is writing the first anything. If I can pattern it after something else, that's easier for me.
Sean
00:49:46 – 00:50:11
I gotta look. I know I wrote test for the renderless renderless stuff, but I can't remember if I did it for any of the tailwind components yet. I think I did a few. And then I also have I have some I have documentation, so I'm kinda writing as I go. Because basically I started as I started from, like, write the API that I would like to build, that I would like to use, and then Love it.
Sean
00:50:11 – 00:50:32
Implementing it. So I have that, but that plus, if I could get you one tailwind example, what you could probably run with it. And then Yeah. But that's like like the package thing will be incredibly helpful to me because I have no idea how to do it, and it would just be like this whole extra project.
Aaron
00:50:32 – 00:50:41
It is soul crushing. So I will handle that. Cause I've done one recently. Yeah. And if you want to get
Sean
00:50:41 – 00:50:42
You're soul crushed.
Aaron
00:50:42 – 00:50:57
Yeah. Thanks. If you wanna get the testing file set up with one test and then a bunch of to dos, that would be easy easier for me to pick up and come in and just, like, knock out some of those to dos or skip tests or whatever.
Sean
00:50:57 – 00:51:00
Okay. Okay.
Aaron
00:51:00 – 00:51:06
We good? Anything else? Okay. See y'all later.
Me

Thanks for reading! My name is Aaron and I write, make videos , and generally try really hard .

If you ever have any questions or want to chat, I'm always on Twitter.

You can find me on YouTube on my personal channel or the Try Hard Studios channel.

If you love podcasts, I got you covered. You can listen to me on Mostly Technical .