skip to content
Video cover art for Vanilla JavaScript with Chris Ferdinandi
Video

Vanilla JavaScript with Chris Ferdinandi

Chris Ferdinandi joins JavaScript Jam to discuss building a vanilla JS education business, daily writing habits, and his surprisingly simple tech stack

Open .md

Episode Description

Chris Ferdinandi joins JavaScript Jam to discuss building a vanilla JS education business, daily writing habits, and his surprisingly simple tech stack.

Episode Summary

Chris Ferdinandi, known as "the vanilla JavaScript guy," joins Scott Steinlage and Anthony Campolo on JavaScript Jam to share how he built a thriving education business around teaching plain JavaScript. The conversation begins with Chris recounting how a business coach's advice to write daily transformed a stagnant 30-subscriber newsletter into a 14,000-subscriber operation, creating a flywheel where articles generate reader questions that fuel more articles, which become ebooks, then video courses, then workshops. He discusses the recent launch of his subscription platform, the Lean Web Club, a $9/month service offering hundreds of short tutorials and projects as an alternative to his individually sold courses. Chris traces his unlikely path from HR professional with an anthropology degree to full-time web developer and educator, crediting a boss who challenged him to build an internal learning platform despite having minimal coding skills. The technical heart of the episode covers his remarkably lean infrastructure: a $5 DigitalOcean droplet running a LAMP stack with Hugo-generated static sites, flat JSON files instead of a database, and a custom-built authentication system — all without Node.js. He also walks through his content creation toolchain, from Pandoc-powered ebook generation to ScreenFlow recordings and Vimeo hosting, reinforcing his core philosophy that simpler, more resilient tools often outperform complex modern alternatives.

Chapters

00:00:00 - Introductions and the Vanilla JS Philosophy

Scott Steinlage and Anthony Campolo welcome Chris Ferdinandi to JavaScript Jam, where he introduces himself as a developer educator with a daily newsletter reaching around 14,000 subscribers. Chris sets the tone for the conversation by laying out his core belief: that many modern web development best practices are actively harmful to users and to the web itself, and that the industry's fixation on developer experience has produced tools and workflows that aren't as effective as people assume.

Both hosts share their familiarity with Chris's work — Scott has been subscribed since late 2020, and Anthony knows him from numerous podcast appearances, including a stint as a host on JavaScript Jabber. This establishes a warm rapport and signals that the conversation will go deeper than a surface-level introduction, with hosts who already understand and appreciate Chris's perspective on web development.

00:03:08 - Building a Daily Writing Habit and Newsletter Growth

Chris tells the story of how business coaches Jonathan Stark and Philip Morgan persuaded him to shift from a weekly newsletter stuck at 30 subscribers to a daily writing cadence. Initially skeptical, he challenged himself to brainstorm a month's worth of ideas in 10 minutes, came up with 28, and committed to writing short, focused pieces each morning without overthinking or over-editing. The approach quickly paid off: he lost a handful of subscribers but gained more in return, and reader questions started feeding his idea pipeline.

The hosts discuss the broader principles at play — consistency, finding your voice, and the "flywheel effect" where daily writing generates questions that become future content, which eventually becomes ebooks, courses, and workshops. Chris shares his growth trajectory from 30 subscribers to 1,000 by year's end, then 3,000, 6,000, and eventually 14,000 over four to five years. He also reflects on why growth has plateaued, pointing to the fragmentation of social media after Twitter's decline and a general sense of digital fatigue following the pandemic.

00:12:04 - The Business of Education and Launching the Lean Web Club

The conversation shifts to the economics of running an education business, with Chris explaining how one-time product sales create their own form of churn requiring constant launches. This fatigue, combined with the evergreen nature of his vanilla JavaScript content, led him to launch the Lean Web Club — a $9/month subscription platform offering hundreds of short tutorials, projects, and structured learning paths. He describes how the platform differs from his standalone courses by being more holistic, with two-to-three-minute videos grouped by category and cross-linked to relevant projects.

Scott offers real-time marketing feedback, suggesting action-oriented button copy and a free trial period, which Chris reveals he was already building out. The hosts also recommend James Schramko's book on subscription business models. Anthony asks how the Lean Web Club differentiates from Chris's previous offerings, prompting a detailed explanation of the platform's structure: tutorials organized by category, dedicated project pages with walkthrough solutions, and curated learning paths covering broader topics like JavaScript essentials and writing reusable libraries.

00:21:15 - From HR to Web Development: Chris's Origin Story

Anthony asks Chris how he first learned to code, and the answer is delightfully unconventional. With a degree in anthropology and a job in HR where his ADHD made traditional office work difficult, Chris stumbled into blogging, which led to tinkering with HTML, CSS, and WordPress. He became known as "the HR guy who knows a little code," and when his boss asked him to build an internal video-based learning platform after quotes came back at $100,000 to $500,000, Chris reluctantly agreed to try despite doubting his abilities.

After two weeks of intense self-teaching through Stack Overflow, he produced a rough proof of concept that hooked him on development permanently. This launched a two-year journey out of HR and into professional web development, starting with a brief stint at Constant Contact that ended after six weeks due to broken promises about remote work. He then landed at Mashery, an API management company, where he spent years as essentially a solo developer customizing white-label products — an experience that pushed him to build a strong external network of developer peers.

00:28:34 - AI, Automation, and Going Solo

Chris confirms he runs his entire education business as a one-person operation with no team, then fields a question about AI usage. He admits to being resistant to tools like GitHub Copilot, primarily for ethical reasons around how training data was sourced, though he acknowledges he may be softening on the topic. Anthony and Scott suggest starting with automating repetitive tasks, drawing a parallel to James Schramko's advice about systematizing routine work.

Chris clarifies that he's not opposed to automation at all — he's built an elaborate API-driven system to manage marketing messages across roughly 15 different websites from a single source. The discussion touches on the difference between AI-assisted coding and traditional automation, with Chris firmly in the camp of building custom solutions that he fully controls. He then pivots to promoting the Lean Web Club, his podcast at vanillajspodcast.com, his YouTube channel, and his daily newsletter, all accessible through gomakethings.com.

00:33:03 - The Flat JSON File Architecture

Scott brings up a memorable newsletter issue about using flat JSON files, and Chris dives deep into the technical architecture powering his business. His entire operation runs on Hugo, the static site generator, which outputs both HTML pages and JSON files consumed by other sites. For his course portal, JavaScript fetches content through a simple PHP API that reads JSON files and checks user permissions. For the newer Lean Web Club, he refined this approach: Hugo now generates hidden HTML files and public-facing PHP files that handle authentication checks and serve content without any client-side rendering.

Chris explains his decision to abandon databases entirely in favor of flat JSON files for user data, including hashed passwords stored via PHP's built-in functions. He rolled his own authentication system using cookies with randomized tokens, acknowledging the security considerations while noting it works across multiple production sites. The conversation reveals he previously ran a headless WordPress instance solely for authentication, and dropping it reduced his server's memory usage by roughly 20 percent overnight.

00:42:09 - The $5 Server and DIY Deployment Pipeline

Chris reveals that his entire business — nearly two dozen websites — runs on a single $5 DigitalOcean droplet with a basic LAMP stack and no Node.js installation. He uses ServerPilot for security patches and has NGINX layered on top of Apache. His deployment pipeline is homegrown: GitHub webhooks trigger fetches and rebuilds of his static sites, essentially replicating what services like Netlify do but at a fraction of the cost and with full control.

The hosts encourage Chris to be more transparent about his infrastructure, suggesting a "uses" page similar to those maintained by developers like Jason Lengstorf and Ben Myers. Scott pushes the idea further, suggesting Chris could create content teaching others how to replicate his setup, positioning his real-world experience with rolled authentication and flat-file databases as a compelling draw for developers at various skill levels. Chris is receptive, noting he's written about these topics but the articles get buried in his prolific daily output.

