Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
Markdown
Bumper Viewport Issue Report #
Date: 2026-02-10 Status: ⚠️ UNRESOLVED - Needs architectural decision
The Problem #
The bumper overlay system needs to create a proper viewport abstraction where:
- The bumper renders at the very top (y=0-18)
- Piece content renders BELOW the bumper (starting at y=18)
- Piece coordinate system should map: piece y=0 → physical y=18
What We've Tried #
Attempt 1: Reduce height + Pan offset #
screen.height = physical - bumperHeight // 394px
pan(0, bumperHeight) // shift down 18px
Result: ❌ Content cut off at bottom
- Piece renders y=0-394 in piece coords
- Pan shifts to y=18-412 in physical coords
- y=412 is out of bounds (screen is 0-411)
Attempt 2: Reduce height only (current) #
screen.height = physical - bumperHeight // 394px
// No pan offset
Result: ❌ Bumper overlays on top of content
- Piece renders y=0-394 in physical coords
- Bumper overlays at y=0-18
- Top 18px of piece content is covered
The Core Issue #
We need the piece to:
- Think it has 394px of height (reduced)
- Render starting at physical y=18 (not y=0)
- Fill the viewport from y=18 to y=412
Current approaches don't achieve both 1 and 2 simultaneously.
Possible Solutions #
Option A: Pixel Buffer Offset #
- Give piece a pixel buffer that starts at physical y=18
- More complex, requires buffer management
Option B: Global Translation Without Pan #
- Use a different mechanism than pan() that doesn't add to piece coordinates
- Modify the rendering pipeline to offset the framebuffer
Option C: Piece Responsibility #
- Don't reduce screen.height
- Give piece full 412px height
- Piece checks
screen.bumperOffsetand manually adds 18px to all Y coordinates - Problem: Requires every piece to handle this
Option D: CSS/Canvas Transform #
- Use CSS transform or canvas context transform to shift rendered output
- Piece renders to full screen, output gets shifted visually
Debug Data #
From console logs:
Physical screen.height: 412
Bumper offset: 18
Piece screen.height: 394
With pan removed:
- Piece renders: y=0 to y=394 (physical coords)
- Bumper overlays: y=0 to y=18
- Problem: Overlap at y=0-18
Current Code State #
Files Modified:
system/public/aesthetic.computer/lib/disk.mjs- Lines 11668-11682: Screen height reduction
- Lines 11818-11824: Event coordinate adjustment
- Lines 12425-12437: Pan removed from boot
- Lines 12618-12625: Pan removed from paint
Event Coordinates: ✅ Fixed (adjusted by bumperOffset) Screen Height: ⚠️ Reduced but causes overlap Pan Offset: ❌ Removed (caused bottom cutoff)
Next Steps #
- Review architectural options A-D above
- Decide on proper abstraction for bumper viewport
- Implement chosen solution
- Test with notepat piece
- Ensure works for all pieces that enable bumper
Related Code #
- Bumper enable:
notepat.mjs:1176-api.bumper.enable(BUMPER_HEIGHT, renderBumper) - Bumper config:
disk.mjs:2071-2089-bumperConfigobject - Bumper overlay:
disk.mjs:14849-14881- Bumper overlay rendering - Piano boot animation:
system/netlify/functions/index.mjs:1186-1242
Test Case #
Navigate to /notepat and check:
Commits Related to This Issue:
df357560- Initial bumper viewport with pan2d988910- Enable notepat boot animation62a7e821- Add debug logging28c4cb82- Remove pan, adjust event coords (current state)