Ruby on RailsWeb DevelopmentAISide ProjectMusic AppCapistrano

Building My Music Web App with Rails

A personal story about building a music web app with Ruby on Rails — learning through coding, improving UX, using AI to refactor code, and deploying manually with Capistrano and Nginx.

By FadlyOctober 19, 2025

Building My Music Web App with Rails 🎧

Building My Music Web App with Rails

This project started as a small experiment to learn more about Ruby on Rails and build something useful for myself and a few friends.
The goal was simple — to have a place where we could upload our unreleased songs and keep them as an archive instead of letting them stay buried in old folders.


How It Started

At first, I just wanted to practice Rails.
But while uploading my own music to an aggregator, I noticed how their upload process worked — lots of forms, fields, and details to fill out.

It made me think:

"Maybe I can make this process simpler and easier to use."

That's when I started building a multi-step upload flow, where artists could upload their release step by step — from entering details to categorizing it as a Single, EP, Album, or Compilation.


The Multi-Step Wizard Challenge

This was the hardest part of the project.
Managing state between multiple steps took a lot of time and debugging.
Sometimes it felt repetitive and tiring, but once it worked, it made the user experience much smoother.

It's not perfect yet, but I'm happy with how it turned out.
The goal was to make something that feels natural for musicians, and I think it's getting close.


Keeping the Code Clean

As the app grew, the codebase started to get big and messy.
To make it easier to manage, I used Windsurf and Cursor and worked with AI to help refactor my code using:

  • DRY (Don't Repeat Yourself)
  • KISS (Keep It Simple, Stupid)
  • Separation of Concerns

The results were good — the code became more readable and easier to maintain.
But I still reviewed every change manually. AI helps, but it doesn't replace human review.


Writing Simple PRDs

Before building new features, I started writing short PRDs (Product Requirement Documents).
It helped me organize ideas — describing user stories, expected inputs, outputs, and events.

I asked AI to review and refine them, which saved time.
Sometimes the AI added things I didn't expect, so I learned to give clear limits to keep everything aligned with my original idea.


Testing and Validation

Even with AI's help, testing was still on me.
For big features like the wizard, I used RSpec to make sure all the cases were covered.
It gave me confidence that things wouldn't break after every small change.


Deployment Journey 🚀

When the app was ready to go live, I first tried Heroku and Railway.
They worked, but I wanted to learn more about how deployment actually works behind the scenes.

So I decided to deploy manually using a VPS.
I set up Ubuntu, configured Nginx, and used Capistrano for deployment.
Whenever something broke, I asked AI for help to debug it.

After several retries, it finally worked.
You can check it out here: 👉 skenaria.my.id


What I Learned

Building this app taught me a lot more than just Rails syntax.
I learned how to think like both a developer and a designer, and how to plan small features like a project manager.

It's not always fun — there were long nights of debugging and refactoring — but the satisfaction of seeing it run smoothly in production made it worth it.


Final Thoughts

Building this app with AI was a good learning experience.
It's not always smooth — sometimes exciting, sometimes frustrating — but every small win keeps you going.

Working solo means handling everything from code to UX and deployment.
It's tiring, but seeing it live feels rewarding.

Thanks for reading my story.
If you've ever built something just to learn and explore, I'd love to hear about your experience too.


🔗 Links


FAQ

How long did it take to build the music app?

The core functionality took about 2-3 months of part-time development, with the multi-step wizard being the most time-consuming feature to implement and debug.

Why choose Rails over other frameworks for this project?

Rails' conventions and built-in features like ActiveStorage, Devise, and form helpers made rapid prototyping much faster. The ecosystem and community support were also important factors.

What was the biggest challenge in the multi-step wizard?

Managing state between steps and ensuring data persistence when users navigate back and forth. Rails' session management helped, but debugging edge cases took significant time.

How did AI help with the development process?

AI was particularly useful for code refactoring, explaining Rails conventions, and helping debug deployment issues. However, manual review and testing were still essential for quality assurance.

Is manual VPS deployment worth the complexity?

For learning purposes, yes. It provides deeper understanding of how web applications work in production. For production apps, managed platforms like Heroku or Railway might be more practical.


Tags: #rails #webdev #ai #music #deployment #capistrano #nginx #sideproject