00:46:45 - Content Creation Tools and Final Thoughts

Chris shares his content creation toolkit: ScreenFlow for recording podcasts, YouTube videos, and courses; a Shure MV7 dynamic USB microphone chosen for its noise rejection after a Blue Yeti picked up too much household noise during the pandemic; and Pandoc combined with wkhtmltopdf and Calibre for converting markdown files into finished ebooks in multiple formats. He mentions an open-source ebook boilerplate on GitHub that others can use to replicate his workflow.

The discussion covers his use of Vimeo for video hosting, which provides domain-restricted embedding, customizable players, and bandwidth-aware streaming — all of which let him keep course videos off his tiny server. Chris closes with his signature plea: please use less JavaScript and more HTML. The hosts wrap up by directing listeners to leanwebclub.com and gomakethings.com, with Scott wishing Chris well on his new subscription venture and the promise of a seven-day free trial coming soon.

Transcript

00:00:03 - Chris Ferdinandi

All right, we're live.

00:00:05 - Scott Steinlage

What's up, everybody? How's it going? My name is Scott Steinlage, and I am a co-host here on JavaScript Jam. And we have this guy, Anthony Campolo,

00:00:17 - Anthony Campolo

and a guest, Chris Ferdinandi, the vanilla JavaScript guy. Vanilla.

00:00:22 - Chris Ferdinandi

Hey, hey, hey. It's great to be here.

00:00:25 - Scott Steinlage

Yeah, man.

00:00:25 - Anthony Campolo

Why don't you give a little introduction to who you are and what you do?

00:00:28 - Chris Ferdinandi

Yeah, yeah. So the short version is that I teach people vanilla JavaScript, and I believe that there's a simpler and more resilient way to make things for the web. So I author a newsletter that goes out each weekday to about 14,000 developers, and I create a whole truckload of educational material, courses, books, workshops, things like that, that you can find over at gomakethings.com. My whole shtick, as it were, is that I think a lot of the modern best practices that we use on the web are actively harmful, both to the people who use the things that we build and the web itself. And a lot of this focus we've put on developer experience is both to blame and has resulted in a DX that is not actually as good as, I think, a lot of times we like to think it is. So that's what I'm here to talk about today.

00:01:30 - Scott Steinlage

Awesome, man. Yeah, appreciate you coming. Actually, we were just kind of talking about this before we started recording, but I've had your emails coming to my inbox since, like, December of 2020, back when COVID started happening and all that. And that's kind of when I started to shift more from, like, I have a lot of marketing background, and I started to shift towards more of a developer, technical kind of role and was getting into JavaScript and things like that.

00:02:07 - Anthony Campolo

Yeah. For me, I'd heard you come up on many of the podcasts I listened to. You're someone who's very plugged into the whole podcast scene. So if you follow JavaScript Jabber and shows like that, weren't you a host on JavaScript Jabber for a little bit?

00:02:22 - Chris Ferdinandi

I was. I left for political reasons. Yeah.

00:02:26 - Anthony Campolo

So I appreciate, though, the fact that you really get yourself out there and communicate the things you're doing. And so, you know, both Scott and I are pretty familiar with your work for sure.

00:02:39 - Chris Ferdinandi

Awesome. Nice. Well, this will be better than the last podcast I was on, where I got yelled at for 30 minutes.

00:02:49 - Anthony Campolo

Sometimes we're friendly hosts. Don't worry.

00:02:56 - Chris Ferdinandi

Excellent. Cool. Yeah. So where should we start? Do you want me to just give my normal spiel? Do you guys have any questions you'd like to talk about? I'm happy to.

00:03:08 - Anthony Campolo

I mean, I think Scott has some questions about your content flow and how you keep it so consistently going, for sure.

00:03:18 - Scott Steinlage

Like, dude, for days, you know, 20 emails in a month minimum, for sure.

00:03:24 - Chris Ferdinandi

Yeah.

00:03:25 - Scott Steinlage

Yeah, it's amazing. We love the content. It's good content. It's not just, you know, you're not just sloshing stuff out there. Like, it's good stuff, right? All of it. So we'd love to hear how you're doing that. Is it a team? Is it you? Is it. You know, what's going on?

00:03:38 - Chris Ferdinandi

No. So, like, three years ago, maybe a little bit more at this point, it's been a while. COVID time. The last three years have been like a blur. But at one point, I had a weekly newsletter, and it was kind of just a summary of cool stuff I'd found on the web that week, links to other articles, my own thoughts, stuff like that. And I had a humble 30 subscribers. And it had been that way for at least half a year. It was just a completely stuck newsletter. And I'm in this business Slack run by Jonathan Stark. At one point, I was actually paying him for business coaching. And him and this other dude who also helps freelancers make more money, Philip Morgan, were like, yo, you should start writing every day. And I was like, no, that's insane. I'm not gonna do that. There's no way I can write every day. And even if I could, no one is going to want to read that much from me. And they were like, no, no, no, no, just trust me. This will change your business.

00:04:49 - Chris Ferdinandi

Just trust me. And I'm like, I don't trust you. And they're like, but you should just try it for a month, and if you don't like it, you can always go back. Like, you only have 30 subscribers. What, you lose half of them? Who cares, right? It's like, it's 15 people. So I was like, all right, that stings, but you're right. So I gave myself a challenge. I said if I could come up with a month of ideas in 10 minutes, I would do it. And I set a timer on my phone, and I think I came up with, like, 28. And I was like, all right, that's good enough, let's go from here. And I gave myself a challenge that no idea was too small. So I'm like, all right, one day I'll write about how to get an element in the DOM with querySelector, and then the next day I'll talk about how to get multiple elements with querySelectorAll. Normally that would be one article for me, but I'm like, I'm just going to cheat and split it up and we'll see what happens. And it was really wild.

00:05:39 - Chris Ferdinandi

So a week in, I started getting back... So I lost like maybe four or five subscribers right off the bat, just from the fact that I told people it was going to happen. And I lost some folks who were like, I don't want to hear from you that much. But I ended up growing by maybe 10 or 15 subscribers, so I more than made up for it. And after a week, I started getting back questions, and I was like, oh, cool, I'll answer this in a future email and add it to the list. And so at the start of January, I had a list of like a hundred article ideas. No, it was more than that, but I culled it back to 100. I was like, I haven't written about these things. They're out of date now. I'm not going to write about them. And today that list is at 188 because I keep coming up with ideas faster than I can write them.

00:06:30 - Anthony Campolo

I totally identify with that. I have roughly 50 Markdown files right now in my blog drafts, some that are just a dump of links versus some that are like 90% written, and just this huge spread.

00:06:44 - Scott Steinlage

Yeah.

00:06:45 - Chris Ferdinandi

Oh, sorry. Go ahead, Scott.

00:06:46 - Scott Steinlage

I was just gonna say that I love what you're talking about and how the business coach gave you that advice and it was like, hey, you need to do this. Start writing every day. It's so true, though, because consistency, and it's not just the consistency of it, but it's the practice. It's the practice, yes, but it's also the polarity, right? So when you have polarity, then you're going to attract more, right? When you're not, and you're sitting in the middle here and you're not creating content and all this stuff, then you're not going to attract those people, right? And yes, you're always going to have people that drop off, just like you said you had four or five drop off, but you gained like 14 or 15, and it's because you're attracting.

00:07:23 - Anthony Campolo

Right.

00:07:23 - Scott Steinlage

And so, you know, with that being said, I think that's a huge piece. If you're listening to this, don't miss out on that. That's very true. You need to find your voice. That's what you're doing too, right, in writing all that.

00:07:39 - Chris Ferdinandi

