Interactive lab

Browser experiments and playable UI studies.

This archive keeps browser experiments separate from the main case studies while still showing frontend mechanics: canvas state, keyboard and touch input, collision checks, score persistence, and compact no-backend interfaces.

Archive

Tools, games, and browser experiments.

Web Paint browser tool showing toolbar controls, brush settings, and drawing workspace
Canvas tool

Web Paint

Browser drawing needs reliable state; I built a vanilla JavaScript Canvas editor with tool modes, undo/redo snapshots, import/export, zoom, and mobile-friendly panels.

What I built
  • Implemented Canvas drawing modes for pencil, eraser, shapes, fill, text, selection, and preview rendering.
  • Built undo/redo snapshots, import validation, PNG export, zoom, canvas resizing, and local save/load behavior.
  • Managed toolbar state, swatches, brush sizes, selection bounds, and status output in custom vanilla JavaScript.
Demonstrates
Canvas state, pointer events, touch-friendly toolbar UI, and client-side export.
Controls
Mouse, touch, swatches, sliders, toolbar buttons, and file actions.
Mobile/touch
Supported for touch drawing and toolbar actions; the dense ribbon works best on tablet or desktop widths.
Production readiness
Solid static prototype for drawing and export. Before real users, it needs memory-aware history, autosave recovery, richer keyboard shortcuts, and stronger nonvisual drawing support.
Mini Golf canvas game start screen with a five-hole course preview and start-round control
Physics game

Mini Golf

Touch golf needs clear aiming and scoring; I built a Canvas/JavaScript five-hole course with drag power, collision response, hazards, scorecards, and best runs.

What I built
  • Created five course layouts with par values, walls, hazard zones, surface types, cup targets, and hole progression.
  • Implemented drag aiming, shot-power calculation, ball motion, wall/hazard/cup collision checks, and stroke counting.
  • Built scorecard UI, best-score persistence, pause/restart/fullscreen controls, touch hints, and hole navigation.
Demonstrates
Canvas physics, level state, collision handling, and local persistence.
Controls
Drag to aim and set power, release to shoot, then advance hole-by-hole.
Mobile/touch
Supported with drag aiming and on-screen course controls; designed to remain playable on narrow screens.
Production readiness
Archived live experiment with solid input and scoring. A fuller release would need physics edge-case tests, more mobile QA, accessible alternatives, and save-state controls.
Asteroid Drift canvas game start screen with ship controls and asteroid field preview
Arcade loop

Asteroid Drift

Arcade loops need low-latency input; I built a Canvas/JavaScript Asteroids-style demo with thrust, shooting, shields, randomized spawns, collisions, waves, and touch controls.

What I built
  • Implemented ship thrust, rotation, projectile firing, shield charge, wraparound movement, and lives/scoring state.
  • Built randomized asteroid spawning, split behavior, wave progression, collision checks, and HUD progress updates.
  • Added keyboard and touch controls that feed the same input state, plus pause/restart/fullscreen and reduced-motion handling.
Demonstrates
Real-time game loop, entity spawning, collision response, and HUD updates.
Controls
Keyboard or on-screen controls for thrust, turn, fire, pause, and fullscreen.
Mobile/touch
Supported through on-screen thrust, turn, shield, and fire buttons alongside keyboard controls.
Production readiness
Polished prototype with the strongest game loop in the lab. Hardening would focus on difficulty tuning, performance profiling, device testing, and expanded nonvisual state output.
Snake Lab canvas playfield with start menu and touch direction controls
Grid game

Snake Lab

Snake needs fast turns without illegal reversals; I built a Canvas/JavaScript grid game with buffered input, growth, collisions, pace changes, and best scores.

What I built
  • Implemented grid state for snake segments, food placement, growth, wall/body collision detection, score, and length.
  • Built input buffering for Arrow keys, WASD, swipe gestures, and touch buttons while blocking illegal reverse turns.
  • Added pace changes, pause/restart/fullscreen controls, viewport-aware canvas sizing, and local best-score persistence.
Demonstrates
Grid state, timed movement, collision rules, and input buffering.
Controls
Arrow keys, WASD, swipe-style touch controls, pause, restart, and fullscreen.
Mobile/touch
Supported with large on-screen direction controls and the same buffered movement logic as keyboard play.
Production readiness
Archived experiment with solid grid state and input buffering. Real-user hardening would add collision/turn tests, save reset controls, and better screen-reader alternatives.
Brick Breaker canvas playfield with start menu, paddle, ball, and brick layout
Arcade game

