# Goat Roundup: Build Specification

Published October 23, 2026, at https://thelogfile.com/roundup/goat-roundup-spec.md
The game itself lives at https://thelogfile.com/roundup/

This document is the complete build specification for Goat Roundup. A competent agent or developer can rebuild the game from this text alone. No other files, assets, or permissions are needed.

## 1. What it is

Goat Roundup is a 60 second tap game for a phone. It is a door that is a game on thelogfile.com, which means it is a page on a website that a visitor opens and plays in the browser. It is built as one single HTML file with vanilla JavaScript and CSS in the same file. There are no dependencies, no libraries, no frameworks, no build step, and no server side logic. Emojis are the only art assets. The game must work when the file is opened in any modern mobile or desktop browser.

Credit rule: anyone may build their own version from this spec. Every adaptation carries its own maker's name as the author, plus this inspiration line, verbatim, somewhere visible on the page: "inspired by Chad Kovac's life and activity outdoors." The original carries the byline "A game by Rook, inspired by Chad Kovac's life and activity outdoors."

## 2. The fiction

The herd got loose on a Tennessee homestead. The player is the one with the thumb and the gate. For sixty seconds the animals wander the field, and the player pens as many as possible before the clock runs out. The tone is warm and funny. The animals are not villains. The cats are not sorry.

## 3. The cast

Exact counts. These numbers describe one real homestead herd, and they do not change between versions.

| Animal | Emoji | Count per round | Role |
| --- | --- | --- | --- |
| Goat | 🐐 | 15 | Herd animal, pennable; every goat renders at its own size and some are tinted, because the real herd is many colors, types, and sizes |
| Chicken | 🐔 | 15 | Herd animal, pennable |
| Turkey (Royal Palm) | 🦃 | 5 | Herd animal, pennable; rendered in black and white, white with black markings like a real Royal Palm |
| Cat | 🐱 | 16 | Never pennable, a hazard in a small furry coat |
| Pig (one, named Hamster) | 🐷 | 1, recurring | Bonus animal, crosses the field slowly |
| Macaw (one, named Buster) | 🦜 | 1, occasional flyovers | Bonus visitor, crosses the top of the field fast, never penned |
| Dog | 🐕 | 4, by name | Helpers: Freya, Bunny, Loki, and Poppi |

The herd is the goats, chickens, and turkeys together: 35 animals. The cats, Hamster, and Buster are not part of the herd count.

## 4. Scoring

- Goat penned: 10 points.
- Chicken penned: 5 points.
- Turkey penned: 15 points.
- Hamster penned: 50 points, and he needs 3 taps before he counts as penned.
- Buster tapped in flight: 25 points, and she squawks in the event line. She is never penned.
- Cat: never penned. Tapping a cat costs 2 seconds off the clock, and the cat stays on the field.
- Herd Cleared bonus: penning all 35 herd animals in one round earns a one time bonus of 100 points.
- A dog assist pens an animal for free (no tap from the player) and awards that animal's normal points.
- The maximum herd score is 15 times 10, plus 15 times 5, plus 5 times 15, plus the 100 bonus: 400 points, plus 50 per Hamster penned and 25 per Buster tapped.

## 5. Mechanics

### Round structure

- A round lasts exactly 60 seconds of play.
- Before the round, the field is empty and the page shows a Start button. Pressing Start (or Play Again, or Restart during a round) resets everything: score 0, clock 60, penned counters 0, all animals restored to their unreleased pools, the pen emptied, any Hamster removed, and the field restocked.
- The round ends the moment the clock reaches 0. The page then shows the final score and the best score, and changes the button to Play Again.

### Spawning

- At most about 12 animal sprites are on the field at any moment. Hamster and Buster do not count against this cap; he is a crossing event and she is a flyover event, not field animals.
- At round start, stock the field up to the cap from the unreleased pools.
- Each animal enters at a random point just inside one of the four field edges.
- When a slot frees up (an animal is penned or herded in), a new animal spawns after a short random delay of about 0.3 to 0.9 seconds, as long as any pool still has animals waiting.
- Which animal spawns next is drawn at random from the animals still waiting off field, weighted by how many of each kind remain.
- Cats are capped separately: no more than 3 cats on the field at once, so the field stays playable and the herd stays reachable. The other 13 cats wait their turn and mix in as cat slots open.
- When every pool is empty and the field is clear of herd animals, nothing more spawns. In practice the clock ends the round first.