So I've been talking to... I'm in a handful of Discords and Slacks, and I get this question a lot. People are like, I'd like to write more. And honestly, the best way to start writing more is stop sitting on these mega blog posts, like, I want to write the definitive guide to X, and just write what you can in like 15 or 20 minutes and hit publish, and then come back the next day and write the next part and just keep going until you're done. Because I know a lot of folks kind of get stuck in this, it's not ready, it's not ready, it's not ready, and it just sits in drafts for months. And I actually found it harder to write weekly than daily. It's now just a thing I do when I have my coffee in the morning, and I don't proofread. I just write until I'm done for that particular period of time and hit publish. It creates this cycle that Jonathan Stark refers to as the flywheel effect, where once you start doing it, the system just kind of takes over. And so what's happened for me is articles turn into questions, which turn into more articles, which eventually turn into a big enough collection of articles that I can make an eBook out of them, and then the eBook becomes a video course, and then the collection of video courses becomes a workshop.

00:08:55 - Chris Ferdinandi

And, yeah, like, just over the course of two or three years, what started as writing daily turned into this massive education business kind of by accident.

00:09:05 - Scott Steinlage

I love it. I love it.

00:09:06 - Chris Ferdinandi

That's...

00:09:06 - Scott Steinlage

That's an amazing story because that's like... I'm sure you've heard of ClickFunnels, right? Yeah, yeah. I used to work for ClickFunnels for, like, three years coaching other entrepreneurs and business owners like yourself on how to better market their products and services online. So I love hearing your story. It's so organic, so authentic. It's so awesome. So appreciate that.

00:09:26 - Chris Ferdinandi

Yeah, yeah.

00:09:27 - Anthony Campolo

This reminds me of the advice that Jason Lengstorf gives, that he got this phrase from Sarah Drasner, I think, using every piece of the buffalo, and how, like, when you have content, you're able to repurpose it in all these different ways because the content kind of transcends the medium at a certain point, and it's like you're just having the pure ideas you want to communicate, and then you figure out different ways and different mediums to communicate that idea.

00:09:54 - Chris Ferdinandi

Yeah, that's a great analogy. And both Jason and Sarah are awesome. So I'm not surprised to hear that. The other thing too, just in terms of growth, it was pretty wild. I went from stuck at 30 subscribers to... I started doing this in, I think, like May or June. And by year end I had hit a thousand subscribers. And then the next year I was at 3,000, and then 6,000, and now it's been like four or five years and I'm around 14,000.

00:10:22 - Anthony Campolo

So you're getting exponential growth.

00:10:27 - Chris Ferdinandi

I was, for a while. I think sometime in the last year that kind of slowed down, so I've been hovering around 14,000 for a little while now.

00:10:39 - Anthony Campolo

Let's talk about that. Do you have theories about why that is? Does that have to do with maybe your output or just you hit a certain limit, or...

00:10:46 - Chris Ferdinandi

Yeah, I definitely don't think.

00:10:47 - Anthony Campolo

Shadow banned.

00:10:48 - Chris Ferdinandi

Yeah, no, I think there's a few things that have happened. A lot of this coincides with mass exodus off of Twitter. So where I maybe benefited a lot from social sharing and growth on a platform like that, a lot of that has been dispersed into pockets of smaller communities elsewhere on the web. So rebuilding a bit there. I also think there's maybe a little bit of digital fatigue. Early in the COVID pandemic, I think people went hyper-digital. Everything was online. And I think we've seen a little bit of, I don't want to say a backlash against that, but like, I'm just exhausted with so much online, and so there's maybe a little bit less of that. These are also just theories. I mean, there's no way that the developer community is limited to just 14,000 people. So I think part of it for me is finding additional pockets of people that don't know about me yet.

00:11:48 - Scott Steinlage

Yeah, I don't even know if it really matters that much though either too. I mean like 14,000 people, you know, if, if you've got 10% of those people listening to you and buying your stuff, like that's great. Like that's, that's huge.

00:12:00 - Anthony Campolo

Thousand true fans, they used to say. Right?

00:12:02 - Scott Steinlage

Exactly. Yeah, yeah, exactly.

00:12:04 - Chris Ferdinandi

I've been thinking about this a lot actually.

00:12:06 - Anthony Campolo

I think once you hit a certain mass of people too, that you can get organic growth by just them recommending it to their friends.

00:12:11 - Chris Ferdinandi

Oh yeah, for sure. It's funny you mentioned the thousand true fans thing, though, because I've been thinking about this a lot. One of the things I often hear about, you know, one-time purchases versus a subscription...

00:12:27 - Scott Steinlage

Yeah.

00:12:27 - Chris Ferdinandi

With subscription products, you always have to worry about the churn, right? And keeping people. The thing they don't really talk about is how one-time sales products are their own type of churn, and that if you don't constantly either make new things for existing people to buy or find new people to buy what you already have...

00:12:46 - Scott Steinlage

Launch, launch, launch.

00:12:47 - Chris Ferdinandi

Yeah, just constant launch. Like that's its own kind of grind, and I've gotten kind of tired of it, to be honest, especially where the things I teach about are more evergreen. It's not like, oh, React just dropped hooks and changed the way that everything works, so now I need to update this course. My stuff isn't really like that. Even when new things come out, the old stuff still works. So, yeah, it's a nice segue into the fact that literally just yesterday I launched this new subscription learning platform called the Lean Web Club that, for $9 a month, gets you access to this library of hundreds and hundreds and hundreds of tutorials and projects and all sorts of other stuff. So what's the site?

00:13:31 - Scott Steinlage

The landing page.

00:13:32 - Chris Ferdinandi

It's at leanwebclub.com. I have no idea how it's going to do. This is a big gamble for me. It could either cannibalize sales of all my other stuff but not make up for them, or it could be the future of my business, and I'm just not sure.

00:13:46 - Scott Steinlage

Well, if the value is there, I'm sure it'll be great, which I'm sure it will be, knowing what you have. So thank you.

00:13:54 - Chris Ferdinandi

Yeah, yeah, we'll see how this goes. This is kind of my... I have high hopes for this, but who knows, you know?

00:14:03 - Anthony Campolo

I see a shout-out here from Wes Bos on there. That's pretty good.

00:14:06 - Chris Ferdinandi

Yeah, yeah, it's, it's funny, he actually tweeted that when he was building his beginner JavaScript course. I think he was doing a lot of research for the course and just kept stumbling onto my stuff, which was kind of a fun and interesting little anecdote.

00:14:26 - Scott Steinlage

Have you ever heard of James Schramko?

00:14:30 - Chris Ferdinandi

I don't know that I have.

00:14:32 - Scott Steinlage

So his book, he has a book called Work Less, Make More. He's not in the tech industry, but he's in business-to-business coaching and stuff like that.

00:14:40 - Anthony Campolo

The Counterintuitive Approach to Building a Profitable Business and a Life You Actually Love.

00:14:47 - Scott Steinlage

It's very marketing, but he is amazing. And he has successfully done the subscription piece of this, and his retention is like three or four years per person.

00:15:04 - Chris Ferdinandi

That's awesome.

00:15:04 - Scott Steinlage

And it's amazing. Yeah. So, like, there's some good stuff in his book, and then obviously he has, you know, other things going on, but. Yeah.

00:15:13 - Chris Ferdinandi

All right. Emailing this to myself now so I can check it out later. Thank you very much.

00:15:17 - Scott Steinlage

Yeah, he's a cool guy.

00:15:18 - Anthony Campolo

And that will be in the show notes for curious listeners as well. So how does the Lean Web Club, I guess, differentiate from the content you produced in the past?

00:15:31 - Chris Ferdinandi

Yeah, so it's a great question. Part of it is structure, part of it is volume. I'm not doing a great job explaining this, and I should probably come up with a better sales pitch.

00:15:44 - Anthony Campolo

It's a good time to workshop it.

00:15:46 - Chris Ferdinandi