Brick Breaker

Paddle games need precise collisions; I built a Canvas/JavaScript Brick Breaker with launch state, wall/paddle/brick checks, levels, progress, and touch controls.

What I built
  • Implemented paddle movement, ball launch state, wall/paddle/brick collision checks, lives, scoring, and level-clearing logic.
  • Built progress, level, best-score, and power readouts around a viewport-aware Canvas playfield.
  • Added keyboard, pointer, and labeled touch controls that share the same movement and launch state.
Demonstrates
Collision checks, level reset logic, paddle input, and canvas redraw loops.
Controls
Keyboard, pointer movement, touch controls, restart, pause, and fullscreen.
Mobile/touch
Supported with touch controls for moving and launching, plus viewport-aware canvas sizing for narrow screens.
Production readiness
Archived experiment with a working arcade loop. Hardening would add collision edge tests, performance checks, validated level data, and nonvisual gameplay alternatives.
2048 puzzle game start screen with numbered tiles and keyboard/touch controls
Puzzle game

2048

Tile merging needs deterministic board transforms; I built an HTML/CSS/JavaScript 2048 with single-merge rules, random spawns, undo, best score, and accessible summaries.

What I built
  • Implemented directional board transforms, merge rules, random tile spawning, win/loss checks, score updates, and move counting.
  • Built undo snapshots, local save/best-score persistence, keyboard shortcuts, swipe handling, and on-screen direction controls.
  • Added an accessible focusable board with dynamic row summaries, live status announcements, and decorative tile rendering separated from screen-reader output.
Demonstrates
Board transforms, merge rules, undo snapshots, and persistent score state.
Controls
Arrow keys, swipe, on-screen direction buttons, undo, restart, and fullscreen.
Mobile/touch
Supported with swipe gestures and on-screen direction buttons for touch-first play.
Production readiness
Archived experiment with solid board transforms, undo, and accessible summaries. Hardening would add merge-rule tests, state migration, and screen-reader regression checks.
Minefield Sweep board preview with difficulty controls, start menu, and minefield grid
Logic game

Minefield Sweep

Mine puzzles need clear state and safe starts; I built a JavaScript grid game with delayed mines, recursive reveal, flag mode, timers, and accessible labels.

What I built
  • Implemented delayed mine placement, safe first reveal, adjacent counts, recursive empty-cell reveal, flag toggling, and win/loss state.
  • Built difficulty switching, timer/best-time persistence, mines-left tracking, cleared-percent updates, pause/restart controls, and touch flag mode.
  • Rendered the board as a keyboard-navigable grid with roving focus, row/column labels, live announcements, and state-specific cell descriptions.
Demonstrates
Recursive reveal logic, board generation, flag state, and accessible grid feedback.
Controls
Click or tap to reveal, right-click or flag mode to mark mines, plus restart controls.
Mobile/touch
Supported with tap-to-reveal, flag mode, difficulty buttons, and a horizontally safe board shell.
Production readiness
Accessible prototype with keyboard grid state and safe first reveal. Hardening would add reveal/flag tests, focus regression checks, difficulty validation, and clearer saved-state controls.
Flappy Workbench canvas playfield with start menu, bird, pipe obstacles, and touch controls
Timing game

Flappy Workbench

Timing games need consistent physics; I built a Canvas/JavaScript Flappy-style loop with gravity, obstacle gaps, collision checks, best score, pause, and mobile flap input.

What I built
  • Implemented gravity, jump impulse, pipe spawning, gap sizing, collision checks, score tracking, and restart flow.
  • Built the Canvas render loop for the player, scrolling obstacles, ground movement, menu state, status text, and best-score persistence.
  • Added keyboard, pointer, tap, and labeled mobile Flap controls with pause/restart/fullscreen support.
Demonstrates
Gravity/jump physics, obstacle generation, collision checks, and game-state transitions.
Controls
Click, tap, or keyboard input to flap, with restart and fullscreen controls.
Mobile/touch
Supported with tap input, keyboard input, and viewport-aware canvas scaling.
Production readiness
Archived experiment with a working timing loop and mobile flap input. Hardening would add deterministic physics tests, mobile-browser QA, reduced-motion review, and pause/resume validation.

Next step

Connect the experiments to the case studies.

The lab keeps browser experiments in one place. For hiring context, jump back to selected work or read the Web Paint case study.