Katara has evolved a lot since we first launched in September 2025. We were a complete Ruby on rails shop from frontend to back but few things have changed since. This article will take you through how we have been building katara. We choose rails because we are a Ruby bunch. Ruby is just so nice to write and read. Rails has really grown as a framework, so many libraries (gems) that help small teams to build and validate an idea.
Let's first take you back to how we built things at first launch. Hotwire on the frontend with rails erb (partials all the way). Why you ask? Well, we loved the simplicity of having to write Ruby on the frontend, everything is so well gelled together. Everything else around development was Rails centered. Kamal to deploy to our server postgres for our database and we dockerized our app before we could run it.
How we are building katara now
We are still using rails, we may never move away from it. All of katara's business logic, database interactions and routing are still handled with rails. What changed then? Our frontend did, we moved to inertia with svelte 5 as our new frontend framework. Svelte felt like a breath of fresh air for our frontend. No clunky javascript wiring with erb files, we can move to component-based developement as parts of the system became complex (On the frontend mostly). Inertia reduced the complexity of building a separate API service for our svelte frontend. We can write everything in rails included page rendering and just render componenets with svelte.
We are serializing data with the OJ Serializer gem which is built on top of the OJ gem. We chose not to use the default ActiveModel::Serializer. As Katara grows, we wanted a serialization approach that gives us more control over how data is prepared and passed to the frontend, while keeping serialization lightweight.
What didn't change
Well as we moved to inertia, certain things stayed the same (mostly everything else stayed the same).
We still use Docker to containerize the application and kamal for deployment which is triggered with our GitHub Actions pipeline with PostgresSQL as our db of choice and everything is fully running entirely on Digital Ocean droplet and managed PostgreSQL database.
How we ship katara
Our CI/CD runs on GitHub Actions. It was simple to set up, easy to understand, and gives us everything we need to get our deployments running.
Every push to main builds our Docker image and deploys it with Kamal, so shipping to production is as straightforward as merging a pull request.
Summary
- Ruby on Rails — backend, business logic, routing
- Svelte 5 — frontend
- Inertia Rails — Rails/Svelte bridge
- OJ Serializer + OJ — serialization
- PostgreSQL — database
- Docker — containerization
- Kamal — deployment
- DigitalOcean — infrastructure
- GitHub Actions — CI/CD