Shipping Side-Projects with Claude Code

Greg Baugues · Intermediate ·🧠 Large Language Models ·10mo ago

Key Takeaways

Shipping side-projects with Claude Code, an AI dev stack for building and deploying applications

Full Transcript

You know, I think there's a lot of questions around like, does this actually help you to move faster? I think so much of that depends on your situation. For me, I'm in meetings like often eight or nine hours a day. So, if I can spin up a bunch of stuff that's like working and occasionally take a look at it and be like, "Oh, okay, cool." Uh, you know, or that looks good, I can get a lot more done. Paul Graham wrote this essay what 16 years ago, maker schedule, manager schedule. I actually think that LLM coding tools can make a manager schedule into a maker schedule. It allows you to code in interrupted time. If you're a parent and you're trying to ship your project on nights and weekends and you've only got 15 minutes, I have generally found that I do not use the 15 minutes if I'm coding by hand because it's just overwhelming the amount of code I need to read and write in order to ship a small thing. I literally will steal this phrase from like Armen Ronicker who's like the creator of Flask. I am more ambitious when I use the AI coding tools. I I procrastinate less. I'm like, I'm just going to go write that prompt and then it'll start and then I'm then I'm hooked. Then I want to I want to finish that thing and I want to ship it. >> Hey all, I'm Greg and this is a conversation I had with my good friend Matt Mai and excited to share it with you all. Uh I it was a pretty long conversation and I edited it down to like the really juicy parts. I don't know if this is quite the right way to do these interviews in the future or not, but let me know what you think of the format. I try to keep it really, really dense. Uh, also just wanted to give a shout out to Mai because at the beginning of this year, I set a goal to get from zero to 10,000 YouTube subscribers and I just hit that goal and so thank you for watching. Uh, but also thank you to Matt because when he was working as VP of Debell at Assembly AI, he hired me to do some YouTube work for their channel and that was one of the first times that I had worked with a real professional crew producing content for the YouTube channel. And I learned so much and it's because of him and because of his site, Plushcap, uh, that I really looked at the YouTube channels that were out there for dev tool companies and felt like there was a big opportunity to create my own channel. So Matt's been a really big part of my journey this year. Uh, and so it's really quite an honor to have this conversation with him and to publish this video as the first one I'm publishing after I hit that goal of 10,000 subscribers. My name is Matt Mcai. I'm the VP of developer relations at Digital Ocean. I was with Twilio for many years uh with you, Greg. uh running developer evangelism, developer content and I'm I was a professional software developer uh p purely a professional software developer for over 10 years and I still code nights, weekends whenever I get the chance when I'm not in meetings and uh using AI agents and AI coding tools has completely changed how I am how much I'm able to code particularly on side projects. >> Tell me about plushcap. Blushcap is a it's an analyzer for go to market motions for self-service developer focused companies. So we think about developer tool companies. Anyone uh any company that is targeting software developers as their primary audience, their paying customer, that's really what this this tool is analyzing. Let's take a look at like Digital Ocean blog. If we take a look at like January, all of these summaries have been generated by an LLM. And this is what I typically do if I'm like trying to get up to speed on what a company is doing. I'll just read I'll just consume a one paragraph summary on everything that they have posted on their blog and then I can absorb you know a 100 blog posts in just a few minutes and it gives me kind of an arc of like what the company is focusing on like what you choose to publish to your blog and announce to the public is often a reflection of what the company's priorities are and where they're investing. um you know I've got 500 different companies across plushcap and I found that writing parsers for every single company is actually what needs to happen. So I was previously writing these by hand. I've written like 150 of them by hand. Um and what they do is they pull out things like CSS attributes of like who's the author, who's the what's the publish date, what's the title. Now I have uh cloud code write the the uh individual parsers. date published is correct but the author returned as none when it should be then I'll copy and paste in and then here are some more example URLs to test with and then I'll give it like a whole list so um I'll just I'll just go pull a bunch of them uh blog blog blog blog. Okay. And then I'll just paste these in. All right. So now it is just going to go basically like grab that. Um and I'm sure like people use like firecrawl and all sorts of other tools, but like this is just like vanilla uh clog that I've been I've been using to just like grab um grab files. Um, so it's just gonna since normally what I do is I have a long running session with a lot of different um where I'm just like here's a blog post, here's a blog post, here's a blog post and it'll just it has all the context already. So it'll just go and and write the the the custom implementation. Um, and so like I'll just do yes, proceed. It's going to go grab that that URL. Um, it's checking to see uh so what it's going to find is that there's no existing custom implementation. It's using like there's basically like a generic implementation for extracting the metadata from company blog posts. Uh and it needs it realizes like oh I actually need to go and write a custom implementation that'll pull the author properly. Um, and there's enough variations across all these different companies that uh, you know, the way that their blogs are structured, the CSS, like a zillion different things that you kind of end up, if you want to pull enough metadata reliably, like that the keywords reliably, pull metadata, you essentially need custom implementations for these things. And then you also need to really watch so that you're not pulling bad data along the way because companies will, you know, update their blog their their blog designs. Now the the problem is is like even if like five companies update their blog design by month you know out of the 500 that's still like pretty annoying. Um so I was updating all those by hand in order to get the right metadata before. So now I can just go tell Claude to be able to go do that and just like there's already an architecture and a structure behind scraping these these blog posts. Okay. So now it's going to update uh it's going to create like an update dbt.l ML file which is like basically like there's these custom parsers um that are that will know how to pull the proper data out of the blog post. So it's implementing the fix. It's going to go test it with a bunch of URLs. And I actually find that this is really key. So it really needs I think a list of blog post to test against because the naive implementation is just to go okay I want to I'm going to go get this CSS class and then call it a day or whatever. But then it won't be consistent across a lot of the blog posts. So here it's looping through all the different URLs that I've given it and testing it and making sure like yep pulled the author correctly, pulled the date published, pulled the title across every single one. So even if there's variations, it'll then um create a more generic uh it'll either create a more um it'll it'll create like out routes like exception handling for like different types. And what's funny is that's what I was doing by hand. I found that there was enough variations across these blog posts. Some companies have several different styles to blog posts or they won't publish dates on all of them or the date or the or they won't publish authors. There's all these different permutations even for a single company. And so by giving it a bunch of examples to make sure that it can test properly, then it can actually make sure that the implementation is is what it needs to be. Okay. So now we can go back and we'll just rerun this. And what we'll do is we'll do a force update. Um now we can see extracted author is Bruno. the date is correct. It pulled the word count. Um, and essentially like now it's correct because it's got this custom implementation. So the cool part is too now we can go we can go pull another one, right? And that worked. And then we can go pull another one. Uh, and normally what I would do is I just drop all these URLs into like a file and I'll just go pull them all down. But now, you know, I like test a few of them. And so now if we go back to the DPT blog, we'll see that there's a few of them here and they're all structured with the data here. So that's how just like you know have Claude go and run and and implement a custom uh parser for this. And of course like you can map this across like the whole codebase, right? Like I've got established patterns. Go copy this pattern um and apply it across different you know areas or something that I'm thinking about. >> Okay. So now Claude's written a custom scraper for you. What kind of you've manually tested that on a few different use cases and you're you're getting the results you want. Now I assume it's time to commit. What how do you do that? Are you re like can you walk me through like what you would do now to like lock in these changes that it's made? >> Yep. So uh there's like you know on the command line I'll just take a look blog post manager. So it's made some changes to the blog post extractor. Um this was actually from a previous thing what I was doing with launch darkly. So I kind of combined a couple of changes here but typically I you know be a little bit better about um the separating them out. Um and then block really this is the one that that actually matters. Um I could probably just commit this separately which is just the the dbt custom like yl. So, so then I'll just do get add and commit uh updating um uh you know like dbt implementation push the change. Um now this is just a script change. So I just run these in the background. Um I don't run these on the same server but if there was a code change on the server like I'm updating a template or something like that then I just have like a one like script uh that'll just go and deploy the changes. I've run supervisor on a digital ocean droplet. Um, and so it'll just show all the new changes. The other way is like I actually do like something like database migrations and then I have like a separate like deploy for that because that's obviously a more involved um set of steps. Like most of the time what you want to do is you want to just like ship incrementally a bunch of changes uh really quickly and so like you want the simplest possible deploy. If there's a more complicated deploy then you know I can run all the scripts that are related to that. um or even just have like a Anible playbook that'll handle that. I actually don't have Claude doing the deploys mostly because again like I've already written all that stuff myself so I don't need it to like update a lot of that stuff. So this is where it's like a little bit of a hybrid of like I already have a lot of established infrastructure and that infrastructure works well. There's nothing broken about it. What I need is the speed and the iteration of like creating new pages uh fixing when companies have changed their CSS designs and now I can't accurately or reliably pull their data. And for that it's really good, right? It's just it's just updating things within the scaffolding that I've already set. >> Any particular reason why you are still doing all of the git actions as opposed to having Claude do that? Well, first off, I found it to be slower and I use the get actions to check the code before it's committed, right? So, um that is my step that is like my manual like let me make sure that I'm committing the things that are appropriate because I've actually found that uh they'll you know it'll leave files and things like that. It won't always clean up after itself. I think sometimes you have to put a manual step in place to force yourself to do the things that if it was fully automated, you probably just forget about them. >> Up to you. Do you want to show uh because you mentioned supervisor on a digital ocean droplet. Do you want to show that off at all? >> Like I literally will just hit the deploy script. It's going to it's going to you know populate the pull the code from git uh github from the git the remote git repository. just restart supervisor uh and then it's done. It'll be live >> and that's just deploying to a digital ocean droplet. >> Yep. Yeah. I've just got a digital ocean like you know 14 bucks a month droplet with a you know uh enough the the the big component to this is um uh if we take a look at the SQLite database um I have a 33 gig SQLite database. Now, to be fair, like this is storing a lot of stuff that probably I could start to remove. Like it's it's storing all of the raw HTML >> have a little bit different setup than a lot of folks who are using these AI assistants might look like. Could you talk me through it? >> This is T-Mox plus Vim. Um that's just like running locally in the command line that I usually have like between like I don't know two and six windows open. uh typically a window open for my local development server and often one for uh like a task queue. Sometimes I'll use different colors as well just so I can quickly see it. But so so Pluscap actually also has two different parts. So there's like the main web application that actually runs and so I'll use like this color. I use like a dark background for that. Uh and then I might use something like a um something like blue. So that way like immediately I'm not just like editing the wrong file in the wrong project or something like that because you have like a bunch of different windows open, you're flying back and forth. Like a lot of times it's just easy to like be typing in one and not even realize that you're like kind of like screwing it up and whatnot. So that's how I organize. And so like maybe this gets into a little bit of how I just organize uh Claude, which is like here's here's my setup. So uh so so my setup with cloud is I typically run between two and three different agents on different parts of the codebase. So I know some folks try to do like a git workflow where they do branches and stuff um off of the different uh cloud agents. I just find that that's like just for me personally it's like too much complexity. >> Agree. >> So what I like to do is just have different parts of the codebase or separate the codebase out into different uh independent components. So I have like a data collection piece and I can be modifying that and that data collection piece only interacts with the web application through an API. This uh blue background was was removing some legacy code that I had out there. I was doing a previous caching method. And so I just said um I actually really like this use case for LMS which is like identify everywhere in the codebase where this thing that I'm thinking about refactoring or removing where does it appear? where are the dependencies, where's everything across the entire codebase. So, especially in large code bases, it's going to identify stuff that um you know, you may not be able to get just through static analysis or whatever, it's going to just go grepping through directories and find all sorts of different dependencies that um need to be removed. One of the most important things that I've identified with using LLMs on established codebase, which is technical debt actually becomes 10 times or 100 times more of a problem because it's copying the designs of other parts of the codebase. So if the design over here is wrong >> and then you're apply and the LLM is copying that oh all of a sudden the design is wrong across a bunch of different areas or codebase. So I actually think the technical debt and and keeping time for improving technical debt removing technical debt is actually more important when using LLMs. So blog summary generator what this does is I am running locally lama which I need to update apparently. So, this is going to um go to the Plushcap API, pull down a random blog post, and then it's going to use my local LLM to generate a summary for it. >> Could you tell me more about why you're using a lama there? >> Yeah. So, we could use any LLM, but I I've got a powerful MacBook. I found that some of the smaller LLMs, the open source open weighted LLMs are able to generate perfectly reasonable summaries if I just give it an input text. you know, I have over 100,000 blog posts here. And if I sent the text to, you know, one of the uh APIs for OpenAI or Anthropic or even like, you know, some of the other ones, like it would still cost me a reasonable amount of money. I might as well just use my local system to generate a summary for most of them. And if I need a more powerful LLM in some cases, like if a blog post is really long, it doesn't fit in the context window, then I can like ship it off to the API. Um, what kind of pattern matching do you have for when a feature is a good idea or when a change is a good idea for cloud code and when you need to dig in and do it manually? >> I found the biggest issues that I've had with it are primarily when it's suggesting architectural changes that I am just like you should definitely not do that. Uh, it is like restructuring the code in a way that I would never do. Um, and a lot of times it's just kind of like going off on its own. So, I think that's where I've had the biggest issues with it. Using uh Opus and using the plan mode, I use the plan mode all the time. It helps, but that's really where you've got to check it because it's not it's often not suggesting like a minor tweak, but like something that kind of spraws and then I'm just like blow it all away after 15 20 minutes. It's just like that's actually where I think the biggest problems are. That's why I think the biggest successes are like I already have the patterns. Don't change the pattern. I don't want you to do that. I want you to just like do this incremental improvement. And that's I think also matches side projects too. It's like my goal is just to ship every single day some little tweak even if it's like a backend tweak. I actually haven't made a ton of front-end changes recently because I've been really trying to expand and try to get every single company's data out there. Um, and so like to me it's like everything is just about that iteration not about like the whole design the whole thing. >> Would you be up for showing your your git commit graph? >> I have always been con as consistent as possible about you know one or two contributions a day but what I've noticed is I've done a lot heavier like I I've almost never had a 13 contribution day before. like even going back unless I was like you know over the holiday like that's typically where I had a big contribution day whereas now I can have those all the time. I think there's like been a higher intensity since I've started using these tools more rigorously. Like I I was I would I would argue that like over the last six months I was experimenting a lot, but a lot of times it wasn't really getting me the results or I was using it in a way where it was like I was like analyze this or like like it was more passive. Now I am more I would say more comfortable with the proactive creation and letting it go do its thing. I also personally feel like there was a big increase for me when Cloud 4 came out and when Anthropic launched the Cloud Max plans. >> Yes. Well, and this is all when I decided to get the the Pro and Max plans. Before that, I was not I mean I would like occasionally use something, but then you're on the the API clock and I just didn't feel good about it. Tell me about um full stack Python real quick because I I think that it's really cool that you have such a long history of teaching developers to code. >> Yeah, so Full Stack Python is a site that I worked on for about 10 years. Uh still love the site. It's a full stack python.com. Uh, and it's essentially like I'm a Python developer and I just like wrote about like everything you'd want to know about like web deployment and uh deployment hosting options and like what are whiskey servers and what what is this at a high level look like? And um I just really liked working on it. I'd write I similar to like how I work on Plushcap and I code every day. I would just write every day. Um and so like as a developer this was like my way of like giving back to the community. It was all open source and things like that. So I wrote like something on the order of like a 100,000 words and then I I just needed a break after like 10 years. I just like really needed a break. So I kind of stepped away from it and then I happened to step away in 20 end of like 2022 2023 and then LLMs kind of came out of I wouldn't say they came out of nowhere because I'd used them a little bit with the early early GPT GPT3 but they were becoming good enough that it was actually like pretty hard for me to understand how I could do this. And it wasn't something you could just get out of an LLM, especially as the LLM's got better. like you could just go into chatgpt or go into cloud and say like what is a whiskey server and it'll give you like all the up-to-date information whereas like for me like I was updating all this by hand and updating these links and um you know was I think valuable for its time but it's almost like like a lot of content sites are grappling with right now like I was just um catching up with someone from CSS CSS tricks and they're like same challenge like how do you in world of LLMs where you can ask LLM any question get a really detailed answer and then ask a follow-up questions what is the value of doing the content to you know for your audience there again there are models for value but I just didn't want to go down those routes like I just don't have time for it so for me this was just like something I worked on every single day to keep my skills sharp and then I just found that I it wasn't as valuable for the community as I think uh you know it was previously so that was Yeah, >> there's a lot of folks in our world who fit that description. They got into this line of work because they love writing code. They become a people manager. They probably don't get to code as much as they used to or as they would like. What advice would you have for someone who fits that profile for how they can start coding again with the help of these tools? How would they get started? >> I I actually think that it makes it more accessible to ship all sorts of things that you don't have experience in. So, I'll give you an example. My son and I were just like creating our own game. I've never programmed anything in Pygame. Obviously I know Python, never programmed anything in Pygame. So we just started I was just like creative game in Pygame and we created Snake and then we were like drawing little like sprites and things like that and adding to the game and it was like adding different rules. I want boss and go different levels and all these things like that was wildly empowering. Am I going to release this as some professional game? No, of course not. Uh but it's a great side project, right? and it like helped me to just feel like, okay, I'm gonna like build this thing. I'm gonna learn how to use, you know, one of the command line tools. I I that's actually how I felt like I got more comfortable with Claude code because I picked this side project that I could just like kind of throw away at the end if I didn't, you know, after we had fun with it. Um, so I think that's actually the big thing is like it doesn't really matter what the idea is. Just like pick something and just like go start working on each day. Um, and like then you're going to learn. And I actually found like YouTube is wildly valuable for this stuff. I learned a lot more from the YouTube videos. So, like there's I kind of have this give and take. It's like I watch like some tips videos and maybe I pick like three or four tips out. I'm intentional about them and maybe then like then I'll go back like a couple weeks later and I'll watch some more tips videos, right? And so like there's just like this iterative process where if you have one or more side projects, you can just kind of like try intentionally try those things out and add them to your tool belt. And that's like that's the definition of being a software developer, right? like just getting better, honing the craft, uh just building cool stuff because you think it is fun. Um that's that's what I would say. I I just think that the other thing is like it can allow you to just like you don't have to go learn that code library to use it. You can ask it to use the library and then have it explain it to you. That's so different from pre-LM era. That's especially true for smaller projects where you're building it just for you or just for your kids. >> Yeah. Yeah. I mean, there's just different there's different modes of what you're shipping, right? And so, um, also too, like I would be much more careful about these tools if I was shipping something for, you know, production at work. Um, which, uh, you know, I'm not. So, um, I I just I think the challenge is right now there's just a lot of hype. I think the only truth is like that you try it yourself. Like that's what being a software developer is like. So try some of these things like they are not like the end all beall. Um I think in some cases these tools are going to do a lot of good. They're going to help a lot of people ship some things that they otherwise never would have shipped. I think in a lot of other cases are going to be misused and they are going to generate a lot of legacy code is going to keep software developers employed for a very long time to come debugging all those issues. So there's there's like multiple angles to this and that's why I think there's so much of the back and forth in the community of like LLM suck, LM are good, you know, like all this because frankly all of the perspectives are correct depending on where they're coming from. It's all relative viewpoints. In uh magic there's like this concept of like dual reality where you can have two people experience the same moment and be in the room see the same thing and tell very very different stories about what happened. Um, and I think you're seeing the same thing with the the vibe coding debate. Like someone's all of our stories are based off of our personal experiences and our personal context and like depending on what you're working on, the constraints under which you're working on your goals, you know, your your experiences with these things are going to be wild. >> And the time the time period I tried this stuff six months ago, 12 months ago, it wasn't there. It just wasn't good enough. And now I've tried it again and it's good for some things. And then, you know, some people are going to say, "Oh, exponential progress. This is going to be good at everything and we won't need people anymore." And I'm kind of like, I mean, maybe. I don't know. How could you possibly say that with any level of confidence? >> I saw a tweet yesterday. It's like, "My baby has doubled in size over the last like uh two months. Like, he is on track to weigh, you know, 14 tons." Uh, >> even well, Prim Primagen had like happy 26 months into six months from now. all coders will be out of a job. >> Yeah, it's just nobody knows, you know. No, like but it's it's really fascinating playing with it. >> I I still firmly believe that uh this is on the trajectory of like cobalt was going to replace all programmers, low code, no code, UML code generation was going to replace all programmers. And now what happens every level of tools that we build the level of complexity in the software increases by the amount that it enables you to. So I think that's probably where we're going. And I think the the crazy thing is is like that probably opens up huge number of opportunities for not just like the realm of like observability companies or error monitoring or whatever it is. there's probably a whole landscape of things that need to be created to deal with the future complexity of all of the the additional code and everything that we're creating. So, I don't know. I mean, I I I really don't see like a how this end this is not the end of history. Like, this is just like so clearly going to be like that next stage up um and keep a lot more people employed. I think >> it feels like the next level of abstraction. I'm just able to now think a level up in the same way that when I moved from, you know, C to to PHP or or to Ruby or something like that. Like there were just problems I didn't have to solve anymore and I was able to do more. Uh and that's what this feels like. >> Yeah, exactly. And I think a lot of companies are uh there's a lot of AI companies particularly like seed and series A round companies are deliberately staying small. I think it was like lovable has like 20 or 25 people at least you know recently and like you know some of these teams are really small and I think it's partially because they're just rediscovering you don't need these massive teams to to put your product out there like that was the whole ethos not with any LLMs back in like 2010 2011 hire insanely talented engineers and they will get a ton of stuff done they just happen to use different tools back then so like I feel like a lot of times when there's a lot of talk about like, oh, this startup only has 10 people and they're already at like some huge figure. It's like, well, and that's because of LLMs. Like, no, that's how it also was like 10 years ago without LLM. So, I don't really understand what the argument is there. So, we lived in Brooklyn. We got an ebike. A lot of people think that the ebike is all about doing the same things you would normally do on a bike, but just faster and easier. But that's not true. It's like because the the energy required is so much less, you're now able to do things that you fundamentally would never do before. And so now we can take the kids and go grocery shopping and bring home three bags of groceries. Like now we can go to the park that's 5 miles from our house and uh as opposed to only going to the park that's three blocks from our house. Um, and I think what we're going to see the same thing with coding is it's not like we're just going to build all of the same applications that we built before, but we're just going to do it faster and with fewer engineers. It's like now we will build pieces of software that it never would have made sense to build before. Like now we can build smaller pieces of software for smaller audiences because the activation energy is so much less. >> Yeah, I I I definitely think so. Um and and again it can open up I think that's a lot of what my message has been like for some people who operate under certain constraints this is wildly empowering >> and and you operate under incredibly tight time constraints as like a VP and as a parent of a young kid and the fact that you're still able to to ship code every day is is pretty awesome to see. So, >> I still get to do the thing that I love doing, which is shipping

