I Spent 5 Weeks Building an Admin Interface Because Avo Made Me Mad

Sometimes the best code comes from pure frustration. This is the story of how I spent 5 weeks building my own admin interface from scratch, and why it was the best decision I made all year.

The Problem

I was using Avo for my Rails admin interface. It worked… mostly. But every time I wanted to customize something, I hit a wall. The DSL was clever, but it got in my way. The abstractions were neat, but they made simple things complicated.

The Decision

After watching yet another DHH rant about software bloat, something clicked. Why was I fighting with a tool that was supposed to help me? Why not just build exactly what I needed?

So I did.

The Journey

Week 1: Set up ViewComponent architecture. Started with the basics - tables, forms, buttons.

Week 2: Built the first 10 components. Stat cards, filters, search bars. Everything glowing green.

Week 3: Added the terminal aesthetic. Because why not? If I’m building my own tools, they should make me smile.

Week 4: Navigation, authentication, permissions. The boring but necessary stuff.

Week 5: Polish. Animations. That scan line that serves no purpose. The details that spark joy.

The Result

43 components. All custom. All exactly what I needed. And you know what? I started laughing while coding again.

What I Learned

  1. Defaults are just suggestions - Don’t accept them if they don’t fit
  2. Build for joy - Your tools should make you happy to use them
  3. Own your stack - Understanding every line of code is liberating
  4. Take your time - 5 weeks felt long, but the result is mine

The Code

The admin interface uses:

  • Rails 7.1 with ViewComponent
  • Tailwind CSS for styling
  • Hotwire for interactivity
  • Zero JavaScript frameworks

Every component is a Ruby class. Every style is carefully crafted. Every interaction is intentional.

Would I Do It Again?

Absolutely. In fact, I already am. Next up: replacing my markdown editor with something that actually works the way I think.


This post is tagged with COMMIT #620 because that’s how many commits it took to get here. Every single one was worth it.