I did the first step of a challenge I set out to face in a previous post! As a quick summary, I planned to do the following to learn Ruby on Rails:

  • Complete a project within 1 month (The thing I did)
  • Complete another project within 2 weeks (To begin June 30th 2025)
  • Complete another within 1 week (Start day TBD)
  • Complete a final project within 2 days (Start day TBD)

For this first month, I kept it simple and made a “blogging” social app called Bloggington. The goal was not usefulness or complexity, but rather just implementing something straightforward to flush out the garbage that comes with learning something new. And oh my, was garbage flushed.

This project began on May 14th 2025. I stopped all work on the project on June 15th, 2025. You might find that this was technically a month-and-a-day project. That would in fact be correct. The reason for that is because I can’t count.

I published this server on the internet and shared it with people I know in my public Discord. It was surprisingly fun. For now, I am keeping my web server locked out from the public because image posting is a sensitive thing that I don’t intend to deal with currently. Anyone who previously made an account on it still has access.

The web application is open source though, so anyone is free to pull it and run it on their own!

For all the perfectionists out there

Like many, I’m historically bad when it comes to sticking to projects. Getting this first project out has been super gratifying, especially when I was finally able to deploy it and simply see it out there on the internet!

Separating something I made from how I perceive my value as a person is a skill I am currently learning. This project made it a lot easier, especially when looking at it from an experimental point of view, and with an actual deadline.

Yes, it looks terrible and that’s totally fine. The fact that I shipped an actual web app to the internet and had the courage to share it is what’s great! Now I can iterate on whatever information I gather.

My experience and the time I spent learning

I am a software engineer who specializes in QA automation using NodeJS. I’ve been doing that for roughly 7 years. I have basic knowledge of Python (having created only a couple things with Django and Flask). Both Ruby and Rails are brand new to me, but I do have some previous knowledge of model-view-controller frameworks.

I know the basics of html/css. I used Bootstrap for the frontend, but I can definitely see an argument that it probably wasn’t necessary. I do plan to improve my ability to use raw html/css at some point but that may be a little while.

For the purposes of this project, I spent a week on the Getting Started with Rails guide and then spent the aforementioned single month working on Bloggington. That is all of my exposure to Ruby and Rails.

How it went

Much of the first 2 and a half weeks was getting acquainted with the core navigation of a Rails application (The initial stretch). This includes learning to leverage the usual suspects in a model-view-controller framework. The next 1.5 weeks (The big hump) had a huge spike in difficulty which slowed me down a lot due to learning the Turbo framework, and then there was a decent uptick in productivity a few days before the end (The weirdly productive scramble).

The above is my commit graph. You’ll notice that the week of June 9th has a huge number of commits. This is due to 2 things:

  • There was a ton of experimentation during the big hump that I eventually got working; as a result, I committed a ton of stuff within a short time period.
  • Some of that week also includes the weirdly productive scramble at the end of the project.

Overall though, I was able to consistently work on the project almost daily.

The initial stretch (2.5 weeks)

This was definitely just picking up the fundamentals and understanding how they work. I didn’t generate any scaffolds using the command line, but I did generate some models. This meant that I had a very thin skeleton to work with and I had to manually wire together a lot of the simple CRUD operations around blog posts and users.

I have reason to believe that in my next project, this will be drastically shortened. This is made apparent by how much easier it was to make changes to the project during the weirdly productive scramble.

The big hump (1.5 weeks)

It all started when I wanted to add comments to posts. I even had the gall to desire comment threads. This little maneuver cost me a week, and I didn’t get to implement comment threads. Just top-level comments. I did gain some sweet knowledge though.

When I made the sweet-summer-child attempt at throwing a bunch of forms onto a comments page using a for-loop, I quickly realized that the page had no idea what to do with the forms. And turns out, neither did I. After fighting with form submissions for a good while and some looking around, I was reminded of Turbo’s existence.

You see, Turbo is briefly mentioned in the Rails Guide, but it’s definitely not a core component in the learning material itself. When I saw it alongside Stimulus I made the assumption that they were libraries just kinda used by Ruby behind the scenes with no need of your interference. That is in fact incorrect.

While Turbo is used behind the scenes in a lot of cases, a lot of it is definitely used by you, the developer.

After spending multiple days trying to understand Turbo Frames and Turbo Streams, it slowly began to make sense. Many times, I would have an assumption of how it worked, and then find out I was dead wrong and I was set back quite a few places. Even when I began to truly understand them, I found that I was still struggling to grasp why they are useful.

Basically, they make it so that it’s easy to turn a standard multi-page web app into one that updates on the fly like a single-page app. This can be done in a hybrid fashion, where some stuff is dynamic and other things will take you to a dedicated page. Or, you can theoretically use it to create a full on single page web application.

By the end of this phase, I was able to get Turbo frames and Streams working, where you can add/edit posts and comments without needing to go to a separate page. I did not have time for implementing nested comments though, as time was running short and I did not want to open another potential can of words as time was running out.

The weirdly productive scramble (0.5 weeks)

So once I knew enough about Turbo related things to survive and understand why it exists, the last few days were a lot easier. Part of it had to do with the relative ease that CRUD operations and model restraints are compared to Turbo stuff.

Most of this period, I picked up some things here and there without too much difficulty. I implemented profile pictures, learned about model helpers, used functions for validating models, and accounted for empty comments/blog posts. I also made some attempt at making the web application look visually parsable, though to a very limited degree.

The web app

This only shows some of the features of the web app. You can also register/login, edit posts, add/edit your profile picture, and look at people’s profiles where all of their blog posts are located. Ideally, less time will be spent on figuring things out in my next project, and perhaps more time can be spent polishing it.

Additional things

  • Any edits I make to the repository in the future will be on branches outside of main, to maintain the historical integrity of this fine (and crumbling) monument.
  • The repository had 56 commits total.
  • Roughly 60 hours were spent on the project.
  • There are no automated tests, aside from what was auto-generated by Rails.

My predictions and plans for the two-week project

  • Wiring up models, views, and controllers will take considerably less time.
  • Using Turbo Frames and Streams is a bit more natural now, and will take less time.
  • I know nothing about Stimulus yet, though I hope a situation arises where I can learn it and feel good about it. If it does occur, it may eat up some time.
  • I plan to use test automation for the next project, even if it is a little slim. I may do a little bit of reading and practice using automation on Bloggington (on a separate branch of course) before starting the 2-week project.
  • The actual project itself is unknown at the time of writing. I do have some ideas though.

And that’s it!

If you made it this far, then thanks for reading! While the process of making this first web app was definitely tough, it was absolutely worth it after I finally got it online.

dfebs

By dfebs