Yeah, absolutely. So there's a few problems. I shouldn't say problems, but my courses and eBooks are very narrowly focused on specific topics. So I've got one on DOM manipulation, one on working with APIs, one on ES modules. And my students generally love this because there's not a lot of fluff. It's just, here's what you need to know, here's some code, here's some instruction on it, here's a little project, go. And those are really great for when you're first learning something, but they're very narrow, and if you were to buy all of them, it can cost a lot of money. So the Lean Web Club addresses a couple of challenges there. First of all, it's got all the things. All the different topics, they're all sorted by category. Each one includes video, text version, and source code. And if you are someone who's just looking to get started and you don't have $100 or more to drop on this, it's a really great way for you to get started today.

00:17:04 - Chris Ferdinandi

The other thing that it addresses that I've always struggled with in the past is that it's more holistic. So I often have projects that I want to share that I think would be really helpful to help people learn, but they maybe require some tutorials if you're someone who's brand new for you to kind of understand. And there are tutorials that are scattered across several different guides or collections of learning. Or I have content that's not big enough for a full course, and so I don't really have a great way to package it and sell it to people. And so having things in this platform really frees me from the constraints of a typical course model. So the way it works is I have a library of tutorials. Every one is really, really short. These are two to three minutes on a very specific topic, and they're grouped into categories, right? So you might have a bucket of things around working with selectors, some stuff on loops, some stuff on moving up and down the DOM, all the string methods you'd ever want to know, right? And each one is a short little video with some source code.

00:18:16 - Chris Ferdinandi

And then for each one it gets linked to relevant projects that will help you reinforce those skills if you want. I also have a separate dedicated page with all of the projects, and each project includes links to relevant tutorials so that if you need some background before you start digging in, you can. And when you're done, I have a walkthrough of how I approach that project so you can, you know, if you get stuck or you need help, you have a way kind of to move forward. And then I also have this feature in there called Learning Paths, where they are collections of tutorials and projects around a broader topic. So rather than just DOM manipulation, for example, I have one on JavaScript Essentials that's going to walk you through all of the stuff you need to know if you want to get started as like a junior JavaScript developer, you know. So it'll cover DOM manipulation, working with APIs, array objects, string and number manipulation, just all of the kind of the basic stuff that you'd be expected to know in your first JavaScript job. Got another one on writing libraries that covers all the different ways you can structure code that's designed to be reused across projects and things like that.

00:19:33 - Chris Ferdinandi

So it's really designed to be a lot more holistic and inclusive and provides people with lots of different ways to learn depending on both how they learn best and where they currently are in their process. Because one of the things I've found is that different people need different things at different phases in their learning journey. So what you need when you're just starting is very different from when you're maybe, you know, kind of heading into mid-level in your career.

00:19:59 - Scott Steinlage

So that's awesome. And just kind of looking over your, your leanwebclub.com page here, I was just kind of thinking about a few things and I don't know, you can take this for what it is, man, whatever.

00:20:11 - Chris Ferdinandi

Yeah, sure.

00:20:11 - Scott Steinlage

But for example, on your join now for just $9 a month, I think that's great. But people also love it when, instead of just join, they're getting something, right? So maybe like, get all the coding instruction you need for only $9 a month, or something like that.

00:20:36 - Chris Ferdinandi

Yeah.

00:20:37 - Scott Steinlage

Subscribe, or something like that, for sure.

00:20:40 - Chris Ferdinandi

For sure.

00:20:40 - Scott Steinlage

Another thing I was thinking about, have you thought of doing maybe a seven-day trial kind of thing so people can see it, try it out, and...

00:20:49 - Chris Ferdinandi

Literally, in the 30 minutes before this, I was dropping in the scaffolding to push that out today. So yeah, for sure.

00:21:00 - Scott Steinlage

That'll be cool.

00:21:01 - Chris Ferdinandi

For sure.

00:21:02 - Scott Steinlage

Awesome. Yeah, we'll try and link that in the notes then for sure as well. Like, get your free 7-day trial to Chris's new leanwebclub.com. I think it's awesome. Thank you.

00:21:12 - Chris Ferdinandi

Much appreciated, Scott.

00:21:13 - Scott Steinlage

For sure.

00:21:15 - Chris Ferdinandi

Fantastic. Yeah, sorry, my brain went blank on me for a minute.

00:21:23 - Anthony Campolo

You're good. I'd actually be curious, if we can take it a different direction. Yeah, I'm sure you've told this story a million times, but I love hearing this. How'd you first learn to code? How'd you get into this stuff?

00:21:32 - Chris Ferdinandi

Yeah. Well, I had a degree in anthropology. I was working in HR, which is its own story into itself. Oh, and I have ADHD, so I was failing so bad at my first job. I just could not get stuff done. Yeah, I was just a scattered mess. So I started Googling how to get stuff done at work, right? Which took me to getting things...

00:22:06 - Anthony Campolo

Done and 43 Folders, and as an ADHD person, you're like, you mean I have to sit down and read a whole book to learn how...

00:22:12 - Chris Ferdinandi

to do this well? So I found blogs, and I was reading them, and they were helping a little bit, but I was really intrigued by this idea that people had opinions on things and they were just writing about them. And I was like, I want to do that too, because there's a lot of things I don't like about HR and I kind of want to share them. So I started a blog and I wanted to have more control over how it looked and felt. So I started kind of hacking my way through HTML and CSS and PHP, or WordPress-flavored PHP. And I really, really liked it. And I started looking for ways to do more of it in my actual job. And I became known, in my company, as the HR guy who knows a little bit of code. And I knew just a little, little bit, right? But eventually I ended up in the learning and development team, where my primary focus was on career development kind of stuff. But my boss and I were kind of kicking around this idea of, rather than training being like, let's get everybody in a room for eight hours and talk to them, what if we...

00:23:21 - Chris Ferdinandi

We did it more like YouTube, where people just watched short videos of stuff they needed to learn when they needed to know it, and we had it all hosted on some internal platform. So we talked to IT and they're like, oh, yeah, no, no, we can do that. It'll cost $100,000 and it'll take us a year and probably won't have these things you want in it. And I was like, oh, that's not going to work. So we looked at some outside agencies and they're like, oh, yeah, no, no, we can do that in like six weeks, no problem. Half a million dollars. And I'm like, no, we're not going to pay that. This is just a proof of concept. So my boss asked me the question that changed my career forever. He looked me in the eyes and he goes, hey, Chris, you know a little bit of code. Can you build this? And I looked him dead in the eyes and I said, no, I cannot. This is well beyond my capabilities. And he goes, well, can you learn? I go, probably not, but I'll try. So I literally just disappeared for two weeks and dove into the bowels of Stack Overflow and tried to figure out how to hack WordPress, which was the only platform I kind of knew, into kind of an app thing.

00:24:23 - Chris Ferdinandi

And I wrote the most awful code I've ever written in my life. But I got this really rough proof-of-concept thing stood up, and I was absolutely hooked. That was the moment where I was like, forget HR. This sucks. This is all I want to do for the rest of my life. This is amazing. And that started a two-year journey for me of leaving HR and becoming a web developer, so focusing a lot more on building my skills, networking, going on and bombing tons of interviews, and eventually getting my first gig at Constant Contact, where I lasted for exactly six weeks.

00:25:05 - Anthony Campolo

I was gonna say that sounds like a pretty cool gig, but it sounds like it was a minor one.

00:25:09 - Chris Ferdinandi

No, it wasn't. I left. I wasn't fired or anything. Constant Contact at the time had one of the best learning cultures of any place I've ever worked. It was somewhere between an hour-and-a-half and a two-hour commute one way for me during normal commuting hours. And during the interview process, they were like, oh yeah, no, we can talk about remote work once you get settled in. And then I got settled in and they're like, oh no, no, we don't do remote work here. And I was like, all right, cool, I'm leaving. And they're like, oh no, we can make an exception. And I was like, no, I'm sorry, it's too late now.

