PUDGE/UI v0.2.1 2025-07
  • + 5 new hardware compositions: Walkman Deck (Sony WM-D6C), Game Boy (Nintendo DMG-01), DJ Controller Deck (Pioneer DDJ), Synthesizer Panel (Roland SH-101 / Moog Minimoog)
  • + Changelog page at /changelog with full version history
  • + Animated NEW badge on recently added specs and compositions
  • + LCD-style version update banner with per-version dismiss
composition glossy-polycarbonaterubber

Game Boy

Battery
PUDGE / UI    PUDGE / UI    PUDGE / UI    PUDGE / UI    PUDGE / UI    PUDGE / UI    
A
B
Select
Start
VOL

Description

The face of an original Nintendo Game Boy (DMG-01) handheld. Portrait orientation. A large dot-matrix LCD screen occupies the upper half; the lower half is dominated by the D-pad on the left and the A/B action buttons on the right, angled 30° as on the physical device. Start and Select sit as flat oval insets between them. A power LED and volume slider complete the hardware face.

Reference Devices

Nintendo Game Boy DMG-01 (1989), Nintendo Game Boy Pocket MGB-001 (1996), Nintendo Game Boy Color CGB-001 (1998).

Layout

┌───────────────────────────────┐
│  ● BATT                       │
│  ┌─────────────────────────┐  │
│  │                         │  │
│  │    [  DOT-MATRIX  ]     │  │
│  │    [     LCD       ]    │  │
│  │    [               ]    │  │
│  └─────────────────────────┘  │
│  ░░░░░░░░░░░░░░░░  (speaker)  │
│                               │
│  ┌──────┐          (B)  (A)   │
│  │      │                     │
│  │ DPAD │     [SEL]  [STA]    │
│  │      │                     │
│  └──────┘                     │
│  VOL ──●──────────────────    │
└───────────────────────────────┘

Assembly Rules

  1. Container: Use .panel with .variant-glossy on the outer chassis. Portrait orientation: width: 260px. Background var(--bg-panel). border-radius: 16px 16px 40px 16px — the original DMG-01 has a distinctive angled bottom-right corner. padding: 16px 16px 20px.

  2. Power LED: Single led-dot in .green positioned in the top-left above the screen. Label BATTERY in 6px mono. LED blinks amber when battery is low — show as .green by default, add .amber class variant note for low-battery state.

  3. Screen housing: A <div> wrapper with background: var(--bg-inset); border: 3px solid var(--border-deep); border-radius: 4px; padding: 8px; box-shadow: inset 0 2px 8px rgba(0,0,0,0.8). Inner content: dot-matrix component sized to fill — width: 100%. The screen housing reproduces the thick plastic bezel of the DMG-01. Screen content: scrolling text PUDGE / UI on repeat.

  4. Speaker grille: A purely decorative element below the screen. A <div> with background: repeating-linear-gradient(90deg, var(--border-subtle) 0, var(--border-subtle) 1px, transparent 1px, transparent 5px); height: 8px; border-radius: 1px; margin: 8px 0. Positioned right-of-center to match the DMG-01's asymmetric speaker placement.

  5. Controls section: A horizontal flex row: D-pad left, action buttons right, justify-content: space-between; align-items: center; padding: 8px 4px.

    • Left: d-pad component at default 110x110px. Material: .variant-rubber. Arms are darker than the chassis (physical rubber vs. painted plastic).
    • Right: Two rubber-button components in a diagonal row — B button (lower-left) and A button (upper-right) — angled transform: rotate(-30deg) on their containing wrapper to match the DMG-01's 30° diagonal button layout. Button labels: B (left) and A (right). Size: 40x40px (slightly smaller than default to fit the panel).
  6. Start / Select row: A horizontal flex row between the d-pad and A/B section: justify-content: center; gap: 24px. Two push-button components styled as flat oval insets — height: 16px; border-radius: var(--radius-pill); width: 48px; background: var(--bg-inset); font-size: 7px; letter-spacing: 1px. Labels: SELECT (left) and START (right). These are recessed flush buttons, NOT raised — use box-shadow: inset 0 1px 3px rgba(0,0,0,0.5) only, no upward shadow.

  7. Volume slider: volume-slider at the bottom of the panel, full width. Label VOL at 7px mono above-left. Thumb at 60% position (default volume). This represents the physical side-mounted volume dial — adapted to a horizontal slider for UI interaction.

  8. Chassis color: The original DMG-01 is #B8B8B8 (light gray). Apply via background: #b0aea8 on the outer panel — a warm gray. Screen housing border is #3a3835. A/B buttons are dark burgundy on the original (#6b2b3a) — apply background: linear-gradient(155deg, #7a3040, #4a1e28) on the rubber-button elements.

Component Configuration

Component Position Config
led-dots (×1) Top-left above screen .green, label BATTERY, 6px mono
dot-matrix Screen area Full-width inside screen housing, scrolling PUDGE / UI
d-pad Controls row left Default size 110x110px, .variant-rubber
rubber-button (×2) Controls row right A and B, 40x40px, diagonal layout, DMG burgundy tint
push-button (×2) Center between controls SELECT and START, flat oval, 48x16px, recessed
volume-slider Bottom Full width, thumb at 60%, label VOL

Constraints

  1. MUST use portrait orientation — the Game Boy is a tall device, never landscape.
  2. A/B buttons MUST be rendered in a diagonal row at ~30° — the parallel layout is a visual error that no real Game Boy has.
  3. Start and Select MUST be flat / recessed, never raised — they are membrane buttons, not dome switches.
  4. The outer border-radius MUST use 16px 16px 40px 16px — the asymmetric cut of the bottom-right corner is the DMG-01's most distinctive silhouette feature.
  5. MUST NOT use a glossy-clean white background — the DMG-01 is warm gray, slightly aged; pure white reads as a fake or modern redesign.
  6. Speaker grille MUST be rendered right-of-center, not centered — the asymmetric placement is a physical constraint of the DMG-01's internal speaker position.

Interactivity

  1. D-pad arms: Clicking any arm (UP/DOWN/LEFT/RIGHT) shows a pressed state (translateY(1px) or translateX for left/right) and triggers a brief highlight on the dot-matrix display text direction.
  2. A/B buttons: Click to show press animation (scale down). The dot-matrix display responds — pressing A speeds up the scrolling text, pressing B reverses scroll direction.
  3. START/SELECT: Click feedback (inset shadow deepens). START toggles the dot-matrix display between two "game states" (normal scroll vs. flashing "GAME OVER" text).
  4. Volume slider: Draggable thumb — updates fill width on drag.
  5. Screen animation: The dot-matrix text scrolls continuously. D-pad presses briefly pause and resume scroll.

Components Used

Hand it to your agent

This is a multi-component assembly spec — pass it to your coding agent along with the foundation specs to build the complete interface in any framework.

Compositions show how components assemble. Give the full spec to your agent.

Pudge