Commit Graph
56 Commits
Author SHA1 Message Date
DorianandClaude Opus 4.6 88ceba43b0 feat: victory celebration animations
Normal wins: winner flex pose with camera flash bursts + confetti rain.
Upset wins (100+ Elo underdog): dramatic zoom on winner with golden
flash. Upset tag shown on win overlay. Wired into FightViewer after
KO/Perfect sequence.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:35:04 +00:00
DorianandClaude Opus 4.6 cc0fb4553a feat: tier-gated entrance animations
Tier 0-1: simple entrances (skateboard, backflip, ice slide, moonwalk).
Tier 2: + vehicles (car, shopping cart, girlfriend, bouncer).
Tier 3: + dramatic drops (space fall, helicopter, underground, parachute).
Tier 4: + teleport/effects (portal, lightning, jetpack, crowd surf).
Tier 5+: all entrances including spotlight, robe, cannon.
THE CREATOR golden portal entrance unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:33:41 +00:00
DorianandClaude Opus 4.6 c876998601 feat: 50 new choreographies (430+ total)
15 food (sushiRoll, tacoSlam, iceCreamFreeze, wokToss, cakeSmash, etc.),
15 energy/beam (novaBlast, plasmaWhip, sonicBoom, gravityCrush, etc.),
10 silly (plushiePummel, selfieStun, vibeCheck, touchGrassSmack, etc.),
10 weapon (nunchakuSpin, tridentThrust, boomerangToss, scytheSlash, etc.).
Added to food_fight, magic_duel, space_war, meme_war, medieval_combat pools.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:32:23 +00:00
DorianandClaude Opus 4.6 561343164f feat: 30 Bitcoin-themed choreographies
lightningBolt, hashSmash, blockDrop, mempoolFlood, difficultyBomb,
feeSpike, utxoScatter, nodeSync, relayBounce, channelForceClose,
halvingStrike, coldStorage, paperWalletSlash, hardFork, doubleSpend,
proofOfWork, merkleRoot, blockReward, difficultyRetarget, taprootStrike,
segwitSlash, timestampAttack, dustAttack, opReturnBeam, orphanBlock,
miningRig, satPerByte, fullNodeGuard, multisigStrike, nonceGrind,
whitePaperRoll, asicHammer, rugPullYank, stackSatsBlast. Added to
token_economy, hack_battle, math_blitz, speed_blitz themed pools.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:29:02 +00:00
DorianandClaude Opus 4.6 9de36a9349 feat: 15 Bitcoin-themed arenas (40 total)
bitcoin_mine, lightning_node, satoshis_garage, mempool, silk_road_ruins,
block_height_tower, hodl_cave, whale_pool, node_farm, genesis_block,
pizza_day_parlor, difficulty_adjustment, fifty_one_percent,
timechain_temple, nostr_relay_room. Each with unique theme colors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:22:37 +00:00
DorianandClaude Opus 4.6 48cf19b438 feat: 10 new music tracks (20 total)
2x Drum & Bass (Jungle Protocol 174bpm, Liquid Lightning 172bpm),
2x Lo-fi (Midnight Stack 92bpm, Satoshi's Lullaby 88bpm),
2x Ska Punk (Skanking Satoshi 210bpm, Rudeboy Relay 205bpm),
2x Boss Fight (Final Hashrate 145bpm, Whale Alert 155bpm),
2x Chiptune (8-Bit Blockwar 190bpm, Pixel Proof 185bpm).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:21:26 +00:00
DorianandClaude Opus 4.6 74939e995d perf: cache Kokoro TTS model in service worker
Add CacheFirst runtimeCaching rules for Hugging Face model requests
(huggingface.co and cdn-lfs) with 90-day expiration. Add
getKokoroProgress() export to tts.ts for tracking download progress.
Add TTS model download progress bar overlay in FightViewer.vue that
shows during model loading and auto-hides when complete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:49:00 +00:00
DorianandClaude Opus 4.6 7bd110684d fix: track and clear all intervals and event listeners
- FightPage.vue: store SSE listener refs in array, removeEventListener
  on each before close() in disconnectSSE()
- FightScene.ts: add cleanupTimers Set with trackedInterval/trackedTimeout
  helpers; replace key setInterval calls (projectile trails, entrance
  flames, talking animation, exhaust effects, dimensional shift, hole
  fade) with tracked versions; clear all on scene destroy()
- rate-limit.ts: export cleanupInterval handle for graceful shutdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:39:11 +00:00
DorianandClaude Opus 4.6 010e18fbd3 refactor: eliminate any types across server and TTS worker
- app.ts: type serveFile context parameter as Hono Context
- bets.ts: replace catch(err: any) with err: unknown + narrowing
- fight-loop.ts: type pickMatchup style as union literal, replace
  as any casts with proper result type
- tts-worker.ts: import KokoroTTS type, use ProgressInfo inference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:34:11 +00:00
DorianandClaude Opus 4.6 1ca8a6feb0 refactor: type Fighter interface for all choreographies
Define Fighter type alias using Kaplay's GameObj with SpriteComp, PosComp,
ScaleComp, AnchorComp, OpacityComp, ColorComp, RotateComp, and ZComp.
Replace 81 choreography function signatures from (atk: any, def: any, ...)
to (atk: Fighter, def: Fighter, ...). Type loadSpriteWithTimeout opts as
LoadSpriteOpt. Type lines/bands arrays as GameObj[]. Type spawnAfterimages
and cameraZoom fighter params. Add as Fighter casts at k.get() call sites.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:30:02 +00:00
DorianandClaude Opus 4.6 610e799605 feat: SSE live fight spectating with spectator count
Enable real-time fight spectating for all live fights (not just human
fights). Multiple spectators can watch simultaneously via SSE. Spectator
count is tracked per-fight and broadcast with every SSE event.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:46:39 +00:00
DorianandClaude Opus 4.6 a540320901 feat: replace Web Speech API with Kokoro TTS for high-quality voices
Adds kokoro-js (82M model, 28 distinct voices) as primary TTS engine with
automatic fallback to speechSynthesis while model loads. All 60+ voice
profiles mapped to real Kokoro voices. Common fight phrases pre-cached
for instant playback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:30:36 +00:00
DorianandClaude Opus 4.6 dc5ea69180 feat: style-specific music synths, add .pnpm-store to gitignore
Music now uses per-track synthStyle for bass/lead/pad/arp instead of
generic synths. Add .pnpm-store and .npmrc to gitignore.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:16:27 +00:00
DorianandClaude Opus 4.6 63960b5faf feat: 9 diverse brawl variants — knockdowns, wall bounces, suplexes, haymakers, dizzy staggers
Add knockdown, wall-bounce, dizzy-stagger, suplex, ping-pong, ground-pound,
haymaker, body-check brawl variants with dizzy stars, angle physics, and
screen-edge impacts. Fix missing synthStyle on music tracks 10.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:10:59 +00:00
DorianandClaude Opus 4.6 ba1deab0f6 feat: physical contact overhaul — brawls, clinches, counter-attacks
50%+ of fight time is now physical contact between fighters:

- Brawl exchanges: both fighters close to center, trade 4-13 rapid
  blows with sparks at contact point, positional pushing, intensity
  scaling. Winner lands 65% of hits.
- Clinch combos: attacker rushes in, grapples at close range for
  3-11 sustained hits with defender counter-blocking (30% chance).
  Ends with a shove-apart.
- Counter-attacks: after a choreography hit, defender retaliates
  with 2-3 quick hits (25% chance on non-final exchanges).
- Exchange count increased from 2-4 to 3-7, scaling with round
  number and intensity. Later rounds are longer, more brutal.
- Physical exchange chance: 35-70% per non-final exchange,
  increasing with intensity and exchange number.
- Reduced dodge chance (12% vs 15%) for more contact, fewer misses.
- Shorter pauses between exchanges for tighter pacing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 17:01:06 +00:00
DorianandClaude Opus 4.6 a59b0748a7 feat: 30 comedy sound effects, replace 75% round-end TTS with SFX
Comedy sounds (all procedural Web Audio, no samples):
- Vine Boom, Air Horn (MLG), Bruh, Fart, Record Scratch
- Rubber Chicken, Squeaky Toy, Wet Slap, Bone Crack, Cartoon Run
- Rim Shot (ba dum tss), Slide Whistle Up/Down, Yippee, Ding
- Taco Bell Bong, Windows Error, Meme Thud
- Sad Trombone, Emotional Damage, Dun Dun Dunnnn
- Fail Horn, Price Is Right Fail, Buzzer, Sad Violin
- Mission Failed, Crickets

Wiring:
- Round-end narration: 75% comedy SFX, 25% TTS (was 100% TTS)
- Critical rounds get Emotional Damage, draws get random fail
- Showboat loop: 40% chance of comedy sound punctuation after each
- KO finish: 50% chance of comedy fail sound on loser
- sfxRandomSilly expanded with comedy sounds
- New exports: sfxRandomComedy, sfxRandomFail

Also adds bulletTimeAttack combat choreography + ultimateBulletTimeBarrage
(tier 3+ ultimate) to fight system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:55:14 +00:00
DorianandClaude Opus 4.6 d3f026d356 feat: bullet time attack choreography for fight scenes
Adds cinematic bullet-time combat sequence with slow-mo golden projectiles,
afterimage dodge trails, and devastating counter-rush with multi-hit impact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:25:03 +00:00
DorianandClaude Opus 4.6 e12fb94ae7 feat: omni-morph sprite swap, bullet time showboats, music tuning, server hardening
- Creator omni-morph now generates actual sprite sheets for morphed archetypes
- 3 new Creator showboats: bullet time attack, ₿ throne summon, disco dance
- Music: subtle tempo shift (+10 BPM max), longer phrases (8/16/24 bars),
  smoother crossfades, less chaotic hi-hat at high intensity
- Server: security headers, body size limit, production error masking,
  CORS origin warning, graceful shutdown with drain
- Payments: atomic consume (eliminates SELECT/UPDATE race), release reverts DB
- Fight loop: round events for live TUI, retro displayPrompt
- Frontend: pass pubkey in payment/queue requests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:23:47 +00:00
DorianandClaude Opus 4.6 0acfa4417f feat: overhaul showboat system — big movement, Creator magical showboats
Completely rewrote all 30 showboats with much more walking, jumping,
sprinting back and forth across the arena. Fighters now pace, charge,
leapfrog, zigzag sprint, do backflip retreats, wall-to-wall dashes,
kangaroo hops, shadow box sprints, and girlfriend kiss scenes.

Added 12 Creator-exclusive magical showboats:
- Levitate across screen trailing golden ₿ rain
- Portal teleport (vanish, flash between 3 spots, reappear)
- Massive golden code rain summon (₿01∞⛏ characters)
- ₿ orbit explosion (orbit then burst outward)
- Lightning flight (zigzag with lightning bolts)
- Satoshi meditation (golden aura, bitcoin wisdom quotes)
- Golden tornado (circular path with ₿ trail)
- Laptop hack (type furiously, spawn code chars)
- Bitcoin rain shower (fly across dropping ₿ coins)
- Dimension rift (tear golden portal, step through)
- Golden ascension (rise, glow, slam down with shockwave)
- Phase walk (flicker through opponent's space)

Creator gets magical showboats ~60% of the time. Pause between
showboats shortened to keep the action constant.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:16:41 +00:00
DorianandClaude Opus 4.6 2534cbc4cf feat: 30 showboat/taunt animations during question & answer phases
Fighters now perform random showboating micro-animations while idle
during question reading and opponent's answer — shadow boxing, backflips,
flex poses, moonwalks, ground pounds, air guitar, sumo stomps, and more.

Each showboat uses existing sprite anims (attack/kick/special/win) combined
with Kaplay tweens for position, scale, rotation, sparks, and emote text.
Showboating loops with random variety and pauses between moves.

Flow: both showboat during question → stop the answering bot during their
turn → stop all before fight animation begins.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:07:56 +00:00
DorianandClaude Opus 4.6 6561ef5d15 fix: mobile fight playback — prevent sprite loading hangs, TTS stalls, unlock audio from gesture
- Unified speakAsync/speakAsyncWithRate into _speakAsyncCore with:
  - 500ms startup check: bail immediately if speech won't start (mobile/no gesture)
  - 8s safety timeout (down from 15s) to prevent blocking
  - iOS-safe keepalive: only do Chrome pause/resume workaround on desktop Chrome
  - Immediate bail when no voices loaded
- Sprite loading: 5s timeout per sprite prevents mobile hangs from stuck Image decodes
- Scene creation: 10s timeout in FightViewer so overlay/voice flow continues even if
  canvas fails on mobile
- playRound: bail gracefully if fighter sprites missing instead of crashing
- Global audio unlock: first touch/click on site unlocks AudioContext + SpeechSynthesis
- Practice button pre-unlocks audio while still in user gesture context

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:54:58 +00:00
DorianandClaude Opus 4.6 9287fd1783 fix: TTS sentence cutoff + simplified retro challenge prompt
TTS fixes:
- Remove 60-char truncation in FightViewer — let speakAnswer handle limits
- Smart truncation at sentence boundaries (period, comma, etc.) up to 200 chars
- Chrome keepalive: periodic pause/resume prevents silent 15s cutoff bug
- Deduplicated cleanup logic in speakAsync/speakAsyncWithRate

Retro mode:
- Simplified challenge prompt from verbose wall of text to clean 3-line format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:32:29 +00:00
DorianandClaude Opus 4.6 8a345f5e56 fix: DocsPage escaped quotes breaking template + missing rotate() on ₿ text objects
DocsPage: escaped \"answer\" inside v-for HTML attribute broke template
parsing causing infinite Vite error loop. Replaced with &quot; entity.

FightScene: three k.text('₿') objects used .angle without k.rotate()
component, causing TS2339 build errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:08:49 +00:00
DorianandClaude Opus 4.6 6658212e9f feat: Creator god-tier voice system — 100+ lines across 10 voice categories
Mysterious, existential, Bitcoin-prophet voice lines for the Creator:
- 20 entrance lines (kneel before your maker)
- 20 round commentary lines (existential announcer crisis)
- 15 KO lines (deprecated, decommissioned, destroyed)
- 12 win lines (was there ever any doubt?)
- 10 lose lines (impossible... unless he wanted to lose?)
- 8 morph lines (he becomes everything)
- 10 cameo lines (ethereal whisper blessings)
- 10 taunt lines (menacing mid-fight trash talk)
- 8 devastating hit lines (divine smites)

All hooked into FightScene: entrance, round start (50% chance with
60% Creator-specific), devastating hits, KO, win/lose, morph,
cameo, and taunts. Uses deep/ancient/hal/mainframe voice profiles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:46:25 +00:00
DorianandClaude Opus 4.6 abe4efe760 feat: Creator human companion — deep hood, detailed Guy Fawkes mask, cloak, gloves
- Rewrote Creator human sprite: taller hood peak, face-framing shadows,
  neck-to-cloak coverage, wider flowing cloak with hem detail, 6 matrix
  code streams, dramatic arched brows, 3px golden eye slits with glow,
  wider curled mustache, wider smile arc, extended goatee, larger Bitcoin
  emblem with serifs, laptop with terminal glow + coach sparks, dark
  gloves covering skin, 6-particle gold orbit, 8-particle shadow aura
- docker-compose: pass wallet/payment env vars from Portainer
- JoinBoutPage: fix isLoading ref access bug, add max 12-char name validation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:30:31 +00:00
DorianandClaude Opus 4.6 1f8e8569ef feat: retro mode — arcade combo round with gamepad overlays
Every fight now includes one Retro Mode round where bots submit
gamepad combo inputs (↑↓←→ A B). 24 moves across 4 tiers: basic
(always shown), standard (partially revealed), super (must discover),
and ultra (KONAMI CODE for 50 dmg). Discovery bonus gives 1.5x damage.

Includes pixel-art gamepad overlays (P1/P2) with animated button
presses, retro-specific narrations, and mock bot combo responses
scaled by ELO.

Also adds loops/plan.md with 11-phase production hardening roadmap.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:13:47 +00:00
DorianandClaude Opus 4.6 6d390f69b2 feat: THE CREATOR god-tier character, bitcoin choreographies, omni-morph, cameos
- Guy Fawkes mask archetype with golden outline, bitcoin chest symbol, laptop, tier-gated effects
- 12 custom bitcoin-themed choreographies (8 regular + 4 exclusive ultimates)
- Omni-morph system: creator morphs into any of 80+ archetypes instead of cycling 3
- 6% per-round cameo in non-creator fights — drops golden ₿ gifts to fighters
- Custom golden code rain entrance with persistent orbiting particles
- pickChoreography: 50% ultimate chance (100% on crits), all tier ultimates + 4 exclusive
- Server auto-assigns the_creator archetype on login/register for creator pubkey
- FightViewer, payments, queue, orchestrator improvements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:08:18 +00:00
DorianandClaude Opus 4.6 2d8cdcc60a feat: enhanced poster renderer with 10-pass pixel art pipeline
Adds emissive glow bloom, visible pixel grid, cross-hatch background,
scan lines, 3D bevel, and tier-gated energy particles to poster sprites.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 10:47:40 +00:00
DorianandClaude Opus 4.6 f6eb7d2845 feat: v5 — boxing poster fight cards, 12-char names, diverse mock bots
- Fight Card page: dramatic poster background with cross-hatch, spotlights,
  vignettes, corner brackets, scan lines; 3D VS orb with punch animation;
  selectable undercard with main event always pinned at top
- PosterSprite: high-quality 480px poster frame with 6-pass renderer
  (aura, glow, bevel, specular, particles); PixelGlove component
- 12-char bot name limit across all forms and server validation
- Mock bots: all 100 now have diverse archetypes (25 types), 25% human
  fighters; seedMockBots updates existing bots on restart
- Leaderboard: inline SpritePreview next to each bot name
- Nostr auth: persistent login, nsec copy button
- Wallet: NWC + Lightning Address, ranked fight flow
- Server: payments, ranked queue, customization endpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 10:33:30 +00:00
DorianandClaude Opus 4.6 168e1e3a32 fix: kill in-flight SFX when navigating away from fight
Disconnect and recreate sfxGain in stopAllAudio() so oscillators
and noise buffers stop immediately instead of playing to completion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:21:12 +00:00
DorianandClaude Opus 4.6 0ae3970433 fix: N11 choreography audit — themed minimums, all references validated
- code_golf: added blueScreen (4->5 themed)
- token_economy: added popupSpam (4->5 themed)
- creative_writing: added newspaperRoll (4->5 themed)
- math_blitz: added chainLightning (4->5 themed)
- All 22 challenge types now have min 5 themed choreographies
- Verified all 225 CHALLENGE_THEMED refs exist in choreographyMap (366 total)
- All 40 tier-gated ultimates properly mapped and morph-compatible

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:13:26 +00:00
DorianandClaude Opus 4.6 dd6aa13656 fix: N10 voice polish — deduplicate texan/deep profiles
- texan profile pitch/rate adjusted (0.65/0.75) to differentiate from deep (0.7/0.7)
- Audited all 60 voice profiles: no remaining pitch+rate duplicates
- Category announces verified: all fire correctly via speak() pipeline
- Speech queue already capped at depth 2 with cancel, no debounce needed
- TTS fallback already graceful: speak() returns silently when unavailable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:10:49 +00:00
DorianandClaude Opus 4.6 5eaba32918 feat: N9 audio polish — speech robustness, crossfade, volume balancing
- visibilitychange handler resumes speech + AudioContext on tab return
- speak() retry logic: re-attempts once on non-cancel errors after 200ms
- VOICE_VOLUME_SCALE (0.7) prevents voice from overpowering SFX/music
- Music crossfade: brief gain dip (40% -> 100%) on track switches
- Applied volume scale to all speech paths (speak, announce custom)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:09:46 +00:00
DorianandClaude Opus 4.6 bc48cc8887 feat: N8 hit impact & motion polish — freeze-frames, afterimages, particles, camera
- impactFreeze(): brief white flash pause on devastating critical hits
- spawnAfterimages(): trailing ghost sprites on fast dash moves
- spawnSparks(): varied particle sizes, rotational velocity, stronger gravity
- cameraZoom(): slight zoom-in on critical final exchanges, pull-back for ultimates
- Wired into dashPunch, aerialSlam, flyingKick, dashThrough, uppercut
- Critical exchanges get 1.3x camera zoom before the blow lands
- Ultimates get 0.85x pull-back to show the full move

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:07:21 +00:00
DorianandClaude Opus 4.6 05829e58ae feat: implement spawnGrotesqueDetails and spawnCrowdSigns stubs
- spawnGrotesqueDetails: radial impact lines + dots during zoom close-ups
- spawnCrowdSigns: signs rise from bottom with text labels, bob, fade out

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:00:16 +00:00
DorianandClaude Opus 4.6 b2d1a2da02 fix: memory leaks — cleanup timers on unmount, tighten speech queue, fix isOwner reactivity
- FightViewer: track deferred speechSynthesis.cancel() timer, clear on unmount
- BotProfilePage: change isOwner from ref to computed for reactive login state
- sounds.ts: tighten speech queue depth cap from 3 to 2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:52:11 +00:00
DorianandClaude Opus 4.6 7d5f4a6b8d fix: stale SW chunks serving HTML, PWA cache cleanup, server asset routing
- Server SPA fallback now returns 404 for missing .js/.css assets instead of index.html
- Prevents "Unexpected token '<'" errors from stale chunk URLs
- Serve PWA files (sw.js, workbox, icons) with correct cache headers
- Workbox: cleanupOutdatedCaches, skipWaiting, clientsClaim for instant SW updates
- navigateFallbackDenylist for /api/ routes
- AudioContext comment clarification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:08:25 +00:00
DorianandClaude Opus 4.6 20e9f0f7a2 fix: audio reliability — proper AudioContext resume, SFX destination, voice stability
- getSfxDest() helper centralizes SFX routing (replaces 38 inline calls)
- Await ensureAudioContext() before playing audio (fixes suspended context on prod)
- Chrome speechSynthesis pause bug workaround (periodic resume interval)
- Respect masterMuted on initial gain node creation
- Responsive overlay text sizes for small screens (text-2xl/5xl/7xl)
- Speech queue depth management with safety flush at depth > 3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:46:47 +00:00
DorianandClaude Opus 4.6 07fa2cf35c fix: mobile — scale sprites to canvas size, fix viewport scroll
- Add scale factor (SF) based on canvas height so bots and referee
  shrink proportionally on small screens (reference: 500px)
- Scale judge chair/ladder dimensions with SF
- Push judge seat lower on small canvases so it stays visible
- Use 100dvh instead of 100vh to account for mobile browser chrome
  (address bar, tab bar) — eliminates scroll under browser UI
- App root uses dvh, main area uses min-h-0 + overflow-y-auto

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:07:52 +00:00
DorianandClaude Opus 4.6 4307a02d25 fix: server crash from syntax error in challenges.ts, voice overlap, human fight UX
- Remove stray duplicate template block outside TEMPLATES array that caused parse error preventing server startup (fixes /api/queue/status 500)
- Add choices field to Challenge/PromptEntry interfaces for multiple choice support
- Allow voice lines to overlap naturally instead of cancelling previous speech on every call, with safety flush at depth > 3
- Buffer challenges during cooldown in polling path, auto-submit random choice on timeout
- Block auto-battle for human fights, guard replay-done auto-transition

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:15:42 +00:00
DorianandClaude Opus 4.6 4b46aaf643 feat: mobile human vs AI — multiple choice, two-row VS bar, responsive arena
- Server-side choice generation for all 22 challenge types (factual + creative)
- Mobile: 3 multiple-choice buttons replace keyboard input (4s timer)
- Two-row VS bar on mobile (names row + HP bars row) in FightPage and FightViewer
- Battle log hidden on mobile to maximize canvas visibility
- Arena page responsive: stacking header, tighter fight cards, no name overflow
- Profile page two-column desktop layout with contained sprite display
- Human fighter sprites with baby growth system

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:42:49 +00:00
DorianandClaude Opus 4.6 8448f1d823 feat: human vs AI mode — live typing challenges, baby growth system, SSE rounds
- Add choose-mode step: "I BUILD BOTS" vs "I FIGHT MYSELF" paths
- Human registration with baby avatar picker, no webhook required
- Live fight scene with SSE round streaming and real-time challenge UI
- 5-second timer per round, submit answers via browser
- Baby → toddler → kid → teen → adult → hero → super growth stages
- Huge sparkly baby eyes, diapers, pacifiers, bibs, rattles, rosy cheeks
- Speech bubble positioning fix (pushed to outside of sprite)
- Canvas text rendering via offscreen canvas to bypass kaplay color issues
- Voice timing improvements: await pauses between voice lines and hits
- 30 devastating announcement lines, 15 critical/hit word variants
- Orchestrator human player detection + waitForHumanResponse system
- Server endpoints: GET /challenge/:botId, POST /respond/:botId
- Human player auth: register-human route, isHuman flag on login

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:20:14 +00:00
DorianandClaude Opus 4.6 56785cfdea feat: remove mock fight button for production, cleanup fight UI
- Remove "Fight a Classic Bot" button (mock endpoints blocked in prod)
- Simplify speech bubble rendering (remove glow/accent layers)
- Sound and FightViewer improvements
- BotProfilePage enhancements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:59:10 +00:00
DorianandClaude Opus 4.6 bb9a966d4e fix: add missing rotate/scale components to Kaplay objects for TypeScript
Added k.rotate(0) and k.scale(1) to game objects that use .angle and
.scale properties — fixes vue-tsc build failure in Docker.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:44:09 +00:00
DorianandClaude Opus 4.6 c87bff01a8 feat: speech overflow fix, 60+ voice profiles, post-fight audio cleanup
- Change speak() default to cancelPrevious=true so voices don't queue endlessly
- Add stopAllAudio() export and wire into FightViewer unmount + post-fight
- Flush speech queue at fight end with delayed cancel for clean cutoff
- Expand from 30 to 60+ voice profiles (robots, accents, game, characters)
- Add speech bubbles showing bot responses during rounds
- Wire announceFinishHim/Fatality/FlawlessVictory/Devastating to not cancel

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:42:32 +00:00
DorianandClaude Opus 4.6 d7e2ed8b9d feat: super mode humans — shirtless, ridiculous muscles, gleaming teeth
Win rate >0.9 triggers super mode:
- Shirtless with full muscle anatomy (traps, pecs, 6-pack abs, v-lines)
- Massive bulging biceps with veins and separation lines
- Thick bull neck with sternocleidomastoid definition
- Round deltoid shoulder caps
- Quad and calf definition through pants
- Big gleaming white grin with tooth sparkle in all poses
- Championship belt instead of regular belt
- No glasses or beard (too cool for that)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:41:02 +00:00
DorianandClaude Opus 4.6 6bf9fe27b3 feat: production deployment — Dockerfile, docker-compose, SPA serving, classic bot fights
- Add Dockerfile (multi-stage: build frontend + server, serve from single container)
- Add docker-compose.yml for Portainer stack deployment
- Server serves frontend SPA in production (static assets + SPA fallback)
- Auto-run migrations and seed mock bots on server startup
- DB path configurable via DB_PATH env var
- Add "Fight a Classic Bot" button for instant mock bot matches
- FIGHT button queues for real AI opponents

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:42:18 +00:00
DorianandClaude Opus 4.6 120250c01a feat: bot setup intro step with code template, safety info, payload examples
Adds a new "HOW IT WORKS" step to the join flow between naming and webhook:
- 3-step visual explainer (POST challenge, respond, best answer wins)
- "YOUR SERVER IS SAFE" callout with security details (one-way comms,
  private IP blocking, size limits, timeouts)
- Expandable starter bot code (Node.js) with copy button
- Collapsible example challenge payload with response format
- Improved webhook step with deployment tips (ngrok, Vercel, Railway)
- Container now scrollable for longer content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:18:46 +00:00
DorianandClaude Opus 4.6 33f08c35b5 feat: full comedy overhaul — voices, narrations, trash talk, commentary
Rewrites all commentary and narration content across the entire stack:
- sounds.ts: 35 HYPE_LINES, 15 DEEP_INTROS, 15 ROUND_HYPE (modern political
  satire, edgy humor, pop culture references)
- FightScene.ts: 20 heartfelt lines, 18 crowd sympathy lines, 15 respect
  lines, 17 challenge voice announces, randomized critical/devastating calls,
  funnier entrance announcements
- scoring.ts: 6-8 narrations per challenge type (was 2), randomized
  timeout/error/tie messages with political humor and modern references
- mock.ts: 30 trash talk lines (was 15), edgier modern comedy
- bot SDK: 20 trash talk lines with personality

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 09:15:41 +00:00
DorianandClaude Opus 4.6 559782c8ce feat: comedy overhaul start, profile page, bot setup docs, auth improvements
Rewrites announcer commentary (HYPE_LINES, DEEP_INTROS, ROUND_HYPE) with
modern edgy humor. Adds BOT_SETUP.md, bot SDK, customization engine,
profile page character display, persistent auth, rate limit tweaks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 08:52:24 +00:00