More from Scott DeLong
Using the same strategies I've used to build millions of subscribers across multiple newsletters, you can do it too. The post How To Build A Profitable Newsletter In 2024 appeared first on Scott DeLong.
With the rise of artificial intelligence and content being mostly commodotized, what's the future look like for websites? Let's predict it. The post My Predictions For The Future Of Content Sites (And How To Navigate Them) appeared first on Scott DeLong.
It's been fun (kinda). Here's where it ended up and where I'm going next. The post Weeks 48-52: My Final Update appeared first on Scott DeLong.
As this challenge comes to an end, it feels good to be at a point where I'm about as immune as possible to looming threats The post Weeks 44-47: The end is near appeared first on Scott DeLong.
The second to the last update is focused and short. I have just one goal: convert subscribers into paying customers. The post Weeks 40-43: A $5k Month and Billion Dollar Idea appeared first on Scott DeLong.
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.
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: