The Changelog: Software Development, Open Source - The dawn of sponsorware (Interview)
Episode Date: February 17, 2020Caleb Porzio is the creator & maintainer of Livewire, AlpineJS, and more. His latest open source endeavor was announced as "sponsorware", which means it lived in a private repo (only available to Cale...b's GitHub Sponsors) until he hit a set sponsorship threshold, at which point it was open sourced. On this episode, we talk through this sponsorware experiment in-depth. We learn how he dreamt it up, how it went (spoiler: very well), and how he had to change his mindset on 2 things in order to make sustainability possible.
Transcript
Discussion (0)
Bandwidth for Changelog is provided by Fastly.
Learn more at Fastly.com.
We move fast and fix things here at Changelog because of Rollbar.
Check them out at Rollbar.com.
And we're hosted on Linode cloud servers.
Head to Linode.com slash Changelog.
Welcome back, everyone.
This is the Changelog, a podcast featuring the hackers, the leaders, and the innovators of the software world.
I'm Jared Santo, managing editor of changelog.com.
In this episode, we are shining our maintainer spotlight on Caleb Porzio.
This episode continues the maintainer spotlight series where we dig deep into the life of an open source software maintainer.
We're producing this series in partnership with Tidelift. Huge thanks to them for making it possible. If you haven't heard of Tidelift, they are the first managed open source subscription
that pays the maintainers of the exact projects that you're using while giving you the commercial
support you've been looking for.
Okay, here's Caleb.
Caleb, thanks for coming on Maintainer Spotlight.
Thanks for being an open source maintainer.
Why don't you tell me about yourself and what you've been maintaining?
Yeah.
So first, thanks for having me.
About myself.
I mean, I do a lot of development.
I mean, there's a lot of outside things we could talk about.
But the development related things, I quit my job about a year ago.
I work full-time at a web agency.
It's a Laravel and Vue and React shop.
And I don't know.
I wanted to...
At first, it was actually just to take a sabbatical.
I just wanted a break from programming.
And about a day into that sabbatical i just wanted a break from programming and about a day into that
sabbatical i got hooked on this project that's now livewire we could talk a little about that later
but that's that's my main project and it's been my main project for over a year now um and then
alpine a little javascript framework package thing kind of popped up along the way and and now that's
another project they kind of work together but those way and and now that's another project they
kind of work together but those are my two those are my two big projects and then a bunch of little
side things yeah yeah i found one of your side projects fun and interesting get down oh yeah
yep so get down is a php markdown processor but it's actually not it's actually just a
a facade for the github markdown api yeah
that was awesome that's a nice little hack so basically just you treat it like it's a markdown
parser but it's actually going out and hitting their api is that right yeah yeah it's awesome
like markdown parsing is historically annoying um any of the processors they mostly work but then
there's little things about them that just break
down you know um and i i i think my standard for markdown is basically github you know like i mostly
use it inside of github so i'm really familiar with with the way it processes markdown and they
also offer all of their styling in like open github primer it's their like css framework okay um so yeah so i
found this api i kind of stumbled on it was like wait a minute you can hit a public api send it
markdown and it'll spit back to you html is if github already formatted it's like github flavor
markdown yeah and it is all their features and everything yep you can opt in or out of github
flavor if you want um yeah so i i used it and it was so easy it's definitely the easiest
way to get some quick github or some quick markdown parsing um yeah and i used it i thought
i'd package it up and and made it yeah but that was one of those there's lots of those little fun
side things that i have no real plans or big visions for they're just fun and you know helpful
absolutely and i loved your warning
in the read me you say warning this package is a fraud yeah yeah this is fire up your background
to github it's like well uh you yeah it's good that it says that up front you know they always
start out being a fraud like it's something simple that i do or i'm like oh this is no i'll put this
in a package because i would want it in a succinct little package i wouldn't want to copy this github gist or something but it's so simple
like you know people will be like wait a minute that's all the packages um but then it always
grows you know like as people find new optimizations and features and whatnot it they end up earning
their own stripes yeah so i love that you took a sabbatical or you quit your job and you want to get away from
programming and then you took like basically one day off and then live wire begins are you just
addicted to the game or or what's it yeah i think there's i think a big part of it is
is addiction to the game um yeah i i thought that i would so we go down to florida every spring well
it started last year so uh for the sabbatical i thought this is a perfect break
i'm going to florida for two months i'm from buffalo so it's very snowy and uh hoth like
in buffalo around this time of year and we went down to florida and yeah i so i brought this stack
of books i brought a box of books because i thought this is going to be it i'm gonna this
is going to be like real me time i'm gonna read books i'm gonna go i'm gonna fish i'm gonna hike all these things and i i read it three or four pages of one book the entire trip that i think i think i just have
these these hopes that that i you know i don't know but yeah i love programming and it's you
know there's always there's always a new challenge or a fun thing to dig into so that's me when i
travel i always bring a book with me when i travel and then basically it's just like which book do you want to carry around the entire trip i'm never gonna
actually read it i'm gonna like i finally get to my hotel and i'm so exhausted i'm like i just flip
on the tv and fall asleep same thing i gave up on the traveling with book thing yeah it's like
podcasts all sorts of stuff for traveling i'm always like way way over prepared for content
right so let's talk about livewire so i'm not very familiar with the laravel community
um we've done a couple shows over the years on laravel but uh for those who don't know what
livewire is this is your your biggest uh open source project tell us what it is what it does and
why you began it on somebody had a sabbatical yeah so laravel uh a great analog
for laravel is rails um so if you need a mental framework rails or or even i mean rails is
definitely the closest but django or even express like any back-end framework laravel's back-end
web framework yeah um so livewire yeah it's it's a very it's a it's a very unique thing and nothing exists exactly
like it um it got its in its inspiration from this project called phoenix live view
so phoenix is another back-end framework for elixir so um it's kind of the rails for elixir
and i saw that this is what spurred it i saw the little blog post. They released this demo of Phoenix live view at Phoenix Elixir con for whatever.
And the concept was they used web sockets.
Well, maybe I'll just describe what I saw that kind of turned me on.
Okay.
Was it was like a backend template that had like echo statements in a backend template,
like you see in backend templates.
But then there was also this syntax for listening for a click
on an element and firing a method but it was a reference to a backend method so it was super
weird it looked like like almost like view js or something or react or something like in the dom
right but instead of calling a js function somehow it called like a controller method
and manipulated some state that that presumably exists on the back end
and then re-renders the template in the back end and then swaps it out in the front end so
this weird blurring of lines between back end and front end and they used web sockets to keep a
persistent connection on the back end so i was just floored by this idea. There's a lot of sort of my, the things
that I've been preaching or, or I guess my, I don't know the things I've been campaigning for
in my career as a web developer, I guess the arc of my career as a web developer was like novice,
jQuery, Code Igniter, basic stuff, vanilla PHP, then I got into Laravel and started ramping up a
little bit. Then I got into Vue.js. And so I went like hard into laravel and started ramping up a little bit um then i got into view js and so
i went like hard into the javascript community and was basically building spas with a laravel back
end um and then i i so that that's kind of the peak of the arc and then the the the slope down
is me realizing um that in many ways i wasn't better off all the complexity i had taken on
and so i started listening to a bunch of dhh stuff, Basecamp stuff, a lot of the people who, you know,
are preaching about basically keeping it simple and stepping back from that. So that's like the
second half of my career arc is stepping down from a lot of that craziness, that perceived
craziness. I know not, it's not crazy for everybody um but sort of step stepping away
from the spa architecture and and so this was perfect timing i was already kind of embracing
the back end i was using i was going back to the back end more um stepping away from the spa
and then this came along and i went oh my gosh like this is everything i ever wanted
bolt it seemed like a like a have your cake and eat it too type thing
so you saw phoenix live view which is still very new and is still either beta e or out i can't
remember if it's like out out but still under heavy development and you thought okay well
laravel needs this or something like this yeah exactly like i want to i want to do this in laravel so i'll build it i'll see what happens in it it really was just a proof of
concept it took me probably a day of like fun hacking setting up the web socket connection and
you know really it was pretty basic actually um and i tweeted it out this little proof of concept
and something like this thing blew my mind blah blah, blah, blah. And people really dug it. And it,
it became kind of a mini, mini Twitter sensation in our tiny little corner, um, of, of the internet.
And yeah, so basically then I was like, all right, well, I should turn this into, you know,
a pack. People are like, are you going to package this up? And I'm like, yeah, yeah, probably. But
you know, it might take me a week or two which is so funny yeah like
i remember or whatever it takes yeah i actually didn't launch anything publicly for another
five five or six months um that's that's a really interesting story in itself that i that i'd love
to go into but um but yeah i wanted to build it and and I did it. And it ended up actually taking a very different form.
So it behaves different.
It has some fundamental differences to Phoenix Live View that kind of emerged over time as
we started using it and making decisions.
So it's kind of like when a movie is inspired by a true story.
Whenever they say inspired by a true story, you know this is a movie of fiction.
You know, it's not it's not uh based on even i think based there's certain rules around what
they can even say inspired by and then based on a true story right and then there's like an actual
true story and so this is kind of like inspired by phoenix live view but by the time you were
finished or you know yeah production it was different in the way that it goes about achieving
similar goals is that what you're saying right yeah it used to be i used to say a lot like i used to reference phoenix live
view a lot talking about it because like oh this is phoenix live view for for laravel um but yeah
i don't do that anymore it's so far from from being anything but inspired yeah so the tagline
is a magical front-end framework for laravel uh if you can
describe what it does today without referencing phoenix live view how would you do that yeah so
all the taglines are garbage i haven't updated them in a while um i need to really put my head
to that when it first started it was all magical and new to me so all the taglines are like weird
they're like a weird framework that's magical and will confuse you and whatever.
But yeah, so how would I describe it?
So I guess there's two ways of kind of approaching it.
There's the magical bewilderment way where you look at a backend template that can somehow interact with the frontend and the template and the back end at the same time so somehow this this like like like i described earlier like it's as if it's view js but you can
call a method on the back end and everything will re-render and magic will happen um that's one way
of looking at it for me uh it's really more of like an a framework it's like a an Ajax framework. It's a framework for making calls to the backend,
getting HTML and changing what's on the page, but providing lots of helpers for that. So
I guess it's still something I have a hard time explaining quickly. But if you're interested,
we could walk through like, kind of how you could arrive at at live wire naturally
we'll hear it okay so have you encountered the the like server fetched partials pattern or this
pattern of instead of sending ajax requests to get uh json you send an ajax request to get html
and then swap only a part of your page. Yes. So this is the concept, the fundamental concept behind Turbolinks,
Pjax, and Intercooler, a bunch of these frameworks that do this thing.
And if you go on GitHub and you open up the dev tools
and just look at the AJAX requests,
like everything you do on GitHub does this.
It sends an AJAX request.
And instead of getting JSON back, it gets a little snippet of HTML back
and then swaps it into the page
in real time.
Right.
Yeah.
So I started using that pattern in my day-to-day development to kind of cure some of this JavaScript
complexity to keep, you know, the templates on the backend.
So I started doing that a lot.
And basically that is the fundamental concept behind LiveWire, except instead of you having
to go, all right, here's a button.
I'll use jQuery to register a click listener, so that when this button is clicked, I'll send an AJAX
request to get a new template of, let's say that it's a refresh button on a list of invoices or
something, to get the new list of invoices in HTML, and then use like dot inner HTML to swap
it into the page. LiveWire just does all the wiring for you and gives you a declarative api
where you can say like wire colon click uh wire colon click equals refresh or something and then
and then you'd have a method in the back end called refresh that would you know manipulate
some state and re-render the the template well you're speaking my language because we at changel.com
use phoenix on our back end and we actually use Turbolinks
with Phoenix.
I'm not just familiar with the style
of writing web apps,
but I'm also pro. I think it's a great way
to do it for many, many use cases.
You've been working on Livewire.
It sounds very cool. You have lots of people interested
in it. You have
people using it.
You also have Alpine.js js which you mentioned i'm curious though
because you quit your job a year ago and so i'm wondering like where's the money coming from at
this point are you yeah yeah savings are you that's a great question building client and customer
things with livewire what's the deal yeah so i will say that that i i don't i maybe barely consider myself in a sustainable place um so this started out as
a sabbatical i've been really into like financial independence and that whole community for a while
so i've already kind of taken on um the habits of somebody somebody reaching for early retirement
so i i cranked up my savings rate when i was, you know, working full time. And I was just kind of piling money away in investments. And my standard of living is pretty
low. Like we, my wife and I both, we don't have any school debt. We share one car, there's a lot
of things that that we rent a small apartment. There's a lot of things about our life that just,
we don't need a ton of money. So there's, there's that there's also the pile of money, you know, sitting there.
And so I went to take this sabbatical and thought, you know, I mean, I can live for two months on,
on no income easily. And so I did that. And then it just kept going. And at some point,
so I decided I'll never pull from savings, like I'll never go into my investments, anything I put in for like 401k or anything like that.
I'll never do that.
If that, if I get to that point, I'll get a job or something.
But so a, my wife has a, she's a photographer.
And so she brings in some money where before it was always just kind of on the top
because I had the developer job and now you're saving that.
But now you're kind of living off that.
Yeah. Now we're, yeah, we're living off that partially um and then i started
freelancing but i didn't want to i didn't want to jump into big projects that detracted from the
work i was doing so i started advertising kind of like uh how would you describe it like um
almost like freelancing as a service or like a la carte freelancing like things what do
you mean yeah so i would basically reach down and was like all right i want to do mentorships like
an hour two hours a week where you just get on a call with me and i help you with what you're
doing you ask me questions and stuff like that so that was the first phase of freelancing um
and i charged some i think i charged 150 an hour uh so it was like a decent decent rate um and i charged some i think i charged 150 an hour uh so it was like a decent decent rate um
and i just wanted like extra money but i didn't want to really get into a real project i didn't
want something that's really going to take my brain away um so i started doing that and i still
have i still have some of the same mentoring clients um so i do a lot of little pocket
are these professionals are these people that are trying to get into
programming like who can at an individual level spend 150 an hour for for training yeah so
generally they're professionals and they're laravel developers um so i guess i've been
fortunate enough that over time i've built a bit of an audience in the laravel community
um so it's kind of been my thing for
i don't know a while now and so i i've spoken at laracon like uh like three three laracons i'm
speaking at two this year you know so i said i have a little bit of a name in the community
and i i've already done a lot of educating publicly and i worked for titan which is one of
the like top you know laravel uh shops so I had kind of this, that really was the power behind this,
was that I already had this audience.
And so the people, it wasn't just beginners coming to me going,
how do I program?
It was like people who listen to my podcast and know how I think
and are already in deep on projects,
whether it's for a company or they're solopreneurs or whatever.
Are they using Livewire or are they just using Laravel? so now now they're mostly using live it's funny how that happens
mentoring them like here try right this is awesome when i started it you know livewire
wasn't in a place for me to recommend anybody use in production um so i mean i i do mentoring for
for really anything it doesn't have to be LiveWire. And I really don't explicitly push
LiveWire in any of my clients. I do push Alpine. That's an interesting why I do that. But yeah,
I'm mostly mentoring people who are already professional developers and have real production
Laravel applications. Yeah. So what's Alpine real quick? If you're familiar with Vue.js, it's very, very similar to Vue.js.
So if you know how to use Vue, you basically know how to use Alpine.
Why not use Vue then?
Yeah, right.
So I had described how I started going a little bit away from the front-end heavy world and
back to the back-end and simple little vanilla like javascript
sprinkles around my apps to do little things but not writing the entire template in viewer react
so i'm pretty hard on that using turbo links uh and and then vanilla js for the rest but you end
up i ended up in this place of like okay i don't want to buy in fully to a front-end framework
because that i mean that that is it like when you're in a front-end framework you've bought in like it owns
your entire front-end so it's you can't mix it's very hard to mix things um your entire dom is
rendered from a virtual dom so you don't have control over anymore you've surrendered control
to their paradigm um which is powerful but for me i was stepping back from that so that that was the
one end was like,
there's tons of power there declarative, you know, us where you can just set some state,
you can manipulate state and your UI reacts. And then on the other end, I was in vanilla JS
sprinkles land. And I don't know, I just felt like it, it wasn't sufficient. I was it was like I was
back in the jQuery days for me, where I'm registering click handlers everywhere and manipulating DOM elements. And it felt really imperative. It felt imperative, it felt it felt
brittle in a lot of ways. And just annoying, not not expressive, like view is so declarative,
you have a template and react to you have a template and you can see in the template,
how things are attached to state, and then you can just worry about changing the state so i had felt kind of like in this middle place and when i had reached out to people and been
like you know just on twitter like this is what i want how do i get it you know and most people
said well stimulus is that and you've i'm sure you've encountered stimulus yeah we had david on
the show when he announced stimulus oh no way nice i haven't used it but i've
spoken with him about it in some detail okay yeah so stimulus uh if you read the like the docs or
the the splash page it's pretty much exactly what i'm describing it's like yeah keep your keep your
html or it's what is it some behavior for the html you already have or something like that
um yeah they're really good at their taglines aren't they yeah they are their messaging their philosophy everything is just spot on so i'm already a big
base camp fan dhh fan whatever all those things so this seemed right up my alley and his philosophy
on like monolithic architecture and all the stuff i'm just totally on board with and i wanted this
to be the silver bullet but for me it felt it didn't even well
i guess i don't want to like like trash the framework because a lot of people love it
but it just didn't feel good of everything dh does except stimulus except it honestly that's
probably that's pretty true um yeah for some reason it feels really imperative uh it also
feels like i don't even need it because i end up writing a bunch of dom manipulation
myself anyway um so i don't know it's a very it's a light framework it's very unopinionated it's very
it's very light um are you speaking about by now or stimulus sorry stimulus um light in the sense
it's actually not light like kilobytes wise but but it's light in the sense that you end up having to kind of create your own patterns for things um yeah so anyway alpine is in my mind the perfect balance between those
two paradigms between this this you know vanilla js sprinkles in your back-end rendered app and this
all spa view or react or angular front end that uh that is you know a huge huge ecosystem to buy
into um so i wanted to keep all the good of that of that end which is like i had mentioned
declarative templates um and reactive state and everything but without without the virtual dom
without separate js files for every component without all that stuff um so alpine basically is an in html
framework so you mostly use it directly in your html with attributes and the attributes are
prefixed with x hyphen um so an alpine component you declare an alpine component with x hyphen data
and then you pass in a json object And that's your data for the component.
So everything in that little DOM tree right there is all all related to that data. And you can you
can add on little x hyphen attributes and interact with that data anywhere inside that component.
So if you're familiar with view, the analogy is the data property of a view component.
Basically, I'd realized I want view, but I just want the data property. a view component basically i'd realized i want view but i just
want the data property and i don't need anything else and i want to keep all the template stuff so
i can listen for like v on click things like that um so or v v show so you can toggle something on
and off or v bind an attribute like a style attribute or a class attribute so alpine um you have x data and then
you declare some state let's say show show is false like show colon false that would be your
state for the component then you could have a let's say a drop down like just a div with some
content in it you could add x show and then well you would pass in the the state so show in this
case it's x hyphen show equals show um i should have
used is open or something um and so then you could add a button and on that button you could say x on
click show equals true or show equals not show um so yeah so you can listen for events and manipulate
the state and then you can also sort of declare state or declare dom uh representation based on that state if that
makes sense well it makes sense to me because i'm staring at the readme i'm not sure it makes
sense just in audio but if you're confused click through to the show notes grab the readme
and it will all make sense this does seem pretty cool and uh i was looking for the
the package size uh minified and gzipped, 4.64 kilobytes.
Now there's a sales pitch right there that talks to me.
Yeah, it started when the first version was less than 3 kilobytes.
It's grown since then.
But yeah, it's so slim.
I wanted something that was just...
I felt like the things I wanted weren't that hard to accomplish.
Like I felt like the things I want to do, I don't need a virtual DOM.
I don't need any, I don't need a template compiler.
I don't need any of these things.
I was like, what if I did basic, what if I implemented Vue, but using native DOM APIs?
Like what if I just crawled through the DOM and i used like dot get attribute you know or query
selector stuff like that to get data out of the attributes and then if i want to set data i can
use like dot value equals or dot class list dot add stuff like that so alpine internally there's
no i don't know if there's any dependencies there might be like one dependency to make like getting something
out of an object easier but it's there's no real dependencies it's just me using i don't know my
knowledge of dom apis to to do what i need to do so it ends up being a lot more lightweight than
something like view that literally has to like trant like take your entire html template and parse it out into
an abstract syntax tree build up this observable object thing and then maintain like virtual dom
diffs and a dom app like all this stuff that i just don't have to do well fact check true i'm
on your package json you have some dev dependencies but there's there's an empty
object there in your dependencies list so so Alpine. No dependencies, very cool.
This episode is brought to you by
Tidelift. Managed open source, backed by maintainers.
Save time and reduce risk with a Tidelift subscription.
Manage your application's dependencies covering millions of open source projects across JavaScript, Python, Java, PHP, Ruby,.NET, and more.
Subscriptions include security updates, licensing verification and indemnification, maintenance and code improvement, package selection and version guidance, roadmap input, and more.
The bottom line is this.
You get all the capabilities you expect from commercial software, but for all of the key open source software that you're already using and
depending on. Tidelift works with GitHub, GitLab, Bitbucket, and more. They support every cloud
platform out there. And of course, you can try it absolutely free. Start your free trial today
at Tidelift.com. so caleb the the thing that caught my eye of what you've been up to because i like i said i'm not
deep in the laravel community and i'm now excited about alpine but i did not
find alpine until just now.
What I did find was Sushi.
Yeah.
That's funny.
I think whoever reached out to me from the changelog, I don't know.
Maybe I just assume it's Alpine now.
That's funny. I thought that this interview is basically because of Alpine.
You are incorrect.
So I reached out to you and it had nothing to do with Alpine. It are incorrect. So I reached out to you.
That's so funny.
And it had nothing to do with Alpine.
It had everything to do with Sushi.
So this is our maintainer spotlight series.
And I am very keen on new models
of open source maintainer sustainability.
Yeah.
And what I came across was Sushi.
And I'll just say it again.
Our audience is like, what does this have to do with food?
No, it's a repo called Sushi on your GitHub.
And the thing that caught my eye was this package is sponsorware.
I saw that and I was like, hmm, sponsorware.
What, what, what?
And here you have, well, first of all, Sushi is what you call eloquence missing a ray driver i
assume eloquent is like an orm or something yeah it's laravel's orm okay so it's a library
a php library but then this is this this package is sponsorware and then you said a writ
oh it's updated you updated me from the point okay so here's what i grabbed it said currently
this was this is no longer true,
but it did say, currently, this package is only available
to people who sponsor me on GitHub.
Once I have a total of 75 GitHub sponsors,
I will make this package fully open source.
And then it said, 26 more sponsors to go, in parentheses.
Sounds like you've hit your goal, because...
Yeah, I hit it a while ago.
I didn't update the readme.
Imagine that. I hit it in while ago. I didn't update the readme. Imagine that.
I hit it in like two days.
Yeah.
Awesome.
So this is interesting.
So right now, Sushi, you go there and you see there's source code and there's a Sushi.php.
I'm assuming beforehand it was just a readme.
Tell me about, first of all, this idea of sponsorware.
Yeah.
You talked about how you're trying to find ways of becoming sustainable without necessarily going to get a job again and i'm wondering if this is a
brand new thing you made up if there's other people doing this it just seems like a new model
that i hadn't seen before yeah uh this is so it it is invented but not just by me um my co-host
on my podcast no plans to merge uh daniel we were we were talking we did
a whole episode on just open source sustainability basically um it's from a like our podcast is
really informal and we really just like pick a pick a stance and the other person usually picks
the other stance and we just kind of hash it out for the sake of hashing out an idea um so my stance
was there are tons of agencies and companies who are benefiting directly from open source software, and even advertising themselves as shops that, you know, write in that software, and the people maintaining the software are broke, like the agencies don't pay them any money. And they're just, you know, rolling around in in money, and these open source maintainers are rattling a tin can,
um, begging for money. And that, and this is funny because I think, um, I'm usually not one to,
to like take up mantles like this, but because I'm in this position, I totally feel it. Like
I totally get it now that like, oh my gosh, it's super really, really hard to make money in open source. It's mostly you begging
people hoping that your project gets big enough that an enterprise, something picks it up,
and either hires you, or gives you or maybe like, eventually, you'll have a conference that you can
sell sponsorships to, you can spot, you know, have logos on the docs, like, or really, the other,
the other, the other
more, the most viable option is educational materials, selling an ebook or a course.
Um, but I'm sort of in this position where I get it now.
I'm like, who's got time to make a course?
Like I'm buried up to my eyeballs, issues and PRs and everything.
Yeah.
Like who's got like, yeah.
Like shouldn't the work I'm doing right now justify the payment in itself um
so that was sort of my position was like all right daniel let's argue this like i think that
that there's this crazy thing where nobody's paying these open source maintainers and there's
and i'm in that that place right now where i'm like kind of living unsustainably and uh but i
don't want to be the one to go on twitter and be like, hey, everybody should pay me money. So we started talking about some different ideas. And, and this really emerged
from that discussion. There was a moment in that discussion, where I was talking about sushi,
which we could talk that's kind of a funny package as an example for this. But I was talking
about sushi. And, and yeah, I think I'm an open source. But you know, and so I posed to him this
problem. I'm like, I don't I like open source. Like I love the open source movement. I love everything about
it. And something about charging for software and not making it open source feels weird to me.
Like I've benefited so much from people sharing projects. So I don't want to just say, hey,
this package is only available to my sponsors. It's one of the rare packages that I just keep
to myself. Like I could do that. But something just felt like off about it and i'm restricting the growth of it
like there's so many reasons that that's just not satisfactory every time i come to that decision
in my head i go you know what i'd rather not have the 200 bucks or whatever and i'd rather just
everybody use it i don't know right when it comes down to like dollars and cents i'm never like
it's worth the thousand dollars and i was like it's not worth it um so uh so i've kind of posed in this problem that i don't i feel
like i feel like any of the non-open source options are no good for me um and then the open
source option as well like nobody wants to if you say hey this is sponsor where you have a moral
obligation to be a sponsor if you use this nobody's gonna do it like it just that's just how it works like nobody people just don't do that very few people do not enough to
not enough to drive sustainability across the open source ecosystem like there there is some
but it's not going to move the needle so to speak yeah so so he came up with this he was like so
what if you what if you uh didn't i think he compared it to another, I don't actually
know the product, but let's just say mass drop.
Do you, are you familiar with mass drop?
No.
Okay.
I'm like barely familiar.
So I was hoping you were familiar so you could check me on this.
Sorry.
Let's just pretend this is how it works or maybe Kickstarter or something.
I don't know this idea that, that you, you don't release something until you have a volume
like critical mass.
I was thinking about it
like kickstarter kind of you're you're basically pitching an idea right yeah i mean in your case
i guess it's a library so maybe you already had the software written and you just kept it
yeah yeah but you but ostensibly you wouldn't even need to do that you could go on your
your history and your good name and say here is my idea for an open source library actually
i think you who the cats did that a few years ago with a Kickstarter on some sort of a Ruby packaging thing.
And he had a successful Kickstarter campaign.
And this kind of reminds me of that.
Kickstarter is a good analogy.
So yeah, so basically he had proposed that,
like, what if you kept it just to sponsors
until you reached a certain threshold
and then at that threshold of sponsors or monthly income or whatever um you release it to open
source and it was one of those ideas that felt like it came out of the clouds like he said that
i was like dude that's it that's exactly it um it's perfect because it it really answers all
the questions for me it checks all the boxes
it's still open source so at the end of the day it'll be an open source project um if it's open
source it will be sustainable because it will have already earned its keep um and yeah and i get to
make money so i get to make money and i get to have open source stuff um so i thought it was a
great idea yeah it's interesting because the actual sponsorship goes
to you the person it doesn't go necessarily to sushi the project right but they are backing you
in order to open up allow you to open source sushi this is github sponsors you're using so
how many sponsors did you have when you first put up sushi as sure where yeah i'll run you through
the the hard numbers and then we can talk causation and intent and things like that.
Also, I wanted to note that there is tons of nuance in this whole open source payment discussion.
That's why we did that podcast because there's like, well, what about maintaining the project and not the first person who started it?
Whatever.
We can get there.
Here's the brass tacks numbers for this little experiment.
So my sponsorship tiers are $ dollars and they're nine dollars they're they well right now they're nine dollars 99 and 250 a month and
nine dollars is you get nothing um you get nothing unlike it you get nothing you're just contributing
to me that's funny even like listen my language you get nothing you get nothing in terms of those perks that you're supposed to no additional things
exactly but you get the software i write every day you know so 99 is like the freelancer or whatever
and you get a logo on on the front page and then 250 is you get a logo on every page of the live
wire docs in two hours of consulting which is actually
a wicked deal and probably a mistake we don't have to get into that so when i did this i had 21
total sponsors i think i had like one i think i had one 250 a month 199 and the rest were nine
dollars um so i did this and originally on the podcast, uh, Daniel said, yeah, make it like 40 sponsors
as your goal. And I was like, 40, that seems a little bit steep, but I don't know, maybe.
Um, so after the podcast, when I actually sat down to implement all this stuff, I realized like,
I got to just go for this. Like I got to go for it. You know, 40 is not going to move the needle
that much for me. Um, 75. Oh, so then I thought I'll do 50. And then right, I actually wrote 50
in the readme. And right before I sent out an email, I threw 75. And I was like, you know what,
change it to 75. And so I did that. And we hit it in, I think I hit 75 in probably 24 hours.
Wow. Yeah. So I have a pretty decent email list. I think that was really, uh, the,
the main reason why this worked so well. And the idea was, uh, it was a pretty good idea and it
already had like 1200 likes on Twitter, this little tweet of the idea. So there was already
an audience kind of ready for this. Um, but yeah, moved it from like 21 or something to 75.
And my monthly, uh, when I go into like
GitHub sponsors dashboard, the monthly number was 577 a month.
I think was how much I had in GitHub sponsors by the, I'll just say now, um, I think by
the end of it, I had, oh, I don't even know, but now I have 1900 a month.
Um, so basically it is in a few days i basically made like 15 grand
for the year um on a small project that took me oh man i mean it took me two hours to write the
first version and i mean total hourly is just so small for this project it's a very tiny it's a
one file project it literally is one file php there it is it's one file it's It literally is one file. I saw that, sushi.php. There it is. It's one file.
It's just a novel idea.
And it went from something that would have made me $0 to something that contributed almost 20 grand to my income.
That's not true.
Maybe like between 10 and 15.
Yeah, so it was basically like a,
I'll just say conservatively a $10,000 endeavor
that just kind of popped into our heads and then
landed in my lap. Yeah. I would say that's a success story. Yeah. It felt like it. I mean,
it does. Yeah. Yeah. I mean, that's a pretty quick turnaround. I think you can probably,
so talk me through the marketing logistics of this. So you already put out the sushi idea
and people liked it. So you already knew there was some interest around that. Yeah. And then
you turn around and you sent an email
to your mailing list that said,
basically, okay, I'm writing Sushi.
If you want me to open source it,
I got to get to 75 GitHub sponsors.
I'm wondering how much of this may have been
because the novelty of the idea.
Because there's some of that,
especially with a lot of your backers,
might be indies and devs.
And like, oh, cool.
Obviously, you can't necessarily quantify all this but i'm just curious how how did you actually pitch this
to your audience yeah and i'm wondering how like how much we could rinse and repeat this and have
success for other people right yeah so there's a lot of factors here um so to give more details
the email list was 3 000 people um which is a decent list at least for me um and that's my
generic email like i've i've resisted segmenting my email list so it's basically one list giant
list of people that i send an email to every so often um that are generally interested in the
things that i do and are generally in the laravel community aware of those things and on twitter i have like uh like ten and a half thousand followers um actually i had less than ten
thousand one when i before i did that tweet i gained a bunch just from the tweet so the original
sushi tweet had 1200 likes which is probably in the top five tweets ever for me so i think it's
worth mentioning that it's it and this was just pitching the library right not the sponsor where yeah this was just the idea it didn't it wasn't even library i just like
wrote this little thing but saying like yeah that's just the library yeah what if i wrote this
right yeah yep so so i think it's worth mentioning that it did resonate strongly with a bunch of
people like above average it wasn't my average idea it wasn't my average project it was something wasn't get down it wasn't get down exactly get down would
not have done this yeah right yeah that's good yeah so uh so there was that and so i sent out
that email and emails convert really well for things like this and that's definitely an important
note i think if i just went on twitter and said hey this is sponsor where it wouldn't have had
the success that it had.
I have a tiny bit of experience with this sort of thing, launching something to an email group and seeing how that works.
And this is how that worked.
Moving forward a little bit, because I think that does help color it.
I think if we look at now, you're at 83 sponsors.
Now let's think about rinsing and repeating.
So you've done this with Sushi.
It's open source. Everyone got access to that imagine doing this again you basically
would just come up with a new idea yeah or write some new software and keep the repo private or i
guess the repo has to be public but don't put the source files in there because there's a read me
and stuff i kept the repo private oh you? So this was all like minimum effort.
This was like me.
I'm really glad I got to try this out
without really caring about the project.
Like I cared so little about this project.
I named it Sushi.
I was one of those naming decisions
where I was like, I'm not going to stress.
I'm just going to do the first ridiculous thing I think about.
Well, so the repo had to be public though because I found the readme and it said this will be open sourced when
i hit 75 sponsors so the readme at least had to be out there right the readme wasn't out there
no you found it when the readme was stale and it was public oh so i thought the readme was part of
the marketing no so the marketing was all back channel emails and twitter so you could do a
thing where you actually create the repo public open source and just keep the source code out
yeah and let the readme be part of your marketing and say here's you could even have readme driven
development like you could have the api out there everything yeah the code right i thought i thought
that's what you had done because i found it after you'd open sourced it. That's almost an even better idea.
I mean, that's something I thought of, but it was just so like last minute that I didn't
worry about it.
But you're right that, and also this idea is so simple.
It's like one of those cool ideas that's actually super simple, but like the value in the idea
is the idea, not the implementation.
Or like LiveWire.
Yeah, the implementation is pretty straightforward. Yeah, the idea is the idea not the implementation or like live wire implementation is pretty straightforward yeah the implementation is simple so i thought if i release basically this
full my full vision implementation like somebody would just write it for themselves like and in
general the community i'm in is nice enough to not you know just like do that but um but yeah so i
what i did was keeping a repo private and open to only a few people is pretty tough, actually.
Like the only free way to do it to my not like free easy way is adding people as contributors
on the project to your private repo. So I made the repo private. I added people as contributors.
And so they actually had like push access, like people could do kind of anything they wanted in
the repo. But again, they're nice enough to not. But I just took all my sponsors. And every time I got a new sponsor, I literally
copy and pasted them into the contributors, you know, thing and GitHub. And then when I reached
a 75, I just hit make public. So it was just just simple and easy for me, I didn't have to deal with
anything. But but you're definitely right that having a readme having docs things like that
something is like a marketing page for your project before it goes public is really nice and i i also
want to say an important thing is that i gave the sponsors the software right away and i think that
that's a big deal so even when you weren't at 75 you started at like 25 so like sponsor number 26
comes in and they don't have to wait for 75 like that would
be the worst thing ever because i was thinking like what would be the threshold where it's like
i need 250 and i look at that and be like well you're never gonna get there so i'm not gonna
yeah there's so much weirdness involved with that like oh what if it takes like three months like i
paid 40 and the next guy like number wait until it gets close and then i'll yeah right i think
that actually is a required and somewhat brilliant aspect of the mechanism is everybody who sponsors gets access
right now yeah and then when we hit a threshold everybody else gets access exactly i think that's
really really key to the idea yeah so if you were going to rinse and repeat let's say you come out
with a new idea i'm planning on it i got the idea i'm already starting to talk about it yeah
what's it called so it's called project l so this is one of the things uh that i've sort of done
over time now is like i i punt on naming projects because i always regret naming something too early
um liveware was originally uh it's like live is laravel live view then it was light wire then it was it
took a while to get to the life where um alpine started out when i wrote alpine i wanted to punt
on everything not important so i called it project x so now all my projects are basically project and
then a letter um and so this project l is totally unnamed. And it's a full app.
It's my idea of the common denominator of all web apps built, what I would believe perfectly,
like what I deem is perfect, or at least really well thought out in Laravel with LiveWire
and Alpine with full tests, everything.
Like totally a full on app that you can can have access to read the source and go like
oh i need infinite scroll or oh i need a data table or i need a date picker like well i'll go
to project l and i'll you know see where caleb does that like a reference implementation yeah
right all the basics yep which to me is like really the most valuable thing for a project
like docs are great but i just i wanted to see examples and they same with me yeah so it seems like kind of pushing that to the extreme is like why don't we just make
an entire app and that's the example um so anyway that's project l and i'm working on that in the
background and sort of tweeting about it as i go little screen shares and tips and things like that
um and my current plan for it is is sponsor where basically i'll i'm speaking at laracon online at the end of the month um and so at laracon online i'll release 1.0 of livewire and i'll release project l uh
only to sponsors and i'll set a threshold and i'll tell everybody it's open to everybody when i hit
this threshold and it'll probably be a pretty high threshold because of how much value it you
would get from it and how much work i'm putting into it
you got a number in mind um the first one that popped into my head was 150 but that honestly
might be low um yeah that's less than double right project l is the kind of thing that
that could be valuable enough that um that people like forget about sponsor where people would just
gladly pay 10 bucks a month to get access to it you know like a decent amount of people so um so yeah so the next number that
popped in my head was 250 but then i'm like that's that's a lot but who knows yeah the nice thing with
all this is you don't have to get to the threshold to be valued like yeah right the fact that you
give each person access means a you don't have to hit that $250 to get value from yourself.
It's not like you're waiting for $250
and then you hit a threshold and now you get your money
or now you can do your thing.
And then B, each person, they don't have to wait for $250 either.
Like, alright, I'll just pay the $10
or the $99 if I want to be a big baller
or the $250 if I'm a big, big baller.
But that $250 threshold, you could set it out a ways
and not really it's not a huge risk to do that i guess as a point yeah yeah it's it's really not
at all in fact with with sushi that was kind of my thinking was like all right i'm gonna set it
at 75 if we don't get there for a month and everybody forgets about this fine when like
everybody already has the software and then when i do some other sponsor
where that has a higher threshold when we get to 75 i'll just be like oh yeah by the way sushi's
public everybody if you care you know and it'll be like another round of advertising for sushi
to be like oh cool we forgot about that but nice sponsor where's like pays eventually so that's
kind of a cool idea it's like i could set this to 250 and let's say we don't get there for five months.
I do another project
and that gives it the steam to get there.
Then it's like this one number.
It's additive.
Yeah, exactly.
This seems like a really nice model
for indie developers
with many small or small-ish projects
and existing audiences of some kind.
I think people with less audience,
maybe with one large project
where they can't spin off new ideas very often,
would struggle with this.
I'm curious, in your experience so far,
have you had any blowback?
Anybody say, this is a lame idea,
or I don't like you, Caleb, or I'm never going to sponsor you?
I always get at least a
hater or two on pretty much anything i do and this uh i didn't hear any haters no um definitely not
it doesn't feel like a paywall because you know like people get backlash on paywalls all the time
um especially ones that started out as like open source things or whatever but i think it just doesn't feel like a paywall so people aren't that mad about it they're like
they're like oh you know i don't know no i haven't gotten any haven't gotten any negative
reaction to it at all it's so perfect for me because i i think i i kind of suck at like
every other monetization model or like i i know i'm good at building
software that's like use like that's something that i'm good at is building useful software i
guess everything else just seems like a gamble and i don't want to gamble on something unless i know
it's going to work so i'm always like should i try this thing yeah it's not worth the barely any
money i'm gonna make like just keep releasing things for free so this? Yeah, it's not worth the barely any money I'm going to make, like,
just keep releasing things for free. So this, this is honestly, it's like the easiest and most
reliable. I think it's going to be really huge, at least for me. And I hope for other people like me.
Well, many listeners of this show are maintainers like yourself. And I'm sure because this sounds
like it has been maybe if not a home run, at least a triple sure, because this sounds like it has been,
maybe if not a home run, at least a triple.
This has been something that,
we haven't found too many models that seem to be easily reproduced
and working really well without, like you said,
a bunch of additional work.
So either become a marketer,
or you become a support team,
or you become a writer of documentation and help, or you become a support team, or you become a writer of documentation
and help, or you become a mentor, or you become an entrepreneur and start a support business
around it.
Every single monetization strategy, almost all of them require like, and now I'm a business
person.
Well, I really wanted to try open source software.
I know.
And so I'm sure that many of our listeners are going to
give this a try and to the listeners out there if you do try this let us know how it goes yeah um
i think iterating idea and trying it in different environments how it didn't work so well for me or
worked even better here's what i did um can really just help push the needle for all of us
um i think worth mentioning there's there's two real changes in perspective on the whole open source
sponsorship thing that I had that led to this, I think are worth mentioning.
And I think you kind of touched on a little bit.
First one being, I switched my brain to realize that the software that I write is the value.
Like that justifies money so it's not
that there's an there's a i'm not necessarily even saying there's a obligation or a responsibility i
think there there is but what i'm saying is that the software i write is where the value is and
when i write things in my perks like get a free sticker which i did i started that and realized like nobody cares about the sticker. And now I just have to ship all these stickers.
I just removed the stickers. I was like, even that notion, like perks are nice. And honestly,
people need that's responsible where it comes in. People need some some incentive to sign up.
They're not just going to go. They're not just going to reflect to themselves on the value they
derive from your open source software and hit that sponsor button. Some will, but that's not going to do it. So for
me, I changed all my language. I removed the sticker perk. I removed most of the perks so
that it was pretty blatantly obvious on my page that like what you're doing is supporting me in
the software I write. I also avoided language like buy me a cup of coffee, things like that,
that suggests that this is just some side thing or I even avoided things like buy me a cup of coffee things like that that that suggests that this is just some side side thing or or i even avoided things like like the opposite of that like feed
my family because that also like what if i make way more than what you need to feed a family
now am i being disingenuous like no the work is what justifies the money um it's it's not that i
have some obligation to make like and i'm not like a pastor who, you know,
has an obligation to not make too much, basically, like that people might think that or something
like, no, I'm making software that's valuable.
And if I end up making a million dollars a year off GitHub sponsors, I don't want to
feel guilty about it.
So my, then I think it's fine because I'm providing that much value to you.
So that was first, it was a language and mental change for me was like, switch the language from, this is all side stuff, you know,
Patreon style, like buy me a cup of coffee to like, no, this is, I'm giving you valuable things.
You're paying me for that. That's the transaction. Um, so that was one shift was changing that
language. Does that make sense? Oh, absolutely. And I'm, I'm looking at your sponsorship page.
Now we'll put that put that page in the links
for anybody who would like to model,
use Caleb as a model for what they are up to.
And I will say the $9 a month individual perk
is access to Sushi.
So there it is, software, right?
Here it is.
Yeah, I got to remove that now
because everybody connects.
Yeah, everybody has that one.
Thanks for the heads up.
Oh, there you go.
$99 a month perk is logo, name, link,
and listed on the readme
and livewire landing page uh this is for a freelancer slash startup so again this is not like
buy me a cup of coffee this isn't sending you stickers this is like there's some business value
there for them and then 250 or 249 a month the perks are logo name link listed on every single
page of livewire docs and then two hours of live wire consulting per month so that one does have more of a quid pro quo so to speak so the 250
dollars a month is broken because it defies everything i just said yeah so you need to
update your your tears a little bit but i really like what you just said and i think that i think
that is a important thing to remember is that you know we're not out there panhandling for for spare change and we're not
like here to trade extra things that's what the tier system and the perk system always kind of
rub me the wrong way as well because it's like i especially on kickstarter like you see all these
perks or on patreon and i started thinking like man they're gonna have to send out like 25 000
t-shirts or whatever it is you know like there's so much work that you're just building for yourself so it's like i don't that
that is the fundamental change it's like i don't need i already did the i already do the work
that's right um the 250 a month tier to at least caveat why that exists with the two hours
um well a because i i do want money and that's a way that I can sort of build up that.
Just since I launched Sushi, I have LiveWire behind me.
So that's worth mentioning that it's not like all these people...
I don't think I would get a $250 a month sponsor for Sushi, just so everybody knows.
But for LiveWire, heck yeah.
So I've gotten like three, think three new 250 a month sponsors
maybe two new i don't know which is a big deal like those are the ones that really
move the bottom line for me and i thought well yeah so 250 is actually a deal it's less than
i charge for freelancing uh for two hours of freelancing it's 300 for me um so and it's a
small amount it's like a you know it could like derail me from my trains of thought and things
like that if i pile these up but my thinking was you'll notice that it's a small amount. It's like a, you know, it could like derail me from my trains of thought and things like that if I pile these up. But my thinking was, you'll notice that it's live
consulting. So it's consulting on a project that I build. So my mind was like, all right,
I could use the extra money and it'll plug me into real people using my software, which is
super duper valuable. If I'm spending, you know, let's say eight to 15 hours a month,
working with real people who are using my software in production in like enterprise style situations,
that's huge. Like I would want every maintainer to have that too. I would want every project I
use to know that the maintainer is working with real people in the trenches. So that was kind of
a reason why I did that and why it sort of seems off. But that's the
justification behind it. There is one aspect I agree with that. I'll add to that and say that
when you get a new agency or business at $250 a month sponsoring you for Livewire,
them being successful with Livewire is foundational to that continued sponsorship,
right? Like if they end up like not being able to get it going
or it doesn't bring them benefit,
they're going to switch to something else
and they're going to cancel their Caleb sponsorship perhaps.
And so like you helping them be successful
is an additional thing that play there.
So I kind of like it.
Maybe you just take off the per month
and you say, you know, I'll give you,
maybe you add it, make it six hours or something like,
give them like a flat number or something.
Oh, interesting. So you can get involved with them them but it's not like now you're basically because
you actually put a cap on your time at that tier because you only have so many two hour sessions a
month that you can actually divvy out right before you are basically a consultant so yeah yeah that's
a really good point um yeah if it was like yeah just six hours and there's your pool of sponsor
time and it would
communicate something else it would communicate like you're not paying me for my time all the
time you're paying me it it would be clear that you're not paying for my time the time is like
an added benefit of you committing to the project at this level you know exactly so yeah i do like
that um yeah it's definitely something I have to think through.
So the second change,
the first change is the perks thing and whatnot.
The second change was, and this is another Daniel one.
He's good at this stuff.
This is Stroke of Genius.
You should be paying Daniel on the monthly.
I know.
So he works at the agency that I used to work at.
So Daniel, which means he's rolling around in money.
He didn't, you know, um, so he, his suggestion was change your language.
So my tier language was usually it's something like coffee.
And then the next one's like Netflix.
And then the next one's like, you know, it kind of goes up you know it kind of goes up from there um so he was like and i forget what mine were i don't remember what mine were but you
know you're tempted to make it like the smallie the medium meat the biggie the right or name it
after like a fish or something you're a fan you're a hardcore fan you're the biggest fan ever yeah
that's what it is yeah he was like change the language to make it an expectation so rather than like how much do
you want to pay me a month it's like i'll tell you what your what i think your responsibility is to me
based on based on your position you know basically like if you're a hacker like me
you don't need to pay a hundred dollars a month like nine dollars a month is great like if all
of us hackers just kind of did that for each other that would be huge but if you're a freelancer and
using liveware like i want to communicate i'm communicating that now just in the tiers like
if you're a freelancer and you're now you're looking at this and you're going well yeah i am
a freelancer you know you're not just seeing like yeah nine bucks a month great easy you're going
the individual maybe i should call it the hacker even or like the independent whatever.
And then the second one, you would see freelancer.
And I've already gotten response like this.
Like people have even communicated with me that this works without knowing they're communicating
that to me by saying like, yeah, I mean, I'm a freelancer.
And I emailed somebody to say, hey, can I have your logo to put on the site?
They're a hundred dollar a month sponsor.
And they said, no, I don't need it.
I don't need the recognition. You know, I'm a freelancer and I use Liveware. So I'm giving you a hundred dollar a month sponsor and they said no i'm i don't need it i don't need the recognition i you know i'm a i'm a freelancer and i use liveware so i'm giving you a hundred dollars
a month i was like that's great because yeah so that was a change and then the big one was like
yeah if you're an agency like you you should be at this higher tier so i had somebody who was
sponsoring me at 100 bump up to 250 basically because of the language change where they went yeah okay that's that's
right i see his i'll respect his his expectation i guess yeah well those are some great insights
caleb thanks so much for uh talking to me today and sharing this experiment you've been doing and
all the awesome open source listeners check out livewire alpine check out get down it's kind of
cool and definitely subscribe to to whatever Caleb's up to
to find out when Project L comes out.
I'm teasing that relentlessly.
We're all excited for, hey,
reference implementation of all these things.
I think that's a great idea.
And my guess is it'll be a hit as sponsorware as well.
So Caleb, thanks for joining us.
This has been very insightful and a lot of fun.
Awesome. Thanks a lot, thanks for joining us. This has been very insightful and a lot of fun. Awesome.
Thanks a lot,
Jared.
Appreciate it.
Thank you for tuning into our maintainer spotlight series.
Hey,
what do you think of the sponsor concept?
Let your opinion be heard by popping open the show notes and clicking,
discuss this on changelog news.
We'd love to know your thoughts on the matter.
Special.
Thanks to our guests,
Caleb Porzio for doing his maintainer thing.
This episode was brought to you by
our friends at Tidelift. They are all about
paying the maintainers. And it was produced by
me, Jared Santo. We get these
farm fresh beats from the one and only
Breakmaster Cylinder. I'm curious, do you
listen to our outros? If so,
tweet at me, at Jared Santo, because we
have no idea if anybody's listening.
Thanks again. We appreciate you.