Original Description

Matt Makai serves as VP of Developer Relations at DigitalOcean, and he ships side projects such as PlushCap.com and Full Stack Python. In this conversation he shows off his AI dev stack for side projects: tmux, vim, python, Claude Code, Ollama. How he ships daily
Watch on YouTube ↗ (saves to browser)
Sign in to unlock AI tutor explanation · ⚡30

Related Reads

📰
Why We Fine-Tuned a Local LLM for Personalized Language Learning
Learn how Wissero fine-tuned a local LLM for personalized language learning and why it matters for adaptive education
Medium · AI
📰
Why We Fine-Tuned a Local LLM for Personalized Language Learning
Learn how fine-tuning a local LLM can enhance personalized language learning on the Wissero platform
Medium · Machine Learning
📰
GPT-5.6 USA: Global Privacy & Competition Ripple
Understand the global implications of the US GPT-5.6 rollout on AI regulation and competition
Dev.to AI
📰
Integrating the OpenAI API the Right Way — Streaming, Rate-Limiting, and Prompt
Learn to integrate the OpenAI API effectively with streaming, rate-limiting, and prompt engineering for better performance and results
Dev.to · Ardhansu Das
Up next
5 Levels of AI Agents - From Simple LLM Calls to Multi-Agent Systems
Dave Ebbelaar (LLM Eng)
Watch →