More from Build In Public Newsletter
Meet Lasso, an AI-driven sales prospecting tool that'll help you find the B2B prospects your sales team is overlooking.
Meet Scrintal, a new canvas that's like a playground for your mind.
Full story on my latest role at Paddle, the new AI program, and what it means for you
More in indiehacker
Beehiiv vs ConvertKit is a fierce clash of two newsletter software companies. I'll go over differences on pricing, features and lots more.
Looking over last year, and a first incident for 2025.
My router runs OPNSense Business. I like having an open-source router, but I have a few gripes with it. My biggest issue is that, by default, OPNsense can’t resolve hostnames on my local network. Why can’t OPNsense resolve local hostnames? For every other router I’ve owned in my life, if there’s a computer on my network named foo123 and I run ping foo123, then everything just works, and my computer successfully pings foo123.
Jesse Schoberg has an enviable life as a founder working from Thailand. He enjoys a great lifestyle at a fraction of the price back in the US. I chatted to him about growing his DropInBlog business into a SaaS success story. Why did you become a founder? My brain doesn&
There’s an excellent Go testing pattern that too few people know. I can teach it to you in 30 seconds. Instead of writing Go tests like this: // The common, unrefined way. username := GetUser() if username != "dummyUser" { t.Errorf("unexpected username: got %s, want: %s", username, "dummyUser") } Write your tests like this, beginning each assertion with if got, want :=: // The underused, elegant way. if got, want := GetUser(), "dummyUser"; got != want { t.Errorf("username=%s, want=%s", got, want) } The if got, want :=: pattern works even better in table-driven tests. Here’s an example from my library for parsing social media handles: