robesris

robesris

Navia Dratp - a real-time multiplayer board game in Phoenix LiveView with a Claude-powered opponent that explains its reasoning

I built a free online version of Navia Dratp (yes, that’s the actual spelling), a long out of print strategy game by Bandai. Think chess + mana and deckbuilding. It’s Elixir + Phoenix LiveView.

Real-time multiplayer with no separate frontend. It’s all LiveView + PubSub, so each game is its own process with its own topic, both players’ sockets subscribe, and moves, clocks, and state changes broadcast without me having to build a websocket layer or a JS SPA. Drag-and-drop, live per-move clocks, spectators, and reconnect-survival all fall out of LiveView.

An LLM (Claude) opponent that’s structurally incapable of corrupting game state. This was an interesting experiment. The delicate part wasn’t getting Claude to play, it was making it safe. The model never emits a raw move; the backend generates the set of server-validated legal moves and the model only picks one, so a hallucinated or malformed response can’t do anything illegal. At worst it chooses badly, which it then explains to you in plain language after each move. One pitfall worth passing along: I first modeled the chosen-move field as an integer in the JSON schema, which invited the model to sample runaway integers. Making it a string (with tolerant parsing) fixed it. Schema number fields are a trap for LLM tool calls.

A development journal Claude kept the whole way, in its own voice — including some philosophical musings, and a game it lost to me while we were building it: Development Journal · Navia Dratp

A learn-to-play tutorial for a gentle introduction to the game: Lobby · Navia Dratp → Click “Learn to Play”

Play it (no install, runs in the browser, and is mobile-friendly):

If you’d rather play a person than the AI, sign up for the current tournament, The Isle of the Stones: The Isle of the Stones · Navia Dratp

First Post!

robesris

robesris

Sorry, there’s currently some crashing going on with the site, give me a few minutes and it should be stable again. :folded_hands:

Where Next?

Popular in Announcing Top

martinthenth
Hello everybody :wave: Recently, some of my colleagues talked about database ids and uuids and their problems, and I remembered the pain...
New
seancribbs
Today I released a new dialyzer Mix task as the dialyzex package! At the time we started writing this task, the existing dialyzer integra...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52341 488
New
Crowdhailer
Experimenting with this code. OK.try do user <- fetch_user(1) cart <- fetch_cart(1) order = checkout(cart, user) save_orde...
New
Jskalc
Hi! Today, after a couple weeks of development I’ve released v0.1 of LiveVue. It’s a seamless integration of Vue and Phoenix LiveView, i...
New
hpopp
After just over two years in development, this latest version of Pigeon is what I finally consider done in regards to my original vision ...
New
kip
Image is an image processing library for Elixir. It is based upon the fabulous vix library that provides a libvips wrapper for Elixir. I...
622 18474 194
New
Crowdhailer
Raxx is an alternative to Plug and is inspired by projects such as Rack(Ruby) and Ring(Clojure). 1.0-rc.1 is now available. To use it re...
New
nikokozak
Hello all, I’ve been working on Svonix - a library for quickly integrating Svelte components into Phoenix views. It’s a much-needed succ...
New
mattludwigs
Grizzly is a library for working with Z-Wave devices. Z-Wave is a low-frequency radio protocol for controlling smart home devices on a me...
New

Other popular topics Top

siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 41539 114
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 53690 245
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
hariharasudhan94
Lets say i have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => "XXX...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement