Skip to content
Ad Atra Cards Page
Ad Atra Advanced Search
Ad Atra Rules Page

Ad Atra

ClojureRubyAWS

Personal Vendetta's website needed dynamic features it couldn't support. The game's auteur and I rewrote the whole thing in Clojure and built out the interactive experiences he'd been designing.

  • Interactive rules page with a reactive table of contents, expandable sidebar panels, and inline game icons
  • Advanced search with multi-faceted filters and full-text indexing
  • All card and set content driven by a single configuration, so the designer can update content without touching templates
  • Rewrote the site from Ruby templates to Clojure(Script)

Full Story

An independent game designer created a card game called Personal Vendetta — a dark, beautifully illustrated strategy game where clones wage war against their own duplicates, each one driven by revenge and the need to be the only one worthy to exist. He'd built a website for it largely by hand: HTML templates rendered with Ruby. The art was striking, the UX vision was sharp, but the site couldn't keep up with the game. Every time he added a card or tweaked a set description, he was hand-editing pages. He needed the site to work for him, not against him.

The first thing I did was introduce a JSON configuration file that the Ruby code could read at runtime. Cards, sets, and a few rich-text replacements all lived in one place now. Update the config, and the site updates with it. That solved the immediate pain, but as we talked through what he really wanted — advanced search filtering, an interactive rules page, inline game symbols rendered dynamically in card descriptions — it became clear that the Ruby project wasn't going to cut it long-term.

So we rewrote the whole thing in Clojure and ClojureScript. The JSON configurations became source-level code, which meant the card and set data compiled directly into the application rather than being loaded at runtime. It was faster, more reliable, and made the data a first-class part of the codebase.

With the foundation in place, the real feature work began. The advanced search allowed players to filter through nearly a hundred cards across a range of attributes, from basic traits like name and cost to game-specific symbols and mechanics. The search needed to feel instant and intuitive whether someone was on a laptop or scrolling through their phone, which is where most of the player base would be.

The rules page was the most collaborative piece. The designer had envisioned an ambitious layout: a table of contents that highlights your current section as you read, expandable sidebar panels for supplementary rules, and inline game icons and styled keywords. My job was to take that design and make it real. Interactive, responsive, and faithful to his vision. The result is a page that reads like a living rulebook rather than a wall of text.

Personal Vendetta was the designer's vision from the start — the game, the art, the UX. My role was to bring that vision to life in code, turning an existing website into something players could actually explore — searching through cards, learning the rules interactively, and getting pulled into the world he created.