Avo: Building Custom Interfaces, Managing Users, and Creating Authorization Systems - RUBY 634
Adrian Marin is the Co-Founder and CTO at SuperStuff.a. He is also the Author of Avo Admin for Ruby on Rails. They delve into the world of Ruby on Rails and explore the latest developments in the tech industry. Adrian shares his journey of building Avo, his approach to differentiation, and the emphasis on customization and user support. They also discuss the challenges and maturity of open-source projects, sustainability, and the importance of offering free and paid versions to cater to diverse user needs. Join them as they uncover the technical aspects of gem distribution and the upcoming Friendly.rb conference in Bucharest, Romania.
Special Guests:
Adrian Marin
Show Notes
Adrian Marin is the Co-Founder and CTO at SuperStuff.a. He is also the Author of Avo Admin for Ruby on Rails. They delve into the world of Ruby on Rails and explore the latest developments in the tech industry. Adrian shares his journey of building Avo, his approach to differentiation, and the emphasis on customization and user support. They also discuss the challenges and maturity of open-source projects, sustainability, and the importance of offering free and paid versions to cater to diverse user needs. Join them as they uncover the technical aspects of gem distribution and the upcoming Friendly.rb conference in Bucharest, Romania.
Sponsors
Socials
Picks
- Ayush - Big Big Train
- Charles - Doomlings
Transcript
Charles Max Wood [00:00:05]:
Hey. Welcome back to another episode of the Ruby Rogues podcast. This week on our panel, we have Valentino Stohl.
Valentino Stoll [00:00:12]:
Hey now.
Charles Max Wood [00:00:14]:
We also have a new rogue and that is Ayush Nuwatiya. I hope I said that right.
Ayush Nwatiya [00:00:21]:
Yeah. Close enough. Hello. Hello. Nice to be here.
Charles Max Wood [00:00:25]:
I'm gonna be nervous about that, like every time. Anyway,
Ayush Nwatiya [00:00:28]:
I honestly don't care.
Charles Max Wood [00:00:30]:
Yeah. I'm Charles Max Wood from Top Bend Devs. And we have a special guest this week. That is Adrian. Adrian, do you wanna tell people who you are and remind them why you're so awesome?
Adrian Marin [00:00:43]:
Hey. Hey. Hey, guys. Thanks for having me. I don't know if I'm so awesome. I try to be, but I don't know. Thank you. So my name is Adrian.
Adrian Marin [00:00:51]:
I'm a self taught engineer, and I'm the author of Avo. Most people probably know me like that. And, more recently, I'm one of the hosts of FriendlyRB, which is a boutique Ruby conference in Bucharest, Romania happening usually in September. Yeah. Otherwise, I have one cute, one and a half year old baby boy and a beautiful wife, and I travel to conferences and talk to people and try to help how however I can.
Charles Max Wood [00:01:24]:
Nice. So, yeah. Let's just dive in. We had you on to talk about Avvo, I think, what, a couple years ago?
Adrian Marin [00:01:31]:
Couple of years. Yeah.
Charles Max Wood [00:01:32]:
Yeah. So, I think last time, a lot of the focus was around building, like, admin interfaces and stuff. But it looks like you've expanded it some and you're doing some content, focused stuff. So do you want to just give everybody the 10,000 foot view, what avo is, why they might want to use it? And then and then we can get into the details on how it goes together.
Adrian Marin [00:01:57]:
Yeah. Sure. So it's, so after three and a half years, it's still sometimes difficult to tell people what AVO is. But what I say is, like, it's an admin panel framework slash content management system slash internal tool builder for Ruby on Rails. So it helps developers build, Ruby on Rails user interfaces very, very fast. But it's not just user interfaces. So don't think of it like a UI kit, but think of it with that it has some business logic as well. So you tell it something like, hey.
Adrian Marin [00:02:31]:
I have a product, and the product has a title and a description and a price. And you tell it what kind of, like, attributes those are, and Ava will read that and will create for you like a beautiful crud like interface. So very advanced one where you can see all your products, you can see details, you can sort, you can filter. You can apply actions to them and so on. So this is like the basic gist of it, but it does so so much more than just an admin panel framework.
Charles Max Wood [00:03:00]:
Okay. So, when we talk about this, and I don't know if I brought this up last time, but there are other admin panel frameworks that are out there for rails. Right? Yep.
Ayush Nwatiya [00:03:11]:
I
Charles Max Wood [00:03:11]:
hate them all. So
Adrian Marin [00:03:14]:
I know.
Charles Max Wood [00:03:15]:
I know. I haven't tried Alvo yet. So I keep wanting to, and it's just, you know, time.
Adrian Marin [00:03:20]:
Go for it. Yeah. Anyway. So
Charles Max Wood [00:03:23]:
things yeah. Go for it. How
Adrian Marin [00:03:25]:
do you make this not suck? Well, it's a lot of work. It's a lot of work, and we did a lot of work for the past 3 years to make that a possibility. So when I started, I just thought about it. You know? I saw that there were, like, active admin and rails admin and Trestle and administrative and many others. But I think that when they were created, they were created with different context in mind, with different technologies, and probably different goals as well. When I started building Avvo, I wanted from day 1 to be something that you could give to your consumer. So something that looks good, that works well, that has some advanced use cases. So it's not just a glorified database, browser.
Charles Max Wood [00:04:10]:
Yeah. That's what that's what I hate about them.
Adrian Marin [00:04:12]:
Yep. I know.
Charles Max Wood [00:04:13]:
It's their glorified database browsers. And and so what happens is is, as soon as you hit an edge case and an edge case is anything you have to write code against them for.
Adrian Marin [00:04:24]:
Yep. Yep.
Charles Max Wood [00:04:25]:
It it just gets really gross really fast.
Adrian Marin [00:04:27]:
Yep. I agree. That that's the feedback that I got from, from everybody, basically. Like, yeah, it helps me go, like, 60%, 70% of the way, and that's easy. But then, like, the rest of 30%, that's so freaking, you know, difficult to do and painful. And sometimes I just abandon the whole thing. And I knew about that, and I wanted so whenever you hit that because it's kind of the same with our like, the first 60, 70, 80, depending on the app, Sometimes you can go like 90% it's and it's done. Our does the whole work for you.
Adrian Marin [00:04:58]:
But whenever you have that rest, you know, 10, 20, 30%, what we try to do is give you many, many, many escape hatches. Right? So you can, you can modify the queries. You can modify what options are there. You can modify you know, you can bring your own frameworks inside, like for search or authentication or authorization. And whenever it's there's something that we cannot build for you or we haven't built, we just give you, like, ERP partials and you can write your regular Rails code however, you know, you're used to it. So, again, it's a lot of escape hatches, a lot of places where it can come in, hook into the whole, business logic that we we wrote, and you can take over. Or or like in the worst case scenario, you can take over like the HTML, the Ruby code, JavaScript, CSS, whatever you need. So, yeah, this is all for you to not get stuck and not to feel, you know, like a prisoner.
Adrian Marin [00:05:56]:
Like, ah, I cannot. I can build this or whatever.
Charles Max Wood [00:06:01]:
So I think 60% is generous, but, I'm just going to say, so what, what does Avo give you then that, you know, is kind of the baseline case, right? So I'm going to plug this in kind of do a minimum amount of effort. What what do I get for that?
Adrian Marin [00:06:20]:
So you get, like, with a minimum amount of effort, you get, like, a a CRUD UI, a very advanced one where we have, for example, we have about 30 fields. We have some simple ones like text, text area, whatever number. But we have like the price field, which works very well with the money gem from Rails. We have Chicks editor, TickTap editor. We have a key value field where you can create, like, a hash inside the UI. You get access to all of the all of Rails' associations, like, as advanced as you wanna do it. Like, it belongs to, has many, has in, belongs to many, whatever, STI, whatever you need, polymorphic, searchable. Like, this is a big pain point for, active admin users is, like, if you have a belongs to and you wanna attach a user, but you have, like, millions of records, it will just jam on you.
Adrian Marin [00:07:06]:
Like, we give you that as a searchable, you know, at a async kind of, you know, multi select experience. So, that's like, you know, you get quite quite a lot, to be honest, with with with Avvo.
Ayush Nwatiya [00:07:21]:
So I used
Charles Max Wood [00:07:22]:
to use it.
Ayush Nwatiya [00:07:24]:
Yeah. I just wanna gush about Huddl for a bit because, I was, like, I think about 3 or 4 weeks ago from I had to add an admin panel for my client project, and I've never actually used one before because, I think that, like, Charles, I hate, I just hate them. I I prefer building my own, stuff. Like, just that does just exactly what I need. But for a client project What
Charles Max Wood [00:07:49]:
I ended up doing?
Ayush Nwatiya [00:07:51]:
Yeah. For a client project, it it made sense. So I played around with, like, 3 or 4 different options, and Ava was the only one that didn't make me want to jump out of the window. It honestly I yet. True. But honestly, it was it gave me no pain. I was up and running so quickly. The the key value, field you mentioned was, like, a nice surprise because I just created a JSON b field, on a table, I think, last week.
Ayush Nwatiya [00:08:24]:
I'm like, this is gonna cause me trouble in in in our voice, isn't it? And I go, like, like, no. It's not gonna cause me any trouble. It's like it's like this amazing thing just out of the box. Yeah. Yeah. Just, the docs, I must tip my hat off to the the quality of docs. Like, honestly, anytime I run into a problem, I just go search the docs, and it was, I'd found what I need, like, in seconds. I saw I remember I was trying to, add, like, a search field, a top level search field for an entity.
Ayush Nwatiya [00:08:56]:
And we had elastic search on that particular entity for, like, the main the user facing app. And I could just hook the same search thing into our work, like, just a simple block. It just set a block in the our resource file. It's like the analogous to the model. And, yeah, it's using the same thing as the the user facing app, and I was just super impressed at, like, everything, by just how customizable it was, yet how much it gave out of the box. So, yeah, I just wanted to gush about it because I wasn't expecting to be impressed by by an admin panel because, I've avoided them for a good reason, but I was sufficiently impressed by ABo.
Adrian Marin [00:09:44]:
Gotcha. Thanks a lot, man. Thanks. I appreciate the kind words. Yeah. So this is there are 2 things here. Like, one is like, okay. We all hate, you know, the premade kind of things, like, you know, the admin panels because we have maybe like, when I speak to other developers, about active admin and administration rails admin or whatever, they say that the the experience is painful, and we had to fight these, you know, these, ideas with with Avvo.
Adrian Marin [00:10:09]:
But, like, the thing is, like, any piece of technology, like even rails at some point is gonna be difficult to implement something. Right? If it's rails, if it's like NGINX, you can zoom out or zoom in however much you want. But there is a sweet spot there where, you know, you can get super fast. You can you can go go super far, very fast. And then, you know, it's just a matter of like, okay, I need to have the proper tools and proper hooks and the proper, you know, escape hatches to be able to build my own thing. So, yeah, what I what I usually so this is I think this is the most difficult thing that I I have to do. What you have to do is get people to try it. Just tell them, like, give it a half an hour.
Adrian Marin [00:10:47]:
Play with Avo. Like, build something of substance. Half an hour, an hour, and you'll figure it out if it's something that you need or it's something that you don't need, but you definitely know more than just assuming it's, you know, crap. Yeah.
Charles Max Wood [00:11:03]:
Right. So when you say try it, you know, try it for a half hour, I guess, one thing that we should point out is there is a free license for it. Right?
Adrian Marin [00:11:12]:
Yep. Yeah.
Charles Max Wood [00:11:13]:
So you can go in with you know, without risking any money or anything else, you can just go pick it up.
Adrian Marin [00:11:18]:
Yep. And So Apple comes in in 3 flavors. It comes like a community version, which is free. It probably has 60, 70% of all the features. Like, most of the work that we do is on the free features, like supporting advanced edge cases with associations and all kinds of crazy stuff. And then, if you need more power, we have the pro and the advanced packages tiers, which bring you give you a little bit more. But if you wanna try it out, we don't have a trial feature yet, anymore. We had it last year, but we we we we just took it out.
Adrian Marin [00:11:49]:
But, like, if you try the free tier, you're again, you're gonna know if this is something right for you or not. And if you have any questions, like, for the pro and advanced, like, hey, can I do this? Can I do that? Definitely reach out to us because we we like, answering those questions. And we have like proper docs for everything, so you will see how things work or don't work. So, yeah, we try to make it as self-service possible.
Valentino Stoll [00:12:15]:
I wanted to walk through just real quick for our listeners here because there are so many admin tools out there, and there is a differentiating factor here that is very, like, very UI, driven. So you've, like, definitively set how the UI of the admin looks like. And then you just support a DSL that allows you to drop in pieces of where the admin dashboards, are. And I think that's, definitely one of the differentials I saw with Avvo, like, compared to any of the alternatives. Right? Like, all the other alternatives either had, like, a generator, like, with administrate, right, where you have to generate the view that you want or Yeah. The dashboard manually.
Charles Max Wood [00:13:02]:
Yeah.
Valentino Stoll [00:13:03]:
And then the likes even active admin follows that process a little similarly. Or you have something completely out of the way like motor admin where it's like, hey, you know, you just throw everything at it and it, like, you know, you get everything, but it's like a little bit of a mess. Right?
Adrian Marin [00:13:18]:
Yeah. Yeah.
Valentino Stoll [00:13:19]:
I feel like I have a nice middle ground there where you have, like, kind of this DSL that's just for, like, where to put things in the buckets of the of the user interface, which I think is really cleft. Yeah. And so I just like, you know, how does that work? Right? Like, I
Ayush Nwatiya [00:13:36]:
we're just
Valentino Stoll [00:13:37]:
imagining, like, flex or, like, you know, view components or something. Right? Like, it's so so clean of an interface. Like, I'm super curious.
Adrian Marin [00:13:45]:
Okay. Cool. So let me touch upon like our, our decision of using a DSL. So when you're building something like this, you kinda have, know, like you said, like, 3 ways of doing it. 1 is you generate things. But we figured out quite fast that if you generate, you're gonna views. If you generate a lot of business logic there, you're gonna lose the ability to update. Like, because we are shipping a DSL, we were able to ship so many improvements over the time of 3 years.
Adrian Marin [00:14:14]:
End user the developers had to do just very tiny adjustments to the DSL of the or the configuration. Like, imagine if you have, like, I don't know, 15, 20 resources there, and at some point, we wanna push, you know, some kind of, I don't know, breadcrumbs or whatever drop down. You would have to go into every file, every view file and update it and make sure there are no conflicts. And, you know, maybe you did something there. So, again, that's a little bit messy. It's not, you know, it's not for every project, but it's a little bit messy when you're dealing with, generated stuff. We do generate a few things for you. Like, we definitely, we generated the configuration files, which are resources and actions, and some view files whenever you wanna take over, you wanna whenever you wanna take control.
Adrian Marin [00:14:57]:
But we we think that the DSL gives us this power where, you know, we can ship a lot of, a lot of value and in in upgrades. And so, basically, people buy one product, but after a year, you have, like, so many more things upon, like, new things in that product with very minimal, you know, upgrade, with a very minimal upgrade process. And, to answer your question, how, like, how did we do it or whatever? Like, I don't know. We just think it's the best way. But at some point, I think we're gonna go a little bit down that route where, you know, you push some codes there, like, with, with configuration, but we will give you the or give your users the ability to add some things in the UI when in, like, your production application. For example, we have this cool feature called scopes. So you go on the user's page, but it have, like, tiny tabs on the right where you can say, okay, give me just the admin users or just the non admin or whatever users. We do this is still driven by configuration.
Adrian Marin [00:15:59]:
So if you want to add another tab, you have to generate the scope in in your app, commit it, deploy it to production. But we would like to give it give you give your users the ability to, like, create a a filter for that, you know, for those users, for that resource, and say, okay. Just keep it here as a scope because I wanna have it, you know, very, I wanna have it, very handy here. But and this is going to require us to do some upgrades and to figure out a way to make it beautiful and nice and a good experience as it was as it is right now. And but this is coming somehow. I think this is the next iteration of of avo and and the configuration,
Valentino Stoll [00:16:41]:
having that. So you mentioned upgrades, and I'm always curious because I know upgrading is always painful no matter what tool you're using. Yeah. So, like, what what does that process look like and how, like how can you, like, let people be at ease? Like, oh,
Adrian Marin [00:16:56]:
it's not so bad. So we just tell them it's not a bundle update. So you just say bundle update, Avo, pro, advanced, or whatever you have. And usually, we don't have breaking changes. We do have sometimes we do have them, but we have, like, a nice upgrade guide where we tell you, okay. If you're upgrading for 256 to 257, you're gonna watch out with these two things. This is why we did them. This is why it's it's it's a breaking change.
Adrian Marin [00:17:22]:
This is what you have to do to avoid it. So, we did have, like, a lot of breaking changes. We're going from 2 to 3, but that was, you know, a a big big update. But, usually, there are there aren't any. And if you do bundle updates, you sometimes get, like, a new feature or new big feature that, you know, you you maybe didn't plan to build, you know, but you can but now you have it. So, the upgrades are quite quite painless, I would say.
Charles Max Wood [00:17:54]:
So I kinda wanna get into the use case a little bit further because, I'm kind of imagining there's this fuzzy line, I guess, between what I think of as like an admin panel versus say just stuff that the user is going to use. Right. So if I wanted to set up a dashboard for just a regular, so let's say I'm building a software as a service. Right? So they log in, they don't have all the admin features. They just have the basic features for whatever. Right?
Adrian Marin [00:18:23]:
Yeah.
Charles Max Wood [00:18:25]:
So I can use Avvo to build those interfaces too. Yeah.
Adrian Marin [00:18:30]:
Yeah.
Charles Max Wood [00:18:30]:
So, of course. So just, just as the, just to give an example, right? So one app that I've been wanting to build for a while is I want podcast guests to, you know, when they get an invite to come on the show and they pick a day and time, then I want, you know, zappy or something to hit an API and create a form basically where they can come in. And I just looked up the tip tap where you can do the synchronized editing. And that's the other piece that I've been trying to figure out because I don't want to build it myself. But anyway, so the guests and the hosts can all use stuff that I build in Avvo. And then on the other end where I'm managing users and stuff like that, same deal. Right? I can use Avvo to build that stuff out. So so it's kind of all of the above.
Adrian Marin [00:19:20]:
Yeah. So we have a built in, authorization system that uses funded by default, but you can hook up action policy, which it just which is kind of similar. And I think there's a driver for if you wanna do that. And using the authorization feature, you can tell Avo, like, okay. This is the kind of user that should be able to see the user's resource or, this page or that page, or they they can create nuance or edit ones. And using those funded policy methods and a few more that we we have properly documented in in our docs, you can tailor the whole experience. If you just say, for example, like, a user cannot create a product. Perfect.
Adrian Marin [00:20:03]:
Avo knows what to do. It'll not show the create button. It will not allow them to go to slash new. It will do everything. So just to make sure that they have only the, they have access to only the things that that they have access to. So we try to give you all of those tools, and we have all of those primitives for authorization. So you could create 2 different, let's say, UIs or panels for for 2 types of users.
Charles Max Wood [00:20:33]:
Yeah. That makes sense. I guess the other question that I have, and this is something that I've been thinking about for a bit is I've been wanting to build specific tools for people who are building a software as a service. Right? And it sounds like you've got a lot of the things that I've kind of been dreaming of. Okay. I've built this for people, but if you built it, you know, it occurred to me, well, maybe I just want to sell my own sort of dashboard panels or things like that, that people can stick into an Avvo. Is is that even an option? Like, can you build plugins for Avvo?
Adrian Marin [00:21:03]:
Yeah. So we do have an API. We have built an API for Avvo 3. It's not very properly documented. This is something that we wanted to do this year and have, like, this plug in and plug in system with a directory where people can create their own fields or their own resource tools or their own, I don't know, dashboard cards or whatever Mhmm. Other things that they're thinking about. So basically the plugin system will give you access to different initialization hooks where you can start the plug in and inject some, you know, menu item or, like, inject, create a new field, and add that field there. So it's not a very rich and, what do you call it, environment, plug in environment.
Adrian Marin [00:21:48]:
But if you do wanna build something like that, reach out to us because we love talking about that and we love supporting that. Yeah. And and and speaking about this, like, this is another thing that people get when they use Avon, especially, like, the the customers that, you know, get, like, the pro or advanced license. And And not only those, like, even the people people, we have a Discord server. We have a GitHub repo. And whenever somebody comes in and says, hey. I have this use case that, no, Avo doesn't, you know, work for us or it can't do something because it does happen. Like, you can build software in so many ways.
Adrian Marin [00:22:23]:
When they when that happens, like, we try to make sure that, 1, we build it for them or, 2, we give them the proper hooks for for them to build it. For example, like the attach, to the attach scope. So whenever you have, like, a hasmany and you wanna attach a user or something to a different record, they wanted just some records to appear and not others. And I said, that's perfect. That makes sense. Let us build this for you. And in about a week, we just deployed the new version, and they had it. So, again, like, if there's anything we try to do this, you know, relationship between us.
Adrian Marin [00:22:58]:
Like, if it's anything that doesn't work or whatever, we either build it for you or we give you the tools and the hooks to be able to do that thing, which, you know, sometimes with other tools, and I'm not talking to admin panels, but sometimes with other tools, you would pay anything for somebody to listen to you.
Charles Max Wood [00:23:13]:
You know? When you're Right.
Adrian Marin [00:23:14]:
Using a Jam or a JS plug in and you're stuck and nobody listens to you, like, come on, man. I need I need some help. You know? So, yeah, this is what what we're trying to do with with with Ava and everything.
Ayush Nwatiya [00:23:30]:
I just wanna talk about the business model a little bit because I think the Sidekick, I think, is the most famous, probably a product that kinda follows this business model. So how did you decide that you're gonna do this community version for free, which is open source, and then, the paid version on top? How do you decide which features go in in free and which features are paid? And then finally, just can you talk about the technical side of how do you actually distribute a gem that isn't free?
Adrian Marin [00:24:04]:
Yeah. Gotcha. So how did I decide? That was like when when I started with Avvo, I didn't mean to build a business. I just want to see first if I can build it because that was amazing. I love admin panels. I built a lot of those and internal tools, and, I wanted to see if I can build it. And then I said, okay. I wanna sell it.
Adrian Marin [00:24:23]:
I think at first, I just wanted to sell it for money so it wasn't on RubyGems or whatever. But then I figured out and I speak by speaking to people like, hey. Nobody's gonna use it if they can't try it. And that's true. Like, if you cannot, you know, test it out a little a little bit, it's, you're not gonna choose it. You know? You're not gonna buy it from just a few images or videos. So how I, you know, how I got to, like, free and paid, you know, everybody would probably be Sidekick. Like you like you said, like, I I saw Sidekick and other products, and, okay, there's a free version.
Adrian Marin [00:24:55]:
Perfect. I'll use this one. And there's a paid version, which is, the other one. How do we choose which features go where? It's not an exact science. It's a mix of how much it takes us to build them, how much it takes us to maintain them or how much we think it's going to take to maintain us maintain it. Mhmm. And a little bit of how much value they add, right? For example, like the dynamic filters where you have like stripe styled, pills where you can go and, you just go on a field like price and say filterable. True.
Adrian Marin [00:25:28]:
Perfect. That's it. That's all we have to do as a developer. And then in the UI, you're gonna get, like, a drop down and say, okay. Filter by price. And you're gonna have, like, a nice deal and say, I want it, more than this price or less or between or whatever. So that's like a very powerful feature which we spent, I don't know, I think 3 months building it or 4 months or something like that. If you wanted to build it in house with your team, you gotta have a, first of all, a product person that knows what they wanna build.
Adrian Marin [00:25:57]:
You gotta have a designer to design it. You gotta have a front end, person, so somebody that knows how to build that because most the I don't wanna say most teams, but some teams only have, like, back end developers. So you see, it's like this whole you need a whole team to build a feature like that, or you can pay something like, I don't know, a fraction of what would you would pay for that team to build it for Avvo and get so, so much more. That's kind of our value proposition. Instead of, you know, having teams build certain features for you, you you kinda have them, with with Avo.
Ayush Nwatiya [00:26:33]:
Nice. Yeah. That that makes perfect sense. Kinda I I did think it would be a bit of an art because there's no, like, rule as to, this is free. This is paid. It tends to be a bit of, just intuition and stuff.
Adrian Marin [00:26:45]:
Yeah. And yeah, and, again, like, most of the work we do, we do on the free features. Like, you're not gonna believe how much because we wanna support so many things.
Charles Max Wood [00:26:54]:
Yeah. But right now yeah.
Adrian Marin [00:26:56]:
Do you
Ayush Nwatiya [00:26:56]:
ever, like, transfer a feature from paid to free, like, in with an upgrade because you're you're, like, building a lot of new features that that are paid? Do you ever say, this feature, maybe we can now give it for free as well?
Adrian Marin [00:27:10]:
Yeah. We did do that. So when we jump for from our 2, no, from our 1 to 2 or from 2 or whatever, 1 to 2 or 2 to 3, I don't know, something like 8 features from Pro. We just made them free. It was like custom fields, custom everything. I don't mean I think translations, something about search, like, a lot of things we just made for free because, it was kind of difficult to try to support them as paid and make people, you know, kind of, like, check if the person has has a paid license or not or whatever. Some of them were just because it was easier for us, and some of them because they really made send it really made sense to for us to give it away for free. So, most of the features went downstream from paid to free.
Adrian Marin [00:27:57]:
Only from we only had, like, one tiny feature that went from pro to advanced because we made it so much bigger. It was released as a beta to see if people are gonna use it. It was good. So we said, okay. We're gonna build this whole thing about around it, and that was moved to advanced. But, again, like, we're developers. We don't have any VC money. We we're not in in this business of, you know, trying to squeeze every little dollar and penny from everybody.
Adrian Marin [00:28:24]:
We know how difficult it is, when you're starting out and somebody just saying, okay. This is going to be paid from now on. You're gonna have to like, we don't wanna do that. We're not in that business. We wanna help you guys. So, yeah, we haven't done that.
Ayush Nwatiya [00:28:38]:
Yeah. No. That's good. Like, yeah, one of the things that kinda gave me confidence to use Avo on this project was that I knew that, you weren't VC backed or anything. You were just indeed developers just like me. So, I knew that I wasn't gonna get, messed over by usual VC tactics. Yeah. So, like, how do you handle the paid distribution of of the gems? Because, I've I've only ever used, like, free gems of Ruby gems.
Ayush Nwatiya [00:29:05]:
So, like, if if someone's paying you, how do you kind of what's the technical side of distributing that?
Adrian Marin [00:29:12]:
So in, in the beginning with our 1 and 2, we had everything on GitHub in one repository. So if you were a little bit savvy, you could go in and say false to true, whatever, and you say, okay. I have the license for free or whatever. And we knew that some people were gonna do that and whatever. It it was all good. It it kind of helped us with the traction. We wanted to get it in in in front of people to get feedback and see, like, do you really need this? Is this something that you would you know, does it help you that much? So in the in the beginning, we just had that, and we were pushing all the features in 1 gem, and you only have, like, one license key that would check on runtime, if it's a valid license or not. Now, with Avo 3, we broke it up into multiple gems, a little bit.
Adrian Marin [00:29:59]:
We did that because, we wanted to keep some gems hidden, like, behind the paywall and because it made sense. We had too many things in the main repo. And what we do now is we have, I think, 6 or 7 gems in total. And when you want to install it, you gotta have, if you wanna install those behind the payroll, you gotta have an, a gem server token. So, basically, you still use, sorry, you still use, gem file and bundler and and the the bundler kind of, you know, infrastructure. But instead of asking, for a gem from RubyGems, you're ask asking it from our private repository. And our private repository uses bundler authenticated the authentication feature, and it'll ask, like, do you have a token? And we will check, right, you know, very quickly. Like, is this token still valid? Can they use this version and so on? So, basically, you still use gem files, but you get
Charles Max Wood [00:30:55]:
them HighKick does the same thing, doesn't it?
Adrian Marin [00:30:57]:
Yep. Yeah. Yeah. Yeah. Yeah. Yeah. They have their own private server.
Charles Max Wood [00:31:01]:
What are you serving the gems with? Because I know there are a couple of private gems server, systems out there.
Adrian Marin [00:31:08]:
I just built my own. I there are
Charles Max Wood [00:31:10]:
Built your own.
Adrian Marin [00:31:11]:
Yeah. I know. I know. So there were a few gem in a box and a few others, but I couldn't I couldn't figure them out. I'm not that smart. Sorry. I couldn't figure them out. So, I just reversed engineers.
Adrian Marin [00:31:24]:
And you know what I did? I set up like an, you know, the the team. And then I just I just pointed bundler, the gym file to that n grok URL. And now I was just seeing, like, what's what what request do they do? Right? What the what request does bundle do? And I figured it out. I reversed engineered it, and I built my own. So we're still running on that. Works very, very well. It's a it's a Sinatra app. We had it on Fly.
Adrian Marin [00:31:50]:
Io. Now we have it on something else, but it just works very, very well. And
Charles Max Wood [00:31:54]:
Yeah. I'm just gonna ask if it was a standalone app or if it was part of your mono beautiful monolith as DHA put it.
Adrian Marin [00:32:01]:
Yeah. No. It's just that's a Synaptra app. I I don't know why we built it like that, but, we have a different Rails app that checks the license keys and does the licensing and the subscriptions and everything else, which is a jump start up. We're very happy with it. We moved fast when we when we built when we built it. Yep.
Ayush Nwatiya [00:32:22]:
You should, if you get some time, you should really blog about, what bundle actually does under the head because I mean, that would be a fascinating blog.
Charles Max Wood [00:32:29]:
That would be so interesting. Yeah.
Adrian Marin [00:32:31]:
Do you know how much I search for that information? Like, there's no information anywhere of what happened. Why does they why does it go to the versions route? Why does I don't know. So, yeah, I think I should have written that back in the day, but I think I still can remember a few things if I if I
Charles Max Wood [00:32:48]:
Sell it as a premium video somewhere.
Adrian Marin [00:32:51]:
Yeah. Yeah. For sure. Course. $7 course. Yeah. Yeah. Yeah.
Adrian Marin [00:32:57]:
But if anybody if anybody wants that code, it's an ugly stupid code that just works. I just I gave it to somebody. I think it was Georgie boy who wanted to do something with flex UI. But if anybody wants it, just reach out and I'll figure it out. I can just copy paste it to that one Sinatra file that handles everything.
Charles Max Wood [00:33:16]:
So, I'm a little curious how many people are using Avvo out there because I think we talked about it before. It was kinda new, and there were some things we're still kind of, turning wrenches on to make it, you know, not leak. And, yeah. Now it seems like it's something that people go and use and it's fairly battle tested. So, yeah, how many people out there on
Adrian Marin [00:33:39]:
it? So, it's kind of difficult to count the customer. It seems straightforward, but it's difficult because, you know, they get doubled in Stripe, whatever. They get more accounts where it's about, I think, 200, 200 and something customers paying customers that we have, right now. I don't have the usage numbers, but we definitely I think all throughout this whole time of 3 years when we built it and, we we got some more trust and street credibility from the community. Like before Mhmm. I was going on calls with customers or potential customers, and they were asking me plainly, like, what happens if you go under? What happens if you don't want to build this anymore? Which is a fair and valid question. Maybe it's a little bit rude to ask it just like that, but whatever. It's a fair question.
Adrian Marin [00:34:26]:
And, yeah, we don't get those questions anymore. Right now, we're a team of 3 people. Gabriel being, like, the 3rd, you know, junior developer that we hired, Paul was the first, with 3 people working on this, almost full time, everybody. I do a little bit less engineering now than before. Paul is very good with that. I'm trying to focus on marketing and sales and thinking about the big picture and everything. And, of course, going to conferences because this this is what I'm doing lately. So yeah.
Adrian Marin [00:34:59]:
But we're 3 people. It's a good business. We we are profitable. We have a decent 4 figure MRR. Yeah. We have a few a couple of few surprises I can't talk about right now, but, yeah, things are going well, and, we have a clear path forward. We're providing value. And, yeah, it's it's not that shabby, you know, business.
Adrian Marin [00:35:20]:
You know? I don't know what's happening with it. That that was, like, one, like, 2 years ago, two and a half years ago when we first talked about this. Now we're definitely going somewhere.
Valentino Stoll [00:35:29]:
Yeah. I will say your your pricing is really reasonable.
Adrian Marin [00:35:33]:
Thank you, Juan. Yeah.
Valentino Stoll [00:35:34]:
Thank you so much. I mean, more more than reasonable, to be honest.
Adrian Marin [00:35:37]:
For a
Valentino Stoll [00:35:38]:
lot of for a lot of businesses, it's a very small price to pay for an admin, interface. That's really, really easy to get started with. I also I would I'm curious, like, I found these templates, on the site, and there's only, you know, 3 of them, I I think. Solid Cube being one of them and then Bullet Train and Jumpstart Pro. Is this like a pattern you're looking to expand on or, I thought this was really interesting.
Adrian Marin [00:36:08]:
Yeah. Yeah. So there are a couple of things. Yeah. The path the templates are there. So people that have, for example, Jumpstart or bullet train, they can install it very, very quickly. But if you're starting a a Bullet Train app, right now, Avvo is going to be the default admin panel. So it comes shipped with, Bullet Train.
Adrian Marin [00:36:26]:
For jump start, you're you're gonna have to run that template, and and it's gonna be okay. But I think I know where you're getting to. Like, we are going to try to build some kind of it's not starter kits, but, like, imagine this imagine this. You wanna build a ticketing app. Right? The support ticketing support app. We give you all the templates. Like, okay. These are the models.
Adrian Marin [00:36:49]:
These are the resources, the actions, the filters, everything you need for a regular, ticketing app. And then you can get those for free, and you only have to pay for the Apple license. Right? Mhmm. So some it's kind of like once, but it's not kind of like once. You know? So you you get those, and then you can go and explore and, update them and add more things. But you get the ticketing app almost for free. Let's call it. Right? You only have to pay for it.
Adrian Marin [00:37:14]:
Yeah. And then, like, you know, there's another, I don't know, inventory app or whatever. So we are thinking about these things too and expand into that direction. Definitely, it's just need some time to start building it. That's all.
Valentino Stoll [00:37:29]:
There's never enough time. Right?
Charles Max Wood [00:37:31]:
Right?
Adrian Marin [00:37:32]:
Never. Never.
Valentino Stoll [00:37:34]:
One of these days, Chuck and I will get our, internship, program started. And we can start chipping away at everybody's side projects.
Charles Max Wood [00:37:44]:
Well, this particular side project that Adrian's talking about is essentially what I imagined rails composer to be. So
Adrian Marin [00:37:53]:
yeah. I I feel that there's a lot of movement around, like, new Rails projects or starter kits, but not necessarily starter kits, but, you know, how how can we start an app and not have to add device by ourselves every time. And there are a couple of things out there, like regular templates, you know, Rails bites and whatever. There are, like, on the other end of the spectrum are, like, jump start and bullet train. Mhmm. But I think that people are kind of, you know, thinking about, hey, is there a middle ground somewhere or something? And it's definitely a a good question. Is that something that you're thinking of building?
Charles Max Wood [00:38:29]:
That is exactly what I'm thinking of building.
Adrian Marin [00:38:33]:
That's great. So it's not exactly a starter kit. Yeah. I'm I'm looking forward yeah. I'm I'm looking forward to see that to seeing that if if you wanna jam at some point, definitely, I'm open to that because, yeah, I I think it's there's a need a little bit for that.
Charles Max Wood [00:38:51]:
Yeah. Yeah. We should definitely talk and hammer it out because
Valentino Stoll [00:38:55]:
I I'm I kind of miss the days of, like I don't know if you knew the site, open source Rails, but it was like a it was a page that just had, like, common solve problems with rails apps. And I had, like, ticket mule was one of them for, like, a bug ticket tracker or like, they had all kinds of, like, popular, you know, repost that were just, like, full featured apps that solve the specific purpose. So, like, Aivo would be on there as an example or, like, for admin tools or I just had a bunch of them. Yeah. I kind of miss having that center central resource of, like, okay. Here's a full app you could just download and run and it, like, solves this problem. Right? Yep.
Adrian Marin [00:39:34]:
Yep. Yep. Yep. Yeah. I agree. But, you know, you gotta so see, we're going back to the same thing, like, you know, I hate admin panel frameworks. I wouldn't use them. Right? So we we we I would like to have one, but I don't trust it.
Adrian Marin [00:39:49]:
You know? So but I think it's a shift. It's a little bit of a, you know, we gotta shift our we gotta, you know, improve ourselves and shift our minds a little bit.
Valentino Stoll [00:39:58]:
I mean, I will say I I used that site mostly to learn. Right? Like, I I was curious, like, okay. Well, what else can I do with Rails? And I would, like, go on to that site and just, like, download a new app and find a new feature like I didn't know existed. Right?
Ayush Nwatiya [00:40:12]:
Yep.
Valentino Stoll [00:40:12]:
Yep. So I feel like there's definitely, like, you know, is it recreational or not kind of vibe that's like, kind of split, you know, a lot of people focus. And so I love seeing stuff like Aivo where there's, like, okay, a business behind it. Like, you're not gonna, like, quit on this. Right? Like, I don't have to worry about, like, it going stale as a open source project.
Adrian Marin [00:40:37]:
Yes.
Valentino Stoll [00:40:37]:
So I I hope that that, like, idea keeps going. Right? Like, jump start rails and, like, bullet train, like, these are all similar paths. Right? Like, okay. They've created this thing that's very useful and, you know, now we can feel pretty good that it's gonna continue to be useful and not, like, break all the time. Right? Like, it's definitely, like, using open source. That is, like, everyone's fear. Like, how long will this last? Right? And this guy will just burn out. Right? Like Yep.
Adrian Marin [00:41:05]:
Yep. Yep. Exactly. That that's a huge problem in open source. And there are there are projects and projects. There are some projects that you can that you can call finished after, you know, did do one week of working on it and whatever, and just maintain it like once a month or something. But there are projects like, like, you know, because we see that in active admin and rails admin and everything like the others, people can't work like we were 3 people that are working at this almost full time. Like, if you're if we were to do this as an open source and we have to do jobs and everything else, this wouldn't have worked.
Adrian Marin [00:41:37]:
Nobody would have anything like like this. So, yeah, I think it's a it's a sin it's a sign of maturity from for, you know, the rails ecosystem that it can support these types of projects that people, you know, they find value in. Okay. I'll just pay for that instead of, you know, building it myself.
Charles Max Wood [00:41:55]:
Yeah. And see, you know, we're we're getting into this and, you know, I try not to just overbearingly talk about, you know, what what I'm been working on. But, yeah, this this is where I got into it. Right? So you're talking about ticketing or I'm thinking like user management or subscription management or,
Ayush Nwatiya [00:42:12]:
you
Charles Max Wood [00:42:12]:
know, building in, you know, so you get the piece of the engine. That's the Stripe web hook that everybody has to write 18 times every time they build an app, but then it connects into the rest of this that you get in your admin panel. Right? And so that's the piece that I'm imagining so that if somebody goes out and builds a software as a service, right, they say, okay, I want I want the the subscription management. I want the user management. I want the, you know, this. I want that. Right? I want people to be able to sign up for my product products. Right? So you pull all those pieces in, you load them in as engines.
Charles Max Wood [00:42:46]:
Right? Or, you know, you hook them into Avvo, right, for the admin pieces of those. And so maybe you're pulling in, here's the front facing and here's the admin facing. Right? And so I'm gonna load both engines. I don't know. Something like that. And so then at the end of the day, it's like, Hey, look, I wanna build this app for podcasters. Well, I've got the billing and the, this and the, that and the other all set up and I can get a support person to come in and use these systems because they're already fleshed out. And so and then Avvo gives you the means of give adding, like, custom fields and stuff like that that give you the features that you need to customize it.
Charles Max Wood [00:43:19]:
But it's not this overwhelming thing that you have to pull in in order to put out what you really care about, which is helping the podcasters.
Adrian Marin [00:43:27]:
Yep. Yep. I agree. It's it's always it's always a, you know, fine balance.
Ayush Nwatiya [00:43:34]:
Yeah.
Adrian Marin [00:43:34]:
I I think because whenever you're pulling in, you know, something like jump start or bullet train, you're gonna have to learn something or Avvo, like, even Avvo. Like, you're gonna have to learn something about it. Right?
Charles Max Wood [00:43:45]:
Right.
Adrian Marin [00:43:45]:
There are just a few I don't know. There's I I think there's there's no gem out there that will help you, like, substantially and doesn't give you, like, some docs. Okay. This is how you do it. This is that. So you're gonna have to learn something, but there's, like, a fine line about, yeah, I need to learn everything about it, Or I just I can just jump on it like this this Yeah.
Charles Max Wood [00:44:05]:
And and that's that's the other piece of that. Right? Is yeah. I don't want to have to go in and understand the internals of the system. I don't want a clunky API. I mean, that's my big issue with most of these admin panels, right? Is it it's it's got this clunky API that is halfway based on the database, except for when it's not, but it kind of is, but it shouldn't be, but it sort of will be. And so I have to go and I have to figure out the ins and outs of why it does or doesn't do something. And so at the end of the day, it took me as long to install it as it would have taken me to build my own thing. And I would have understand the whole, my own thing front to back.
Charles Max Wood [00:44:40]:
And so, you know, I, I want, Hey, look, I got all the fundamentals that I needed to build this app running within a couple of days. Right. And so now I can go in and I can do the custom logic that, Hey, it doesn't exist. This kind of a thing for podcasters and RSS feeds or whatever the heck else you're going to build. Anyway. You mentioned, conferences and you told us before the show that you were working on friendly RB. So what's the story there it's in September.
Adrian Marin [00:45:10]:
Yep.
Charles Max Wood [00:45:10]:
Are you the same work week as rails world
Adrian Marin [00:45:13]:
or No. No. No. No. It's actually it happened like this last year and this year too, is the same. Like, before friendly, there's, like, 1 week before. Okay. Then there's friendly.
Adrian Marin [00:45:24]:
And then 1 week after friendly, there's rails world. This is this is how it happened last year again. This is how it happened this year. Of course, we kind of cord actually, we did coordinate, not kind of. I I was on Amanda. I got I wrote for, like, when are you
Ayush Nwatiya [00:45:38]:
do are you still
Adrian Marin [00:45:39]:
are you still on that date? I wanna know because I don't wanna be on the same week, definitely. And then I coordinated with Mohammed that that will, organize. So, yeah, it's gonna be September 18, 19. In Bucharest, Romania. The weather is just perfect. We have amazing food, amazing coffee. Like, the Italian people told me that we have amazing coffee everywhere. So, you know, there's there's that stamp there.
Adrian Marin [00:46:06]:
And it's a beautiful, walkable city. We're gonna have beautiful very nice people speakers. I don't wanna name drop the the attendees, but there are great attendees as well, because I've been seeing the ticket sales. And we have, like, we have announced the first batch of speakers. It's, gonna be Rosa Gutierrez from 37 signals. You might know her from, the latest release of SolidQ. She was, she built it. Then Nabila Youssoup, which is a software engineer from factorial from from Spain.
Adrian Marin [00:46:39]:
We have Steven Markheim, which is the SQLite guy or Escuelite Jesus as Yaro, nicknamed him. And we also have Tom Rossi from Buzzsprout. If you know Tom, you know, you know, you know his mile. He's gonna be he's gonna be great. And we do have a couple of surprises. I'm still waiting on confirmations from people, but I do have a a few other great speakers incoming. And it's a it's a friendly it's a friendly atmosphere. It's gonna be 2 days, one track, so everybody does the same thing.
Adrian Marin [00:47:12]:
It's very, loose. We do have a schedule, but we don't really follow it. But it still works out in the end. We're gonna do some activities like last year. Ayushi, I think you remember, we went and and did, walking tours. I I got a few, guys, tourist guides, and we did walking tours to through Bucharest. And after the conference, we went to the mountains, and we did some activities there for a day. So it was really cool and friendly.
Adrian Marin [00:47:37]:
And I, a lot of people told me that they made, you know, a lot of friends, and they really enjoyed it. So, hopefully, we we can keep the bar up this year as well.
Ayush Nwatiya [00:47:50]:
Yeah. Yeah. I really, I really enjoyed last year. I was lucky enough to speak last year. And, yeah, everyone there was just super nice and Adrian and the rest of the organizing team were just really on the ball. Like, it it was hard for me to believe it was the 1st year of the conference just given how slick it was. I mean, I'm sure there must have been fires behind the scenes, but I never as a speaker and attendee, I didn't see any chaos or anything. It was just a very relaxed vibe.
Ayush Nwatiya [00:48:24]:
Like, I'm still, like, fairly new in the Ruby community because I only started working with Ruby about, in 2020. So just when the world went to shit. So, my I haven't really had a chance to, meet many people in the community in person. I've I've obviously interacted with people online and stuff and, friendly, are we just a great place to meet people I've kinda worked with online and, meet some new folks as well. And it was, yeah, the the name is pretty appropriate, I would say. It's it's a it's a good name, and and it's, it's well earned. Thank you. Yeah.
Ayush Nwatiya [00:49:05]:
I I I
Adrian Marin [00:49:06]:
think the name brought the people. I don't know. I don't know.
Ayush Nwatiya [00:49:10]:
Yeah. Could've done it. It's it's unique, isn't it?
Charles Max Wood [00:49:13]:
It sounds pretty friendly to me. You shouldn't laugh. It only encourages me. That was terrible. So my question on some of this is, is like I've been to conferences that are highly technical, and then I've been to conferences where it's, Hey, look, you know, soft skills, and we're gonna, we're gonna pat your head and stoke your ego, and we're not going to get as deeply technical. And then I've been to other conferences where you kind of get a mix and then it's, others where, you know, there's a major trend out there. So right now I'm talking to a lot of people and everybody wants to learn AI and Ruby. And so like 80% of the conference is that, and the other 20% is, and we had some keynotes.
Charles Max Wood [00:49:57]:
So if I show up, what kinds of talks am I expecting? Or if I fill in your CFP, what kinds of talks do you want me to send you?
Adrian Marin [00:50:05]:
So first of all, I want everybody to write this to to submit the c their CFPs. Because one of the things that we really want to do, one of the so we we we kind of say we wanna do 2 things, bring, like, really known people to the region. Like, last year, we had, Xavier Nordea. We had Jeremy Smith from the states, Jason Sweat. We we had Nick, like a lot of well known people and and others in Ayush and others that I'm missing right now. I apologize. And the second thing we wanna do is bring newcomers to the stage. Like, my first conference talk was in 2020 in in Wroclaw in in Poland.
Adrian Marin [00:50:40]:
And it was very difficult for me to get there to give my first talk. And I know there are there are so many people that have a message, have something to say about it, to say about to to teach others and to to to speak about that. And, we wanna do that. So everybody, please submit a CFP. Regarding what are you going to see, like we'll see this year. I really wanted to keep it as balanced as possible. Like we started like the first talk was Javier telling us about the internals of, which are like, you gotta, like, really scratch your head.
Charles Max Wood [00:51:16]:
Yeah. That breaks your brain.
Valentino Stoll [00:51:18]:
Exactly. Right? He's still freaking smart.
Adrian Marin [00:51:20]:
Exactly. Definitely. I I I wouldn't be able to do what what he's doing. So okay. And then we finished off the conference with Jeremy speaking about how what it is, like, and how he is, a good, like, indie developer and, with his consultancies. And in between, we had talks. We had one talk about AI. Jason spoke a little bit about how to use JetGPT.
Adrian Marin [00:51:44]:
And then we spoke about we had, somebody making Julian Chiel made music with using Ruby, and it was a really cool, vibe. We had somebody talk about how to build teams, about mental health. So the talk about mental health, I really recommend to everyone. Like, it was such a great talk and so so so well, said. And then we had some a little bit more technical, a little less more technical. We talked about documentation and everything. So it was it wasn't like this, you know, Ruby tech tech tech tech tech tech tech tech kind of conference. Mhmm.
Adrian Marin [00:52:21]:
It's not gonna be that. If you want that, I'm sorry, but friend is not we're gonna have a little bit of that, but we're still gonna talk about life and mental health and a little bit about business. This is what I'm trying to bring this year a little bit more about business and people that have done it and talk about open source and, you know, being doing the indie stuff. So, yeah, it's gonna be very balanced, I would say.
Charles Max Wood [00:52:45]:
Awesome.
Ayush Nwatiya [00:52:46]:
Yeah. Last year, I think, the thing I liked was it never got monotonous. Like, I tend to get bored quite easily. And I just like how we had, like, intense movies, and then we have something lighter. Then we had a completely nontechnical talk about mental health, like like you mentioned. And it was just I think I thought the flow was nice that it kept me interested. Otherwise, I just zone out and I get bored.
Charles Max Wood [00:53:09]:
Yep. That's good.
Adrian Marin [00:53:10]:
I know.
Charles Max Wood [00:53:11]:
Because I'm I'm the biggest 12 year old my wife knows. So if if it keeps me interested, it's a good thing.
Adrian Marin [00:53:18]:
I understand. Yeah. Yeah. Yeah. I know. And that's what I wanted to do. Like, I know there are people that just wanna see tech and the hard tech and the new stuff, and I understand it. But I think there are other conferences that will handle that for for you.
Adrian Marin [00:53:30]:
I want this to be nice. I wanted to I want I want people to come and and be and, you know, make friends and enjoy themselves and walk out and say, man, this was just perfect. I love it. And, yeah. Yeah.
Charles Max Wood [00:53:44]:
Well, and you get to go to Budapest.
Adrian Marin [00:53:47]:
It's Bucharest, Charles. It's Bucharest.
Charles Max Wood [00:53:48]:
Bucharest.
Adrian Marin [00:53:50]:
It's okay. It's okay. When when big stars come in, like, I think, I know, ACDC or Metallica when they came, they they come to Bucharest and say, hello, Budapest and the other way around. So it's okay. No.
Charles Max Wood [00:54:01]:
I'm sorry.
Adrian Marin [00:54:02]:
No worries. No worries. My Bucharest is beautiful, really.
Charles Max Wood [00:54:04]:
I need to change my back background to the cone of shame or something.
Adrian Marin [00:54:08]:
It's okay. It's all good.
Charles Max Wood [00:54:11]:
Awesome. Well, we're kind of getting toward that hour that we usually aim for. Is there anything else that people ought to know about AVO or Friendly RB?
Adrian Marin [00:54:22]:
Oh, nothing much. Like with AVO, I know there are trust issues, but just give it a try 30 minutes, an hour, and you'll figure it out. If it if it's not for you, I'm I'm all good. But more importantly, like, let's let's get to hang out in in at Friendly and other, events as well. But, we're gonna try and host you very, very well in in Bucharest, in in September. So if you wanna do, like, a trip and visit Eastern Europe, this is the perfect the perfect, occasion.
Charles Max Wood [00:54:51]:
Awesome. Alright. Well, let's do our picks and then we'll, wrap this sucker up. Adrian, one more thing before we, go into picks. How do people find you online if they're like, I like Adrian and I wanna talk to him?
Adrian Marin [00:55:05]:
Yep. So I am Adrian the dev. Adrian, the dev almost everywhere, like on Twitter, on GitHub. I have Adrian, the dev as well. It's avohq.io or avo.cool. That's the domain name, avo.cool, and friendlyrb.com. But Adrian the dev, you just search Adrian avo, and for sure you're gonna find me. I'm on Discord, email, everything.
Charles Max Wood [00:55:28]:
Awesome. Alright. Valentino, why don't you start us off with our picks?
Valentino Stoll [00:55:33]:
Sure. Yeah. So I'm I'm put building more and more of this, little hardware called Adieu. Just kinda Adieu. But it's, you know, wearable AI that's fully open source, and it works all on device, which is pretty remarkable for what it is. I highly recommend it. I finally got it working the other day on the device, and so I'm I'm really excited to, like, dig in and start experimenting with it more. So, check it out.
Valentino Stoll [00:56:06]:
It's a pretty cool project.
Adrian Marin [00:56:09]:
Don't send it to MKBHD for review.
Valentino Stoll [00:56:12]:
That's the first person I'm sending it to.
Adrian Marin [00:56:16]:
But that's a great milestone to have it running on the the hardware. That's a that's a good feeling, I bet.
Valentino Stoll [00:56:23]:
Yeah. I got a I got a on a the Google Coral, device, but, I have a little Raspberry Pi 0 I'm trying to put it on next, just for pricing. Okay.
Charles Max Wood [00:56:35]:
Nice. Alright. Ayush, what are your picks?
Ayush Nwatiya [00:56:39]:
I think, actually, a couple of weeks ago when I was on as a guest, I think my pick was Avvo. So I think this is pretty serendipitous that the next time
Charles Max Wood [00:56:50]:
wholesale pretty fast.
Ayush Nwatiya [00:56:52]:
Adrian's on. I think I'm gonna go with another music pick. There's a band. And last time, I'd also done a music pick, but I'm gonna stick with another one. The band called Big Big Train, who I've been following for a number of years, and they've just got a new album out called The Likes of Us, which I'm sure you'll find, wherever you get your music. But, yeah, they're part as English a band as it's possible to get that in literally this country embodied in in band form. But, yeah, I've been following them for a number of years, and, they're another one that I think should be a lot more famous than they actually are. They did America for the first time last month, so hopefully see a bit more of that, as time goes on.
Ayush Nwatiya [00:57:41]:
But, yeah. I can only think of the one pick this time, so I'm gonna stick with that.
Charles Max Wood [00:57:46]:
Awesome. Alright. I'm gonna do mine. I always do a board game kick pick first. This is a card game, and I kinda lump them together. So if you're a purist, sorry. This is called Doomlings. I don't know if any of you guys have played Doomlings, But Doomlings is a card game.
Charles Max Wood [00:58:07]:
It's pretty simple. You have different color, basically, traits, genetic traits. And then you have an age deck and you go through 3 ages that all end in a catastrophe. And the catastrophe makes you adjust your your play space. Right? So you might, it usually lowers your hand limit. It might make you get rid of some traits, things like that. The different traits give you different points based on whatever's on the card. And, anyway, it goes pretty fast.
Charles Max Wood [00:58:36]:
You play it in like 20 minutes. Of course it, it goes 2 to 6 players and I've only played it 2 player with my son. He got it for his birthday last year and he wants to play it. I wanna spend time with him. It's a win win. It's like I said, it's a pretty simple game. I've played some other games. I have a lot of these elements to them that are a little more involved that I like better.
Charles Max Wood [00:58:56]:
But, if you're looking for something that you can pick up and play with, like, a 10 year old, he's 12, but, you know, when he, but he, he likes it. But I think you could probably go down to 10, maybe even 8. My 8 year old might be able to play it. I don't know if she would get, like, how you want to play some of the cards together to score, if that makes sense. But she can definitely play it. Like the mechanics aren't that involved. So anyway, I'm going to pick Doomlings. If you're looking for kind of that simple game and you don't like the heavy games or you're playing with kids, cause I could see somebody that just kinda likes, you know, kind of a little bit of a thinker, but you could still have a conversation with whoever you're playing with.
Charles Max Wood [00:59:37]:
You know, maybe like a Sushi Go Party. It's it's kind of on that level as far as how complicated it is. So Doomlings. And I think there are a bunch of expansions for it too. So anyway and then, I thought my wife and I started a new TV show. Oh, we were watching the new, Star Trek Discovery, which is the last season. And, I mean, so far we've liked it. It's been a couple of episodes.
Charles Max Wood [01:00:06]:
So, obviously, we don't know how well the story are goes, but, it's based on an old Star Trek The Next Generation episode for, you know, kind of the thing they're trying to find, solve, whatever. So, anyway, so I'm gonna pick that Star Trek Discovery. And then just a quick shout out, we have been putting ads in the shows programmatically. So some of them aren't always super relevant to you all. If you want ad free episodes, go to rubyrogues.com/premium, and, you can pick that up. And then I'm I'm doing calls every week now. I'm gonna invite a bunch of the past guests to either present and or join the crew for a little while. And so if you wanna come have conversations about Ruby or Rails every week, and hear from experts in the in the field, it's, rubygeniuses.com.
Charles Max Wood [01:00:58]:
So, yeah, that's all the stuff. Adrian, what are your picks?
Adrian Marin [01:01:03]:
What what what do I get to pick? Anything?
Charles Max Wood [01:01:06]:
Anything you want. I picked a board game. I picked a TV show. Like, if there's books you like, you know, tech, whatever.
Adrian Marin [01:01:14]:
So I'm not ready, but, like, I love my AirPods. I still think they're one of the best products Apple makes. These these are just amazing. Speaking of of shows, the 3 body problem, that was amazing on it's very good. It's on Netflix. And something tech, I oh, there's a lot of talk about command and deployment and everything else. Everybody just try HatchBox. If you're doing Rails, try HatchBox because it's, like, exactly what you need.
Adrian Marin [01:01:46]:
Like, I I was using Docu or something else before, but now I'm super, super happy with it. It's, it's it's almost perfect, but it's very, very good. So yeah.
Charles Max Wood [01:01:56]:
Yeah. I've been using Kamal, and I love it. But yeah. Yeah.
Adrian Marin [01:02:02]:
Yeah.
Charles Max Wood [01:02:02]:
Alright. Well, thanks for coming, Adrian. This was a ton of fun.
Adrian Marin [01:02:07]:
Thanks for having me, guys. Yeah. It was it was it was nice, speaking about Balabar and Friendly and, seeing you guys again, Charles and Nayush. Nice meeting you. Nice meeting you.
Charles Max Wood [01:02:19]:
Next time. Max out.
Hey. Welcome back to another episode of the Ruby Rogues podcast. This week on our panel, we have Valentino Stohl.
Valentino Stoll [00:00:12]:
Hey now.
Charles Max Wood [00:00:14]:
We also have a new rogue and that is Ayush Nuwatiya. I hope I said that right.
Ayush Nwatiya [00:00:21]:
Yeah. Close enough. Hello. Hello. Nice to be here.
Charles Max Wood [00:00:25]:
I'm gonna be nervous about that, like every time. Anyway,
Ayush Nwatiya [00:00:28]:
I honestly don't care.
Charles Max Wood [00:00:30]:
Yeah. I'm Charles Max Wood from Top Bend Devs. And we have a special guest this week. That is Adrian. Adrian, do you wanna tell people who you are and remind them why you're so awesome?
Adrian Marin [00:00:43]:
Hey. Hey. Hey, guys. Thanks for having me. I don't know if I'm so awesome. I try to be, but I don't know. Thank you. So my name is Adrian.
Adrian Marin [00:00:51]:
I'm a self taught engineer, and I'm the author of Avo. Most people probably know me like that. And, more recently, I'm one of the hosts of FriendlyRB, which is a boutique Ruby conference in Bucharest, Romania happening usually in September. Yeah. Otherwise, I have one cute, one and a half year old baby boy and a beautiful wife, and I travel to conferences and talk to people and try to help how however I can.
Charles Max Wood [00:01:24]:
Nice. So, yeah. Let's just dive in. We had you on to talk about Avvo, I think, what, a couple years ago?
Adrian Marin [00:01:31]:
Couple of years. Yeah.
Charles Max Wood [00:01:32]:
Yeah. So, I think last time, a lot of the focus was around building, like, admin interfaces and stuff. But it looks like you've expanded it some and you're doing some content, focused stuff. So do you want to just give everybody the 10,000 foot view, what avo is, why they might want to use it? And then and then we can get into the details on how it goes together.
Adrian Marin [00:01:57]:
Yeah. Sure. So it's, so after three and a half years, it's still sometimes difficult to tell people what AVO is. But what I say is, like, it's an admin panel framework slash content management system slash internal tool builder for Ruby on Rails. So it helps developers build, Ruby on Rails user interfaces very, very fast. But it's not just user interfaces. So don't think of it like a UI kit, but think of it with that it has some business logic as well. So you tell it something like, hey.
Adrian Marin [00:02:31]:
I have a product, and the product has a title and a description and a price. And you tell it what kind of, like, attributes those are, and Ava will read that and will create for you like a beautiful crud like interface. So very advanced one where you can see all your products, you can see details, you can sort, you can filter. You can apply actions to them and so on. So this is like the basic gist of it, but it does so so much more than just an admin panel framework.
Charles Max Wood [00:03:00]:
Okay. So, when we talk about this, and I don't know if I brought this up last time, but there are other admin panel frameworks that are out there for rails. Right? Yep.
Ayush Nwatiya [00:03:11]:
I
Charles Max Wood [00:03:11]:
hate them all. So
Adrian Marin [00:03:14]:
I know.
Charles Max Wood [00:03:15]:
I know. I haven't tried Alvo yet. So I keep wanting to, and it's just, you know, time.
Adrian Marin [00:03:20]:
Go for it. Yeah. Anyway. So
Charles Max Wood [00:03:23]:
things yeah. Go for it. How
Adrian Marin [00:03:25]:
do you make this not suck? Well, it's a lot of work. It's a lot of work, and we did a lot of work for the past 3 years to make that a possibility. So when I started, I just thought about it. You know? I saw that there were, like, active admin and rails admin and Trestle and administrative and many others. But I think that when they were created, they were created with different context in mind, with different technologies, and probably different goals as well. When I started building Avvo, I wanted from day 1 to be something that you could give to your consumer. So something that looks good, that works well, that has some advanced use cases. So it's not just a glorified database, browser.
Charles Max Wood [00:04:10]:
Yeah. That's what that's what I hate about them.
Adrian Marin [00:04:12]:
Yep. I know.
Charles Max Wood [00:04:13]:
It's their glorified database browsers. And and so what happens is is, as soon as you hit an edge case and an edge case is anything you have to write code against them for.
Adrian Marin [00:04:24]:
Yep. Yep.
Charles Max Wood [00:04:25]:
It it just gets really gross really fast.
Adrian Marin [00:04:27]:
Yep. I agree. That that's the feedback that I got from, from everybody, basically. Like, yeah, it helps me go, like, 60%, 70% of the way, and that's easy. But then, like, the rest of 30%, that's so freaking, you know, difficult to do and painful. And sometimes I just abandon the whole thing. And I knew about that, and I wanted so whenever you hit that because it's kind of the same with our like, the first 60, 70, 80, depending on the app, Sometimes you can go like 90% it's and it's done. Our does the whole work for you.
Adrian Marin [00:04:58]:
But whenever you have that rest, you know, 10, 20, 30%, what we try to do is give you many, many, many escape hatches. Right? So you can, you can modify the queries. You can modify what options are there. You can modify you know, you can bring your own frameworks inside, like for search or authentication or authorization. And whenever it's there's something that we cannot build for you or we haven't built, we just give you, like, ERP partials and you can write your regular Rails code however, you know, you're used to it. So, again, it's a lot of escape hatches, a lot of places where it can come in, hook into the whole, business logic that we we wrote, and you can take over. Or or like in the worst case scenario, you can take over like the HTML, the Ruby code, JavaScript, CSS, whatever you need. So, yeah, this is all for you to not get stuck and not to feel, you know, like a prisoner.
Adrian Marin [00:05:56]:
Like, ah, I cannot. I can build this or whatever.
Charles Max Wood [00:06:01]:
So I think 60% is generous, but, I'm just going to say, so what, what does Avo give you then that, you know, is kind of the baseline case, right? So I'm going to plug this in kind of do a minimum amount of effort. What what do I get for that?
Adrian Marin [00:06:20]:
So you get, like, with a minimum amount of effort, you get, like, a a CRUD UI, a very advanced one where we have, for example, we have about 30 fields. We have some simple ones like text, text area, whatever number. But we have like the price field, which works very well with the money gem from Rails. We have Chicks editor, TickTap editor. We have a key value field where you can create, like, a hash inside the UI. You get access to all of the all of Rails' associations, like, as advanced as you wanna do it. Like, it belongs to, has many, has in, belongs to many, whatever, STI, whatever you need, polymorphic, searchable. Like, this is a big pain point for, active admin users is, like, if you have a belongs to and you wanna attach a user, but you have, like, millions of records, it will just jam on you.
Adrian Marin [00:07:06]:
Like, we give you that as a searchable, you know, at a async kind of, you know, multi select experience. So, that's like, you know, you get quite quite a lot, to be honest, with with with Avvo.
Ayush Nwatiya [00:07:21]:
So I used
Charles Max Wood [00:07:22]:
to use it.
Ayush Nwatiya [00:07:24]:
Yeah. I just wanna gush about Huddl for a bit because, I was, like, I think about 3 or 4 weeks ago from I had to add an admin panel for my client project, and I've never actually used one before because, I think that, like, Charles, I hate, I just hate them. I I prefer building my own, stuff. Like, just that does just exactly what I need. But for a client project What
Charles Max Wood [00:07:49]:
I ended up doing?
Ayush Nwatiya [00:07:51]:
Yeah. For a client project, it it made sense. So I played around with, like, 3 or 4 different options, and Ava was the only one that didn't make me want to jump out of the window. It honestly I yet. True. But honestly, it was it gave me no pain. I was up and running so quickly. The the key value, field you mentioned was, like, a nice surprise because I just created a JSON b field, on a table, I think, last week.
Ayush Nwatiya [00:08:24]:
I'm like, this is gonna cause me trouble in in in our voice, isn't it? And I go, like, like, no. It's not gonna cause me any trouble. It's like it's like this amazing thing just out of the box. Yeah. Yeah. Just, the docs, I must tip my hat off to the the quality of docs. Like, honestly, anytime I run into a problem, I just go search the docs, and it was, I'd found what I need, like, in seconds. I saw I remember I was trying to, add, like, a search field, a top level search field for an entity.
Ayush Nwatiya [00:08:56]:
And we had elastic search on that particular entity for, like, the main the user facing app. And I could just hook the same search thing into our work, like, just a simple block. It just set a block in the our resource file. It's like the analogous to the model. And, yeah, it's using the same thing as the the user facing app, and I was just super impressed at, like, everything, by just how customizable it was, yet how much it gave out of the box. So, yeah, I just wanted to gush about it because I wasn't expecting to be impressed by by an admin panel because, I've avoided them for a good reason, but I was sufficiently impressed by ABo.
Adrian Marin [00:09:44]:
Gotcha. Thanks a lot, man. Thanks. I appreciate the kind words. Yeah. So this is there are 2 things here. Like, one is like, okay. We all hate, you know, the premade kind of things, like, you know, the admin panels because we have maybe like, when I speak to other developers, about active admin and administration rails admin or whatever, they say that the the experience is painful, and we had to fight these, you know, these, ideas with with Avvo.
Adrian Marin [00:10:09]:
But, like, the thing is, like, any piece of technology, like even rails at some point is gonna be difficult to implement something. Right? If it's rails, if it's like NGINX, you can zoom out or zoom in however much you want. But there is a sweet spot there where, you know, you can get super fast. You can you can go go super far, very fast. And then, you know, it's just a matter of like, okay, I need to have the proper tools and proper hooks and the proper, you know, escape hatches to be able to build my own thing. So, yeah, what I what I usually so this is I think this is the most difficult thing that I I have to do. What you have to do is get people to try it. Just tell them, like, give it a half an hour.
Adrian Marin [00:10:47]:
Play with Avo. Like, build something of substance. Half an hour, an hour, and you'll figure it out if it's something that you need or it's something that you don't need, but you definitely know more than just assuming it's, you know, crap. Yeah.
Charles Max Wood [00:11:03]:
Right. So when you say try it, you know, try it for a half hour, I guess, one thing that we should point out is there is a free license for it. Right?
Adrian Marin [00:11:12]:
Yep. Yeah.
Charles Max Wood [00:11:13]:
So you can go in with you know, without risking any money or anything else, you can just go pick it up.
Adrian Marin [00:11:18]:
Yep. And So Apple comes in in 3 flavors. It comes like a community version, which is free. It probably has 60, 70% of all the features. Like, most of the work that we do is on the free features, like supporting advanced edge cases with associations and all kinds of crazy stuff. And then, if you need more power, we have the pro and the advanced packages tiers, which bring you give you a little bit more. But if you wanna try it out, we don't have a trial feature yet, anymore. We had it last year, but we we we we just took it out.
Adrian Marin [00:11:49]:
But, like, if you try the free tier, you're again, you're gonna know if this is something right for you or not. And if you have any questions, like, for the pro and advanced, like, hey, can I do this? Can I do that? Definitely reach out to us because we we like, answering those questions. And we have like proper docs for everything, so you will see how things work or don't work. So, yeah, we try to make it as self-service possible.
Valentino Stoll [00:12:15]:
I wanted to walk through just real quick for our listeners here because there are so many admin tools out there, and there is a differentiating factor here that is very, like, very UI, driven. So you've, like, definitively set how the UI of the admin looks like. And then you just support a DSL that allows you to drop in pieces of where the admin dashboards, are. And I think that's, definitely one of the differentials I saw with Avvo, like, compared to any of the alternatives. Right? Like, all the other alternatives either had, like, a generator, like, with administrate, right, where you have to generate the view that you want or Yeah. The dashboard manually.
Charles Max Wood [00:13:02]:
Yeah.
Valentino Stoll [00:13:03]:
And then the likes even active admin follows that process a little similarly. Or you have something completely out of the way like motor admin where it's like, hey, you know, you just throw everything at it and it, like, you know, you get everything, but it's like a little bit of a mess. Right?
Adrian Marin [00:13:18]:
Yeah. Yeah.
Valentino Stoll [00:13:19]:
I feel like I have a nice middle ground there where you have, like, kind of this DSL that's just for, like, where to put things in the buckets of the of the user interface, which I think is really cleft. Yeah. And so I just like, you know, how does that work? Right? Like, I
Ayush Nwatiya [00:13:36]:
we're just
Valentino Stoll [00:13:37]:
imagining, like, flex or, like, you know, view components or something. Right? Like, it's so so clean of an interface. Like, I'm super curious.
Adrian Marin [00:13:45]:
Okay. Cool. So let me touch upon like our, our decision of using a DSL. So when you're building something like this, you kinda have, know, like you said, like, 3 ways of doing it. 1 is you generate things. But we figured out quite fast that if you generate, you're gonna views. If you generate a lot of business logic there, you're gonna lose the ability to update. Like, because we are shipping a DSL, we were able to ship so many improvements over the time of 3 years.
Adrian Marin [00:14:14]:
End user the developers had to do just very tiny adjustments to the DSL of the or the configuration. Like, imagine if you have, like, I don't know, 15, 20 resources there, and at some point, we wanna push, you know, some kind of, I don't know, breadcrumbs or whatever drop down. You would have to go into every file, every view file and update it and make sure there are no conflicts. And, you know, maybe you did something there. So, again, that's a little bit messy. It's not, you know, it's not for every project, but it's a little bit messy when you're dealing with, generated stuff. We do generate a few things for you. Like, we definitely, we generated the configuration files, which are resources and actions, and some view files whenever you wanna take over, you wanna whenever you wanna take control.
Adrian Marin [00:14:57]:
But we we think that the DSL gives us this power where, you know, we can ship a lot of, a lot of value and in in upgrades. And so, basically, people buy one product, but after a year, you have, like, so many more things upon, like, new things in that product with very minimal, you know, upgrade, with a very minimal upgrade process. And, to answer your question, how, like, how did we do it or whatever? Like, I don't know. We just think it's the best way. But at some point, I think we're gonna go a little bit down that route where, you know, you push some codes there, like, with, with configuration, but we will give you the or give your users the ability to add some things in the UI when in, like, your production application. For example, we have this cool feature called scopes. So you go on the user's page, but it have, like, tiny tabs on the right where you can say, okay, give me just the admin users or just the non admin or whatever users. We do this is still driven by configuration.
Adrian Marin [00:15:59]:
So if you want to add another tab, you have to generate the scope in in your app, commit it, deploy it to production. But we would like to give it give you give your users the ability to, like, create a a filter for that, you know, for those users, for that resource, and say, okay. Just keep it here as a scope because I wanna have it, you know, very, I wanna have it, very handy here. But and this is going to require us to do some upgrades and to figure out a way to make it beautiful and nice and a good experience as it was as it is right now. And but this is coming somehow. I think this is the next iteration of of avo and and the configuration,
Valentino Stoll [00:16:41]:
having that. So you mentioned upgrades, and I'm always curious because I know upgrading is always painful no matter what tool you're using. Yeah. So, like, what what does that process look like and how, like how can you, like, let people be at ease? Like, oh,
Adrian Marin [00:16:56]:
it's not so bad. So we just tell them it's not a bundle update. So you just say bundle update, Avo, pro, advanced, or whatever you have. And usually, we don't have breaking changes. We do have sometimes we do have them, but we have, like, a nice upgrade guide where we tell you, okay. If you're upgrading for 256 to 257, you're gonna watch out with these two things. This is why we did them. This is why it's it's it's a breaking change.
Adrian Marin [00:17:22]:
This is what you have to do to avoid it. So, we did have, like, a lot of breaking changes. We're going from 2 to 3, but that was, you know, a a big big update. But, usually, there are there aren't any. And if you do bundle updates, you sometimes get, like, a new feature or new big feature that, you know, you you maybe didn't plan to build, you know, but you can but now you have it. So, the upgrades are quite quite painless, I would say.
Charles Max Wood [00:17:54]:
So I kinda wanna get into the use case a little bit further because, I'm kind of imagining there's this fuzzy line, I guess, between what I think of as like an admin panel versus say just stuff that the user is going to use. Right. So if I wanted to set up a dashboard for just a regular, so let's say I'm building a software as a service. Right? So they log in, they don't have all the admin features. They just have the basic features for whatever. Right?
Adrian Marin [00:18:23]:
Yeah.
Charles Max Wood [00:18:25]:
So I can use Avvo to build those interfaces too. Yeah.
Adrian Marin [00:18:30]:
Yeah.
Charles Max Wood [00:18:30]:
So, of course. So just, just as the, just to give an example, right? So one app that I've been wanting to build for a while is I want podcast guests to, you know, when they get an invite to come on the show and they pick a day and time, then I want, you know, zappy or something to hit an API and create a form basically where they can come in. And I just looked up the tip tap where you can do the synchronized editing. And that's the other piece that I've been trying to figure out because I don't want to build it myself. But anyway, so the guests and the hosts can all use stuff that I build in Avvo. And then on the other end where I'm managing users and stuff like that, same deal. Right? I can use Avvo to build that stuff out. So so it's kind of all of the above.
Adrian Marin [00:19:20]:
Yeah. So we have a built in, authorization system that uses funded by default, but you can hook up action policy, which it just which is kind of similar. And I think there's a driver for if you wanna do that. And using the authorization feature, you can tell Avo, like, okay. This is the kind of user that should be able to see the user's resource or, this page or that page, or they they can create nuance or edit ones. And using those funded policy methods and a few more that we we have properly documented in in our docs, you can tailor the whole experience. If you just say, for example, like, a user cannot create a product. Perfect.
Adrian Marin [00:20:03]:
Avo knows what to do. It'll not show the create button. It will not allow them to go to slash new. It will do everything. So just to make sure that they have only the, they have access to only the things that that they have access to. So we try to give you all of those tools, and we have all of those primitives for authorization. So you could create 2 different, let's say, UIs or panels for for 2 types of users.
Charles Max Wood [00:20:33]:
Yeah. That makes sense. I guess the other question that I have, and this is something that I've been thinking about for a bit is I've been wanting to build specific tools for people who are building a software as a service. Right? And it sounds like you've got a lot of the things that I've kind of been dreaming of. Okay. I've built this for people, but if you built it, you know, it occurred to me, well, maybe I just want to sell my own sort of dashboard panels or things like that, that people can stick into an Avvo. Is is that even an option? Like, can you build plugins for Avvo?
Adrian Marin [00:21:03]:
Yeah. So we do have an API. We have built an API for Avvo 3. It's not very properly documented. This is something that we wanted to do this year and have, like, this plug in and plug in system with a directory where people can create their own fields or their own resource tools or their own, I don't know, dashboard cards or whatever Mhmm. Other things that they're thinking about. So basically the plugin system will give you access to different initialization hooks where you can start the plug in and inject some, you know, menu item or, like, inject, create a new field, and add that field there. So it's not a very rich and, what do you call it, environment, plug in environment.
Adrian Marin [00:21:48]:
But if you do wanna build something like that, reach out to us because we love talking about that and we love supporting that. Yeah. And and and speaking about this, like, this is another thing that people get when they use Avon, especially, like, the the customers that, you know, get, like, the pro or advanced license. And And not only those, like, even the people people, we have a Discord server. We have a GitHub repo. And whenever somebody comes in and says, hey. I have this use case that, no, Avo doesn't, you know, work for us or it can't do something because it does happen. Like, you can build software in so many ways.
Adrian Marin [00:22:23]:
When they when that happens, like, we try to make sure that, 1, we build it for them or, 2, we give them the proper hooks for for them to build it. For example, like the attach, to the attach scope. So whenever you have, like, a hasmany and you wanna attach a user or something to a different record, they wanted just some records to appear and not others. And I said, that's perfect. That makes sense. Let us build this for you. And in about a week, we just deployed the new version, and they had it. So, again, like, if there's anything we try to do this, you know, relationship between us.
Adrian Marin [00:22:58]:
Like, if it's anything that doesn't work or whatever, we either build it for you or we give you the tools and the hooks to be able to do that thing, which, you know, sometimes with other tools, and I'm not talking to admin panels, but sometimes with other tools, you would pay anything for somebody to listen to you.
Charles Max Wood [00:23:13]:
You know? When you're Right.
Adrian Marin [00:23:14]:
Using a Jam or a JS plug in and you're stuck and nobody listens to you, like, come on, man. I need I need some help. You know? So, yeah, this is what what we're trying to do with with with Ava and everything.
Ayush Nwatiya [00:23:30]:
I just wanna talk about the business model a little bit because I think the Sidekick, I think, is the most famous, probably a product that kinda follows this business model. So how did you decide that you're gonna do this community version for free, which is open source, and then, the paid version on top? How do you decide which features go in in free and which features are paid? And then finally, just can you talk about the technical side of how do you actually distribute a gem that isn't free?
Adrian Marin [00:24:04]:
Yeah. Gotcha. So how did I decide? That was like when when I started with Avvo, I didn't mean to build a business. I just want to see first if I can build it because that was amazing. I love admin panels. I built a lot of those and internal tools, and, I wanted to see if I can build it. And then I said, okay. I wanna sell it.
Adrian Marin [00:24:23]:
I think at first, I just wanted to sell it for money so it wasn't on RubyGems or whatever. But then I figured out and I speak by speaking to people like, hey. Nobody's gonna use it if they can't try it. And that's true. Like, if you cannot, you know, test it out a little a little bit, it's, you're not gonna choose it. You know? You're not gonna buy it from just a few images or videos. So how I, you know, how I got to, like, free and paid, you know, everybody would probably be Sidekick. Like you like you said, like, I I saw Sidekick and other products, and, okay, there's a free version.
Adrian Marin [00:24:55]:
Perfect. I'll use this one. And there's a paid version, which is, the other one. How do we choose which features go where? It's not an exact science. It's a mix of how much it takes us to build them, how much it takes us to maintain them or how much we think it's going to take to maintain us maintain it. Mhmm. And a little bit of how much value they add, right? For example, like the dynamic filters where you have like stripe styled, pills where you can go and, you just go on a field like price and say filterable. True.
Adrian Marin [00:25:28]:
Perfect. That's it. That's all we have to do as a developer. And then in the UI, you're gonna get, like, a drop down and say, okay. Filter by price. And you're gonna have, like, a nice deal and say, I want it, more than this price or less or between or whatever. So that's like a very powerful feature which we spent, I don't know, I think 3 months building it or 4 months or something like that. If you wanted to build it in house with your team, you gotta have a, first of all, a product person that knows what they wanna build.
Adrian Marin [00:25:57]:
You gotta have a designer to design it. You gotta have a front end, person, so somebody that knows how to build that because most the I don't wanna say most teams, but some teams only have, like, back end developers. So you see, it's like this whole you need a whole team to build a feature like that, or you can pay something like, I don't know, a fraction of what would you would pay for that team to build it for Avvo and get so, so much more. That's kind of our value proposition. Instead of, you know, having teams build certain features for you, you you kinda have them, with with Avo.
Ayush Nwatiya [00:26:33]:
Nice. Yeah. That that makes perfect sense. Kinda I I did think it would be a bit of an art because there's no, like, rule as to, this is free. This is paid. It tends to be a bit of, just intuition and stuff.
Adrian Marin [00:26:45]:
Yeah. And yeah, and, again, like, most of the work we do, we do on the free features. Like, you're not gonna believe how much because we wanna support so many things.
Charles Max Wood [00:26:54]:
Yeah. But right now yeah.
Adrian Marin [00:26:56]:
Do you
Ayush Nwatiya [00:26:56]:
ever, like, transfer a feature from paid to free, like, in with an upgrade because you're you're, like, building a lot of new features that that are paid? Do you ever say, this feature, maybe we can now give it for free as well?
Adrian Marin [00:27:10]:
Yeah. We did do that. So when we jump for from our 2, no, from our 1 to 2 or from 2 or whatever, 1 to 2 or 2 to 3, I don't know, something like 8 features from Pro. We just made them free. It was like custom fields, custom everything. I don't mean I think translations, something about search, like, a lot of things we just made for free because, it was kind of difficult to try to support them as paid and make people, you know, kind of, like, check if the person has has a paid license or not or whatever. Some of them were just because it was easier for us, and some of them because they really made send it really made sense to for us to give it away for free. So, most of the features went downstream from paid to free.
Adrian Marin [00:27:57]:
Only from we only had, like, one tiny feature that went from pro to advanced because we made it so much bigger. It was released as a beta to see if people are gonna use it. It was good. So we said, okay. We're gonna build this whole thing about around it, and that was moved to advanced. But, again, like, we're developers. We don't have any VC money. We we're not in in this business of, you know, trying to squeeze every little dollar and penny from everybody.
Adrian Marin [00:28:24]:
We know how difficult it is, when you're starting out and somebody just saying, okay. This is going to be paid from now on. You're gonna have to like, we don't wanna do that. We're not in that business. We wanna help you guys. So, yeah, we haven't done that.
Ayush Nwatiya [00:28:38]:
Yeah. No. That's good. Like, yeah, one of the things that kinda gave me confidence to use Avo on this project was that I knew that, you weren't VC backed or anything. You were just indeed developers just like me. So, I knew that I wasn't gonna get, messed over by usual VC tactics. Yeah. So, like, how do you handle the paid distribution of of the gems? Because, I've I've only ever used, like, free gems of Ruby gems.
Ayush Nwatiya [00:29:05]:
So, like, if if someone's paying you, how do you kind of what's the technical side of distributing that?
Adrian Marin [00:29:12]:
So in, in the beginning with our 1 and 2, we had everything on GitHub in one repository. So if you were a little bit savvy, you could go in and say false to true, whatever, and you say, okay. I have the license for free or whatever. And we knew that some people were gonna do that and whatever. It it was all good. It it kind of helped us with the traction. We wanted to get it in in in front of people to get feedback and see, like, do you really need this? Is this something that you would you know, does it help you that much? So in the in the beginning, we just had that, and we were pushing all the features in 1 gem, and you only have, like, one license key that would check on runtime, if it's a valid license or not. Now, with Avo 3, we broke it up into multiple gems, a little bit.
Adrian Marin [00:29:59]:
We did that because, we wanted to keep some gems hidden, like, behind the paywall and because it made sense. We had too many things in the main repo. And what we do now is we have, I think, 6 or 7 gems in total. And when you want to install it, you gotta have, if you wanna install those behind the payroll, you gotta have an, a gem server token. So, basically, you still use, sorry, you still use, gem file and bundler and and the the bundler kind of, you know, infrastructure. But instead of asking, for a gem from RubyGems, you're ask asking it from our private repository. And our private repository uses bundler authenticated the authentication feature, and it'll ask, like, do you have a token? And we will check, right, you know, very quickly. Like, is this token still valid? Can they use this version and so on? So, basically, you still use gem files, but you get
Charles Max Wood [00:30:55]:
them HighKick does the same thing, doesn't it?
Adrian Marin [00:30:57]:
Yep. Yeah. Yeah. Yeah. Yeah. Yeah. They have their own private server.
Charles Max Wood [00:31:01]:
What are you serving the gems with? Because I know there are a couple of private gems server, systems out there.
Adrian Marin [00:31:08]:
I just built my own. I there are
Charles Max Wood [00:31:10]:
Built your own.
Adrian Marin [00:31:11]:
Yeah. I know. I know. So there were a few gem in a box and a few others, but I couldn't I couldn't figure them out. I'm not that smart. Sorry. I couldn't figure them out. So, I just reversed engineers.
Adrian Marin [00:31:24]:
And you know what I did? I set up like an, you know, the the team. And then I just I just pointed bundler, the gym file to that n grok URL. And now I was just seeing, like, what's what what request do they do? Right? What the what request does bundle do? And I figured it out. I reversed engineered it, and I built my own. So we're still running on that. Works very, very well. It's a it's a Sinatra app. We had it on Fly.
Adrian Marin [00:31:50]:
Io. Now we have it on something else, but it just works very, very well. And
Charles Max Wood [00:31:54]:
Yeah. I'm just gonna ask if it was a standalone app or if it was part of your mono beautiful monolith as DHA put it.
Adrian Marin [00:32:01]:
Yeah. No. It's just that's a Synaptra app. I I don't know why we built it like that, but, we have a different Rails app that checks the license keys and does the licensing and the subscriptions and everything else, which is a jump start up. We're very happy with it. We moved fast when we when we built when we built it. Yep.
Ayush Nwatiya [00:32:22]:
You should, if you get some time, you should really blog about, what bundle actually does under the head because I mean, that would be a fascinating blog.
Charles Max Wood [00:32:29]:
That would be so interesting. Yeah.
Adrian Marin [00:32:31]:
Do you know how much I search for that information? Like, there's no information anywhere of what happened. Why does they why does it go to the versions route? Why does I don't know. So, yeah, I think I should have written that back in the day, but I think I still can remember a few things if I if I
Charles Max Wood [00:32:48]:
Sell it as a premium video somewhere.
Adrian Marin [00:32:51]:
Yeah. Yeah. For sure. Course. $7 course. Yeah. Yeah. Yeah.
Adrian Marin [00:32:57]:
But if anybody if anybody wants that code, it's an ugly stupid code that just works. I just I gave it to somebody. I think it was Georgie boy who wanted to do something with flex UI. But if anybody wants it, just reach out and I'll figure it out. I can just copy paste it to that one Sinatra file that handles everything.
Charles Max Wood [00:33:16]:
So, I'm a little curious how many people are using Avvo out there because I think we talked about it before. It was kinda new, and there were some things we're still kind of, turning wrenches on to make it, you know, not leak. And, yeah. Now it seems like it's something that people go and use and it's fairly battle tested. So, yeah, how many people out there on
Adrian Marin [00:33:39]:
it? So, it's kind of difficult to count the customer. It seems straightforward, but it's difficult because, you know, they get doubled in Stripe, whatever. They get more accounts where it's about, I think, 200, 200 and something customers paying customers that we have, right now. I don't have the usage numbers, but we definitely I think all throughout this whole time of 3 years when we built it and, we we got some more trust and street credibility from the community. Like before Mhmm. I was going on calls with customers or potential customers, and they were asking me plainly, like, what happens if you go under? What happens if you don't want to build this anymore? Which is a fair and valid question. Maybe it's a little bit rude to ask it just like that, but whatever. It's a fair question.
Adrian Marin [00:34:26]:
And, yeah, we don't get those questions anymore. Right now, we're a team of 3 people. Gabriel being, like, the 3rd, you know, junior developer that we hired, Paul was the first, with 3 people working on this, almost full time, everybody. I do a little bit less engineering now than before. Paul is very good with that. I'm trying to focus on marketing and sales and thinking about the big picture and everything. And, of course, going to conferences because this this is what I'm doing lately. So yeah.
Adrian Marin [00:34:59]:
But we're 3 people. It's a good business. We we are profitable. We have a decent 4 figure MRR. Yeah. We have a few a couple of few surprises I can't talk about right now, but, yeah, things are going well, and, we have a clear path forward. We're providing value. And, yeah, it's it's not that shabby, you know, business.
Adrian Marin [00:35:20]:
You know? I don't know what's happening with it. That that was, like, one, like, 2 years ago, two and a half years ago when we first talked about this. Now we're definitely going somewhere.
Valentino Stoll [00:35:29]:
Yeah. I will say your your pricing is really reasonable.
Adrian Marin [00:35:33]:
Thank you, Juan. Yeah.
Valentino Stoll [00:35:34]:
Thank you so much. I mean, more more than reasonable, to be honest.
Adrian Marin [00:35:37]:
For a
Valentino Stoll [00:35:38]:
lot of for a lot of businesses, it's a very small price to pay for an admin, interface. That's really, really easy to get started with. I also I would I'm curious, like, I found these templates, on the site, and there's only, you know, 3 of them, I I think. Solid Cube being one of them and then Bullet Train and Jumpstart Pro. Is this like a pattern you're looking to expand on or, I thought this was really interesting.
Adrian Marin [00:36:08]:
Yeah. Yeah. So there are a couple of things. Yeah. The path the templates are there. So people that have, for example, Jumpstart or bullet train, they can install it very, very quickly. But if you're starting a a Bullet Train app, right now, Avvo is going to be the default admin panel. So it comes shipped with, Bullet Train.
Adrian Marin [00:36:26]:
For jump start, you're you're gonna have to run that template, and and it's gonna be okay. But I think I know where you're getting to. Like, we are going to try to build some kind of it's not starter kits, but, like, imagine this imagine this. You wanna build a ticketing app. Right? The support ticketing support app. We give you all the templates. Like, okay. These are the models.
Adrian Marin [00:36:49]:
These are the resources, the actions, the filters, everything you need for a regular, ticketing app. And then you can get those for free, and you only have to pay for the Apple license. Right? Mhmm. So some it's kind of like once, but it's not kind of like once. You know? So you you get those, and then you can go and explore and, update them and add more things. But you get the ticketing app almost for free. Let's call it. Right? You only have to pay for it.
Adrian Marin [00:37:14]:
Yeah. And then, like, you know, there's another, I don't know, inventory app or whatever. So we are thinking about these things too and expand into that direction. Definitely, it's just need some time to start building it. That's all.
Valentino Stoll [00:37:29]:
There's never enough time. Right?
Charles Max Wood [00:37:31]:
Right?
Adrian Marin [00:37:32]:
Never. Never.
Valentino Stoll [00:37:34]:
One of these days, Chuck and I will get our, internship, program started. And we can start chipping away at everybody's side projects.
Charles Max Wood [00:37:44]:
Well, this particular side project that Adrian's talking about is essentially what I imagined rails composer to be. So
Adrian Marin [00:37:53]:
yeah. I I feel that there's a lot of movement around, like, new Rails projects or starter kits, but not necessarily starter kits, but, you know, how how can we start an app and not have to add device by ourselves every time. And there are a couple of things out there, like regular templates, you know, Rails bites and whatever. There are, like, on the other end of the spectrum are, like, jump start and bullet train. Mhmm. But I think that people are kind of, you know, thinking about, hey, is there a middle ground somewhere or something? And it's definitely a a good question. Is that something that you're thinking of building?
Charles Max Wood [00:38:29]:
That is exactly what I'm thinking of building.
Adrian Marin [00:38:33]:
That's great. So it's not exactly a starter kit. Yeah. I'm I'm looking forward yeah. I'm I'm looking forward to see that to seeing that if if you wanna jam at some point, definitely, I'm open to that because, yeah, I I think it's there's a need a little bit for that.
Charles Max Wood [00:38:51]:
Yeah. Yeah. We should definitely talk and hammer it out because
Valentino Stoll [00:38:55]:
I I'm I kind of miss the days of, like I don't know if you knew the site, open source Rails, but it was like a it was a page that just had, like, common solve problems with rails apps. And I had, like, ticket mule was one of them for, like, a bug ticket tracker or like, they had all kinds of, like, popular, you know, repost that were just, like, full featured apps that solve the specific purpose. So, like, Aivo would be on there as an example or, like, for admin tools or I just had a bunch of them. Yeah. I kind of miss having that center central resource of, like, okay. Here's a full app you could just download and run and it, like, solves this problem. Right? Yep.
Adrian Marin [00:39:34]:
Yep. Yep. Yep. Yeah. I agree. But, you know, you gotta so see, we're going back to the same thing, like, you know, I hate admin panel frameworks. I wouldn't use them. Right? So we we we I would like to have one, but I don't trust it.
Adrian Marin [00:39:49]:
You know? So but I think it's a shift. It's a little bit of a, you know, we gotta shift our we gotta, you know, improve ourselves and shift our minds a little bit.
Valentino Stoll [00:39:58]:
I mean, I will say I I used that site mostly to learn. Right? Like, I I was curious, like, okay. Well, what else can I do with Rails? And I would, like, go on to that site and just, like, download a new app and find a new feature like I didn't know existed. Right?
Ayush Nwatiya [00:40:12]:
Yep.
Valentino Stoll [00:40:12]:
Yep. So I feel like there's definitely, like, you know, is it recreational or not kind of vibe that's like, kind of split, you know, a lot of people focus. And so I love seeing stuff like Aivo where there's, like, okay, a business behind it. Like, you're not gonna, like, quit on this. Right? Like, I don't have to worry about, like, it going stale as a open source project.
Adrian Marin [00:40:37]:
Yes.
Valentino Stoll [00:40:37]:
So I I hope that that, like, idea keeps going. Right? Like, jump start rails and, like, bullet train, like, these are all similar paths. Right? Like, okay. They've created this thing that's very useful and, you know, now we can feel pretty good that it's gonna continue to be useful and not, like, break all the time. Right? Like, it's definitely, like, using open source. That is, like, everyone's fear. Like, how long will this last? Right? And this guy will just burn out. Right? Like Yep.
Adrian Marin [00:41:05]:
Yep. Yep. Exactly. That that's a huge problem in open source. And there are there are projects and projects. There are some projects that you can that you can call finished after, you know, did do one week of working on it and whatever, and just maintain it like once a month or something. But there are projects like, like, you know, because we see that in active admin and rails admin and everything like the others, people can't work like we were 3 people that are working at this almost full time. Like, if you're if we were to do this as an open source and we have to do jobs and everything else, this wouldn't have worked.
Adrian Marin [00:41:37]:
Nobody would have anything like like this. So, yeah, I think it's a it's a sin it's a sign of maturity from for, you know, the rails ecosystem that it can support these types of projects that people, you know, they find value in. Okay. I'll just pay for that instead of, you know, building it myself.
Charles Max Wood [00:41:55]:
Yeah. And see, you know, we're we're getting into this and, you know, I try not to just overbearingly talk about, you know, what what I'm been working on. But, yeah, this this is where I got into it. Right? So you're talking about ticketing or I'm thinking like user management or subscription management or,
Ayush Nwatiya [00:42:12]:
you
Charles Max Wood [00:42:12]:
know, building in, you know, so you get the piece of the engine. That's the Stripe web hook that everybody has to write 18 times every time they build an app, but then it connects into the rest of this that you get in your admin panel. Right? And so that's the piece that I'm imagining so that if somebody goes out and builds a software as a service, right, they say, okay, I want I want the the subscription management. I want the user management. I want the, you know, this. I want that. Right? I want people to be able to sign up for my product products. Right? So you pull all those pieces in, you load them in as engines.
Charles Max Wood [00:42:46]:
Right? Or, you know, you hook them into Avvo, right, for the admin pieces of those. And so maybe you're pulling in, here's the front facing and here's the admin facing. Right? And so I'm gonna load both engines. I don't know. Something like that. And so then at the end of the day, it's like, Hey, look, I wanna build this app for podcasters. Well, I've got the billing and the, this and the, that and the other all set up and I can get a support person to come in and use these systems because they're already fleshed out. And so and then Avvo gives you the means of give adding, like, custom fields and stuff like that that give you the features that you need to customize it.
Charles Max Wood [00:43:19]:
But it's not this overwhelming thing that you have to pull in in order to put out what you really care about, which is helping the podcasters.
Adrian Marin [00:43:27]:
Yep. Yep. I agree. It's it's always it's always a, you know, fine balance.
Ayush Nwatiya [00:43:34]:
Yeah.
Adrian Marin [00:43:34]:
I I think because whenever you're pulling in, you know, something like jump start or bullet train, you're gonna have to learn something or Avvo, like, even Avvo. Like, you're gonna have to learn something about it. Right?
Charles Max Wood [00:43:45]:
Right.
Adrian Marin [00:43:45]:
There are just a few I don't know. There's I I think there's there's no gem out there that will help you, like, substantially and doesn't give you, like, some docs. Okay. This is how you do it. This is that. So you're gonna have to learn something, but there's, like, a fine line about, yeah, I need to learn everything about it, Or I just I can just jump on it like this this Yeah.
Charles Max Wood [00:44:05]:
And and that's that's the other piece of that. Right? Is yeah. I don't want to have to go in and understand the internals of the system. I don't want a clunky API. I mean, that's my big issue with most of these admin panels, right? Is it it's it's got this clunky API that is halfway based on the database, except for when it's not, but it kind of is, but it shouldn't be, but it sort of will be. And so I have to go and I have to figure out the ins and outs of why it does or doesn't do something. And so at the end of the day, it took me as long to install it as it would have taken me to build my own thing. And I would have understand the whole, my own thing front to back.
Charles Max Wood [00:44:40]:
And so, you know, I, I want, Hey, look, I got all the fundamentals that I needed to build this app running within a couple of days. Right. And so now I can go in and I can do the custom logic that, Hey, it doesn't exist. This kind of a thing for podcasters and RSS feeds or whatever the heck else you're going to build. Anyway. You mentioned, conferences and you told us before the show that you were working on friendly RB. So what's the story there it's in September.
Adrian Marin [00:45:10]:
Yep.
Charles Max Wood [00:45:10]:
Are you the same work week as rails world
Adrian Marin [00:45:13]:
or No. No. No. No. It's actually it happened like this last year and this year too, is the same. Like, before friendly, there's, like, 1 week before. Okay. Then there's friendly.
Adrian Marin [00:45:24]:
And then 1 week after friendly, there's rails world. This is this is how it happened last year again. This is how it happened this year. Of course, we kind of cord actually, we did coordinate, not kind of. I I was on Amanda. I got I wrote for, like, when are you
Ayush Nwatiya [00:45:38]:
do are you still
Adrian Marin [00:45:39]:
are you still on that date? I wanna know because I don't wanna be on the same week, definitely. And then I coordinated with Mohammed that that will, organize. So, yeah, it's gonna be September 18, 19. In Bucharest, Romania. The weather is just perfect. We have amazing food, amazing coffee. Like, the Italian people told me that we have amazing coffee everywhere. So, you know, there's there's that stamp there.
Adrian Marin [00:46:06]:
And it's a beautiful, walkable city. We're gonna have beautiful very nice people speakers. I don't wanna name drop the the attendees, but there are great attendees as well, because I've been seeing the ticket sales. And we have, like, we have announced the first batch of speakers. It's, gonna be Rosa Gutierrez from 37 signals. You might know her from, the latest release of SolidQ. She was, she built it. Then Nabila Youssoup, which is a software engineer from factorial from from Spain.
Adrian Marin [00:46:39]:
We have Steven Markheim, which is the SQLite guy or Escuelite Jesus as Yaro, nicknamed him. And we also have Tom Rossi from Buzzsprout. If you know Tom, you know, you know, you know his mile. He's gonna be he's gonna be great. And we do have a couple of surprises. I'm still waiting on confirmations from people, but I do have a a few other great speakers incoming. And it's a it's a friendly it's a friendly atmosphere. It's gonna be 2 days, one track, so everybody does the same thing.
Adrian Marin [00:47:12]:
It's very, loose. We do have a schedule, but we don't really follow it. But it still works out in the end. We're gonna do some activities like last year. Ayushi, I think you remember, we went and and did, walking tours. I I got a few, guys, tourist guides, and we did walking tours to through Bucharest. And after the conference, we went to the mountains, and we did some activities there for a day. So it was really cool and friendly.
Adrian Marin [00:47:37]:
And I, a lot of people told me that they made, you know, a lot of friends, and they really enjoyed it. So, hopefully, we we can keep the bar up this year as well.
Ayush Nwatiya [00:47:50]:
Yeah. Yeah. I really, I really enjoyed last year. I was lucky enough to speak last year. And, yeah, everyone there was just super nice and Adrian and the rest of the organizing team were just really on the ball. Like, it it was hard for me to believe it was the 1st year of the conference just given how slick it was. I mean, I'm sure there must have been fires behind the scenes, but I never as a speaker and attendee, I didn't see any chaos or anything. It was just a very relaxed vibe.
Ayush Nwatiya [00:48:24]:
Like, I'm still, like, fairly new in the Ruby community because I only started working with Ruby about, in 2020. So just when the world went to shit. So, my I haven't really had a chance to, meet many people in the community in person. I've I've obviously interacted with people online and stuff and, friendly, are we just a great place to meet people I've kinda worked with online and, meet some new folks as well. And it was, yeah, the the name is pretty appropriate, I would say. It's it's a it's a good name, and and it's, it's well earned. Thank you. Yeah.
Ayush Nwatiya [00:49:05]:
I I I
Adrian Marin [00:49:06]:
think the name brought the people. I don't know. I don't know.
Ayush Nwatiya [00:49:10]:
Yeah. Could've done it. It's it's unique, isn't it?
Charles Max Wood [00:49:13]:
It sounds pretty friendly to me. You shouldn't laugh. It only encourages me. That was terrible. So my question on some of this is, is like I've been to conferences that are highly technical, and then I've been to conferences where it's, Hey, look, you know, soft skills, and we're gonna, we're gonna pat your head and stoke your ego, and we're not going to get as deeply technical. And then I've been to other conferences where you kind of get a mix and then it's, others where, you know, there's a major trend out there. So right now I'm talking to a lot of people and everybody wants to learn AI and Ruby. And so like 80% of the conference is that, and the other 20% is, and we had some keynotes.
Charles Max Wood [00:49:57]:
So if I show up, what kinds of talks am I expecting? Or if I fill in your CFP, what kinds of talks do you want me to send you?
Adrian Marin [00:50:05]:
So first of all, I want everybody to write this to to submit the c their CFPs. Because one of the things that we really want to do, one of the so we we we kind of say we wanna do 2 things, bring, like, really known people to the region. Like, last year, we had, Xavier Nordea. We had Jeremy Smith from the states, Jason Sweat. We we had Nick, like a lot of well known people and and others in Ayush and others that I'm missing right now. I apologize. And the second thing we wanna do is bring newcomers to the stage. Like, my first conference talk was in 2020 in in Wroclaw in in Poland.
Adrian Marin [00:50:40]:
And it was very difficult for me to get there to give my first talk. And I know there are there are so many people that have a message, have something to say about it, to say about to to teach others and to to to speak about that. And, we wanna do that. So everybody, please submit a CFP. Regarding what are you going to see, like we'll see this year. I really wanted to keep it as balanced as possible. Like we started like the first talk was Javier telling us about the internals of, which are like, you gotta, like, really scratch your head.
Charles Max Wood [00:51:16]:
Yeah. That breaks your brain.
Valentino Stoll [00:51:18]:
Exactly. Right? He's still freaking smart.
Adrian Marin [00:51:20]:
Exactly. Definitely. I I I wouldn't be able to do what what he's doing. So okay. And then we finished off the conference with Jeremy speaking about how what it is, like, and how he is, a good, like, indie developer and, with his consultancies. And in between, we had talks. We had one talk about AI. Jason spoke a little bit about how to use JetGPT.
Adrian Marin [00:51:44]:
And then we spoke about we had, somebody making Julian Chiel made music with using Ruby, and it was a really cool, vibe. We had somebody talk about how to build teams, about mental health. So the talk about mental health, I really recommend to everyone. Like, it was such a great talk and so so so well, said. And then we had some a little bit more technical, a little less more technical. We talked about documentation and everything. So it was it wasn't like this, you know, Ruby tech tech tech tech tech tech tech tech kind of conference. Mhmm.
Adrian Marin [00:52:21]:
It's not gonna be that. If you want that, I'm sorry, but friend is not we're gonna have a little bit of that, but we're still gonna talk about life and mental health and a little bit about business. This is what I'm trying to bring this year a little bit more about business and people that have done it and talk about open source and, you know, being doing the indie stuff. So, yeah, it's gonna be very balanced, I would say.
Charles Max Wood [00:52:45]:
Awesome.
Ayush Nwatiya [00:52:46]:
Yeah. Last year, I think, the thing I liked was it never got monotonous. Like, I tend to get bored quite easily. And I just like how we had, like, intense movies, and then we have something lighter. Then we had a completely nontechnical talk about mental health, like like you mentioned. And it was just I think I thought the flow was nice that it kept me interested. Otherwise, I just zone out and I get bored.
Charles Max Wood [00:53:09]:
Yep. That's good.
Adrian Marin [00:53:10]:
I know.
Charles Max Wood [00:53:11]:
Because I'm I'm the biggest 12 year old my wife knows. So if if it keeps me interested, it's a good thing.
Adrian Marin [00:53:18]:
I understand. Yeah. Yeah. Yeah. I know. And that's what I wanted to do. Like, I know there are people that just wanna see tech and the hard tech and the new stuff, and I understand it. But I think there are other conferences that will handle that for for you.
Adrian Marin [00:53:30]:
I want this to be nice. I wanted to I want I want people to come and and be and, you know, make friends and enjoy themselves and walk out and say, man, this was just perfect. I love it. And, yeah. Yeah.
Charles Max Wood [00:53:44]:
Well, and you get to go to Budapest.
Adrian Marin [00:53:47]:
It's Bucharest, Charles. It's Bucharest.
Charles Max Wood [00:53:48]:
Bucharest.
Adrian Marin [00:53:50]:
It's okay. It's okay. When when big stars come in, like, I think, I know, ACDC or Metallica when they came, they they come to Bucharest and say, hello, Budapest and the other way around. So it's okay. No.
Charles Max Wood [00:54:01]:
I'm sorry.
Adrian Marin [00:54:02]:
No worries. No worries. My Bucharest is beautiful, really.
Charles Max Wood [00:54:04]:
I need to change my back background to the cone of shame or something.
Adrian Marin [00:54:08]:
It's okay. It's all good.
Charles Max Wood [00:54:11]:
Awesome. Well, we're kind of getting toward that hour that we usually aim for. Is there anything else that people ought to know about AVO or Friendly RB?
Adrian Marin [00:54:22]:
Oh, nothing much. Like with AVO, I know there are trust issues, but just give it a try 30 minutes, an hour, and you'll figure it out. If it if it's not for you, I'm I'm all good. But more importantly, like, let's let's get to hang out in in at Friendly and other, events as well. But, we're gonna try and host you very, very well in in Bucharest, in in September. So if you wanna do, like, a trip and visit Eastern Europe, this is the perfect the perfect, occasion.
Charles Max Wood [00:54:51]:
Awesome. Alright. Well, let's do our picks and then we'll, wrap this sucker up. Adrian, one more thing before we, go into picks. How do people find you online if they're like, I like Adrian and I wanna talk to him?
Adrian Marin [00:55:05]:
Yep. So I am Adrian the dev. Adrian, the dev almost everywhere, like on Twitter, on GitHub. I have Adrian, the dev as well. It's avohq.io or avo.cool. That's the domain name, avo.cool, and friendlyrb.com. But Adrian the dev, you just search Adrian avo, and for sure you're gonna find me. I'm on Discord, email, everything.
Charles Max Wood [00:55:28]:
Awesome. Alright. Valentino, why don't you start us off with our picks?
Valentino Stoll [00:55:33]:
Sure. Yeah. So I'm I'm put building more and more of this, little hardware called Adieu. Just kinda Adieu. But it's, you know, wearable AI that's fully open source, and it works all on device, which is pretty remarkable for what it is. I highly recommend it. I finally got it working the other day on the device, and so I'm I'm really excited to, like, dig in and start experimenting with it more. So, check it out.
Valentino Stoll [00:56:06]:
It's a pretty cool project.
Adrian Marin [00:56:09]:
Don't send it to MKBHD for review.
Valentino Stoll [00:56:12]:
That's the first person I'm sending it to.
Adrian Marin [00:56:16]:
But that's a great milestone to have it running on the the hardware. That's a that's a good feeling, I bet.
Valentino Stoll [00:56:23]:
Yeah. I got a I got a on a the Google Coral, device, but, I have a little Raspberry Pi 0 I'm trying to put it on next, just for pricing. Okay.
Charles Max Wood [00:56:35]:
Nice. Alright. Ayush, what are your picks?
Ayush Nwatiya [00:56:39]:
I think, actually, a couple of weeks ago when I was on as a guest, I think my pick was Avvo. So I think this is pretty serendipitous that the next time
Charles Max Wood [00:56:50]:
wholesale pretty fast.
Ayush Nwatiya [00:56:52]:
Adrian's on. I think I'm gonna go with another music pick. There's a band. And last time, I'd also done a music pick, but I'm gonna stick with another one. The band called Big Big Train, who I've been following for a number of years, and they've just got a new album out called The Likes of Us, which I'm sure you'll find, wherever you get your music. But, yeah, they're part as English a band as it's possible to get that in literally this country embodied in in band form. But, yeah, I've been following them for a number of years, and, they're another one that I think should be a lot more famous than they actually are. They did America for the first time last month, so hopefully see a bit more of that, as time goes on.
Ayush Nwatiya [00:57:41]:
But, yeah. I can only think of the one pick this time, so I'm gonna stick with that.
Charles Max Wood [00:57:46]:
Awesome. Alright. I'm gonna do mine. I always do a board game kick pick first. This is a card game, and I kinda lump them together. So if you're a purist, sorry. This is called Doomlings. I don't know if any of you guys have played Doomlings, But Doomlings is a card game.
Charles Max Wood [00:58:07]:
It's pretty simple. You have different color, basically, traits, genetic traits. And then you have an age deck and you go through 3 ages that all end in a catastrophe. And the catastrophe makes you adjust your your play space. Right? So you might, it usually lowers your hand limit. It might make you get rid of some traits, things like that. The different traits give you different points based on whatever's on the card. And, anyway, it goes pretty fast.
Charles Max Wood [00:58:36]:
You play it in like 20 minutes. Of course it, it goes 2 to 6 players and I've only played it 2 player with my son. He got it for his birthday last year and he wants to play it. I wanna spend time with him. It's a win win. It's like I said, it's a pretty simple game. I've played some other games. I have a lot of these elements to them that are a little more involved that I like better.
Charles Max Wood [00:58:56]:
But, if you're looking for something that you can pick up and play with, like, a 10 year old, he's 12, but, you know, when he, but he, he likes it. But I think you could probably go down to 10, maybe even 8. My 8 year old might be able to play it. I don't know if she would get, like, how you want to play some of the cards together to score, if that makes sense. But she can definitely play it. Like the mechanics aren't that involved. So anyway, I'm going to pick Doomlings. If you're looking for kind of that simple game and you don't like the heavy games or you're playing with kids, cause I could see somebody that just kinda likes, you know, kind of a little bit of a thinker, but you could still have a conversation with whoever you're playing with.
Charles Max Wood [00:59:37]:
You know, maybe like a Sushi Go Party. It's it's kind of on that level as far as how complicated it is. So Doomlings. And I think there are a bunch of expansions for it too. So anyway and then, I thought my wife and I started a new TV show. Oh, we were watching the new, Star Trek Discovery, which is the last season. And, I mean, so far we've liked it. It's been a couple of episodes.
Charles Max Wood [01:00:06]:
So, obviously, we don't know how well the story are goes, but, it's based on an old Star Trek The Next Generation episode for, you know, kind of the thing they're trying to find, solve, whatever. So, anyway, so I'm gonna pick that Star Trek Discovery. And then just a quick shout out, we have been putting ads in the shows programmatically. So some of them aren't always super relevant to you all. If you want ad free episodes, go to rubyrogues.com/premium, and, you can pick that up. And then I'm I'm doing calls every week now. I'm gonna invite a bunch of the past guests to either present and or join the crew for a little while. And so if you wanna come have conversations about Ruby or Rails every week, and hear from experts in the in the field, it's, rubygeniuses.com.
Charles Max Wood [01:00:58]:
So, yeah, that's all the stuff. Adrian, what are your picks?
Adrian Marin [01:01:03]:
What what what do I get to pick? Anything?
Charles Max Wood [01:01:06]:
Anything you want. I picked a board game. I picked a TV show. Like, if there's books you like, you know, tech, whatever.
Adrian Marin [01:01:14]:
So I'm not ready, but, like, I love my AirPods. I still think they're one of the best products Apple makes. These these are just amazing. Speaking of of shows, the 3 body problem, that was amazing on it's very good. It's on Netflix. And something tech, I oh, there's a lot of talk about command and deployment and everything else. Everybody just try HatchBox. If you're doing Rails, try HatchBox because it's, like, exactly what you need.
Adrian Marin [01:01:46]:
Like, I I was using Docu or something else before, but now I'm super, super happy with it. It's, it's it's almost perfect, but it's very, very good. So yeah.
Charles Max Wood [01:01:56]:
Yeah. I've been using Kamal, and I love it. But yeah. Yeah.
Adrian Marin [01:02:02]:
Yeah.
Charles Max Wood [01:02:02]:
Alright. Well, thanks for coming, Adrian. This was a ton of fun.
Adrian Marin [01:02:07]:
Thanks for having me, guys. Yeah. It was it was it was nice, speaking about Balabar and Friendly and, seeing you guys again, Charles and Nayush. Nice meeting you. Nice meeting you.
Charles Max Wood [01:02:19]:
Next time. Max out.
Avo: Building Custom Interfaces, Managing Users, and Creating Authorization Systems - RUBY 634
0:00
Playback Speed: