Hammerstone · Jun 15, 2022
<div>Aaron got stranded in Dallas thanks to two cancelled AA flights. We're sending outreach emails and doing a bunch of ancillary product work.<br><br>Refine: https://hammerstone.dev/refine/laravel/docs/main<br>Torchlight: https://torchlight.dev<br>Aaron: https://twitter.com/aarondfrancis<br>Colleen: https://twitter.com/leenyburger</div>
Aaron
Hello, Colleen.
Colleen
Hello, Aaron.
Aaron
So you know how I was supposed to go to Boston Yeah. On Monday, yesterday? I did not go to Boston. I tried to go to Boston. So I was supposed to go to Boston for this tuple thing.
Right? And Sunday night, I get to the airport. Well, Sunday afternoon, I get to the airport. My flight's at 3:45. So, you know, I leave the house at, like, 1:30, drive all the way over to the airport.
It's the one that's far from our house. And I'm at I'm at the airport by, like, 2:15, just hanging out at the gate, and they start delaying it. I'm like, man, it's gonna be a late night. So they push it and push it and push it. 3:45 flight turns into 9:45 PM.
And then they they just canceled it.
Colleen
Oh, man.
Aaron
So we waited for 6 hours, not to mention the time we showed up early, but 6 hours from original departure. And then they were like, we can't get the AC to come on on the plane, so we're gonna cancel your flight.
Colleen
Oh my goodness.
Aaron
Yeah. And so I was like, gotta be freaking kidding me. I'm gonna miss this big meeting. So I, you know, I wait in line forever, talk to a gate agent, and they're like, we've got you booked on a 10:15 tomorrow morning. You'll get there by 2 PM.
I'm like, okay. That's not ideal, but I'll at least make it before the end of the day. So next morning, Monday, I show up at the airport, you know, 9 o'clock, pull out my computer to start doing some stuff. Right when I do, I get a text message from American that says, your flight's been canceled.
Colleen
Wow.
Aaron
Not even, like Wow. Not even delayed, not even gate change, just, hey, man. It's over. Ugh. You lose.
Jeez. So I've never I've never had a flight canceled on me, which I understand is probably rare, but to have 2 Yeah. In a row trying to get to the same place for the same thing. So I I, you know, I wait in line for another 30 minutes knowing that they're unless I get on a plane in, like, literally 45 minutes, I'm not gonna make it in time to be useful. And I talked to a gate agent, and they're like, yeah.
We've rebooked you through Washington DC. You'll arrive in Boston by 11 PM tonight. It was a one day trip. It was supposed to be a one day trip. So I just said Nope.
Okay. Cancel the whole trip. I'm I'm going home. Wow. Yeah.
So meanwhile, I'm, like, messaging Ben on Discord. I'm like, dude, I don't I I don't know what to do. I have I don't know what's happening. You know, I update them every time my flight got delayed the night before, and I was like, hey. It's gonna be a little later.
I'll I'll keep you posted. And then I'm just at some point, I just gave up. I was like, dude, I don't know what to do. It's like, yeah. This is I wouldn't have expected I wouldn't have expected 2 cancellations.
So kind of frustrating. Yeah.
Colleen
I'm sorry.
Aaron
Pretty yeah. Spent a lot of time at the airport. However, American did give me a voucher for $12 that I'm allowed to spend inside the airport, but not at Starbucks. So $12? $12.
Yeah. Wow.
Colleen
So Go crazy.
Aaron
American. Never have I wanted more to get on Twitter and complain about customer service than I did last night. And to my, to my great credit, I didn't because nobody wants to see that on Twitter because it's super annoying. So,
Colleen
yeah. Wow.
Aaron
Yeah. That's that's my frustrating update.
Colleen
Yeah. What a bummer. Sorry to hear that.
Aaron
Yeah. Thanks. I appreciate that.
Colleen
So oh, there's a couple of things I wanna talk to you about. Can we start actually with talking about the emails you sent to people on our list?
Aaron
Yeah. We can. So I sent, last Friday, because I think Friday was my deadline, so I sent them on Friday. Got it done. So I pulled everybody out of, whatever it is, reform, and threw them into a sheet and started going down 1 by 1.
I know I could've done it in Mailchimp, but I wanted to, like, actually send it from my account instead of some, you know, form thing.
Colleen
Yeah.
Aaron
So I sent them from my account, wrote up basically, like, hey. You signed up. You said you were, you know, view 2 or view 3 in Laravel. Like, just as a reminder, this is what I'm talking about, you know, query builder, yada yada. We're ready to go.
We're fully ready. Can we hop on a call to see what your use case is and hopefully get you started? I didn't put I didn't put any links in. I didn't put, like, a, like, a booking link or anything because what I want them to do is, you know, email me back and say, yeah. When, you know, when's good, and then I can send them a link or, you know, jump through their hoops or whatever.
But I think I sent 6 or 7 of them, and I just went in order of, like, when they signed up. So these are the people that signed up first, so, you know, the oldest people. Okay. No responses yet. I figure I'll wait until tomorrow, which is Wednesday, and, you know, send them a follow-up.
It it was the weekend, so I don't expect too much. So no responses yet. I did get beyond those people. Somebody emailed me directly and was like, hey. I would love to use refine.
Can can we use it? And so I emailed him back and said, yeah. Let's get on a call. I can walk you through how to do it, and we can get you set up. So I think he sent me that email yesterday, and I responded, and I haven't heard back anything yet.
So of the ones that I reached out to, no responses. I did get the one inbound, and hopefully I can get on a call with them soon. So progress, I think.
Colleen
Yeah. That sounds like progress. Great.
Aaron
Felt. I I have to admit, it felt really, really good emotionally to write the words, like, we're ready to go. Do you wanna do this? Let's do this.
Colleen
Yeah.
Aaron
That that felt good. Yeah. So I think that's a good, like, that's a good win for us. You know, it'll be a bigger win when we start, like, closing sales, but just to be over the starting line feels pretty great.
Colleen
Yeah. Absolutely. So what's your thought on those personalized emails versus the whole list email? Because we haven't emailed them yet.
Aaron
You mean what's the thought on doing it 1 by 1 rather than sending that same email to everyone?
Colleen
Yeah.
Aaron
No super intelligent thoughts except that if we email that to 400 people, I might get a lot a lot of
Colleen
calls scheduled. Right. We're trying to we're trying to drip them in. Yeah. That's right.
Aaron
Yeah. I just I just wanna land 1.
Colleen
Yeah. Let's let's drip them in for now. It's early. That makes sense. Okay.
Aaron
Yeah. I wanna land 1. I want to, have a call with 1 and hopefully onboard 1 and then, like, just keep that going 1 by 1.
Colleen
So I like that.
Aaron
This week, I'll send you know, regardless of who responds, I'll send maybe 5 or 10 more. Yeah. So, you know, in theory, we're dripping the calls in. But if nobody responds, I'm just gonna I'm just gonna keep sending. Just gonna burn through the list eventually.
But, yeah, that's the thought.
Colleen
Great. Yeah. That makes total sense. Good. That sounds good.
Aaron
What about, while we're on the topic, DM ing Rails people or emailing Rails people?
Colleen
Yeah. So I the 2 people who have already paid, working on setting up start dates with them. And then I sent 1 to
Aaron
Working on? Like, you've told them we're ready to go?
Colleen
Yes. Yes. Correct. Customer 1 is doing 6 week cycles. So he wants end of July, which makes sense.
Aaron
Shape up of them.
Colleen
In customer 2, I'm waiting to hear back from. I sent one cold one warm email cold email, warm ish, Someone who verbally expressed interest?
Aaron
That's warm.
Colleen
Warm. One warm email. Didn't hear back, which I'm a little confused about, but I will follow-up with him. One warm DM, where's they're considering. Got one inbound that I'm talking to right now, trying to set up a call.
And I think that's it for this week, the people that I contacted. So
Aaron
That's pretty good.
Colleen
Yeah. It it was pretty good.
Aaron
I think, one thing we're gonna have to internalize as we do this is follow-up or die. Like, we're gonna have to not think, oh, they they didn't email me back. They probably don't want it. We're just gonna have to keep especially, these people signed for the ones I sent. These people signed up to hear about the thing.
Right. So I shouldn't feel bad emailing them about the thing they signed up for. So that's something we'll have to internalize, like, just keep pushing until they say yes or
Colleen
no. I agree. I think that that and and, you know, contacting people both on email and Twitter and all the ways we get in touch with people, just keeping track of that. And, when we followed up with them, etcetera, etcetera, is really important.
Aaron
Yeah. Yep. For sure. And if you wanna start pulling people off of the, the early access lists, I have a spreadsheet where I'm keeping track of who I've emailed and when. When.
Okay. And I'm, of course, skipping all the rails people. So if you wanna hop in there, you can use that as well.
Colleen
Okay. I feel like actually, I had 2 inbound, actually, now that I recall correctly. Yeah. That's that's good. I think that that's that's the move.
Yeah.
Aaron
Where are the inbounds coming? Is it Twitter?
Colleen
Twitter.
Aaron
And it's just random, hey, I've been following or what?
Colleen
I mean, more details than that. A couple people like this is this is some people are just interested, generically interested. And so I don't necessarily have time right now for everyone who's just kind of vaguely interested. But, some people are are you know, if they're if you're actually interested in purchasing it, then absolutely. Like, those are the people I'm trying to schedule calls with.
Aaron
Mhmm. Great.
Colleen
Yeah. Twitter so far. So I think I mean, I think the move is to keep especially as we build out, like, some of the stuff for the rail side, like, just keep tweeting about it and and all of that. So that that seems to be good for garnering interest.
Aaron
Yep. For sure. And for this week so are you at the point where you're ready to send out emails to the early access list? Because last week, I think we talked about you're gonna reach out to the 2 people, which you did, and try to get start dates with them. Are you at the same spot I'm at where you can start sending emails to people who signed up?
Colleen
I don't think so. Here's the deal. So this is Tuesday. I'm out the second half of this week and all next week for vacation. I come back, and that's the 1st week of July.
Or last week of June, 1st week of July, something like that. And so I'm gonna onboard our first customer that week. And, I mean, I don't really feel like we're done to the point that you're done, just because I think we are going to find it was interesting when we were on, remote Ruby on Friday. They were really interested in how does this integrate in my app. And that's what I wanna know as a developer too.
And I still feel like on the rails hot wire side, like
Aaron
Mhmm.
Colleen
There's room for clarity.
Aaron
Mhmm.
Colleen
And so I think working through that with our first customer is gonna be really instructive, because I've been working through it with peoples who know how it works. So I think I'm really curious to see honestly, what I was thinking, Aaron, was I'm gonna see how it goes with him, And then maybe take a trusted Rails friend, and see how it goes with them. So I can get really good feedback on how to tighten that integration loop. Because right now right now the integration, right, we we have the stable ID and we emit events. So theoretically, like, you emit unstable.
They can't submit the form. You emit stable. They can submit the form. But I've noticed with our client, there's a lot of confusion around the buttons. Yeah.
So we we purposely don't include a button, So
Aaron
Right.
Colleen
When they have an apply or update or whatever button, there seems to have been some confusion about how to consume the stable ID, how to rehydrate the filter from the stable ID, and how to disable and enable the apply button or create button or whatever you want. And so I think the answer there is we might want to ship another stimulus controller with it that is an optional button. Like, that's kind of what I'm leaning towards. Yeah. And there's another thing you can do in the rail side where you can we have a turbo frame for, like, stored filters.
So we have one for stored filters and one, like, database stabilized stored filters, and one that doesn't include that. And right now, you can use either or. And so if they don't want stored filters, they integrate 1 turbo frame. If they do, they integrate a different turbo frame. And then, of course, they have to set up the stored filter model in their database.
So I just I feel like there's none of this is hard, but it's also, like, not a single drop in React component either. Right? It's there's a little bit of integration work. Yeah.
Aaron
Which is a
Colleen
So there's some integration work, and so I really wanna work through that with some other devs to see how people feel about it.
Aaron
Yeah. I'm on board with that. I think, part of our thesis is batteries included. And so, like and I think our main thesis is we can spend more time thinking about this stuff than you could afford to spend, because this is our whole business, and it's just a part of yours. I will say, I think it's gonna take a while to get, someone else on the books, and so I don't think it would be a bad idea to start reaching out to the list soon.
Like, even though you're gonna be you know, you're scheduled in, whatever, July with client number 1. If you started reaching out now to other people, it's possible you wouldn't even schedule with them until after client number 1. You know what I mean?
Colleen
Yeah.
Aaron
So trying to overlap trying to overlap dead time, I think, can help here, especially as we're pushing up against, you know, August. So consider or rather, what do you think about sending out a couple of emails either this week or next week knowing full well, you're not going to schedule them until after client number 1. How does that feel?
Colleen
Yeah, I'm open to that. I think that's that's reasonable. That's a reasonable timeline.
Aaron
Okay. Do you wanna commit to that?
Colleen
Well, no. Because I'm off Thursday, Friday, and all of next week. So what's today? Tuesday?
Aaron
Tuesday.
Colleen
Okay. Yeah. Okay. I will commit to that. Can you share that spreadsheet with me?
Like, just Google
Aaron
I can.
Colleen
And Uh-huh. Yeah. I'm happy to do that and try to get those people scheduled before I leave.
Aaron
Yeah. Just so we're clear. I don't think you need to get them scheduled before you leave. I think we just need to send the email and honestly, I bet nobody responds. And so,
Colleen
like, So that's done.
Aaron
You gotta follow-up.
Colleen
Follow-up.
Aaron
Yeah. And that's what I mean. Like, if we waited to send the email until you're done with client number 1, we're gonna have, like, 4 weeks, 6 weeks of dead time. Yep. So we might as well try to stack those.
Yeah. Yeah. I'll share this with you. Remind me when we get off, I'll share this spreadsheet with you.
Colleen
Okay. I also think we seriously need to think about how we're gonna do a demo site. People need to be able to play with this.
Aaron
Like I agree. That's that's big time on my mind. And I think that's gonna be a great opportunity for me to also do, like, livestream stuff.
Colleen
Okay. Cool.
Aaron
Like, hey, I'm gonna set up a demo site for refine. I'm also gonna stream while I do it.
Colleen
While I
Aaron
do it. You can see me play around with it. And the good news is, it can all be open source because the paid package will come from the package provider. It won't be in the GitHub source code.
Colleen
Can't you just bundle open it? No. Okay.
Aaron
No. Yeah. Because it won't because it won't be on GitHub. People would have to open the repo and then install it, which would ask them for credentials. So.
Colleen
Gotcha. Gotcha. Okay.
Aaron
Yeah. So they can see all the, they can see all the connectivity and all the glue they would put refine into your app. If they wanted to go, you know, check it out.
Colleen
Yeah. So here's what I wanna talk to you about this.
Aaron
Okay.
Colleen
2 things that keep coming up and you and I have discussed both of these things. 1 is the demo site. 2 is an open source open sourcing part of it. It is my opinion that the demo site is like higher priority so people can get their hands on it and play with it. And then we don't have to sort out if we wanna do a part of it open source yet.
Aaron
Yeah. I agree with that. And I and I think the the open source part of it, we already we already put to bed a a few episodes ago instead, like, not even a discussion. What I when I say it could be open source, I mean, the demo site could be open source without exposing the proprietary stuff. But, yeah, I think, honestly, I think maybe the next most important thing for me to do beyond continuing to send emails, The next most important thing for me to do is to get a demo site up.
And I think that's I think that's totally, totally viable.
Colleen
Okay. Yeah. I think that would be that would be great. That would be really that'll be really value added.
Aaron
Yeah. And, you know, if I play it right, it could be a lot of, like, sessions of live streaming. Because I could, like, do the basic stuff and get it get it up there, and then continue to live stream interesting stuff. Like, here's how you save a filter, here's how you would use a filter to drive an email campaign. Like, all of that kind of fun stuff would be good for streaming and good for demo purposes, so I could get it to serve double duty.
Colleen
Awesome. Love it.
Aaron
But then that means, of course, you would have to maybe do a rails side I if if we think the source is important. Right? Because if the source is not important, the demo is the same. It doesn't matter. It's doesn't matter what's driving it because we offer it in both.
Yeah.
Colleen
I mean, my guess is yes. That the thing I feel like as we talk to more developer or at least as we've talked to more developers about this, they want to know how it works, how they integrate it. They like the, you know, they like the inheriting from a filter class. So I Yeah. People like that.
Like, it feels great.
Aaron
When we were on remote Ruby, they were like, how do you integrate it? And you were like, oh, you know, it's a private channel, blah, blah, blah. And I was like, we give you a class and you extend it.
Colleen
And they're like, oh, that makes sense.
Aaron
Yeah.
Colleen
Yeah. That was a moment. I was like, oh, right. Like, we're talking to developers. Like, we can talk to developers.
So They
Aaron
literally wanna know what do I do in my IDE with your thing. Yeah.
Colleen
So yeah. I think it will be I think that will be something I will wanna do too. I think the demo side up first is great, but I do think I'll do that in Rails as well.
Aaron
Yeah. Cool. Okay.
Colleen
So, I also wanted to ask you about GitHub actions. Tell me
Aaron
GitHub actions.
Colleen
About this awesome thing you did.
Aaron
The only way to debug GitHub actions is to just push a bunch of stuff to the repo over and over and over. I'm sure that's not technically true, but, boy, is that that the way that I do it. So Neil is using the front end. Right? He's got brand new front end.
It's working. Glory, hallelujah. Here's the issue, though. I've been publishing a dev, like, alias NPM package from my local machine. So he'll like, if he tells me something wonky that he found, I'll fix it, and I'll just publish a new, like, Vue 2 dash dev.
Right? And he installs Vue 2 dash dev.
Colleen
Right.
Aaron
Not ideal, but he and I are working together, and so it works fine. For like, to to publish these NPM packages for real, I don't wanna be doing it from my local machine because I don't wanna accidentally run the wrong command and publish a broken package that somebody auto installs on Deploy, and then we break somebody's site. Right? That seems like bad etiquette. So what I want to do is publish it from GitHub based on a GitHub release.
Like, I wanna go to GitHub to create new release, view 2.0.1, whatever.
Colleen
Okay.
Aaron
So this weekend, I spent a bunch of time getting it set up so that we can do that exact thing. And part of the trick is we've got 3 packages inside this one repository. Right? So we're running this mono repo setup, where inside of the repo we've got Vue 2, Vue 3, React, and an internal core package where we share some stuff. And first of all, NPM, JavaScript bundling, everything is a dark art, which I super hate, and it's very complicated.
And then beyond that, you add in the extra mono repo thing. So, like, we don't need to publish React every time we publish Vue. Like, that would just create a bunch of churn. When we fix something in Vue, we're publishing this no op in React, and people are like, why is the version bumped? Nothing actually changed.
That seems dumb. So I got it set up where we can tag we tag the repo, because you can only tag a repo, you can't like tag a folder. You tag the repo as view slash 0.2.1 or whatever, and this GitHub action will take that tag. Notice that it's a view only tag, so it ignores React, And then it goes in and it sets the package dot JSON to the version that we put in the tag, because that's another thing. We wanna make sure that, like, when you call publish, the package dot JSON version matches your GitHub release version, so people can go to GitHub and look at the code and be like, well, I'm running this version, I need to inspect the code.
Right? So the action will set the package JSON version, does all the bundling, publishes to npm, switches over to Vue 3, does it all again. And if you wanted to publish React, you just create a React tag. So you would do react slash 0.1.5 or whatever, and it would publish React to NPM. And so now anyone can tag a version, anyone.
You you or I can tag a version, it's not dependent on our local machine publishing or anything like that, And NPM and GitHub's versioning is always gonna be in sync, which is really frustrating when it's not, because you wanna go look at the source code for a certain version, and it's just, like, not there. So after very, very much trial and error, we're now set to like cut releases and it takes no thought whatsoever on our part. And the whole thing is automated.
Colleen
That's amazing.
Aaron
Yeah. It was a freaking nightmare. But Yeah. You know, my thought process is, like, we're gonna be doing this a lot as we fix find, and fix bugs. I don't want to try to remember every time, you know, 4 or 5 or 6 different steps to do it, and I don't want it to be dependent on my local machine.
And also, I really, really don't want to fat finger something and publish the wrong version and dork up everybody's site. And so Yeah. It's one of those things where it's like, good lord. Am I gonna spend 6 hours doing this? But then every time in the future, it's now like a one minute process.
So it works.
Colleen
That's awesome.
Aaron
Yeah.
Colleen
Okay. I have to think about you'll have to show me how to do that on the Rails side. Because right now what happens is I upgrade the gem, then I I publish the gem to Gemfury, then I have to publish the NPM package still from my local machine to NPM, and I have to remember, like,
Aaron
to do them
Colleen
and, like, when to upgrade them and which one's which, and it is not it's not a good process. So Yeah.
Aaron
Everything you just said is bad and makes me feel nervous. Nervous. Yeah. Does the NPM package on your side live inside the same repo as the gym?
Colleen
It does.
Aaron
Alright. Yeah. Here's what we're gonna do. We're gonna set you up the same way, to where you cut a release on GitHub. It will push the gem to unlock.
We need to switch to security to
Colleen
unlock. Yep.
Aaron
So it'll push the gem to unlock and simultaneously push the NPM package or the JavaScript package to NPM.
Colleen
Yes.
Aaron
All based on cutting a release on GitHub and a GitHub action.
Colleen
Yes. That's what we need to do.
Aaron
That that's what we'll do, because we just can't have that kind of administration overhead every time. That's not working.
Colleen
Oh, no.
Aaron
That's just not working.
Colleen
It only works because we only have one client on it right now. But, like, it's Yeah. It's even taught you know, I was talking to our contractor about it, and I was, like, writing down the steps for him. And I was, like, this is ridiculous. Like, this is not gonna work.
Cool. Alright. Good.
Aaron
Yeah. Whenever whenever you're ready to talk more about that, let's do some pairing on that because my pain can pave the way. Sounds good. Yeah. That that'll be a good time to switch to unlock as well.
Yeah. Because then all of our licensing payment and distribution is all in, unlock, which will, which will be good.
Colleen
Yeah. Definitely want
Aaron
that. Cool. What else?
Colleen
That's all I got.
Aaron
That's all I got too. All right. Talk to you later.