00:25:42 - Scott Steinlage

Yeah.

00:25:43 - Chris Ferdinandi

And I don't think it was the company. I think it was just that my hiring manager was old-school and kind of crappy. But yeah, that's another story for another... Actually, that was the whole story, right? Constant Contact was otherwise really, really cool. I still keep in touch with some of my old coworkers there.

00:26:00 - Scott Steinlage

Wow, that's awesome.

00:26:02 - Anthony Campolo

Are there other companies you've passed through along the way that you feel like you like took things away from?

00:26:11 - Chris Ferdinandi

Yeah, so it's actually really funny, right? So I went from Constant Contact to this company called Mashery, who does API management software. So, you know, if you're a company that wants to have an API program, either internal or external, they make software that you can use to generate keys and secrets and authenticate people and determine who has access to what and see analytics and all that. And I was the person who made this white-label product look like your brand. So if Adidas came in, we'd make their website look like Adidas.com, and I was there literally until I quit last year to just go full-time on my JavaScript education business. So yeah, that was a really long-running kind of thing, and it was odd because there were other developers there, but the group that I was part of, I was like a team of one. And so a lot of my learning and growth came from either self-teaching or finding networks outside of the company to interact with, which was really cool. And it's one of those things where there were times where I was like, I wish I had more developers to interact with here.

00:27:28 - Chris Ferdinandi

But I think in the long run it benefited me a lot to have a much bigger kind of external network of folks. I think that's the kind of thing we don't always do enough of.

00:27:39 - Anthony Campolo

Yeah.

00:27:40 - Scott Steinlage

Can you relate to that, Anthony? Because, you know, being in DevRel is totally different than being in the engineering team in DevOps or whatever, right? And then you have your external community that you hang around with and do things with and chat with online. It's very similar, kind of, you know.

00:27:56 - Chris Ferdinandi

Yeah.

00:27:57 - Anthony Campolo

Being DevRel, it can be kind of like an island unto itself or like a connector between different pillars. There's a lot of different ways you can approach it. I think it's also, we talk about this with Dom, how this can lead to a lot of burnout because you end up having to be so many things to so many different people at one time. So for me I always try and get a little bit of product, a little bit of marketing, a little bit of engineering, and then by getting the sum total of those pieces you can get kind of a holistic view.

00:28:30 - Scott Steinlage

That's cool. Awesome man.

00:28:34 - Chris Ferdinandi

For sure. Yeah. So I'm trying to think after that. Yeah, no, that was it. And then I've just been doing this, so I'm kind of a solo educator at this point, which answers the question you asked me earlier. I do not have a team. I'm literally a one-person show.

00:28:52 - Scott Steinlage

So you're just hustling, man.

00:28:55 - Chris Ferdinandi

I am, yeah.

00:28:56 - Scott Steinlage

How, how much do you use AI in, in your flow?

00:28:59 - Chris Ferdinandi

Not at all, really. I've been kind of resistant to the trend. I may be softening to it. I just haven't gotten around to it. So I don't use Copilot at all, mostly for ethical reasons. The idea that they were kind of taking and license-washing code just didn't sit right with me. But yeah, not at all.

00:29:30 - Anthony Campolo

I would recommend taking the most repetitive task that you do and trying to automate that. That's usually what I tell people. There's something you're doing multiple times that is very obnoxious. See if you can figure out a way to automate that just by asking ChatGPT to do it for you.

00:29:47 - Scott Steinlage

This is funny though. This is interesting you say that exact thing right there. Because James Schramko, the guy I mentioned earlier with the Work Less, Make More book, that's one of the things he talks about: create a list of all the repetitive things that you do, and then start creating these systems and processes, or utilizing AI at this point. That was not a thing back then. But yeah, I think it kind of correlates well with it.

00:30:12 - Chris Ferdinandi

But yeah, and I'm not opposed to automation. I have automated the hell out of things.

00:30:18 - Scott Steinlage

I think all engineers love automation.

00:30:19 - Anthony Campolo

Right.

00:30:20 - Scott Steinlage

Like, that's why we engineer things.

00:30:23 - Chris Ferdinandi

Yeah, for sure, for sure. Like I, I have something like, I think like 15 different like websites with various like products or like marketing funnel kind of things on them. And so I have this whole crazy like API driven marketing message system so that I only have to update my messages in one place and they get populated everywhere. Yeah, that gets kind of complex over time. But yeah, so I'm very much on board.

00:30:54 - Anthony Campolo

Awesome. Well, you gave us an idea of kind of what you're working on and are there other things that you want to kind of blast out into the universe and let people know about?

00:31:04 - Chris Ferdinandi

Yeah. No. So the big one is obviously the Lean Web Club, and it's kind of where I'm putting a lot of my energy right now. Other than that, I run a podcast, I run a YouTube channel, I got my daily developer tips newsletter.

00:31:19 - Anthony Campolo

Yes. Let people know like what those are,

00:31:20 - Chris Ferdinandi

The best place to find all of that is go to gomakethings.com/javascriptjam or jsjam or javascript-jam. They'll all get you there. And I'll have links to all of this stuff over there just because I have like a bajillion different projects.

00:31:38 - Anthony Campolo

What is your podcast like, what kind of stuff do you cover in that?

00:31:41 - Chris Ferdinandi

Yeah. So it's a lot of... I don't know why I keep saying yeah before I answer questions. It's a really annoying habit. I cover a lot of the same stuff that... Well, my newsletter is a mix of strategic and tactical. The YouTube channel tends to be more of the tactical code stuff, particularly the stuff that would benefit from being able to see it, whereas the podcast tends to be more of the strategy stuff. So that's over at vanillajspodcast.com. And, for example, I talk about things like... Actually, I do have a couple of code-based things, but in the past I've talked...

00:32:22 - Anthony Campolo

Or do you bring guests on, or is it just monologues?

00:32:24 - Chris Ferdinandi

It's usually just me. I every now and then have guests. Like, I recently had a chat with my friend Ben Myers about accessibility. Yeah, I've got another one coming out soon. I love Ben, he's so great. Got another one coming out soon with Jared White where we talk about the general complexity of the industry and some emerging trends that we're seeing with some newer tools. But it is usually just me, largely because editing guests is hard, as I'm sure you both know. And when it's just me, if I screw up, I can just start over, and I don't really do any editing.

00:33:03 - Scott Steinlage

That's cool. So one thing real quick I just want to bring up. I was thinking about it earlier, I couldn't find it, but I finally found it. So one email that really stuck out to me was from back in March, late March, and you were talking about flat JSON files for the win. And you kind of went through your process, your courses and your site and how that all works through rendering all these different things based on what people have bought and what they signed up for. I just love the process that you went through, and you simplify, you know, because you like to keep things simple, right? And I thought it was super cool the way you put all that together. And I think I was actually talking about this on one of our JavaScript Jam Lives at one point. But I don't know if you want to get into a little bit of that and just kind of talk about how you created that instead of going with something like ClickFunnels or LeadPages, or maybe you do use some of those too.

00:34:00 - Scott Steinlage

But you've got your whole system right?

00:34:02 - Chris Ferdinandi

So yeah, I can talk about that. Absolutely. My whole business is driven by Hugo, the static site generator. Literally when I switched from WordPress to a static site generator, Zach Leatherman had just that week started working on Eleventy, and he's like, I've got this new thing coming out. And I was like, oh, this looks really cool, but I want something today, and it's still in beta. So I'll check this out in a few months. And by then I was already way too deeply entrenched in the Hugo world. But yeah, one of the really cool things about static site generators is you can usually customize the output formats. So I have mine spit out HTML files for my site, but then it also spits out some JSON files that some of my other Hugo sites will fetch and consume and render things into HTML on various pages. For my student portal, for people who buy my courses and workshops and stuff, I am generating HTML pages and then a JSON file that's only accessible on the server.

