A New Year of Indie Hacking

In 2022 I'll be launching a bunch of stuff. I'll share my designs, architecture, business plans, and takeaways throughout the journey. Let's jump in.
The first app of the year is photoRake. photoRake is a web app that migrates your iCloud photos and videos. It does so by copying your media to S3, and deleting it from iCloud upon successful migration.
The idea came from a recurring pain-point. I shoot tons of photos and video on my iPhone. I am subscribed to a 200GB iCloud storage plan which fills up every year.
I've been using a script to copy my photos from iCloud to a hard drive. I've noticed that there are plenty of people who would enjoy something like this.



Architecture
I expected to build photoRake with Rails, until I stumbled on Blitz.js.
Blitz's pitch is simple: Rails for Next.js. The community and the docs were robust enough, so I decided to give it a shot. I'm glad I did.
While I will admit there is a learning curve, if you are familiar with Next and TS you should be fine. Most of the learning was spent on the following:
- Learning Blitz's dataflow. TLDR - mutation resolvers process your "writes", query resolvers process your "reads" (both run strictly on the server).
- Learning Prisma , a TypeScript powered ORM that is def worth checking out.
- Understanding Auth. Auth comes out of the box for you, but it helps to read up on it to understand how it works.
- Blitz's "Data Layer". Blitz lets you run backend code in your front end, and it's pretty amazing. Under the hood it spins up a gRPC server, which your frontend automatically plugs in to. This is what enables the "full-stack" experience. Blitz's killer feature IMO, but it took some getting used to.
On top of this, I needed to interact with iCloud. I turned my script into a backend service. Worker queues batch migrate your iCloud photos/videos to S3. I will keep this side of implementation details nebulous for now, but if you're curious DM me and I'll give you the deets.
Business Plan
Looking back, I am frustrated with how ignorant I was to marketing and sales. This isn't my first rodeo, and yet I fell into the classic trap of ignoring distribution.
I must admit, I can't help but laugh a little bit as I write this part. I had no business plan when jumping into photoRake. I thought to myself - "*If I build something that worked for me, I have succeeded. It would be nice if others wanted to use it. If no one does, thats alright too."
With this philosophy, I had no reason to think through pricing & distribution. I would "figure it out", and move on to something else next month.
Once I completed the web app, I had one week left before the end of the month to prep some marketing and do some sales. For the whole week I faced the difficult truth that sales & marketing are at least 50% of the work.
My target audience is people stuck with a full iCloud Storage. I decided to write content that teaches them how iCloud works as well as how to clean it up.
As a complete marketing noob, I gained tons of content marketing knowledge from ahrefs. With it, I created an extensive tutorial (1200+ words) showing you how to clean up your photos & videos on iCloud with photoRake.
I would later find this approach to be a bad idea, as you'll see below
Learnings
Do things that don't scale
Content marketing takes much longer to ROI than I expected. If you're a pro, your ROI will be felt within 2-6 months, assuming you knock it out of the park. I'm no pro, nor can I afford to be. Building products and finding customers is plenty enough to do. I enjoyed building some marketing content muscles, but I don't think I'll work on this until I've got some customers in the door first. "Do things that don't scale" hit me hard on this one.
Distribute, Distribute, Distribute
The biggest determinant of traction is successful distribution. I under-focused on distribution, which is why the last week of this month was painful. Moving forward I'll start with distribution. I'd like to also split my time between distribution and engineering.
Monoliths & Duct Tape FTW
The last realization was technical: micro-services are a very bad idea when you're an indie hacker taking small bets.
I started with a monolithic app. I then realized splitting up my app into micro-services could help deter catastrophic dataloss. I began the process of splitting up my app into two, only to waste a whole day getting cross-app communication up and running.
I cut my losses and came to a rather simple yet powerful fix. I wont go into the details, but with 50 lines of code I was able to avoid micro-services altogether. A very worthwhile trade, and one I will default to next time.
Conclusion
My biggest takeaway from building v1 of photoRake is :
If you're talking to customers, you are building a business.
— seb (@_sbmsr) January 30, 2022
If you're not talking to customers, you are building a side project.
I love side projects, don't get me wrong. That said, my goal is to build a successful business online. photoRake started as a side project out of the box, which made it difficult to monetize.
Regardless, I'm proud of photoRake and I know that i'll be using it for years to come. The knowledge I've gained from building it will serve me well. Lmk what you think in my DMs, and thanks for reading. I look forward to shipping something new soon.