UI Components

Component Tree

App
├── Header
│   ├── Title ("Poople" + 💩 logo)
│   ├── Puzzle number (#42: PICK)
│   ├── ℹ️ button → opens Intro modal
│   ├── 📊 button → opens Stats modal
│   └── 📅 button → opens Yesterday modal
├── GameArea
│   ├── RowContainer
│   │   └── Row[] (one per guess)
│   │       └── Box[] (4 per row — one per letter)
│   └── Keyboard
│       └── Key[]
├── Modal (generic wrapper)
│   ├── Intro (how to play)
│   ├── Stats
│   │   ├── Results (guess count, par, copy button)
│   │   ├── Totals (wins, avg, streaks)
│   │   ├── Histogram (guess distribution)
│   │   └── Countdown (time to next puzzle)
│   └── Yesterday
│       └── Row[] (showing optimal path)
├── EmojiRain (💩 falling animation on win)
├── Footer
├── Privacy (route: /privacy)
└── Support (route: /support)

Key Components

Row

Displays a 4-letter word as 4 Box components.

function Row({ word, suppressHighlight }) {
    // For each letter position (0-3):
    // highlight = letter matches "poop" at that position
    return <div className="Row">{boxes}</div>;
}

Box

A single letter tile.

  • Normal: dark background
  • Highlighted (class highlight): brown/poop-colored if the letter matches POOP at that position
function Box({ letter, highlight }) {
    return (
        <div className={"Box" + (highlight ? " highlight" : "")}>
            {letter?.toUpperCase() ?? ""}
        </div>
    );
}

RowContainer

Wraps all rows. Adds jump CSS class on game over (bounce animation). Shows ErrorMessage for invalid words.

Keyboard

On-screen keyboard with 3 rows of keys. Calls onKeyPress(key) on tap.

EmojiRain

When the player wins, 💩 emojis rain down from the top of the screen. Uses random positions, delays, and durations for each emoji.

CSS Classes

ClassElement
.AppRoot container
.HeaderTop bar
.GameAreaGame play area
.RowContainer / .row-containerAll word rows
.RowSingle word row
.BoxSingle letter tile
.Box.highlightLetter matches target at that position (brown)
.Keyboard / .KeyboardRow / .KeyKeyboard
.Modal / .ModalBackdrop / .ModalContentModal system
.Results / .ResultsCopyFeedbackWin results panel
.Histogram / .HistogramBarStats chart
.CountdownNext puzzle timer
.EmojiRain / .EmojiRaindropWin animation
.jumpBounce animation on win
.fade-inModal entrance animation
.hideHidden modal
.ErrorMessage / .errorInvalid word feedback

Routes

PathComponentDescription
/AppGameAreaMain game
/privacyPrivacyPrivacy policy
/supportSupportContact info
/testApp (test mode)Debug: play any puzzle by index

Styling Notes

  • Dark theme: background #202020
  • Brown/poop color for highlighted letters
  • Clean, minimal design
  • Mobile-first with on-screen keyboard
  • Smooth scroll to bottom as guesses are added