I'm thrilled about actively working on side projects. I've only just begun, and I'm already enjoying it - the good, the bad, and the frontend work.
I created OwlFlight because I wanted to push beyond backend Rails development and explore areas I've had less experience with, especially devops and frontend design. I also wanted a place to share my projects and ideas, and I thought it would be fun.
One of the things I love about tech is that the more you learn, the more you realize how little you actually know. That's been motivating for me. Building this app pushed me well outside my usual comfort zone, from designing interfaces to deploying and managing a live application, and I've greatly enjoyed the process so far.
So, what have I learned?
DevOps
I'm not entirely sure where to start due to the sheer amount of new things I've learned. I started with a Rails app I developed on my local machine, and now I have a deployed app using Puma, Nginx, PostgreSQL, systemd services, HTTPS, and automated CI/CD.
Why not use Docker? I intend to for my next project, but, for my first one, I wanted to get my hands dirty with some of the base devops components first, and I have really enjoyed it. Setting up automation has been my favorite part, like automated deploys through GitHub Actions (which are really cool, btw) and automatic server restarts with systemd services.
At one point, I accidentally deployed my app with a bug that was causing it to crash immediately on boot. Because of the systemd service, it would then restart, crash, restart, crash, etc. After SSHing into the server and checking the systemctl logs, I was able to see the issue - the app was looking for new environment variables I had referenced in the code, but it couldn't find them. I forgot to add those envars in production. 😅 It was an easy enough fix, but I did feel a bit silly afterwards. I've had quite a few educational moments like that while working on this app.
Frontend
I've struggled with frontend development in the past. Getting a button or a text field aligned just so alongside another component always felt more like a necessary chore. Designing and building the frontend for OwlFlight - while still feeling chore-esque at times - has gradually become surprisingly enjoyable.
The early stages were rough. I was trying to learn Tailwind while also figuring out the overall design of the app at the same time. I think my experience can be summed up in a sentence: It's difficult until you learn and adapt to it, then it starts becoming fun. Yup, I, a backend developer, said it: I enjoy frontend development.
I found myself especially enjoying working with animations. My favorite so far is likely the blog post/project cards, like the one you (probably) clicked to open this post. It's impressive to see everything CSS and Tailwind can do - visually - from a few lines of code.
Designing page layouts has been a fun challenge, too. It has made me consider what a user would want and expect when using my app. I initially wasn't sure what to put on the Home page, for example, so I thought about what would be the most useful for a user, ultimately deciding on a kind of "snapshot" of my app. That led to me creating tasks for projects - something I never originally intended, but thought it would be a good addition to the Home page.
Frontend development has surprised me, and I've enjoyed growing more comfortable with it. To improve, I'll continue using Tailwind, wade deeper into CSS waters, and also look into commonly used design patterns.
Backend
Backend development is the area I'm most comfortable with professionally, so working on the Rails side of OwlFlight felt familiar compared to the frontend and devops work.
Most of my previous experience involved APIs, and while I've considered building one for OwlFlight, there just hasn't been much need for it. The app is fairly straightforward, and building an admin dashboard made more sense for managing content than introducing an API layer solely for CRUD operations.
What I'm most interested in improving moving forward is architecture. Larger applications can become incredibly complex, and I'd love to explore more patterns and strategies around structuring and scaling them. OwlFlight is intentionally fairly small, but future projects may give me a better opportunity to dive deeper into that side of backend engineering.
Where do I go from here?
I want to finish OwlFlight and then move on to another project. I have quite a few ideas rattling around upstairs, it's just a matter of choosing one. I know I want to use Docker, Kamal, and potentially Kubernetes. I'd also like to work with a more complex app architecture (as mentioned).
No matter what I build next, and onward, I want each project to push me into learning something new. Every app will be another opportunity to experiment, improve, and continue expanding my skill set. I also plan for each project to live under its own owlflight.dev subdomain, gradually turning OwlFlight into a collection of projects and experiences rather than just a single app.
I'm excited to keep learning. So far, this project has already pushed me well outside my comfort zone in the best possible way, and I'm looking forward to seeing what else I learn - and what other strange little apps I end up creating along the way.