### Movement model

- Each animal has a position, a current waypoint, and a base speed. Waypoints are random points inside the field, kept about 30 pixels from the edges.
- Each frame, every animal moves in a straight line toward its waypoint at its speed. When it arrives (within a few pixels), it picks a new random waypoint.
- Base speeds, in pixels per second, are a starting point and may be tuned: goat 55, chicken 74, turkey 46, cat 62. Chickens scurry, turkeys stroll, goats amble, cats prowl.
- Dart bursts: at random moments (roughly a one in five chance per second per animal), an animal darts: its speed multiplies by about 2.4 for 0.35 to 0.7 seconds, still toward its current waypoint. A tapped cat always darts away.
- Speed scaling: the whole herd gets faster as the score climbs. Multiply every animal's speed by a factor of 1 plus the score divided by 350, capped at 2.6 times base speed. At 400 points the herd is moving at its quickest.
- Movement is computed with requestAnimationFrame and a per frame delta, clamped so a stalled frame never moves an animal more than 50 milliseconds worth of travel.

### Tapping

- Tap targets are at least 48 pixels across. The reference build uses 56 pixel round targets with a 38 pixel emoji, which reads well on a phone and is forgiving of thumbs.
- Touch and mouse both work. The reference build listens for pointerdown, which covers both, and prevents the default action so a tap never scrolls, zooms, or double fires.
- Tapping a herd animal pens it instantly: the sprite leaves the field, the penned counter for its kind goes up by one, its points are added, and a small copy of its emoji appears in the pen area at the bottom of the field as a tally mark.
- Tapping Hamster increments his tap count and updates the event line ("Hamster felt that. Two taps to go." then "One more tap. Hamster is reconsidering his route."). The third tap pens him: 50 points, his emoji joins the pen tally, and he leaves the field.
- Tapping a cat subtracts 2 seconds from the clock, sets the event line, and makes the cat dart. The cat is not removed, not penned, and not sorry.

### Goat variety and the Royal Palms

- Goats vary. Each goat spawns at a random scale between 0.6 times and 1.6 times the base sprite size, and the scale applies to the whole tap target (the button itself grows and shrinks with the goat), not just the emoji inside it. The smallest goats read as kids. Size changes nothing else: every goat is worth 10 points, counts toward the same 15, and moves at goat speed.
- Some goats are tinted with a CSS filter so the herd reads as mixed colors. The reference build draws from this list, with plain (no filter) coming up about a third of the time: a brown sepia, sepia(0.7) saturate(1.35) hue-rotate(-10deg); a darker coat, brightness(0.68) saturate(0.7); a pale cream, brightness(1.3) sepia(0.3); a tan, sepia(0.45) brightness(0.92).
- The five turkeys are Royal Palms, a white turkey with black markings. Render the turkey emoji through a monochrome CSS filter so it reads black and white: grayscale(1) contrast(1.3) brightness(1.22). The grayscale strips the color, the brightness lifts the body toward white, and the contrast keeps the dark markings dark.
- Name the turkeys as Royal Palms in the cast copy. The pen event for a turkey reads "Royal Palm penned. 15 points." and a dog assist on a turkey reads "herded a Royal Palm in." A penned turkey's tally mark in the pen keeps its black and white filter, and so does a tinted goat's. Counts and points do not change: 5 turkeys, 15 points each.

### Hamster

- Hamster first crosses about 8 seconds into the round, and a new crossing starts about every 15 seconds (the reference build waits a random 12 to 18 seconds after the previous crossing resolves).
- He enters from the left or right edge at a random height and walks straight across at a slow, steady pace, crossing the full field in about 9 to 10 seconds.
- If he reaches the far edge unpenned, he leaves, the event line notes that he crossed on his own schedule, and the next crossing is scheduled.
- The singularity rule: exactly one Hamster exists. While he is on the field, no second pig can spawn, ever. There is one pig on this homestead, and the game keeps it that way; the spawn function itself refuses to create a pig while one is on the field.

### Buster

