Claude Code Plugins

Community-maintained marketplace

Feedback

webapp-wow-mechanic-creator

@ledagame/persona-theater
0
0

Design innovative game mechanics using web browser APIs that create "WOW moments" impossible in other platforms. Implements 5 surprise types (rule-breaking, meta-awareness, recursive-explosion, hidden-layer, system-hacking) using LocalStorage, Canvas, Notifications, DevTools, and browser tab manipulation. Use when creating surprising game mechanics, implementing meta-game elements, or designing memorable interactive moments for web games.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name webapp-wow-mechanic-creator
description Design innovative game mechanics using web browser APIs that create "WOW moments" impossible in other platforms. Implements 5 surprise types (rule-breaking, meta-awareness, recursive-explosion, hidden-layer, system-hacking) using LocalStorage, Canvas, Notifications, DevTools, and browser tab manipulation. Use when creating surprising game mechanics, implementing meta-game elements, or designing memorable interactive moments for web games.

Web App WOW Mechanic Creator

Create unforgettable "WOW moments" using web browser capabilities that are impossible in other platforms.

Purpose

This skill designs innovative game mechanics that leverage browser-specific features:

  • Browser APIs (LocalStorage, Notification, Canvas, Geolocation, etc.)
  • Meta elements (DevTools, browser tabs, 404 pages, URLs)
  • Real-time features (WebRTC, WebSockets)
  • Web-exclusive tricks (Konami codes, steganography, hash manipulation)

When to Use This Skill

Use this skill when:

  • Designing "WOW moments" for web games
  • Creating meta-game mechanics (game-aware of being a game)
  • Implementing browser-specific features
  • Breaking player expectations in memorable ways
  • Adding innovative mechanics to escape room games

5 WOW Moment Types (Web Version)

Type 1: Rule-Breaking (규칙 전복형)

Definition: Established rules suddenly reverse, revealing new possibilities

Notion Limitation: Manual toggle required, no automatic state change Web Power: True reactive programming, automatic UI transformation

Example 1: Time Reversal

// Scene 8 unlocks time travel mechanic
const unlockTimeReversal = () => {
  // Allow revisiting past scenes (1-7) with new clues visible
  updateScenes([1,2,3,4,5,6,7], {
    timeReversalUnlocked: true,
    newCluesVisible: true
  })

  // Browser back button becomes game mechanic
  window.addEventListener('popstate', (e) => {
    showTimeRewindEffect() // Glitch animation
    revealPreviouslyHiddenClue(e.state.sceneId)
  })

  notify("Time is flowing backwards...")
}

Player reaction: "I can change the past?!" (Surprise: 95%)

Example 2: UI Inversion

// Puzzle: "Break the rules"
// Initial: Red button = danger, green = safe
// Twist: Colors invert after specific action

const invertUI = () => {
  document.body.classList.add('inverted-mode')
  // CSS filter: invert colors
  // Red buttons now safe, green buttons dangerous
}

Type 2: Meta-Awareness (메타 인식형)

Definition: Player realizes the game system itself is part of puzzle

Example 1: Browser Tab Glitch

// Scene 5 - Killer watches player
let toggle = false
const interval = setInterval(() => {
  document.title = toggle
    ? "The Last Meeting"
    : "Help me... they're watching..."
  toggle = !toggle
}, 500)

// After 10 seconds, unlock evidence
setTimeout(() => {
  clearInterval(interval)
  unlockEvidence("browser_tab_message")
}, 10000)

Player reaction: "The tab title is changing!" (Creepiness: 90%)

Example 2: DevTools Easter Egg

// Hidden message in console
console.log(`
%c🔍 Smart detective! You opened DevTools.
%cHere's a clue: Check the victim's last commit in the code.
The commit hash contains the safe password.
`, 'font-size: 20px; color: gold;', 'color: white;')

// Unlock special evidence for technical players
if (typeof window.devtools !== 'undefined') {
  unlockEvidence("E16_hidden_for_developers")
}

Type 3: Recursive Explosion (재귀 폭탄형)

Definition: Small change cascades through entire game system

Example 1: Past Choices Echo

// Scene 3 choice affects Scene 9
if (!discoveredEvidence.includes('E04')) {
  // Missed evidence in Scene 3 creates problem in Scene 9
  addPuzzle({
    id: 'P17_missed_opportunity',
    title: 'Missed Opportunity',
    description: 'You need evidence from Scene 3...',
    canSolve: false // Force backtrack
  })
}

Example 2: Domino Effect

// Choosing "Trust Suspect A" in Scene 6 changes:
// - Scene 7: Suspect A's dialogue options
// - Scene 9: Available evidence
// - Scene 11: Plot twist reveal
// - Scene 14: Which ending is reachable

const trustChoice = (suspectId: string) => {
  const cascadingEffects = getCascadingEffects(suspectId)

  cascadingEffects.forEach(effect => {
    updateScene(effect.sceneId, effect.changes)
  })
}

Player reaction: "My choice from 30 minutes ago matters now?!" (Surprise: 85%)

Type 4: Hidden Layer (숨겨진 레이어형)

