Update to Shelf-Dockered
Late last year, I vibe-coded an existing project called 'Shelf' to containerise it after the main-branch didn't work well in my environment despite me RTFM. Shelf is a little favourite project that I've been following since its first release cause it was a way of hosting and showing off a little bit of yourself in this world of platforms.
- New Repo: https://github.com/mrtimothyduong/shelf-dockered
- Archived Repo: https://github.com/mrtimothyduong/shelf-docker
- Demo Site: https://shelf.timothyduong.me/

The original vibe-coded project had a major flaw. I translated all variables and hardcoded them into the code. This would make refactoring to docker container a complex process due to the amount of code that needed to be done each time @barrowclift released a new version.
Why did I make such a rookie error? Well because I had little to no idea what I was doing and what were the options. Most AI minimalists would say that is expected. I trusted the approach after several planning sessions with Claude Code and of course 2-3 months later a new release came from main-branch and I didn't want to go through the pain/token-burning of it all again.
What did I improve this time around?
- There's a start-up script that takes the environment variables from the docker-compose .YAML and injects upon container start
- I created a docker repo buildx script for
AMD64andARM64this time around. My first build / deployment wasARM64only. 🤦♂️ - The first release took weeks to deploy and troubleshoot. Second release (the refactor) took 2-3 days. The next release after that took minutes to merge.
What lessons are there from this?
- Keep it simple, stupid! Keeping it small and as simple as possible made this project so much more fun and manageable.
- Vibe-coding is a great spring-box to learn so many concepts. Just put time aside to learn from the mistakes, go through the code.
- Planning planning planning. Plan without AI. Then plan with AI. Be descriptive. Claude Code's course is a good starter.