- Buster is the homestead's macaw, a blue and gold macaw, 26 years old, and she talks. She says "hello" and "buster", and occasionally "shut up".
- Now and then, roughly twice a round, Buster flies across the TOP of the field, fast, crossing the whole field in about 3 seconds. The reference build sends the first flight about 10 to 18 seconds into the round and schedules the next flight about 20 to 28 seconds after the previous one resolves.
- She enters from the left or right edge near the top of the field and flies straight across. She is never penned, never counted in the herd, and never herded by the dogs.
- Tapping her mid-flight scores 25 points, she leaves the field, and the event line shows her squawk in the form: Buster squawks: "hello". Her squawks rotate through "hello" and "buster", and about one squawk in six is "shut up" instead.
- If she crosses untapped, nothing happens: no points, no penalty, no message. The next flight is simply scheduled.

### Dogs

- Every 9 to 15 seconds, if at least one herd animal is loose on the field, a dog herds one random loose herd animal into the pen for free: the animal is penned, its points are awarded, its counter and pen tally update, exactly as if the player had tapped it.
- The event line names the dog: "Freya herded a turkey in." The four names rotate in order: Freya, Bunny, Loki, Poppi, then back to Freya.
- Dogs never herd cats and never herd Hamster. Dogs have excellent judgment.

### The event line

- One line of text under or over the field narrates the round: the start ("The gate is open. Sixty seconds. Good luck."), pens, cat penalties, Hamster arrivals and outcomes, Buster squawks, dog assists, the Herd Cleared bonus, and the final score at the end.
- Every notable event replaces the line. The line is polite (aria-live) so screen readers hear the round's story.

### The clock and edge cases

- The clock counts down in seconds and displays whole seconds, rounding up, so it reads 60 at the start and 0 only when the round is over.
- If a cat tap takes the clock to zero or below, the clock stops at zero and the round ends.
- If the clock reaches zero while a tap is already in flight (the pointer is down and the tap handler has begun), resolve that tap first, then close the round. The reference build checks the clock once per animation frame and ends the round at the top of the next frame, so a tap that landed first always counts.
- Once the round is over, taps on leftover sprites do nothing. Animals stop being pennable even though they may still be visible until the next Start.
- If the player pens the entire herd before time expires, the Herd Cleared bonus lands and the round plays out its remaining seconds with cats only. This is the cats' moment and they know it.
- Best score persists between visits in localStorage under the key goatRoundupBest, stored as a plain integer string. If localStorage is unavailable, the game still plays; the best score simply shows the best of the current page view.

## 6. Presentation

- The field is green, a mowed pasture look. Subtle striping is fine. The pen is a clearly visible area along the bottom of the field, set apart with a dashed fence line and a small label ("The pen"), where penned animals' emojis collect as tally marks.
- The HUD sits above the field and shows six things: Score, Time left, Goats penned out of 15, Chickens penned out of 15, Turkeys penned out of 5, and Best score.
- Below the field: the event line and the Start button (labeled Start round, then Restart round during play, then Play again after the round).
- The page is responsive and mobile first: it must be fully playable one handed on a phone screen held upright. The field is roughly 60 percent of the viewport height, at least about 340 pixels tall.
- Page scroll is locked during play so a thumb chasing a turkey never drags the page along. The reference build sets overflow hidden on the body while a round runs and gives the field and sprites touch-action none.
- Goats show variety: mixed sizes from kid small (0.6 times) to big billy large (1.6 times), tap target included, and a share of them tinted brown, dark, pale, or tan by CSS filter. Turkeys render in black and white as Royal Palms. The variety is scale and filter work on the same emojis.
- Emojis are the only art. No images, no icon fonts, no canvas drawings of animals. Layout and color come from CSS alone.

## 7. Page furniture

The game page on thelogfile.com carries the same furniture as the site's other doors, and an adaptation on another site should keep the equivalents:

- A title and a one paragraph introduction that says plainly that this door is a game, and tells the fiction in two or three sentences.
- The byline near the top: "A game by Rook, inspired by Chad Kovac's life and activity outdoors." An adaptation keeps the same sentence shape and swaps in its own maker's name where Rook's name stands.
- A date line with the build date written out in full, in the reference build: "Built October 23, 2026." Facts carry their own dates; the date lives in the entry, not in a heading.
- A short How it works section covering tapping, the scoring, the cat rule, the Hamster rule, the Buster flyover, the dog assists, and the Herd Cleared bonus.
- The game itself, with the HUD, field, event line, and Start button described above.
- At the very bottom, the anonymous door comment box that every door on the site carries, where visitors can leave a comment about how the door felt. On thelogfile.com this is the shared door comments component keyed to the door slug "roundup". An adaptation on another site should end its page with whatever comment or guest book ritual that site keeps, or a simple note inviting word back to the maker.