Definition: Discover truth hidden beneath surface layer

Example 1: 404 Page is Real Scene

// app/not-found.tsx
export default function NotFound() {
  const { gameId } = useParams()

  // Easter egg: 404 is secret scene
  if (gameId === 'sleepless-night' && hasEvidence('E15')) {
    return <SecretRoomScene /> // Real scene, not error
  }

  return <StandardNotFoundPage />
}

Player reaction: "404 page was part of the game!" (Discovery joy: 88%)

Example 2: Image Steganography

// Evidence image contains hidden message
const extractHiddenMessage = async (imageUrl: string) => {
  const img = await loadImage(imageUrl)
  const canvas = document.createElement('canvas')
  const ctx = canvas.getContext('2d')

  // Extract LSB (Least Significant Bit) steganography
  const pixels = ctx.getImageData(0, 0, img.width, img.height)
  const hiddenText = decodeLSB(pixels.data)

  return hiddenText // "The real password is 8274"
}

Type 5: System Hacking (시스템 해킹형)

Definition: Using system itself as puzzle solution

Example 1: Hint System Breakdown

// Hint system glitches after 10 uses
const hintSystem = {
  usageCount: 0,

  async getHint(puzzleId: string) {
    this.usageCount++

    if (this.usageCount >= 10) {
      // "System overload" message
      return `
ERROR: Hint system overloaded.
Corruption detected... truth cannot be hidden...
[REDACTED] killed him because [REDACTED]
Restart required—
      `
      // Unlock hidden evidence E16
      unlockEvidence('E16_system_corruption')
    }

    return getNormalHint(puzzleId)
  }
}

Player reaction: "Hint system breaking is the puzzle!" (Mind-blow: 92%)

Example 2: LocalStorage Manipulation

// Puzzle: "Edit your save file to win"
const checkSaveManipulation = () => {
  const saveData = localStorage.getItem('game-save')
  const parsed = JSON.parse(saveData)

  // If player manually edited localStorage to give themselves evidence
  if (parsed.discoveredEvidence.includes('E99_impossible')) {
    // Game acknowledges the "hack"
    showMessage("You hacked the save file. Clever... but cheating has consequences.")
    triggerBadEnding('system_manipulation')
  }
}

Web-Exclusive Mechanics (10 Types)

1. Real-Time Timer with Tension

'use client'
import { useState, useEffect } from 'react'

export function GameTimer({ duration = 7200 }) {
  const [remaining, setRemaining] = useState(duration)

  useEffect(() => {
    const interval = setInterval(() => {
      setRemaining(prev => {
        if (prev <= 0) {
          triggerTimeoutEnding()
          return 0
        }

        // Tension effects as time runs out
        if (prev === 300) playTensionMusic() // Last 5 min
        if (prev === 60) flashRedScreen() // Last 1 min
        if (prev % 10 === 0) heartbeatSound() // Every 10s

        return prev - 1
      })
    }, 1000)

    return () => clearInterval(interval)
  }, [])

  // Visual anxiety cues
  const urgencyColor = remaining < 300 ? 'red' : remaining < 900 ? 'orange' : 'green'

  return <div className={`timer ${urgencyColor}`}>{formatTime(remaining)}</div>
}

2. Touch Gesture Puzzles

// Swipe pattern to unlock
const gestureSequence = ['up', 'down', 'left', 'right', 'up']
const playerGestures = []

const handleTouch = (direction: string) => {
  playerGestures.push(direction)

  if (playerGestures.length > gestureSequence.length) {
    playerGestures.shift() // Keep last N gestures
  }

  if (arraysEqual(playerGestures, gestureSequence)) {
    unlockSecret() // Konami code equivalent
  }
}

3. Canvas Drawing Puzzle

// Draw a shape to solve puzzle
const CanvasDrawingPuzzle = () => {
  const canvasRef = useRef<HTMLCanvasElement>(null)

  const checkDrawing = () => {
    const canvas = canvasRef.current
    const ctx = canvas.getContext('2d')
    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)

    // Analyze if player drew the correct symbol
    const match = compareWithTarget(imageData, targetSymbol)

    if (match > 0.85) { // 85% similarity
      solvePuzzle('drawing_puzzle')
    }
  }

  return (
    <canvas
      ref={canvasRef}
      onMouseUp={checkDrawing}
      onTouchEnd={checkDrawing}
    />
  )
}

See references/browser-api-mechanics.md for 10+ web-exclusive puzzle types.

4. Multi-Tab Synchronization

// Puzzle requires opening 2 tabs side-by-side
// Broadcast channel communicates between tabs

const bc = new BroadcastChannel('game_sync')

// Tab 1: Shows question
bc.postMessage({ type: 'question', data: 'What is the password?' })

// Tab 2: Shows answer (only if Tab 1 open)
bc.onmessage = (event) => {
  if (event.data.type === 'question') {
    revealAnswer() // Show answer in Tab 2
  }
}

5. Notification Puzzle

// NPC sends browser notification with clue
const sendNPCNotification = async (character: string, message: string) => {
  if ('Notification' in window && Notification.permission === 'granted') {
    new Notification(`${character} sent you a message`, {
      body: message,
      icon: `/characters/${character}.png`,
      tag: 'evidence_notification'
    })
  }
}

// Usage: "Check your notifications for the final clue"

Implementation Patterns

Pattern 1: Progressive Feature Unlocks

const gameFeatures = {
  timeTravel: { unlocked: false, unlocksAt: 'scene_8' },
  devTools: { unlocked: false, unlocksAt: 'puzzle_12' },
  multiTab: { unlocked: false, unlocksAt: 'evidence_E10' }
}

// Gradually teach player new mechanics
const unlockFeature = (feature: keyof typeof gameFeatures) => {
  gameFeatures[feature].unlocked = true
  showTutorial(feature) // Explain new mechanic
}

Pattern 2: Meta-Game Hints

// Leave hints in unexpected places
// 1. Network tab (hidden API endpoint)
fetch('/api/secret-clue') // Returns: "The answer is in the code"

// 2. Local Storage key names
localStorage.setItem('not_a_clue_definitely_ignore_this', 'password:8472')

// 3. React DevTools component names
<EvidenceComponent data-secret="check-props" realPasswordIs="8472" />

Performance Considerations

Browser API Performance Costs:

API Performance Impact Use Sparingly?
LocalStorage Low No
Canvas (simple) Low No
Canvas (complex) High Yes
Notification Low No
Geolocation Medium Yes
WebRTC High Yes
Web Audio Medium Moderate

Optimization Tips:

  • Debounce canvas drawing checks (check every 500ms, not real-time)
  • Cache geolocation (don't request repeatedly)
  • Lazy-load heavy APIs (only when puzzle activates)

Mobile Considerations

Touch-Friendly Adaptations:

// Desktop: Hover to reveal
// Mobile: Long-press to reveal

const handleInteraction = (e: React.TouchEvent | React.MouseEvent) => {
  if ('touches' in e) {
    // Mobile: long-press (800ms)
    longPressTimer = setTimeout(() => revealClue(), 800)
  } else {
    // Desktop: hover
    revealClue()
  }
}

Gesture Support:

  • Swipe navigation (scenes)
  • Pinch zoom (examine evidence)
  • Long-press (hints)
  • Double-tap (quick actions)

Security & Ethics

Responsible Meta-Game Design:

Do:

  • Make "hacks" optional (don't require LocalStorage editing)
  • Reward curiosity (DevTools hints)
  • Provide in-game alternatives

Don't:

  • Require actual system hacking (security risk)
  • Break accessibility (screen readers)
  • Violate user privacy (geolocation abuse)

Example: DevTools puzzle should have non-DevTools solution path.

Implementation Priority

Phase 1 (MVP - Week 1-5): Core mechanics only

  • Real-time timer
  • Basic animations (Framer Motion)
  • LocalStorage save/load

Phase 2 (Post-MVP - Week 6-8): WOW moments

  • Browser tab manipulation
  • Canvas drawing puzzles
  • Notification API

Phase 3 (Polish - Week 9-10): Advanced

  • Multi-tab sync
  • Steganography
  • DevTools easter eggs

See references/implementation-priority-matrix.md.

Code Examples

Complete implementations with TypeScript + React in:

  • references/browser-api-mechanics.md - 10 working examples
  • references/meta-game-patterns.md - DevTools, tabs, URLs
  • scripts/wow-effect-generator.ts - Utility functions

Testing Checklist

WOW Mechanic Validation:
- [ ] Works on Chrome, Safari, Firefox, Edge
- [ ] Mobile compatible (iOS Safari, Android Chrome)
- [ ] Degrades gracefully (if API unsupported)
- [ ] Performance acceptable (60fps animations)
- [ ] Surprise factor high (playtest reactions)
- [ ] Not frustrating (hints available)
- [ ] Ethical (no security risks, privacy violations)

Resources

Browser APIs: references/browser-api-mechanics.md - Canvas, Notification, Geolocation, etc. Meta-Game: references/meta-game-patterns.md - DevTools, tabs, 404 pages, URLs Animations: references/framer-motion-wow-effects.md - Dramatic visual effects Priority: references/implementation-priority-matrix.md - Impact vs Effort matrix

Scripts:

  • scripts/wow-effect-generator.ts - Reusable effect functions
  • scripts/test-browser-support.ts - Check API availability
  • scripts/performance-profiler.ts - Measure effect performance

Success Criteria

Effective WOW mechanics should:

  • ✅ Create genuine surprise (playtest "wow" reactions)
  • ✅ Feel organic to narrative (not gimmicky)
  • ✅ Be discoverable (hints exist)
  • ✅ Work on mobile (60% of players)
  • ✅ Perform well (60fps, <100ms lag)
  • ✅ Degrade gracefully (fallback if unsupported)
  • ✅ Be memorable (players discuss on social media)
  • ✅ Be ethical (no security/privacy violations)

Version: 1.0 Last Updated: 2025-01-04 Author: Web WOW Mechanic Specialist