00:35:20 - Chris Ferdinandi

You can't get to it from the front end.

00:35:24 - Scott Steinlage

Like an environment file or something.

00:35:27 - Chris Ferdinandi

Yeah, it's really just an index.json file, but I have my .htaccess set up so that you can't get to it directly, you can only read it on the server. And so my JavaScript will make a call to an API I set up, which is again really just a PHP file that reads the JSON file, checks if the person should have access to that content, and then sends it back. And then JavaScript takes over and does some rendering. And that works well-ish enough, as you might imagine. I don't like the idea of rendering with JavaScript when you don't have to, and so that's always bothered me. So for the Lean Web Club, I went a different route, and every Markdown file spits out an HTML file and an index.php file. And this time the HTML file is the one that's hidden and only readable on the server, and the index.php file is the one that gets served by default. And that file just really quickly checks: is the person signed in, yes or no? Is this content for public consumption or logged-in users only? And then either redirects them or grabs the...

00:36:40 - Chris Ferdinandi

HTML file for that view and just spits it back out. As a result, it's way faster. There's no JavaScript rendering and it has worked out really, really well.

00:36:53 - Scott Steinlage

Well, how many different views? Because I'm sure you have a lot of different products. Right. So.

00:36:58 - Chris Ferdinandi

Yeah, yeah. So I basically just have...

00:37:01 - Scott Steinlage

I have templatized it, I'm sure.

00:37:03 - Anthony Campolo

And then you.

00:37:03 - Chris Ferdinandi

I did, and I really only have like three types of content. So it's either you have to be logged in to see it, you have to be logged out to see it, or it's available for both. And if it's available for both, I tell Hugo to just spit out an HTML file and make it publicly accessible. So there's no PHP routing that happens there. And otherwise it's very, very straightforward. The template grabs some front matter, the is this public or not thing, and drops it into a PHP variable in the associated index.php file so that it can figure out: should the person see it or not? And then you mentioned flat JSON files. So I don't use a database anymore, and it has been shockingly awesome to just read and write up and down from a JSON file. So I'm using PHP and their built-in hashing function to hash passwords before saving them down and then compare the provided plain-text password when someone logs in against the hashed version in the database, quote unquote, the flat JSON file. And that's basically it.

00:38:23 - Chris Ferdinandi

It's really, really simple. It's super nice to be able to manually debug things by just opening files and seeing what's going on or deleting them or creating new ones. Like resetting a password doesn't involve MySQL queries. I can just go in and drop a hashed thing into the file. It's worked out really, really well for me, and I was a little bit worried about scale. I still don't have a huge... my course portal only has about a thousand students who use it on a regular basis, so it's not overwhelmingly crippling, but it has worked out shockingly well. For the authentication piece, I'm setting a cookie that has just a randomized token string, and then...

00:39:13 - Scott Steinlage

Rolled your own auth, you're saying?

00:39:14 - Chris Ferdinandi

Right, exactly. I did roll my own auth. Yeah. And I know that sounds absolutely bonkers...

00:39:18 - Anthony Campolo

But it's a hot topic.

00:39:19 - Scott Steinlage

It is a hot topic.

00:39:20 - Chris Ferdinandi

Right. And I'm not trying to be arrogant about it. I know there's certain folks on Twitter who have been like, oh, this is so easy. And it's not. It was kind of a pain, but...

00:39:32 - Anthony Campolo

It's not easy, but it's not impossible. That's the thing about rolling your own auth.

00:39:36 - Chris Ferdinandi

It's not trivial. And there are absolutely security concerns. Like, don't save plain-text passwords, that kind of thing. And you need to really make sure, if you're doing what I do with flat JSON files, that the directory they're in is not readable from the web.

00:39:53 - Anthony Campolo

Do you have content on auth, like vanilla JS auth?

00:39:59 - Chris Ferdinandi

Do I?

00:40:00 - Scott Steinlage

You might. Now hold on.

00:40:02 - Anthony Campolo

That would be cool. That's a subject that is underserved.

00:40:07 - Chris Ferdinandi

Oh, man. So I wrote a little bit about this on my site. I also have a course on token-based authentication, but it mostly talks about using OAuth services or that sort of thing.

00:40:23 - Anthony Campolo

How to drop into it with vanilla JS, but you're still kind of reaching out to services.

00:40:28 - Chris Ferdinandi

Yeah. But instead of having to download an SDK or use some sort of third-party thing, here's an OAuth flow using vanilla JavaScript, for example. But one of the things I have flagged to do for the Lean Web Club is create a series of tutorials on my process, how I actually...

00:40:48 - Scott Steinlage

Yes, I love that. But what I would love to see...

00:40:51 - Chris Ferdinandi

Yeah.

00:40:52 - Scott Steinlage

And I think this would be a huge lead magnet for you, because if you created that but packaged it as a separate thing and, sure, put it in your Lean Web Club as well so they get it, because they get everything in there anyway, right? But take this and create it as a giveaway for subscribing to your list. And I think that if you compare it to all these auths that are popping up around, you're gonna get a lot of probably negative and positive feedback, but you're used to that. Especially on Twitter, if you're negative. Oh, you're game. You're gonna be good. Yeah, I think that would be awesome. And then, yeah, let's see another 5,000 people in there, right.

00:41:36 - Anthony Campolo

Cool.

00:41:36 - Chris Ferdinandi

Yeah, that's a good idea. The cookie piece is literally just a token. And then I've got a bunch of token files where the file name is the token and it's got the person's email address in it.

00:41:50 - Scott Steinlage

So especially since you've done this successfully. Right. Like, that's the thing.

00:41:53 - Chris Ferdinandi

Like this is not theoretical. This is now multiple sites.

00:41:56 - Scott Steinlage

You're using it in something that you sell.

00:42:00 - Chris Ferdinandi

Right.

00:42:00 - Scott Steinlage

So I think that's the key here, is that people will really want to find out. Okay, well, what is this? Let me, let me. Yeah, I'll give you my email to find something that's working for sure.

00:42:09 - Chris Ferdinandi

I was previously using... I literally had a headless WordPress just for user authentication. I run my entire business on a single $5 DigitalOcean droplet, almost two dozen sites, and it's worked really, really well. But I noticed a few months back I was hitting my memory allotment every now and then, just these massive spikes. And so I ditched WordPress and it dropped by like 20 percent just overnight. So just for me, it was a...

00:42:38 - Anthony Campolo

Big performance win. If it's not WordPress, what do you have running on that DigitalOcean droplet? Are you saying you dropped the droplet itself?

00:42:47 - Chris Ferdinandi

No, no. So I removed WordPress from the equation. I don't have Node either. It's literally just a LAMP stack. So it's just Linux, Apache, and PHP. And I actually think there's an NGINX layer on top of Apache. I use this service called ServerPilot to kind of manage patches and that security layer. But yeah, I don't have Node installed at all. The whole thing is just a handful of cron jobs that run to rebuild my static sites every night.

00:43:30 - Anthony Campolo

So it's the Hugo thing. You're basically running that to generate your static assets and then kind of building and pushing something on the fly.

00:43:40 - Chris Ferdinandi

Yeah. So I have an automated deploy. Whenever anything goes to GitHub, a webhook triggers a fetch and rebuild.

00:43:48 - Anthony Campolo

So you built your own Netlify.

00:43:50 - Chris Ferdinandi

I did, yeah. This was before Netlify was really a thing, though.

00:43:55 - Anthony Campolo

Yeah.

00:43:56 - Chris Ferdinandi

For sure.

00:43:57 - Anthony Campolo

Once you got set up, set it and forget it. Why mess?

00:43:59 - Chris Ferdinandi

Yeah. And it's just five bucks. It's so easy. And then also the PHP that runs the authentication layer, so reading those flat files, updating them, writing back to them, that sort of thing.

