Back to Projects
Open Source
| JavaScript | personal

Archmage Brolo: Card Battle

Static Slay the Spire-inspired wizard card battler focused on tactile card interactions, turn flow, targeting feedback, and polished browser play.

Role
Solo Developer
Period
2026
Signal
Playable prototype
Why it matters

Demonstrates interaction polish, game-state architecture, animation timing, and static deployment discipline without a framework.

Archmage Brolo: Card Battle

Archmage Brolo: Card Battle is a static browser card battler inspired by the tactile feel of deckbuilding roguelikes. It centers on one fight: Archmage Brolo versus Skelly Steve, with a focus on card feel, readable combat feedback, and a complete title-to-result loop.

The portfolio value is interaction polish. Cards fan from the bottom of the screen, lift on hover, drag smoothly, target enemies with a magical aiming line, and resolve through animated discard/projectile/floating-text feedback instead of abrupt state changes.

Tech Stack

HTML CSS Vanilla JavaScript Canvas Vercel

Key Features

  • Playable title screen, replay flow, combat screen, and result screen
  • Smooth card hover, drag, play, return, and discard interactions
  • Targeted attack cards with magical aiming line feedback
  • Defensive, healing, attack, and special spell cards
  • Animated combat feedback through floating text, sparkles, trails, and impact bursts
  • Static deployment with no framework, bundler, or runtime dependency

Technical Highlights

  • Vanilla JavaScript game state and turn-flow architecture
  • Canvas effects for targeting lines, particles, projectiles, and magic feedback
  • CSS-driven fantasy UI for title, result, card, and combat layouts
  • Separated modules for app state, game lifecycle, cards, input, animation, characters, enemies, and deck logic
  • Responsive layout for desktop and mobile-sized screens

Architecture

Game Flow

  • AppController manages title, play, and result screens
  • GameManager controls rounds, turns, card effects, and UI updates
  • Deck and Card modules manage draw, play, return, and discard behavior

Interaction Layer

  • InputManager handles pointer drag and release routing
  • AnimationManager handles spell feedback and motion
  • Canvas renders targeting lines and effect particles

Challenges & Solutions

1

Making static DOM cards feel tactile and physical

2

Keeping a no-framework JavaScript codebase readable as systems grew

3

Balancing fantasy presentation with responsive browser constraints

4

Turning a single encounter into a complete playable loop