Over the past four years, I’ve set up three monorepos for different companies as contract work. The experience was positive, but it’s essential to know your tools.
Since our monorepos were used exclusively for frontend applications, we could rely entirely on the JavaScript/TypeScript ecosystem, which kept things manageable.
What I learned is that a good monorepo often behaves like a “polyrepo in disguise.” Each project within it can be developed, hosted, and even deployed independently, yet they all coexist in the same codebase. The key benefit: all projects can share code (like UI components) to ensure a consistent look and feel across the entire product suite.
If you're looking for a more practical guide, check out [0].
Hey Jason, just saw your email and wanted to reply here.
Unfortunately, I don’t think the postcards really worked. We sent them to various regions across Germany, but my guess is they ended up in a pile at the campground reception and never reached the actual owners.
That said, we manually scraped around 500 campgrounds near us, designed postcards that highlighted CloudCamping’s key selling points, and sent them out using a different mailing service. Since we didn’t hear back from anyone specifically mentioning the postcards, I assume they didn’t convince anyone in the end.
Still, it was a fun experiment, and who knows, it might work better in a different context!
Thanks for your feedback and for validating the pricing model! We see it the same way.
Most property management systems charge campground owners several thousand dollars upfront, before they can even try the software. That’s where our approach stands out: we offer a low barrier to entry paired with a modern user experience. Many competitors started over 15 years ago, and you can tell by how outdated their products feel.
Taking just a 1% cut can pay off if it helps capture more market share, this was my thinking too. We’re not quite there yet, as not all of the 250 campgrounds on our platform have adopted online payments. Still, it’s both exciting and a bit terrifying to see some of them already processing over $250,000 in annual bookings through our system.
I’ve had a few sleepless nights, so I wouldn’t necessarily recommend building a marketplace product to everyone. Once real money flows through your platform at that scale, things get intense fast.
Good for you that it was just a coding assignment! I naively jumped into building this SaaS without realizing how many features a modern property management system actually needs :)
I’d say it was mostly the general 2014 vibe. But yes, I listened to Klangkarussell and many other German producers. I was probably most influenced by Alle Farben, who was known for his mixtapes before he started producing his own tracks (which I wasn’t really a fan of). But I also showcased a darker side in some of my mixtapes (like "Der schwerste Gang einer Ente" where I used artists like Burial).
I saw myself more as a consumer than a producer. I mainly created mixtapes because I was constantly discovering and consuming new music. When I had the chance to play at a club or an open-air event (I tried it once), I quickly realized I wasn’t too comfortable performing in front of an audience :)
Around that time, I had just started learning to code and built my first little automations to help me discover even more music on SoundCloud. So I noticed this was another (more lucrative with the similar level of passion) career path where I didn't had to be in front of an audience.
I'm not sure if they’ve added any monetization features over the years. Back then, it was arguably the best platform for getting discovered as a producer or DJ. When I stopped making music, I was getting a lot of requests to play at clubs across Germany and Europe.
At the time, I preferred to stay anonymous, so I never made the leap into the professional or public scene. Still, I was in touch with some producers early in their careers on SoundCloud when they had 1000 followers, like Robin Schulz and Felix Jaehn, if those names ring a bell.
So yes, I’d say it was (is?) definitely a launchpad for artists. But as far as I know, there was never a real way to monetize on the platform.
Unfortunately, when I stopped paying for the Pro version, they removed almost all of my music. Only 5 mixes are still up :')
Not sure if my "products" compare to yours, but I’ve seen some success with a few of them over the years, maybe there are some takeaways (or pitfalls to avoid) for you:
CloudCamping (PMS): 250+ Businesses, 2023
- Positioned as more modern, more accessible, and more affordable than the competition
- Limited competition due to the complexity of the product
- Personally visited campgrounds to demo the product
- Sent physical postcards (old school!) to campgrounds with product updates and announcements
- Due to limited competition, it is now ranking very high in the German marked on SEO
The Road to React & The Road to Next: 1000+ Users, 2024
- Gave away The Road to React for free in exchange for an email, grew the mailing list this way
- Benefited from early timing (luck!), it was the first book on the topic
- Initial version wasn’t polished, but I kept iterating and improving it each year
- In 2025, released the paid course The Road to Next to my audience, now over 1,000 students enrolled
SoundCloud (DJ/Producing as “Schlenker mit Turnbeutel”)
- Active from 2010–2015 as a hobby, grew to 10,000+ followers (a lot for the time)
- SoundCloud allowed 1,000 direct messages per track
- Carefully selected 1,000 high-engagement listeners in my music niche and personally messaged them to check out new tracks
So yeah, a mix of timing/luck, outreach that does not scale, being better than the competition I'd say.
I have used RSCs only in Next.js, but to answer your questions:
1./2.: You can update it optimistically. [0]
3.: Depends on the framework's implementation. In Next.js, you'd invalidate the cache. [1][2]
4.: In the case of the like button, it would be a "form button" [3] which would have different ways [4] to show a pending state. It can be done with useFormStatus, useTransition or useActionState depending on your other needs in this component.
5.: You block the double request with useTransition [5] to disable the button.
6.: In Next, you would invalidate the cache and would see your like and the like of the other user.
It's not really the scope of the article, but what about adding a client directive [0] and dropping in your event handler? Just like that, you're back in a familiar CSR React world, like in the "old" days.
Since our monorepos were used exclusively for frontend applications, we could rely entirely on the JavaScript/TypeScript ecosystem, which kept things manageable.
What I learned is that a good monorepo often behaves like a “polyrepo in disguise.” Each project within it can be developed, hosted, and even deployed independently, yet they all coexist in the same codebase. The key benefit: all projects can share code (like UI components) to ensure a consistent look and feel across the entire product suite.
If you're looking for a more practical guide, check out [0].
[0] https://www.robinwieruch.de/javascript-monorepos/