Like Instagram but you’re only allowed to post 100 photos per year. The idea is to make it like a top 100 for your year with posts clearing after the new year.
You only have a 1 hour window to delete and repost photos without losing the slot, so the app forces you to be more thoughtful about what you post.
The app obviously very inspired by Bereal although I feel like the apps are very different in terms of use case and functionality. I tried to not copy Bereal’s architecture outright and come up with my own solutions. But a lot of times I ran into problems and explored every option until it pointed to only one option and it being the same as Bereal’s.
The app ended up taking much longer than I was expecting mainly due to external factors.
Why I made this app
The Bereal app has always been an inspiration to me because it’s a very simple functioning app that also touches the basics of what ever social app should have.
- Friend requests
- Posting photos
- A post feed
Additionally in 2023 when Bereal was very popular out of curriosity I did some reverse engineering of it’s API and learned quite a bit on how some things actually function. I figured a Bereal “Clone” is the perfect project to test your abilities and shouldn’t take too long. I mainly wanted to prove my frontend app abilities. The backend I don’t think is terrible I just don’t know how it will scale and have no expirence with that stuff. I chose GO over Typescript just because Bereal did and honestly I regret that. For the sake of getting an MVP done it added so much more time to the project. I had never used GO or GCP before but I could have gotten it out on Cloudflare with Typescript much easier.
What I Learned
- I prefer Kotlin over GO
- Lots of boilerplate made GO annoying to navigate and search code
- I could have built the backend in half the time in Typescript
- Kotlin feels like it takes short cuts where it makes sense
- Little features that seem trivial to implement can be very tricky
- Building a paging system that can pull from an offline cache, refresh the feed page by page and delete items only when nessasary
- Fan out on write feed but making sure it can efficiently be repaired if a post fails to distribute
- Keeping optimistic states as seamless as possible without ever getting out of sync
- Overthought every single feature realizing sometimes the easiest solution is the best
What did I actually do?
- Designed app screens in Figma (Although I am NOT a designer)
- Designed, built and engineered every part of the frontend and backend
- Fumbled around enough in GO to make something work
- Wrote the SQL queries
How did I use AI here?
I think AI is an extremely powerful tool and you should not be coding without it. But I also feel like you move too fast to learn a lot. I used AI to help troubleshoot most of the errors that were not immediately obvious. Not just asking for a solution but asking WHY the error was happening. Whenever I was unsure about a path I should take I would ask AI and not just blindly do what it said. But instead see how its answer compares to what I was leaning towards. If we disagreed I would follow up to try and understand WHY that. I would try not to ever tell it what I was thinking so it wouldn’t be influenced but simply try and get it to defend itself enough I could be confident in whichever choice I make. I did sometimes use agents mostly on the frontend when things got very repetitive and would take longer to type out the code than it does to even know exactly how to do it and to tell the AI how to exactly do it. I reviewed all the code the AI output just for the sake of understanding what is in my project and not blindly trusting everything it outputs which leads to massive debt in the future. Towards the end of the project when I felt pretty satisfied with it I asked Claude Fable 5 to do a deep review of the entire codebase (Front + Back) and find bugs, issues, and bad practices so I could fix them. It came back with a very large list. A lot of stuff I wouldn’t have noticed or would have popped up if enough people started using the app. Some things were also completely opinionated and wouldn’t have broken anything. I did then use claude to complete most of those items because it was largely just refactoring existing code into a slightly different shape and I was also on a bit of a tight schedule needing to start the Planting line project before it was too late. I still reviewed all the code but I rarely had to make changes.