00:44:17 - Scott Steinlage

That's awesome, man. Have you thought about being more transparent about your internal things that you're doing? Because I'm just hearing all this is freaking phenomenal.

00:44:24 - Anthony Campolo

You have a uses page. I feel like that would be in line.

00:44:28 - Chris Ferdinandi

I probably should. I don't. Yeah, I don't know, that's one of those things too, like, I'm weird about that stuff.

00:44:33 - Anthony Campolo

Jason Lengstorf has very good uses pages. I'm in the same boat as you, Chris. I want to write a uses page. And for people who don't know, this is a page where you say, my whatever is using this tech, and you very clearly say, I'm building on this, this, this, with these services. My Astro blog kind of does this, but some people go way deeper. Like, this is how I stream, this is how I do XYZ, you know.

00:45:00 - Chris Ferdinandi

Oh, crap. Jason's is amazing. All right. Yeah.

00:45:04 - Anthony Campolo

We'll link to both of those, Jason's and Ben Myers'. Check out both of them. They're fantastic.

00:45:09 - Scott Steinlage

It's like Wappalyzer, but truthful.

00:45:14 - Chris Ferdinandi

Oh, man. Oh yeah, now I'm looking at Ben's. This is great too. All right. I've got some catching

00:45:20 - Scott Steinlage

up. And not just uses, but you know how there are a lot of other people who are course creators or things like that, and they're more transparent with other things too. Like JLD, John Lee Dumas, on his podcast, he's very transparent with everything he does on that. But I don't know, just helping other people do what you did. You know what I'm saying? I think that would be a huge thing too, right? Because here's the thing, man: how many other people out there do what you do? Vanilla is very... yes, it's like you said, it's timeless. But also at the same time, would you say it's beginner-oriented, but some of it isn't as well, right? And so it attracts a lot of those beginner-ish people like myself in 2020.

00:46:06 - Anthony Campolo

Right.

00:46:07 - Scott Steinlage

That's how I signed up for you, right? And so I was thinking, if you could create another course on how you did this and be more transparent, or not even necessarily a course, because I know that's a huge undertaking, but just putting that process out there more, I think there you'd get even more people that are developers at your level, to help them get to the next level themselves. Because you only got to be one step ahead of the next guy below you. You know what I'm saying?

00:46:41 - Chris Ferdinandi

Yeah, 100 percent. That's a good suggestion.

00:46:44 - Anthony Campolo

Yeah.

00:46:45 - Scott Steinlage

Cool, man. Well, this has been really fun, for sure.

00:46:47 - Anthony Campolo

Yeah.

00:46:48 - Scott Steinlage

Is there anything else you want to shout out or talk about or.

00:46:51 - Chris Ferdinandi

No, no, this was great. Yeah, actually, I take that back. There's one more thing. And there's always one more thing. I feel weird about this as a JavaScript educator, but this is my plea to everybody: please stop using so much JavaScript. Use less of it. More HTML, less JS.

00:47:09 - Scott Steinlage

Welcome to JavaScript Jam.

00:47:11 - Chris Ferdinandi

Right? That's my I'm once again asking you to use less JS.

00:47:17 - Anthony Campolo

I'm gonna be teaching my partner a little bit of code. And she was like, how many programming languages are you gonna teach me? I'm like, I'm gonna teach you HTML. Full stop. That's it.

00:47:26 - Scott Steinlage

Totally.

00:47:27 - Anthony Campolo

Just, we'll go there, we'll see where we go. But don't worry about anything else.

00:47:31 - Scott Steinlage

She'll jump on. It'll be quick. HTML is good.

00:47:33 - Anthony Campolo

HTML goes deep, though. If you actually go through all the tags you've got...

00:47:34 - Scott Steinlage

Yeah. Like, there's no way I would remember them all. I'm just saying...

00:47:36 - Anthony Campolo

Well, it's not remember them all, but just learn how to use them all and when would be an appropriate time to use a DL tag, you know? There's all sorts of stuff.

00:47:41 - Chris Ferdinandi

Yeah.

00:47:42 - Scott Steinlage

Yep.

00:47:45 - Anthony Campolo

Yeah.

00:47:53 - Scott Steinlage

Yep.

00:47:55 - Chris Ferdinandi

I love the datalist. It does not get enough love.

00:47:58 - Anthony Campolo

Yeah. Another shout-out to Ben Myers, who wrote a definitive blog post on the DL element. We'll include that in the show notes as well. I think you've given all the links already. It sounds like gomakethings.com is the place to go. And then I know you're on Mastodon as well, and Twitter. You've got that right, your name there, @ChrisFerdinandi, I'm assuming.

00:48:22 - Chris Ferdinandi

Yes. So, Twitter is the only place where I'm @ChrisFerdinandi. I'm @CFerdinandi literally everywhere else. There's like a Cheryl Ferdinandi from Italy who grabbed cferdinandi and then never logged back in on Twitter. So for like a decade there's just been this abandoned Twitter account.

00:48:40 - Anthony Campolo

I heard they're expiring ones.

00:48:41 - Scott Steinlage

I heard that too.

00:48:42 - Anthony Campolo

Hopefully that ends up happening.

00:48:43 - Chris Ferdinandi

I know, right? Although at this point.

00:48:45 - Anthony Campolo

Nice.

00:48:47 - Chris Ferdinandi

Yeah.

00:48:47 - Scott Steinlage

Yeah, yeah. Actually, one last question. With your creating and everything, do you use Adobe Premiere? Do you use something different for your podcast than your YouTube stuff?

00:49:01 - Chris Ferdinandi

Yeah.

00:49:03 - Scott Steinlage

What are some of your tools? It's always good to know.

00:49:03 - Chris Ferdinandi

So, and actually, I don't have a uses page. I've written about all of these things in various places. They're just hard to find because they're scattered in articles that get buried very quickly, because I just write so much. But my favorite microphone is Shure. For the recording piece, I record everything in ScreenFlow: podcasts, YouTube videos, courses. I've had to upgrade it a couple of times every now and then with a macOS update.

00:49:42 - Anthony Campolo

What is it about ScreenFlow that you enjoy? Why?

00:49:45 - Chris Ferdinandi

It does very little. Yeah, it doesn't get in the way.

00:49:49 - Anthony Campolo

So it's the opposite of OBS, then.

00:49:51 - Chris Ferdinandi

It sounds like it, yeah. I've tried OBS and I literally can't figure it out. I'm just too stupid.

00:49:56 - Anthony Campolo

Everyone tells me I gotta learn OBS. I wanna be a real streamer. And I'm just like, if this is the only tool that I can use to be a real streamer, I'm not gonna be a streamer.

00:50:04 - Scott Steinlage

I'm sorry. Yeah.

00:50:06 - Chris Ferdinandi

So it's one of those things: I can adjust the audio, I can crop and move around clips, and I can drop in overlays and resize things, but it just doesn't do a ton of stuff. And I really like it for that.

00:50:19 - Anthony Campolo

Yeah. It's all those tools that do less. I am a very big fan of that.

00:50:26 - Scott Steinlage

I used that since about 2016 or 2017. I was using that quite often.

00:50:30 - Chris Ferdinandi

Yeah. So I can also customize the output format, spit out different files for the podcast versus something that's going on YouTube or a course. And it also records the computer sound card. So if I'm ever doing accessibility courses and I need to demonstrate what VoiceOver is doing, it's really helpful to be able to do that.

00:50:52 - Scott Steinlage

Oh, yeah. I love coming in there with a voiceover afterward easily too. StreamYard makes that so easy to do.

00:50:57 - Chris Ferdinandi

Yeah. And if it's in the way, I can individually, like, okay, cut this volume out. Bump this up. Lower that. Because VoiceOver can be really loud.

00:51:05 - Scott Steinlage

Yeah.

