Inspiration
Nearly everyone knows Clash Royale but we wanted a version where creativity beats memorizing cards, and your army is limited only by what you can think of on the spot. Now that speech is transcribed almost instantly, images generate in seconds and a language model can balance a troop mid-match, that's possible. And if you can create a troop just by describing it, why touch a keyboard at all?
As for the theme, Isaac wrote lore about two kingdoms at war over fire and ice (the winner glows warm and gold, the loser has burned through its resources and is freezing). That's where things like embers (our currency) and frost come from.
The name Artifice means skillful creation, with ice in it. We loved that it combined both our creative and artistic inspirations for the game.
What it does
Artifice is a real-time, two-player arena battler: defend three towers across a river in 60-second matches. Unlike Clash Royale, there are no cards. Your deck is whatever you can describe.
An open-ended army
Over the weekend, we both had fun creating "a swarm of bees with knives", "an abacus with fire" or "Taylor Swift with a chainsaw". In the 2.5 seconds it takes to place, Claude designs its stats and prices it in embers. If you describe something that isn't a creature, it becomes a spell.
We love remembering what people have created, so created the Pavilion of Imagination, a growing 3D hall of 800+ community creations like hilarious troops (e.g. "Living Nation", created from somebody summoning "A whole country. Yeah.")
Play without touching anything
From the moment you enter our site, you can play entirely with a webcam and mic: move your hand to aim, grab to describe, release to deploy, thumbs-down to cancel. If you prefer more conventional controls, keyboard, mouse and mobile touch controls work too.
How we built it
Hands and voice
MediaPipe turns the point between your index finger and thumb into a cursor. We included a setup option that calibrates the gestures to a specific person's hand.
While grabbing, audio streams to Cartesia `ink-2`, and the transcript appears only a few hundred milliseconds after release. A spare socket stays open, so you can start your next troop before the last one fully lands.
Balanced troops from any description
Claude Haiku turns each description into structured JSON: stats, abilities from a closed set our sim can price (splash, burn, stun, flying and more), and freely invented looks. The server then sets every troop's ember cost with our own pricing formula, tuned in a headless sim against 15 anchor troops that double as Claude's few-shot examples.
Multiplayer on SpacetimeDB
SpacetimeDB powers our entire multiplayer experience. The whole game is one TypeScript function, step(state, dt), running inside a SpacetimeDB module as a 20 Hz scheduled reducer, so rooms, deploys, towers and combat are authoritative database state both players subscribe to.
Art and game feel
One of our concerns was how real-time art generation would work. We solved this with fal.ai, which generates troop art, cut-outs, music and assets. Troops land as placeholders and their art shimmers in a second later. For the 3D game effect, we used Vite and the Three.js client, incorporating details camera shakes, slow-motion tower collapses, and spoken words that glow ("fire" orange, "ice" frosted).
Learning from every summon
We developed a system that learns from its players and gets better the more it's played.
Each round logs the player's words, Claude's design and any "that's wrong" flags. Claude also returns a wish, an ability it wanted but we don't support yet (in fact, 78 of 929 designs had one!)
The flags tell us when Claude got someone wrong, and the wishes tell us what people are dying to make that we can't support yet. So every match teaches us something, and we use it to make the next version of the game better.
User testing
Playtesting was one of the most fun parts of the weekend. We spent several hours on Saturday handing the game to anyone who would play, watching them invent troops and laugh at what came out.
We playtested with more than 10 groups, changing the game between sessions. Our first gestures were based on pinching, but that was awkward and hard to track. Our final gestures were developed after several rounds of feedback and iteration from our playtesters.
Players also kept running out of embers and asking for spells, so we raised the ember rate and added spells.
Over the weekend, playtesters played 89 matches and deployed 843 troops, nearly three-quarters of them by voice.
A few favourites from the logs:
- 929 troops designed, at a median of 1.4 s each
- The priciest troop was a 14-ember Giant King
- Someone shouted "100000" and got a Numeric Blast spell.
- Taylor Swift was summoned with a chainsaw, a flamethrower and a lightning spell.
Thank you to everybody we met who played and gave us feedback!
Challenges we ran into
We ordered mics from Amazon but the shipping got delayed.
We kept getting destroyed by our own "easy" bot. We had to take the L and nerf it so we wouldn't keep losing.
Pricing was a hard task that required a lot of manual balancing and trial and error.
Speech and design both have to finish within the 2.5-second deploy, so we stream speech the whole time you hold, keep a spare socket open, and cut generated battle cries entirely.
We went through many versions of hand gesture controls after seeing our playtesters struggle with it.
As a team of two people working in parallel, we each had multiple agent sessions that sometimes conflicted with one another. We were intentional about building a way to share and update context with each other's agents.
Accomplishments that we're proud of
Our favourite part was watching people play: they laughed, got competitive, and invented troops we never could have. Personally, we even played Artifice on our commute home Saturday night, just because it was fun!
We're also proud that:
- The whole thing works! The entire troop creation process involves four AI layers working together in under 2.5 seconds. We managed to work within these constraints and create a fun gameplay experience .
- It's tuned from real play, thanks to a feedback loop built into the game itself.
What we learned
We found that the approach of having the model describe a troop and having code decide what that means was effective in creating troops under our tight constraints.
We also had a great time working with the technologies of our hackathon sponsors!
Anthropic. Claude Haiku is fast enough to make structured design decisions mid-match.
Cartesia. We were amazed by ink-2's speed: speaking a troop feels as immediate as tapping a card.
SpacetimeDB. It powered our entire multiplayer experience without us writing any netcode.
What's next for Artifice
We think Artifice is the perfect "friendslop" game, it's chaotic, funny, and full of shareable moments. Next we want to support more ways for people to imagine. Our playtesters asked for teleportation, life steal, ember farms and invisibility, and we have our wish logs to figure out what to build first
We also want matchmaking so you can play strangers. It'd be really fun to have a competitive Elo system.
Most of all, we'd love to get our game into the hands of more people and see what cool troops and spells people can come up with!
Built With
- anthropic
- cartesia
- claude
- fal.ai
- mediapipe
- node.js
- spacetimedb
- three.js
- typescript
- vercel
- vite

Log in or sign up for Devpost to join the conversation.