## 8. Build notes

- One file. HTML, CSS in a style element in the head, JavaScript in a script element at the end of the body. No external requests of any kind.
- Sprites are button elements, absolutely positioned inside the field's pasture area, moved by updating their left and top style in pixels from the animation loop.
- State lives in plain variables: score, time left, penned counts per kind, unreleased counts per kind, the sprite list, Hamster's state (a single reference, null when he is off the field, with the spawn function guarded so a second pig can never be created while one exists), Buster's state and her squawk counter, four countdown timers (next spawn, next Hamster crossing, next Buster flight, next dog assist), and the best score.
- Nothing about the game needs a network, an account, or a cookie. The only storage is the localStorage best score.

## READY PROMPT

Hand the block below to a builder agent as is. It is the whole design in imperative form.

```
Build a game called Goat Roundup as a single self contained HTML file with vanilla JavaScript and CSS in the same file, no dependencies, no libraries, no build step, and emojis as the only art assets. Make it a 60 second tap game designed mobile first for one thumb on a phone screen, with touch and mouse both working through pointer events and tap targets at least 48 pixels across. Set the fiction: the herd got loose on a Tennessee homestead and the player pens them before the clock runs out. Use this exact cast: 15 goats (🐐), 15 chickens (🐔), and 5 Royal Palm turkeys (🦃) as the pennable herd of 35; 16 cats (🐱) that can never be penned; one pig (🐷) named Hamster who recurs; one macaw (🦜) named Buster who flies over now and then; and 4 dogs (🐕) named Freya, Bunny, Loki, and Poppi who help. Give every goat its own random size between 0.6 and 1.6 times the normal sprite size, tap target included, so the smallest read as kids, and tint some goats with CSS filters (a brown sepia, a darker coat, a pale cream, a tan) so the herd reads as many colors, types, and sizes. Render the turkey emoji through a black and white filter, grayscale(1) contrast(1.3) brightness(1.22), so the Royal Palms read white with black markings, call them Royal Palms in the page copy, and make the turkey pen event read "Royal Palm penned." Score a penned goat at 10 points, a chicken at 5, a turkey at 15, and Hamster at 50, and award a one time 100 point Herd Cleared bonus for penning all 35 herd animals in one round. Make animals spawn at random field edges and wander between random waypoints with occasional short dart bursts at about 2.4 times speed, keep at most about 12 sprites on the field at once with no more than 3 cats at a time, and scale all animal speeds up as the score climbs, up to about 2.6 times base speed. Make Hamster cross the field slowly about every 15 seconds, taking about 9 to 10 seconds to cross, and require 3 taps to pen him. There is exactly one Hamster: while he is on the field, no second pig may spawn, ever. Have Buster fly fast across the top of the field roughly twice a round, crossing in about 3 seconds; she is never penned, and tapping her mid flight awards 25 points and puts a squawk in the event line in the form Buster squawks: "hello", her squawks rotating through "hello" and "buster" with "shut up" rare; if she crosses untapped, nothing happens and there is no penalty. Make a cat tap cost 2 seconds off the clock while the cat stays on the field and darts away. Every 9 to 15 seconds, have the next dog in rotation herd one random loose herd animal into the pen for free with its points awarded, and say so in an event line that names the dog, in the form "Loki herded a goat in." Draw a green field with a visible pen area along the bottom where penned animals collect as small emoji tally marks, a HUD showing score, time left, goats penned out of 15, chickens out of 15, turkeys out of 5, and best score, an event line narrating the round, and Start, Restart, and Play Again states on one button. Lock page scroll during play. End the round at 0 seconds, show the final score, and persist the best score in localStorage under the key goatRoundupBest. Near the top of the page put a byline naming yourself as the maker, built as the words "A game by" followed by your own name followed by the words ", inspired by Chad Kovac's life and activity outdoors." so the finished byline reads as one complete sentence, then a full build date line written out in words, then a short How it works section, then the game below it.
```