00:51:06 - Chris Ferdinandi

Yeah. So I use ScreenFlow for that. I was rocking a Blue Yeti for a really long time. And then when COVID hit and everybody came back into the house and it wasn't just me recording in the quiet of my home anymore, it was picking up everything. So I switched to the Shure. I think this is the MV7. Is that right?

00:51:29 - Scott Steinlage

Looks like it. Hold on.

00:51:30 - Chris Ferdinandi

I always forget which one's the Bluetooth one, which one's the USB, and which one's the fancy one. But yeah, I like this because it's a dynamic mic, which means if I'm not talking directly into it, it doesn't pick it up. And so if my dog's barking in the background, you can't hear it, which is great. And it's a USB. Yeah, it's the MV7. So it's a USB mic, so I don't have to deal with the whole, oh, I need a preamp that boosts the volume, and all this stuff. I plug it in, it works. It's great. All of my eBooks and stuff start off as Markdown files. I use Pandoc. That is my source of truth for everything. And there's some other thing that converts that into some other formats for me. But I have this little homegrown command-line tool that spits my Markdown files out as EPUB and MOBI and all this other stuff.

00:52:36 - Anthony Campolo

You said you have eBooks, right? So that's... yeah. But you've kind of set yourself up where you can have Markdown as a source of truth and then turn that into eBooks. This is where I want to be, so I would love to hear more about that.

00:52:48 - Chris Ferdinandi

Yeah. Hold on, let me pull up my article on this, how I create my eBooks. I need to search on my own site to find it. Do I have search on my site? I do, yes. It's down in the footer, or if you just go to gomakethings.com.

00:53:05 - Anthony Campolo

I love nerding out on how people set up their own stuff.

00:53:08 - Chris Ferdinandi

Yeah.

00:53:08 - Scott Steinlage

Have you tried paid advertising with something like that as a lead magnet? Like, hey, here's how you can do your own eBook in a matter of X, whatever, just using Markdown. Focus on developers and stuff like that.

00:53:26 - Chris Ferdinandi

This has been something I've been toying with for a little while.

00:53:30 - Scott Steinlage

Sorry, I just. I love ideas.

00:53:31 - Chris Ferdinandi

No, and I've been too. I just haven't dove into that yet, but it's been on my list. So for my books and stuff, the process is I write the eBook first and then I pump it through... let's see, where is my system here? Oh God, why can't I find it? Hold on, I gotta look this up. The more recent article doesn't have it. Okay, yeah. So I use Pandoc, wkhtmltopdf, and Calibre, and I'll drop some links to those in the chat. I think I use wkhtmltopdf with Pandoc because it gives me more control over the CSS, and I really wanted to have that control. I literally can drop in a CSS file.

00:54:35 - Anthony Campolo

I've never used that before.

00:54:36 - Chris Ferdinandi

Well, if it's helpful to you, I have an eBook boilerplate on GitHub that you can just copy-paste. I think a couple of dependencies need to get updated because Node. But it's got a simple kind of one-liner that you can use to take those files and spit out a finished book, which is nice.

00:54:56 - Anthony Campolo

It's very nice.

00:54:57 - Chris Ferdinandi

Yeah, and then you can tweak it to your desire. But it works out well for me because I have a shared... all of my books have the same About page. There's no need for me to recreate that for every one. So you can pull in files from different places and mash them all together and it works out really well. And then I take the finished eBook and source code and use that as a loose script for the video portion, which I host on Vimeo. And then I built my own course portal to actually give people access to all these things, to download their books and stream their videos and so on. One of the things that's really nice about Vimeo is you can both control the branding of the player and customize or control where it can actually be embedded. So you can restrict it to just certain domains. And I wrote this janky little thing that takes the download file link for each video and rips the video ID out of it and then generates the iframe for it, and then also creates a download link underneath it so that you get this nicer kind of download-it-for-offline-or-stream-it-directly-on-the-site situation.

00:56:16 - Scott Steinlage

That's nice. Have you thought about doing mobile-first for that type of process? Because I know a lot of people consume courses on their mobile as well, but I don't know, just thinking about it.

00:56:27 - Chris Ferdinandi

Yeah. Say more about that. The whole site is responsive.

00:56:33 - Scott Steinlage

Yeah, I guess.

00:56:33 - Chris Ferdinandi

I mean, yeah, you know, mobile first. But do you mean, do you mean something different by mobile first or do you.

00:56:38 - Scott Steinlage

I guess I understand the responsive piece of it, but as far as the UI/UX piece even more specifically, sometimes the UI/UX looks great, but then when you bring it down responsively it doesn't necessarily work as much.

00:56:56 - Chris Ferdinandi

Oh yeah. So I boost the font size on most of my recording. The text editor is comically, uncomfortably large to work with when I'm recording, and I do that specifically because I know a lot of people watch them on their phones and I want to make sure it's actually readable.

00:57:13 - Scott Steinlage

Right. Cool. So you are thinking about these things.

00:57:15 - Chris Ferdinandi

Yes. I forget the exact settings, but I have it saved somewhere. Every time I go to record I'm like, all right, boost the font.

00:57:22 - Scott Steinlage

That's awesome. Vimeo is really good too. I mean, back when I was at ClickFunnels, we used Vimeo for hosting a lot of... And whenever I coached people on how to create courses and things, it was definitely what I was always recommending for stuff that you have inside of a course. If it's outside the course and you're just using it for marketing purposes, use YouTube.

00:57:45 - Anthony Campolo

Right.

00:57:46 - Scott Steinlage

But yeah, that's kind of our go-to. The control is just amazing, the things you can do.

00:57:50 - Chris Ferdinandi

Yeah, for sure.

00:57:51 - Scott Steinlage

So for sure.

00:57:52 - Chris Ferdinandi

Cool. It's money easily spent. It also means I don't have to deal with hosting large video files. The other thing they do really well is...

00:58:01 - Scott Steinlage

So you stay at $5 a month on here.

00:58:02 - Chris Ferdinandi

I do. They do a great job of doing bandwidth-aware streaming. So if you're on a bad connection or a smaller screen, they're not going to send a 1080p video file to my tiny little mobile screen.

00:58:19 - Scott Steinlage

Yep.

00:58:19 - Chris Ferdinandi

Which is super nice.

00:58:21 - Scott Steinlage

Super awesome. That's cool.

00:58:23 - Chris Ferdinandi

Yeah. So that's, that's for the most part the stack.

00:58:25 - Scott Steinlage

We picked your brain a lot.

00:58:27 - Chris Ferdinandi

Yeah, a lot of brain. I enjoyed that. This is great.

00:58:30 - Anthony Campolo

Yeah, no, this is super fun, man. Thank you so much for joining us. We have so many links and things for our viewers to check out, and I think we pretty much covered the gamut of how to find out more about what you're doing. So people, check out the show notes down here.

00:58:49 - Scott Steinlage

Yes.

00:58:50 - Anthony Campolo

For all the things you want. Yeah, thank you. I see you popping in the eBook boilerplate there as well. I'm definitely gonna check that out.

00:58:57 - Chris Ferdinandi

Yeah.

00:58:57 - Scott Steinlage

That's awesome.

00:58:57 - Chris Ferdinandi

Yeah, thanks for having me. This is great.

00:58:59 - Scott Steinlage

Thank you so much, Chris. Appreciate you and all the work you do and look forward to seeing all the new stuff that you're coming out with. And also wishing you the best with this new thing that you just started. So, yeah, really cool and exciting.

00:59:15 - Chris Ferdinandi

Thanks so much.

00:59:17 - Scott Steinlage

All right, everybody go check out leanwebclub.com and hopefully there's a seven day free trial there soon.

00:59:25 - Anthony Campolo

All right. And we'll catch you on the next one.

00:59:28 - Scott Steinlage

We'll see you in the next one. All right, guys.

On this pageJump to section