Behind the Scenes · Production Journal

Lemonade Stand Tycoon

An open production journal for the Lemonade Stand Tycoon commercial. We have the art board and build receipts ready. The final moving video is still blocked until voice, music, motion, and composite work finish.

10/10shot manifests
65game-art assets
OD-018 + OD-020 cascadeactive directives
2026-05-20 20:53 UTClast rebuilt

Production Journal

Tap a chapter to drill into stills, sprites, prompts, audio, and the full asset evolution. Every artifact in the LST commercial build is here.

186sprites
10shots
7chapters
00📝

The Concept

Brainstorm, twin pivot, product brief.

01🎬

Story & Voice

Storyboard kernel, shot manifests, voice lines.

02🎨

Asset Library

Sprites, characters, props, UI, environments.

03🎞️

Per-Shot Renders

Stills + motion clips, one per beat.

04🔊

Audio Tracks

Voice WAVs, SFX, music bed.

05🎬

Composite & Final

Final cut MP4.

06💰

Budget & Spend

Cost ledger under $200 cap.

00

The Concept

Brainstorm, the twin pivot moment, and the first product brief.

5/5 docs

Brainstorm — Lemonade Stand Tycoon

complete

_bmad-output/planning-artifacts/brainstorm-lst.md · 16.3 KB

Read

Lemonade Stand Tycoon Brainstorming Analysis

Issue: ROB-26 Artifact: /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md Date: 2026-05-18 Workflow: /bmad-brainstorming, applied headlessly for OD-018 cascade step 1

Source Inputs

Directive material used:

  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-pst.md

Canon material used:

  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md

BMAD Execution Notes

This pass rewrites Build #1 brainstorming canon. The current project story is that Lemonade Stand Tycoon won during brainstorming after the twins reviewed the top tycoon concept.

No domain research, market research, product brief, storyboard, asset generation, site publishing, paid provider calls, or public URL changes were performed in this issue.

The local BMAD manifest names /bmad-brainstorming, but the full skill body files are not present in this checkout. This artifact follows the available BMAD brainstorming output pattern from brainstorm-pst.md and applies the same internal ideation structure to the LST rewrite.

Recommended brainstorming lenses applied inside this pass:

  1. Stakeholder Round Table
  2. User Persona Focus Group
  3. SCAMPER Method
  4. Pre-mortem Analysis
  5. Expand or Contract for Audience

Brainstorm-Stage Twin Pivot

Canonical brainstorm-stage event:

The twins liked the tycoon loop. They did not want Pet Salon Tycoon as the first build because the theme felt too girly. Dad and Claude used that feedback immediately and moved the winning concept to Lemonade Stand Tycoon.

Twin-layer wording for later customer surfaces:

  • "We liked the tycoon part."
  • "We did not want the pet salon first."
  • "Then Lemonade Stand Tycoon sounded way more fun."
  • "Now our shop sells drinks, upgrades, and bigger stands."

Parent-layer explanation:

The useful signal was not that the tycoon structure failed. The loop still worked: buy something, make something, serve customers, earn coins, and upgrade. The theme missed the twins' taste, so the brainstorm moved to a stand-business fantasy they recognized faster.

Canon Lock

The core LST promise:

> Buy lemons, make lemonade, serve customers, upgrade the stand, and grow bigger every day.

This is the shortest canon sentence for Lemonade Stand Tycoon. Any feature that does not reinforce that sentence should be deferred, cut, or reframed.

Canonical LST video grammar comes from OD-018:

  • Buy lemons.
  • Squeeze and pour.
  • Set price.
  • Serve customers.
  • Earn coins.
  • Upgrade stand.
  • React to weather.
  • Repeat bigger.

Forbidden drift:

  • No generic idle factory where lemonade is only decoration.
  • No pet-salon service fantasy as the active product.
  • No tower-defense lanes, enemy waves, combat numbers, or boss framing.
  • No food-realism register that stops reading as Roblox.
  • No adult business simulator language in twin-facing copy.
  • No paid random item pressure as a core progress requirement.
  • No narrative that preserves a late project pivot; the pivot belongs at brainstorming.

Winning Concept

Winner: Lemonade Stand Tycoon.

Why it wins:

  • The twins recognized the fantasy quickly.
  • The tycoon loop stays simple and visible.
  • The first play loop can close in under 30 seconds.
  • The stand upgrades are screen-readable on mobile.
  • Weather creates kid-clear variety without needing combat.
  • Advertising adds a playful growth lever.
  • Lemon varieties and recipe cards add collection depth.

First 30-second loop:

  1. Player buys lemons.
  2. Player taps the squeezer.
  3. Pitcher fills.
  4. Price sign flips to a simple starter price.
  5. Customer walks up.
  6. Player serves a cup.
  7. Coin counter pops.
  8. Upgrade button lights.
  9. Stand changes from crate table to painted mini-stand.
  10. Next customer arrives faster.

Screenshot moment:

The player stands beside a freshly upgraded yellow-and-blue lemonade cart. A customer holds a cup, coins pop above the counter, the weather widget shows sunny, and the upgrade button glows for the next stand tier.

Twin-layer line:

  • "We can show friends our first real lemonade stand."

Simulator-Tycoon Canon

LST should feel like a Roblox tycoon with an active service loop, not a reskinned cash dropper.

Core loop:

  1. Player checks the day and weather.
  2. Player buys lemons and ice.
  3. Player squeezes, mixes, and pours a batch.
  4. Player sets a kid-readable price.
  5. Customers spawn from the sidewalk.
  6. Player serves cups before demand cools down.
  7. Coins, tips, and stand-star progress appear.
  8. Upgrade button lights up.
  9. Stand, sign, menu, or helper visibly improves.
  10. The next day starts with a stronger stand.

MVP loop constraints:

  • One sunny sidewalk or front-yard map.
  • One starter stand.
  • One lemon-buy action.
  • One squeeze-and-pour station.
  • One price sign.
  • One customer queue.
  • One coin and stand-star reward loop.
  • One visible stand upgrade path.
  • One weather widget with sunny, cloudy, rain, and heatwave states.
  • One ad surface, such as a flyer board or sidewalk sign.

Progression should be layered inside one map:

  • Stand upgrades: crate table, wood cart, painted kiosk, branded mini-shop.
  • Recipe upgrades: classic, pink, strawberry, lavender, extra-ice.
  • Supply upgrades: better lemons, faster pitcher, larger ice cooler.
  • Customer upgrades: more visitor types, bigger patience bar, larger tips.
  • Advertising upgrades: hand sign, flyers, billboard, local post board.
  • Weather prep: umbrella cover, ice storage, rain day prep, heatwave surge.
  • Collection surface: Recipe Book and Lemon Variety Board.

Lemonade Loop Primitives

Treat the lemonade loop as a reusable state pipeline:


DayStart
  -> WeatherRead
  -> SupplyBuy
  -> BatchMake
  -> PriceSet
  -> CustomerServe
  -> RewardEmit
  -> UpgradePrompt
  -> StandChange
  -> NextDay

Implementation primitives:

  • DayState: day number, weather, demand modifier, prep hint.
  • SupplyDefinition: lemons, ice, cups, sugar, recipe modifier.
  • RecipeDefinition: id, color, taste tag, unlock tier, customer preference.
  • BatchState: empty, squeezed, mixed, chilled, ready, sold out.
  • PriceSign: starter, fair, pricey, surge, discount.
  • CustomerArchetype: kid, parent, runner, dog-walker, mail-carrier, tourist.
  • DemandSignal: sunny rush, cloudy slow, rain close-prep, heatwave surge.
  • RewardEmit: coins, tips, stand stars, recipe progress, ad meter.
  • UpgradeDefinition: stand tier, tool speed, storage size, sign reach, helper.

Visual primitives:

  • Lemon crates, rolling lemons, pitcher fill, cup stack, chalkboard price.
  • Coin pop, tip jar bounce, stand-star sparkle, upgrade-button glow.
  • Sunny park path, sidewalk queue, R15 customer avatars, mobile-safe HUD.
  • Weather widget, day counter, coin counter, price tag, upgrade popup.
  • Before/after stand tiers that read at thumbnail size.

Audio primitives:

  • Short twin-voice lines on high-value beats, not constant chatter.
  • Pour sound, coin ding, customer sip, chalk sign flip, sunny day chime.
  • Weather alert sting when heatwave, rain, or cloudy slowdown arrives.
  • Voice clips must resolve to pre-uploaded, moderated Roblox audio assets with text fallback before gameplay or capture scripts reference them.

Sample twin-facing lines:

  • "Sun is out. People want lemonade."
  • "We need more ice."
  • "That price looks fair."
  • "Customer served. Coins popped."
  • "Upgrade the stand now."

Customer-Reaction Beats

The customer reaction is the payoff surface. It proves the loop worked.

Reaction beat pattern:

  1. Customer approaches with a visible want bubble.
  2. Player serves a cup.
  3. Customer drinks for one beat.
  4. Face and body animation change.
  5. Tip jar or coin pop lands.
  6. Stand-star progress moves.
  7. Upgrade prompt appears after the reaction, not before.

Reaction archetypes:

  • Refreshed: "That hit the spot."
  • Surprised: "Pink lemonade? Nice."
  • Loyal: "I am coming back tomorrow."
  • Heatwave: "Extra ice saved me."
  • Rain prep: "Smart umbrella."
  • Price-sensitive: "Fair price. Good cup."

Customer reactions should vary by weather, price, recipe, and queue wait. Avoid one generic cheer animation.

Weather And Advertising Canon

Weather should change decisions without becoming a simulation spreadsheet.

Weather states:

  • Sunny: normal demand, clean tutorial day.
  • Cloudy: slower demand, good day for upgrades.
  • Rain: stand closes or prep mode starts; player buys supplies and improves cover.
  • Heatwave: demand surge, ice pressure, big coin chance.

Advertising should be visible and playful:

  • Sidewalk sign pulls nearby customers.
  • Flyers increase spawn rate for one day.
  • Billboard creates a short rush.
  • Local post board gives a small customer boost.

Advertising is not social-media pressure. It is a stand-growth lever shown with props, signs, and customer movement.

Monetization And Policy Posture

LST can support purchases later, but the brainstorm canon keeps the first loop earnable.

Allowed future surfaces:

  • Stand cosmetic skins.
  • Special sign styles.
  • Extra helper outfits.
  • Faster restock convenience.
  • Recipe-card collection with clear odds, free earn path, and policy controls if random paid items ever appear.

Disallowed future surfaces:

  • Paid-only access to core lemonade making.
  • Paid-only first stand upgrade.
  • Random paid items without odds and region policy controls.
  • Robux framed as a reward emitted by gameplay.
  • Failure pressure that pushes a purchase after a bad day.

Gameplay counters are fictional in-experience currencies and progress data. Robux remains platform purchase context only.

Roblox-Fidelity Lenses

These lenses must be visible early, not discovered during video production.

Art And World

The world should read as blocky Roblox-stylized at first glance.

Required cues:

  • Sunny sidewalk, park, or front-yard map.
  • Low-poly props with chunky silhouettes.
  • Bright stand tiers with simple materials.
  • Lemon crates, chalkboard signs, pitchers, cups, coins.
  • Thumbnail-readable color contrast.

Avoid:

  • Photoreal fruit still life.
  • Generic mobile-game storefront art.
  • Soft pastel illustration that could be any kids' app.
Avatars

The main player and customers should read as Roblox avatars.

Required cues:

  • R15 blocky proportions.
  • Roblox face grammar.
  • Layered items or simple accessories.
  • Customer NPCs who approach, pause, react, and leave.
  • Dad, Twin A, and Twin B only when the surface is project-story content, using BRAND-CANON likeness paths.

Avoid:

  • Hand-painted mascot customers.
  • Photoreal kids.
  • Characters that drift from the approved family canon.
UI And HUD Chrome

HUD chrome makes the game feel real.

Required cues:

  • Coin counter.
  • Day counter.
  • Weather widget.
  • Price sign or price popup.
  • Upgrade button.
  • Customer want bubble.
  • Recipe card or stand-tier card.
  • Optional mobile-screen frame for video beats.

At least most video shots should show some gameplay chrome unless the shot is a deliberate hero moment.

Visible Gameplay Loop

The loop must be nameable by a cold 6-10-year-old viewer.

Required order:

  1. Buy lemons.
  2. Squeeze and pour.
  3. Set price.
  4. Serve customer.
  5. Earn coins.
  6. Upgrade stand.
  7. Weather event.
  8. Repeat bigger.

If a shot could be mistaken for a generic lemonade picture, add UI, avatar action, or a before/after stand change.

Success Criteria Check

OD-013 section 2 success criteria:

  1. Twins are excited to share with friends. Recess-energy. Screenshot-and-send. Would a 10yo actually take this to school and brag about it.
  2. The game feels real. Production polish. Not vapourware. Visual consistency, audio that lands, mechanic that closes a loop. A stranger watching the commercial does not register "AI slop" or "demo".
  3. The twins are excited. Creative agency, build literacy, ship-something achievement. The "fun parts" gap stays load-bearing (per OD-002 LEARNING-first rubric).

LST evaluation:

CriterionBrainstorm answerRisk to watch
Twins are excited to share with friendsACCEPT. The upgraded stand screenshot is easy to show and explain.If the first loop takes too long, the screenshot moment gets buried.
The game feels realACCEPT with fidelity guards. LST has visible verbs, avatar service, HUD chrome, and tycoon upgrades.If art becomes generic fruit-shop CGI, the Roblox read fails.
The twins are excitedACCEPT. The winning theme comes directly from their brainstorm-stage feedback.If later docs make Dad or Claude the taste-owner, creative agency weakens.

SCAMPER Highlights Incorporated

Substitute:

  • Replace pet grooming stations with lemonade-making stations.
  • Replace salon tips with stand coins, tips, and stand stars.
  • Replace pet reveals with stand-tier and recipe reveals.

Combine:

  • Combine tycoon upgrades with weather decisions.
  • Combine recipe collection with lemon varieties.
  • Combine customer reactions with price and weather feedback.

Adapt:

  • Adapt service-ticket clarity into customer want bubbles.
  • Adapt store-upgrade loops into stand-tier changes.
  • Adapt collection-game joy into a Recipe Book.

Modify:

  • Make the first loop close in under 30 seconds.
  • Make every upgrade visible on the stand model.
  • Make weather readable from one small HUD widget.

Put to another use:

  • Use rain days as prep days.
  • Use advertising as a visible customer-spawn lever.
  • Use a chalkboard as both price sign and tutorial surface.

Eliminate:

  • Remove pet-salon theme as the active Build #1 direction.
  • Remove combat grammar.
  • Remove spreadsheet economy detail from twin-facing surfaces.
  • Remove any Robux-as-gameplay-reward implication.

Reverse:

  • Start with selling one cup, then unlock supply strategy.
  • Let weather teach upgrades instead of hiding upgrades in menus.
  • Let twins' feedback choose the theme before adult optimization.

Tier-2 Vault Entry: Pet Salon Tycoon

Pet Salon Tycoon remains a deliberate vault concept, not the active product.

Demotion rationale:

  • The twins liked the tycoon loop.
  • The pet-salon theme missed their taste for Build #1.
  • The concept still has useful loop lessons: service queue, before/after payoff, customer reaction, upgrade rhythm.
  • It may return later if the audience or build order changes.

Vault summary:

> Pet Salon Tycoon: A cozy pet-service tycoon where messy pets become shiny and customers react. Demoted after the twins chose Lemonade Stand Tycoon as the stronger first build.

Do not use PST as the Build #1 product name in current-state planning docs after this brainstorm handoff.

Priority Idea Set

Highest-value ideas for LST build #1:

  1. First cup sold in under 30 seconds.
  2. Buy lemons, squeeze, pour, sell, upgrade loop.
  3. Starter stand with obvious before/after upgrade states.
  4. Sunny sidewalk or front-yard Roblox map.
  5. R15 player avatar and customer NPC queue.
  6. Weather widget with sunny, cloudy, rain, and heatwave.
  7. Price sign that changes customer response.
  8. Recipe Book for classic, pink, strawberry, lavender, extra-ice.
  9. Lemon Variety Board for collection depth.
  10. Advertising props that visibly increase customer flow.
  11. Tip jar, coin counter, day counter, stand-star meter.
  12. Customer reaction animations tied to recipe, price, and weather.
  13. Deterministic capture beats for later video work.
  14. Reference-image-driven asset set for avatars, stand tiers, lemons, props, weather, and HUD.
  15. Twin-authored jokes, recipe names, and stand names.

Next Handoff

The next OD-018 cascade steps should convert this brainstorm into:

  • RobloxSME audit comments on LST brainstorm canon.
  • Domain research on lemonade-stand economy UX patterns and Roblox tycoon visual grammar.
  • Market research on actual Roblox tycoon comparables and shipped loops.
  • A product brief that treats LST as Build #1 from the start.
  • Updated canon and asset-library work that replaces PST product references with LST references.

Amendment Log

Initial ROB-26 LST rewrite:

  • Made Lemonade Stand Tycoon the winning Build #1 brainstorm concept.
  • Placed the twins-feedback pivot near the top as a brainstorm-stage event.
  • Preserved Pet Salon Tycoon only as a demoted vault concept.
  • Added OD-013 success-criteria evaluation.
  • Added early Roblox-fidelity lenses for art/world, avatars, UI/HUD chrome, and visible gameplay loop.
  • Preserved OD-018 history-rewrite framing by not carrying Phase 8 as the public narrative pivot.

Product Brief

complete

_bmad-output/planning-artifacts/product-brief.md · 17.0 KB

Read

Product Brief: Lemonade Stand Tycoon

Issue: ROB-31 Date: 2026-05-18 Workflow: /bmad-product-brief Output owner: ProductManager OD-018 cascade step: 5

Canon Used

  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md: LST is Build #1; the twins-feedback pivot is a brainstorm-stage event.
  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md: Dad, Twin A, Twin B, Claude, and Crew likeness discipline.
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md: TWIN layer for kid-facing promise lines; parent layer for operator-readable explanation.
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md: library-path discipline; downstream LST asset work must create concrete paths before visual references are cited.
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md: the public story is a learning story with three reading layers.

BMAD Execution Notes

Workflow run: /bmad-product-brief.

Inputs synthesized:

  • /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/domain-research.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/market-research.md
  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md

Advanced elicitations applied through product-brief synthesis:

  1. Stakeholder Round Table.
  2. User Persona Focus Group.
  3. SCAMPER Method.
  4. Pre-mortem Analysis.
  5. Expand or Contract for Audience.

Party-mode findings are folded into the brief as product decisions, risks, scope cuts, and downstream recommendations rather than preserved as transcript.

This issue did not run PRD, storyboard, canon rewrites, asset generation, site publishing, video production, paid provider calls, or public URL changes.

Canonical Build Story

Lemonade Stand Tycoon is Build #1 from the start of the current project narrative.

At the brainstorming stage, Dad showed the strongest tycoon concept to Twin A and Twin B. The twins liked the tycoon loop, but they did not want Pet Salon Tycoon first because the theme felt too girly. Dad and Claude used that feedback immediately and moved the winning concept to Lemonade Stand Tycoon.

Pet Salon Tycoon is no longer the first build. It is a tier-2 vault concept that may return later if the family wants it.

Twin-layer wording for customer surfaces:

We liked the tycoon part.

We wanted lemonade first.

Now we sell cups, earn coins, and upgrade.

Our stand gets bigger every day.

Product Promise

Lemonade Stand Tycoon is a Roblox simulator-tycoon for 6-10-year-old players. The player buys lemons, makes lemonade, serves customers, earns coins, upgrades a stand, and handles simple weather changes.

The first build should feel like a small playable Roblox business, not a generic idle factory and not a video-only concept. The fantasy is visible at phone-screen size: lemons, pitcher, cups, price sign, customer queue, coin pop, weather widget, and a bigger stand.

Shortest canon promise:

> Buy lemons, make lemonade, serve customers, upgrade the stand, and grow bigger every day.

Twin promise:

We sell our first cup and upgrade our stand.

Friends can see our bigger stand right away.

Problem

The twins liked the tycoon shape but rejected the first pet-salon theme. The product problem is not "find any tycoon"; it is "make the tycoon loop match the twins' taste and read instantly as Roblox."

Lemonade solves the recognition problem. A kid can understand the stand fantasy in one second: lemons become drinks, customers pay coins, and the stand grows. That clarity gives Dad and the team a conservative Build #1 that can still feel real.

For Dad, the build also needs to prove the family can ship one polished loop with visible gameplay, not a pile of unfinished systems. A focused loop beats three shallow loops.

Audience

Primary players: 6-10-year-old Roblox players who like tycoons, simulator loops, visible upgrades, bright props, and showing friends what they built.

Primary builders: Twin A and Twin B. They contribute stand taste, recipe ideas, customer reactions, weather jokes, and the "would we show this to friends?" read.

Support role: Dad guides production and protects scope. Dad does not replace the twins' creative surface.

Parent-readable audience: family and friends who want to see how the twins' feedback shaped a real product decision.

Genre And Market Position

Genre: single-player Roblox simulator-tycoon with an active stand-service loop.

Closest Roblox reference patterns from market research:

  • Restaurant Tycoon 3: visible service sequence, customers, bills, and upgrades.
  • Welcome to Bloxburg: grounded job fantasy where earning money feels recognizable.
  • Pet Simulator 99: collection clarity, icons, and constant progress feedback.
  • Grow a Garden: simple resource cycle and shareable "look what I built" payoff.
  • Existing lemonade tycoons: validated stand theme, supply loop, customers, workers, and upgrades.

Differentiation:

LST keeps the tycoon loop the twins liked while replacing the rejected pet-salon fantasy with a stand-business fantasy they recognized faster. Build #1 should feel more polished, more Roblox-readable, and more loop-visible than a static lemonade cash-dropper.

First Playable Loop

The first playable and video promise is concrete:

  1. Buy lemons.
  2. Squeeze and pour.
  3. Set price.
  4. Serve a customer.
  5. Earn coins.
  6. Upgrade the stand.
  7. React to weather.
  8. Repeat bigger.

The first loop should close in under 30 seconds:

  1. Player taps Buy Lemons.
  2. Lemon crate fills on the counter.
  3. Player taps or holds Squeeze.
  4. Pitcher fills with bright lemonade.
  5. Player flips the price sign to a starter price.
  6. One customer walks up with a want bubble.
  7. Player serves one cup.
  8. Customer drinks and reacts.
  9. Coins pop over the stand.
  10. Upgrade Stand glows.
  11. The stand changes from crate table to painted starter stand.

Screenshot Moment

The friend-share moment happens immediately after the first visible stand upgrade.

Screenshot composition:


Painted lemonade stand + customer holding cup + coin pop +
sunny weather widget + glowing Upgrade Stand button.

This is the moment the twins can show a friend. The screenshot should include the stand, customer, cup, coin feedback, HUD weather, and next upgrade affordance. It should not be a cropped beauty render, a balance screen, or a generated image upload.

Twin-layer candidate line:

We sold one cup and our stand got bigger.

MVP Scope

Build #1 scope:

  • One sunny sidewalk, park, or front-yard map.
  • One player stand.
  • One stand upgrade path.
  • One customer queue.
  • One lemon-buy action.
  • One squeeze-and-pour station.
  • One simple price sign.
  • One reward loop: coins plus stand-star progress if needed.
  • One primary button that changes by loop beat.
  • One weather widget with sunny, cloudy, rain, and heatwave states.
  • Simple recipes: classic first, pink or extra-ice as early visible variety if scope allows.
  • Customer reactions tied to price, weather, recipe, and wait time.
  • Mobile-safe HUD: day, weather, coins, customer want bubble, price sign, and Upgrade Stand.

Out of MVP:

  • Multiple maps.
  • Multiple stand branches.
  • Multiple simultaneous queues.
  • Multiplayer.
  • Trading.
  • Full staff automation.
  • Prestige or rebirth.
  • Complex recipe math.
  • External social posting mechanics.
  • Runtime generated voice.
  • Runtime screenshot upload or persistence.
  • Paid-random core loop.
  • Public URL or publish commitments from this brief.

Build #1 Scope Cuts

The game feels real only if one loop is polished. These cuts protect that:

  • One map beats three half-built locations.
  • One stand path beats a broad upgrade tree.
  • One queue beats complex crowd simulation.
  • Simple weather beats hidden economy math.
  • Simple recipes beat a spreadsheet of ingredients.
  • Earned first upgrades beat paid shortcuts.
  • Active serving beats passive droppers in the first minute.

Later content can add helpers, flyers, billboards, recipe collections, more locations, offline income, and prestige after the first stand loop proves itself.

Weather Product Contract

Weather changes decisions without becoming a simulation spreadsheet.

MVP weather states:

WeatherPlayer readProduct behavior
SunnyGood selling day.Tutorial-friendly demand and clean first loop.
CloudySlower day.Lower spawn rate; good time to restock or upgrade.
RainPrep day.Stand pauses or closes; player improves cover and supplies.
HeatwaveRush day.More customers; ice pressure and bigger reward chance.

Rules:

  • The first tutorial day is sunny.
  • Weather must show in the HUD and world.
  • Weather effects should change visible customer behavior.
  • Rain should not punish a brand-new player.
  • Heatwave should show both opportunity and pressure.

Economy And Monetization Posture

The core loop must be earnable:

  • Coins come from in-experience lemonade sales, tips, and progress beats.
  • First stand upgrades are earned through play.
  • Recipe and lemon variety unlocks improve color, choice, and reactions.
  • Paid random items are not part of the Build #1 core loop.
  • If future paid random recipe cards or cosmetic crates exist, numerical odds and per-player policy handling are required before spend.
  • Do not present Robux as a gameplay reward.

This brief does not authorize paid provider calls, video generation, site publishing, public URL changes, or canon amendments.

Roblox-Fidelity Acceptance Lenses

Downstream PRD, storyboard, asset, and review work must evaluate the product through four Roblox-fidelity axes:

  1. Art/world. The map, props, and stand tiers must read as blocky Roblox-stylized space, not generic CGI, photoreal fruit, or flat app art.
  2. Avatars. Player and customer NPCs must read as Roblox R15 or R6 avatars with recognizable Roblox face grammar and blocky proportions.
  3. UI/HUD chrome. Coin counter, day counter, weather widget, price sign, customer want bubble, mobile frame, and Upgrade Stand affordance must be visible in key beats.
  4. Gameplay-loop visibility. A kid watching cold must be able to name the loop: buy lemons, squeeze and pour, set price, serve, earn coins, upgrade, weather, repeat bigger.

If a downstream artifact hides the interface, removes the customer, skips a loop verb, or shows generic lemonade art without Roblox avatars, it fails this lens.

Success Criteria

Operator acceptance lens:

  1. Twins are excited to share with friends.
  2. The game feels real.
  3. The twins are excited.

OD-013 §2 success criteria, cited verbatim:

  1. Twins are excited to share with friends. Recess-energy. Screenshot-and-send. Would a 10yo actually take this to school and brag about it.
  2. The game feels real. Production polish. Not vapourware. Visual consistency, audio that lands, mechanic that closes a loop. A stranger watching the commercial does not register "AI slop" or "demo".
  3. The twins are excited. Creative agency, build literacy, ship-something achievement. The "fun parts" gap stays load-bearing (per OD-002 LEARNING-first rubric).

Direct product evaluation:

  • Share with friends: the screenshot moment is the first painted stand upgrade with customer, cup, coin pop, sunny widget, and glowing Upgrade Stand.
  • Game feels real: the first loop closes in under 30 seconds with a visible prop, avatar action, and HUD response for every verb.
  • Twins are excited: the pivot visibly proves their feedback changed Build #1, and their next creative inputs shape recipes, stand look, customer reactions, and weather jokes.

Twin Feedback As Product Requirement

The brainstorm-stage pivot is not a side note. It is the first product requirement.

Twin A and Twin B taught the project this:

  • The tycoon loop worked.
  • The first theme did not fit.
  • Lemonade felt more fun to show.
  • Stand growth is easier to brag about.

Product requirements from that signal:

  • Show stand growth early.
  • Keep the first sale fast.
  • Make the customer reaction visible.
  • Keep the UI readable on mobile.
  • Let the twins name and shape fun details.
  • Treat Pet Salon Tycoon only as a tier-2 vault idea.

Asset And Canon Discipline

Current canon files remain the source of truth. This brief does not amend them.

Required discipline for downstream LST work:

  • Characters use BRAND-CANON.md names and likenesses only.
  • Customer-facing copy follows COPY-VOICE.md.
  • Public story work follows JOURNEY-STORY-CANON.md.
  • Concrete visual references must use ASSET-LIBRARY.md paths once LST assets are created.
  • Do not invent prose-only references when a library path exists.
  • The current asset library still contains PST paths; the LST asset-library rewrite is a later OD-018 cascade step.

Expected downstream LST library families:

  • site/assets/library/style-packs/lst-tycoon-sunny-v1/
  • site/assets/library/environments/lst-lemonade-stand-v1/
  • site/assets/library/props/lemonade-stand/
  • site/assets/library/props/lemons/
  • site/assets/library/props/customers-park/
  • site/assets/library/props/ui-cards/
  • site/assets/library/props/vfx/

These are recommendations for the later asset-library rewrite, not artifacts created by this issue.

Risks And Product Decisions

Theme risk: treating LST as a late rescue would violate OD-018. Current product narrative must present LST as Build #1 from the beginning, with the twins-feedback pivot happening at brainstorming.

Loop risk: LST can become a passive cash-dropper if lemonade is only decoration. The first loop must require visible buy, squeeze, price, serve, reward, and upgrade beats.

Scope risk: helpers, extra maps, prestige, recipe depth, and multiplayer can make the build feel bigger on paper and weaker in play. Build #1 cuts to one map, one stand path, one queue, simple weather, and simple recipes.

Roblox-fidelity risk: the prior video failure cannot be fixed by a theme swap alone. Downstream artifacts must show Roblox art/world, Roblox avatars, HUD chrome, and visible gameplay verbs.

Policy risk: paid random items can create compliance and trust problems. The core loop avoids paid random pressure; any future paid random surface requires clear odds and policy gating.

Share risk: a generic screenshot prompt is too vague. The product share moment is deterministic: painted stand, customer cup, coin pop, sunny widget, glowing Upgrade Stand.

Learning risk: Dad or the agent system can accidentally own the creative surface. The product must reserve meaningful twin contribution points: recipes, stand colors, customer jokes, weather reactions, and final "would we show friends?" judgment.

Phase 2 Handoff

The PRD should treat this brief as the product north star:

  • Name LST as Build #1 from the beginning.
  • Preserve the brainstorm-stage twins-feedback pivot.
  • Make the first playable promise explicit: buy lemons, squeeze and pour, set price, serve a customer, earn coins, upgrade stand, react to weather, repeat bigger.
  • Keep MVP to one map, one stand path, one queue, simple weather, simple recipes, and no paid-random core loop.
  • Turn OD-013 §2 into acceptance checks, not generic KPIs.
  • Require the screenshot moment: painted lemonade stand, customer holding cup, coin pop, sunny weather widget, glowing Upgrade Stand.
  • Declare the four Roblox-fidelity axes as downstream acceptance lenses: art/world, avatars, UI/HUD chrome, gameplay-loop visibility.
  • Preserve family-shared-infra inheritance discipline: consume existing persona/library/style-pack scaffolds once rewritten for LST; contribute LST style-pack, stand-loop DataStore patterns, customer/reaction primitives, and refined twin persona inputs for Build #2.

Definition Of Done For This Brief

  • product-brief.md is rewritten for Lemonade Stand Tycoon.
  • The brief presents LST as Build #1 from the beginning.
  • The twins-feedback pivot is framed as a brainstorm-stage event.
  • The first playable loop and screenshot moment are named concretely.
  • Build #1 constraints are explicit.
  • The four Roblox-fidelity axes are named as downstream acceptance lenses.
  • No PRD, storyboard, canon rewrite, asset generation, site publishing, video work, paid provider call, or public URL change is performed in this issue.

Sources

  • OD-018 pivot directive: /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • LST brainstorm: /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • LST domain research: /srv/http/roblox/_bmad-output/planning-artifacts/domain-research.md
  • LST market research: /srv/http/roblox/_bmad-output/planning-artifacts/market-research.md
  • Brand canon: /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • Copy voice canon: /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • Asset library canon: /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • Journey story canon: /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md
  • OD-013 success criteria: /srv/http/_hq/projects/project-roblox/OD-013-autonomous-execution.md

PRD

complete

_bmad-output/planning-artifacts/prd.md · 21.4 KB

Read

stepsCompleted: - activation-context - product-brief-ingested - advanced-elicitations-applied - prd-authored inputDocuments: - /srv/http/hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md - bmad-output/planning-artifacts/brainstorm-lst.md - bmad-output/planning-artifacts/domain-research.md - bmad-output/planning-artifacts/market-research.md - bmad-output/planning-artifacts/product-brief.md - /srv/http/hq/projects/project-roblox/BRAND-CANON.md - /srv/http/hq/projects/project-roblox/COPY-VOICE.md - /srv/http/hq/projects/project-roblox/ASSET-LIBRARY.md - /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md workflowType: prd issue: ROB-33 date: 2026-05-18 author: ProductManager


Product Requirements Document - Lemonade Stand Tycoon Build #1

Canon And Workflow Confirmation

Lemonade Stand Tycoon is Build #1 from the beginning of the current project narrative. The twins-feedback pivot is a brainstorm-stage event: Dad showed the top tycoon concept to Twin A and Twin B, the twins liked the tycoon loop, and the project moved to Lemonade Stand Tycoon because the stand fantasy fit them better.

Product brief exists at _bmad-output/planning-artifacts/product-brief.md and is treated as the approved product north star for this PRD. This issue runs only /bmad-prd; it does not run storyboard, canon rewrites, asset generation, site publishing, video work, or implementation story readiness changes.

Canon used in customer-facing requirements:

  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md: Dad, Twin A, Twin B, Claude, and Crew likeness discipline.
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md: TWIN layer for kid-facing promise lines; PARENT layer for operator-readable explanation.
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md: concrete visual references resolve through site/assets/library/ once LST paths are created.
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md: the public story remains a three-layer learning story.
  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md: LST replaces PST as the canonical first build.

BMAD execution notes: /bmad-prd synthesized the approved LST product brief, LST brainstorm, domain research, market research, and OD-018 directive. Advanced elicitation lenses were applied inside synthesis: Stakeholder Round Table, User Persona Focus Group, SCAMPER Method, Pre-mortem Analysis, and Expand or Contract for Audience.

Product Promise

Twin-facing promise, COPY-VOICE Layer 1:


We buy lemons.
We make lemonade.
We serve one customer.
Coins pop up.
Our stand gets bigger.

Parent-facing promise, COPY-VOICE Layer 2:

Lemonade Stand Tycoon is a focused Roblox simulator-tycoon where kids can see a complete business loop: buy lemons, make lemonade, serve customers, earn coins, react to weather, and upgrade the stand.

Shortest product promise:

> Buy lemons, make lemonade, serve customers, upgrade the stand, and grow bigger every day.

Problem

The twins liked the tycoon structure, but the first pet-salon theme did not fit their taste. The product problem is therefore precise: preserve the proven tycoon loop and make the first build instantly recognizable, playable, and worth showing to friends.

Lemonade works because the business fantasy is visible at a glance. A player sees lemons, a pitcher, cups, a price sign, a customer, a coin pop, weather, and a bigger stand. Build #1 must ship one polished loop, not a broad list of partial systems.

Audience

Primary players: 6-10-year-old Roblox players who like tycoons, simulators, visible upgrades, bright props, and showing friends what they built.

Primary creative stakeholders: Twin A and Twin B. They shape recipe ideas, stand taste, customer reactions, weather jokes, and the "would we show this to friends?" read.

Support stakeholder: Dad. Dad protects scope, Roblox publishing discipline, and family learning goals without replacing the twins' creative surface.

Parent-readable audience: family and friends who want to see how the twins' feedback shaped a real product decision.

Success Criteria

OD-013 section 2 success criteria, cited verbatim:

  1. Twins are excited to share with friends. Recess-energy. Screenshot-and-send. Would a 10yo actually take this to school and brag about it.
  2. The game feels real. Production polish. Not vapourware. Visual consistency, audio that lands, mechanic that closes a loop. A stranger watching the commercial does not register "AI slop" or "demo".
  3. The twins are excited. Creative agency, build literacy, ship-something achievement. The "fun parts" gap stays load-bearing (per OD-002 LEARNING-first rubric).

Acceptance interpretation:

  • Share with friends: the screenshot moment is the first painted stand upgrade with customer, cup, coin pop, sunny widget, and glowing Upgrade Stand.
  • Game feels real: the first loop closes in under 30 seconds with a visible prop, avatar action, and HUD response for every verb.
  • Twins are excited: the brainstorm-stage pivot remains visible, and the twins own meaningful choices in recipes, stand colors, customer jokes, and weather reactions.

First Playable Loop

The Build #1 loop must be playable and visible in this order:

  1. Buy lemons.
  2. Squeeze and pour.
  3. Set price.
  4. Serve a customer.
  5. Earn coins.
  6. Upgrade the stand.
  7. React to weather.
  8. Repeat bigger.

First-loop timing target: close the first sale and first stand upgrade in under 30 seconds for a new player.

First-loop beat contract:

  1. Player taps Buy Lemons.
  2. Lemon crate fills on the counter.
  3. Player taps or holds Squeeze.
  4. Pitcher fills with bright lemonade.
  5. Player flips the price sign to a starter price.
  6. One customer walks up with a want bubble.
  7. Player serves one cup.
  8. Customer drinks and reacts.
  9. Coins pop above the stand.
  10. Upgrade Stand glows.
  11. The stand changes from crate table to painted starter stand.

Screenshot Moment

The screenshot moment happens immediately after the first visible stand upgrade.

Required composition:


Painted lemonade stand + customer holding cup + coin pop +
sunny weather widget + glowing Upgrade Stand button.

This is a deterministic in-game moment, not a runtime screenshot-upload feature and not a generated image upload. The moment must include the stand, customer, cup, coin feedback, HUD weather, and next upgrade affordance. It must not be only a cropped beauty render or a balance screen.

Twin-facing line:


We sold one cup, and our stand got bigger.

MVP Scope

Build #1 includes:

  • One sunny sidewalk, park, or front-yard map.
  • One player stand.
  • One stand upgrade path.
  • One customer queue.
  • One lemon-buy action.
  • One squeeze-and-pour station.
  • One simple price sign.
  • One customer-service reward loop: coins plus stand-star progress if needed.
  • One primary action button that changes by loop beat.
  • One weather widget with sunny, cloudy, rain, and heatwave states.
  • Simple recipes: classic first; pink or extra-ice only if scope allows.
  • Customer reactions tied to price, weather, recipe, and wait time.
  • First-demo HUD: day, weather, coins, customer want bubble, price sign, and Upgrade Stand.
OD-023 First Demo Scope

OD-023 narrows the first demo to one polished, smoke-testable loop. The first demo uses in-memory session state only; no DataStore persistence is part of first-demo acceptance.

First-demo cuts:

  • No monetization, no PolicyService, no Robux purchase path, and no paid-random surface.
  • Single-player only.
  • Desktop keyboard and mouse only.
  • Default Roblox avatar only; no avatar customization.
  • No Roblox Studio editing. Implementation proceeds through .luau files, Rojo, Open Cloud publish, and smoke tests.
  • DataStore profile design, mobile-safe HUD acceptance, touch/controller support, monetization policy handling, multiplayer, and custom avatar work are post-MVP or later acceptance only.

MVP excludes:

  • Multiple maps.
  • Multiple stand branches.
  • Multiple simultaneous queues.
  • Multiplayer.
  • DataStore persistence.
  • Trading.
  • Full staff automation.
  • Prestige or rebirth.
  • Complex recipe math.
  • Touch, controller, or mobile-first controls for the first demo.
  • Avatar customization.
  • Roblox Studio editing as an implementation path.
  • Monetization, PolicyService, Robux purchase paths, or paid-random surfaces.
  • External social posting mechanics.
  • Runtime generated voice.
  • Runtime screenshot upload or persistence.
  • Paid-random core loop.
  • Public URL or publish commitments.
  • Production gameplay stories entering ready-for-dev from this issue.

Functional Requirements

FR1. Day start: the player begins on Day 1 with a sunny weather state, visible day counter, weather widget, coin counter, stand, customer path, and one clear primary action.

FR2. Supply purchase: the player can buy lemons through a server-confirmed action that visibly fills a crate on the stand.

FR3. Squeeze interaction: the player can squeeze lemons with a readable desktop keyboard and mouse interaction for the first demo.

FR4. Pour feedback: the pitcher fill level and lemonade color change when a batch is made.

FR5. Price sign: the player can choose a simple price state such as cheap, fair, pricey, surge, or discount; the sign must show the current state.

FR6. Customer queue: the game spawns one customer at a time from a bounded customer set, with a visible want bubble.

FR7. Customer service: serving a cup consumes batch inventory and resolves the customer's request through a server-authoritative service event.

FR8. Customer reaction: the customer's face, body pose, text bubble, or short moderated audio beat changes before reward payout.

FR9. Reward emit: completed service grants coins and visible progress toward the first stand upgrade.

FR10. Upgrade prompt: Upgrade Stand glows when the player can afford the first upgrade.

FR11. Stand transformation: the first upgrade changes the 3D stand silhouette from crate table to painted starter stand.

FR12. Weather widget: weather appears in HUD and world state, not only in hidden economy math.

FR13. Weather behavior: sunny supports the tutorial, cloudy slows demand, rain becomes a prep beat, and heatwave creates a visible rush with ice pressure if ice exists.

FR14. Recipe surface: classic lemonade ships first; recipe variety must change color, customer preference, or reaction before it counts as a product feature.

FR15. Twin input pipeline: twin-facing ideas for recipe names, stand colors, customer jokes, and weather reactions become acceptance notes for downstream stories.

FR16. Shareable state: the game creates the required screenshot composition after the first stand upgrade without needing an external sharing integration.

Nonfunctional Requirements

NFR1. The first loop closes in under 30 seconds for a new player.

NFR2. Every loop beat has a visible prop, avatar action, and HUD response.

NFR3. The stand upgrade reads clearly in the first-demo camera framing through silhouette, color, height, or signage change.

NFR4. The first-demo HUD avoids crowding the core top bar on desktop.

NFR5. Economy authority stays on the server for supply purchase, batch creation, price state, service completion, rewards, weather state, and upgrades.

NFR6. Reward events are idempotent per customer service id.

NFR7. First-demo state is in-memory session state only, resettable by smoke tests and not persisted through DataStore.

NFR8. First-demo implementation must not create placeholder DataStore modules, save adapters, purchase receipt handlers, or persistence acceptance criteria.

NFR9. The server remains authoritative for first-demo loop state even though it is in-memory only.

NFR10. Voice and audio references must use pre-uploaded, moderated Roblox audio assets with text fallback before runtime reference.

NFR11. Build #1 avoids paid-random progress pressure in the core loop.

NFR12. Monetization, PolicyService, Robux purchase paths, and paid-random surfaces are excluded from first-demo acceptance.

Post-MVP And Later Acceptance

These items remain useful product direction, but they are not first-demo acceptance:

  • DataStore profile design: balances, stand tier, upgrade ids, recipe unlock flags, lemon variety unlock flags, tutorial state, and purchase idempotency records if paid products are approved later.
  • DataStore save discipline: do not save per-cup sales history, per-customer queue snapshots, full weather history, generated media, or every squeeze/pour/serve tick; later saves should be debounced.
  • Mobile-safe HUD and broader input support: later acceptance should cover mobile safe areas, touch, and controller without changing the first demo's desktop keyboard/mouse scope.
  • Future paid random recipe cards or cosmetic crates require numerical odds and per-player policy handling before spend, but no such surface exists in the first demo.

Weather Product Contract

Weather changes the player's read and decisions without becoming a simulation spreadsheet.

WeatherPlayer readProduct behavior
SunnyGood selling day.Tutorial-friendly demand and clean first loop.
CloudySlower day.Lower spawn rate; good time to restock or upgrade.
RainPrep day.Stand pauses or closes; player improves cover and supplies.
HeatwaveRush day.More customers; ice pressure and bigger reward chance.

Weather requirements:

  • The first tutorial day is sunny.
  • Weather must show in HUD and world.
  • Weather effects must change visible customer behavior.
  • Rain must not punish a brand-new player.
  • Heatwave must show both opportunity and pressure.
  • Weather state should be deterministic enough for tests and video capture.

Economy And Monetization Posture

The core loop must be earnable:

  • Coins come from in-experience lemonade sales, tips, and progress beats.
  • First stand upgrades are earned through play.
  • Recipe and lemon variety unlocks improve color, choice, and reactions.
  • Paid random items are not part of the first demo or Build #1 core loop.
  • Robux must not appear as a gameplay reward.
  • Advertising, if included later, uses earned in-experience coins and reads as more people noticing the stand.

This PRD does not authorize paid provider calls, video generation, site publishing, public URL changes, or canon amendments.

Roblox-Fidelity Gates

These are product acceptance gates for this PRD and downstream handoffs.

  1. Art/world. The map, props, stand tiers, lemons, cups, signs, and weather states must read as blocky Roblox-stylized space, not generic CGI, photoreal fruit, or flat app art.
  2. Avatars. Player and customer NPCs must read as Roblox R15 or R6 avatars with recognizable Roblox face grammar and blocky proportions.
  3. UI/HUD chrome. Coin counter, day counter, weather widget, price sign, customer want bubble, HUD frame, and Upgrade Stand affordance must be visible in key beats.
  4. Gameplay-loop visibility. A kid watching cold must be able to name the loop: buy lemons, squeeze and pour, set price, serve, earn coins, upgrade, weather, repeat bigger.

Acceptance rule: if an artifact hides the interface, removes the customer, skips a loop verb, or shows generic lemonade art without Roblox avatars, it fails this PRD's fidelity gate.

OD-005 Inherit And Contribute

Lemonade Stand Tycoon is Build #1 of the family-shared-infra portfolio. This build consumes:

  • UGC wallet schema: compact entitlement and receipt/idempotency patterns for any future paid products, adapted without adding paid-random pressure to the core path.
  • Persona library: existing Dad, Twin A, Twin B, Claude, and Crew persona discipline from BRAND-CANON.md and site/assets/library/personas/.
  • Style-pack scaffold: the shared site/assets/library/style-packs/ structure, to be extended by the downstream LST style-pack rewrite.
  • Asset-library spine: the site/assets/library/ metadata and parent-asset discipline from ASSET-LIBRARY.md.

This build contributes back:

  • LST-style-pack-v1: a sunny Roblox-tycoon visual language for stands, lemons, customers, HUD, weather, and upgrade reveals.
  • Persona refinements: approved Dad/Twin A/Twin B LST expressions or poses if downstream canon and asset work brings the family into customer-visible surfaces.
  • Post-MVP DataStore patterns: compact stand profile schema, debounced save cadence, service-event idempotency, upgrade persistence, and policy-ready purchase records after first-demo scope is complete.
  • Customer/reaction primitives: customer archetypes, want bubbles, recipe preferences, reaction beats, and reward timing conventions reusable by Build #2.
  • Weather/economy primitives: day state, simple weather states, demand modifiers, and prep/rush UX patterns.

Twin-facing inheritance statement:


Our first game leaves tools for the next one.
Build #2 starts with our best parts ready.

Asset Contract

The current asset library still contains PST-era paths. This PRD does not amend ASSET-LIBRARY.md; OD-018 step 7 owns the canon and asset-library rewrite.

Required downstream LST library families:

  • site/assets/library/style-packs/lst-tycoon-sunny-v1/
  • site/assets/library/environments/lst-lemonade-stand-v1/
  • site/assets/library/props/lemonade-stand/
  • site/assets/library/props/lemons/
  • site/assets/library/props/customers-park/
  • site/assets/library/props/ui-cards/
  • site/assets/library/props/vfx/
  • site/assets/library/audio/music-references/lst/

Until these paths exist and are registered, downstream artifacts may specify target paths as requirements but must not cite them as completed assets. Customer-facing assets do not use ad hoc paths.

Product Risks And Guardrails

RiskGuardrail
Late-pivot narrative leaks into current docs.Present LST as Build #1; frame the twins-feedback pivot at brainstorming.
LST becomes a passive cash dropper.Require buy, squeeze/pour, price, serve, earn, upgrade, weather, and repeat beats.
Scope expands into three half-loops.Keep one map, one stand path, one queue, simple weather, and simple recipes.
OD-023 first-demo scope drifts.Keep the first demo in-memory, single-player, desktop keyboard/mouse, default-avatar, no monetization, and Studio-free.
Video or game reads as generic lemonade art.Enforce the four Roblox-fidelity gates.
Paid-random pressure enters the first loop.Exclude all paid-random surfaces from the first demo; require future odds plus policy handling only after MVP.
Screenshot/share moment is vague.Lock the first painted stand upgrade composition in this PRD.
Twins lose creative agency.Reserve recipe, stand color, customer joke, weather reaction, and share-read decisions for Twin A and Twin B.

Downstream Handoff Notes

Do not start these steps in this issue.

  • OD-018 step 7 canon rewrite: update BRAND-CANON.md, COPY-VOICE.md, JOURNEY-STORY-CANON.md, and ASSET-LIBRARY.md for Lemonade Stand Tycoon while preserving Dad/Twin A/Twin B likeness discipline.
  • Storyboard step: build the 10-shot LST storyboard around the loop order: buy lemons, squeeze and pour, set price, serve customer, earn coin, upgrade stand, weather event, repeat bigger.
  • Asset-library/style-pack step: create lst-tycoon-sunny-v1, stand tiers, lemon varieties, customer NPC set, weather variants, HUD chrome, and VFX paths before render or site work cites them as complete.
  • G3 review: require CEO sign-off before first render spend, with all four Roblox-fidelity gates scored.
  • G4 review: score whether a 6-10-year-old cold-watching the final cut would call it Roblox and name the loop verbs.
  • Implementation planning: StoryCreator and ScrumMaster may break this PRD into stories later, but this issue leaves no gameplay story ready-for-dev.

Definition Of Done

  • prd.md is rewritten for Lemonade Stand Tycoon.
  • The PRD presents LST as Build #1 from the beginning.
  • The twins-feedback pivot is framed as a brainstorm-stage event.
  • OD-013 section 2 success criteria are cited verbatim and converted into acceptance checks.
  • The first playable loop and screenshot moment are named concretely.
  • Conservative Build #1 constraints are explicit: one map, one stand path, one queue, simple weather, simple recipes, no paid-random core loop.
  • OD-023 first-demo cuts are explicit: in-memory session state, no DataStore, no monetization, no PolicyService, no Robux purchase path, no paid-random surface, single-player only, desktop keyboard/mouse only, default avatar only, no avatar customization, and no Roblox Studio editing.
  • The four Roblox-fidelity gates are product acceptance criteria.
  • Downstream handoff notes cover canon rewrite, storyboard, asset-library/style-pack work, and G3/G4 reviews.
  • This issue avoids paid provider calls, video generation, site publishing, public URL changes, implementation story readiness flips, and canon amendments.

Sources

  • OD-018 pivot directive: /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • LST brainstorm: /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • LST domain research: /srv/http/roblox/_bmad-output/planning-artifacts/domain-research.md
  • LST market research: /srv/http/roblox/_bmad-output/planning-artifacts/market-research.md
  • LST product brief: /srv/http/roblox/_bmad-output/planning-artifacts/product-brief.md
  • Brand canon: /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • Copy voice canon: /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • Asset library canon: /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • Journey story canon: /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md

Domain Research

complete

_bmad-output/planning-artifacts/domain-research.md · 17.3 KB

Read

LST Domain Research: Lemonade-Economy Tycoon UX

Issue: ROB-27 Date: 2026-05-18 Workflow: /bmad-domain-research, applied headlessly for OD-018 cascade step 3 Scope: Lemonade Stand Tycoon only. This does not run market research, product brief work, storyboard work, canon rewrites, asset generation, site publishing, or video production.

Source Inputs

  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md
  • Official Roblox Creator Hub pages listed in Sources.

Core Domain Finding

Lemonade Stand Tycoon should ship as a Roblox tycoon with an active stand-service loop, not as a passive cash dropper with lemonade decoration. The first playable loop must be:


buy lemons -> squeeze/pour -> set price -> serve customer -> earn coins -> upgrade stand -> repeat bigger

The loop is kid-legible because every verb has a visible prop, avatar action, and HUD response. The player should see lemons enter a crate, pitcher liquid rise, a chalk price change, an R15 customer receive a cup, coins pop, and the stand transform.

The LST promise from the accepted brainstorm stands:

> Buy lemons, make lemonade, serve customers, upgrade the stand, and grow bigger every day.

That sentence is the domain constraint. Any feature that does not make the stand economy, weather decision, customer response, recipe collection, or visible stand growth clearer should be deferred.

Lemonade Stand Loop Primitives

The first loop should close in under 30 seconds of first play:

  1. Player taps Buy Lemons.
  2. Lemon crate fills on the counter.
  3. Player taps or holds Squeeze.
  4. Pitcher fills with a bright lemonade color.
  5. Player flips a simple price sign.
  6. Customer approaches with a want bubble.
  7. Player serves one cup.
  8. Customer reacts.
  9. Coin counter pops.
  10. Upgrade button lights.
  11. Stand changes from crate table to painted starter stand.

Required data primitives:

  • DayState: day number, weather, demand modifier, prep hint, open/closed flag.
  • SupplyDefinition: lemons, cups, ice, sugar, optional recipe ingredient.
  • SupplyInventory: bounded counts only; no per-item history.
  • RecipeDefinition: id, color, taste tag, ingredient list, unlock tier, customer preference tags.
  • BatchState: empty, squeezed, mixed, chilled, ready, sold out.
  • PriceSignState: cheap, fair, pricey, surge, discount; numeric price may exist under the hood, but the player-facing state should be simple.
  • CustomerArchetype: kid, parent, runner, dog-walker, mail-carrier, tourist.
  • CustomerRequest: weather need, recipe preference, price sensitivity, patience.
  • RewardEmit: coins, tip, stand stars, recipe progress, ad meter progress.
  • UpgradeDefinition: stand tier, storage, squeezer speed, cooler size, sign reach, helper, umbrella cover.

Visual primitives:

  • Lemon crate, rolling lemons, squeezer lever, pitcher fill, cup stack, chalkboard price.
  • Coin pop, tip jar bounce, stand-star sparkle, upgrade-button glow.
  • Sidewalk queue, R15 customer avatars, weather widget, day counter, coin counter.
  • Before/after stand tiers that read at thumbnail size.

Audio primitives:

  • Pour, squeeze, cup tap, coin ding, customer sip, chalk sign flip, upgrade whoosh.
  • Weather stings for rain, cloudy slowdown, and heatwave.
  • Voice clips only on high-value beats, with text fallback and moderated asset IDs before runtime reference.

Weather Mechanic UX

Weather should change player decisions without becoming a spreadsheet. The widget is a small forecast card, not a simulator dashboard.

Recommended weather states:

WeatherPlayer readEconomy effectUX beatUpgrade lesson
Sunny"Good selling day."Normal/high demand.Tutorial day, clean loop.Better sign and stand tier increase flow.
Cloudy"Slower day."Lower spawn rate, more patience.Use downtime to restock or upgrade.Advertising can smooth weak demand.
Rain"Closed prep."Stand closes or customer flow pauses.Player buys supplies, umbrella, cover, menu upgrade.Prep still feels useful without fake customers in rain.
Heatwave"Rush with ice pressure."High spawn rate, higher tips if ice exists.Ice warning, customers want extra-cold cups.Cooler upgrades and extra-ice recipe matter.

Implementation rules:

  • Weather should be deterministic per day for MVP, seeded by day number and player id if needed.
  • Use server-owned day/weather state; clients only render the widget and local effects.
  • Rain should not punish a new player in the first minute. First tutorial day should be sunny.
  • Heatwave must show both opportunity and pressure: more customers, but ice stock visibly drains.
  • Weather effects should alter spawn rate, patience, tips, and recipe preference. Avoid hidden multipliers with no visible explanation.

Advertising Levers

Advertising is a visible customer-spawn lever, not social-media pressure. It should read as "more people notice our stand."

MVP advertising surfaces:

  • Sidewalk sign: low-cost, persistent small spawn-rate increase.
  • Flyers: one-day boost, visible flyer stack empties or pinboard fills.
  • Billboard: short rush window, more expensive, dramatic customer wave.
  • Local post board: playful stand notice, not a real social platform mechanic.

Recommended model:


baseSpawnRate
  * weatherDemandModifier
  * adReachModifier
  * standTierModifier
  * priceFrictionModifier

Design constraints:

  • Advertising spend uses earned in-experience coins.
  • No player-to-player posting, no external sharing prompt, and no real social account metaphor.
  • The spawn-rate change needs visible customer movement within a few seconds.
  • Ad UI should show duration and reach in kid-readable terms: "Today", "Small boost", "Big rush".

Lemon Varieties And Recipe Collection

Recipes are the collection/progression surface. They should be simple enough for kids to predict and expressive enough for later content.

Starter set:

  • Classic: yellow lemon, basic sugar, normal ice.
  • Pink: pink lemon or berry add-in, strong visual color change.
  • Strawberry: fruit add-in, higher kid-customer preference.
  • Lavender: later cozy recipe, higher parent/tourist preference.
  • Extra-ice: heatwave recipe, lower margin but higher rush satisfaction.

Lemon variety board:

  • Yellow lemon: starter common.
  • Pink lemon: early unlock, strong screenshot color.
  • Meyer lemon: sweeter, boosts happy reactions.
  • Blood orange or blood-lemon: rare color, use name carefully in twin-facing copy if needed.
  • Giant lemon: later comic upgrade, not MVP unless scope allows.

Progression rule:

Recipe and lemon unlocks should improve choice, color, and customer reaction. They should not become paid random pressure. If random recipe cards ever become paid, odds and per-player policy handling are required before the user spends.

Stand-Tier Upgrades

Stand growth is the tycoon proof. Each upgrade must change the 3D stand, not only a stat.

Recommended tier ladder:

  1. Crate table: single pitcher, hand-written sign, one cup stack.
  2. Wooden cart: wheels, striped cloth, cleaner counter, tip jar.
  3. Painted kiosk: roof, menu board, cooler, brighter sign.
  4. Branded storefront: larger sign, display shelf, queue rail, lights.
  5. Multi-location map hook: visible future expansion marker, not MVP.

Mobile-first transformation rules:

  • Each tier needs a different silhouette.
  • Upgrade reveal should hold for one beat before opening the next UI.
  • Color and height changes matter more than tiny prop swaps on phone screens.
  • The next upgrade affordance should appear on or near the stand, not only in a menu.
  • Use one clear primary button: Upgrade Stand. Secondary upgrade categories can wait.

Customer-Reaction Beats

The customer reaction closes the service loop and should land before the reward UI.

Reaction beat pattern:

  1. Customer approaches from sidewalk.
  2. Want bubble shows recipe or weather need.
  3. Player serves cup.
  4. Customer drinks for one beat.
  5. Face, pose, and short text bubble change.
  6. Tip jar or coin pop lands.
  7. Stand-star progress moves.
  8. Upgrade or recipe prompt appears.

Reaction archetypes:

  • Refreshed: fair price and correct recipe.
  • Surprised: new recipe color or lemon variety.
  • Loyal: repeat customer after good service streak.
  • Heatwave saved: extra ice served during surge.
  • Rain-prep praise: umbrella or cover upgrade appears after a rain prep day.
  • Price-sensitive: happy at fair price, hesitant at pricey state.

Avoid one generic cheer animation. Reactions should vary by weather, recipe match, price state, and wait time.

Roblox Implementation Implications

Economy Authority

The economy must be server-authoritative:

  • Server validates supply purchase, batch creation, price state, customer service, rewards, and upgrades.
  • Client renders animations and prediction effects, but server confirms counters.
  • Reward events should be idempotent per customer service id.
  • Spawn and weather state should be reproducible for tests and video capture.
  • Do not let local scripts award coins, stand stars, recipe cards, or upgrade unlocks.
DataStore Boundaries

LST should save a compact player profile, not a business ledger.

Save:

  • Coin and stand-star balances.
  • Owned stand tier and upgrade ids.
  • Recipe unlock flags.
  • Lemon variety unlock flags.
  • Best stand name or approved preset stand name, if naming is used.
  • Current tutorial state.
  • Purchase receipt/idempotency records if paid products arrive later.

Do not save:

  • Per-cup sales history.
  • Per-customer queue snapshots.
  • Full weather history.
  • Generated images or videos.
  • Large recipe/card blobs when ids and flags work.
  • Every analytics tick from squeeze, pour, serve, or ad events.

Roblox Data Store guidance supports keeping related profile data together, watching object size, and avoiding storage growth from unnecessary keys. Treat weather, current queue, active rushes, and ad timers as reconstructable or short-lived runtime state where possible.

Spawn Rates And Simulation Cost

Customer simulation should stay simple:

  • One queue controller per stand.
  • Bounded maximum active NPCs.
  • Server calculates customer requests; clients animate approach and reaction.
  • Spawn rate changes should happen in coarse steps, not per-frame tuning.
  • Rush windows should cap total active customers to protect low-end mobile devices.
  • Rain prep mode should reduce NPC load rather than spawn customers who cannot buy.
UI And HUD Constraints

Mobile HUD must keep the loop readable while respecting Roblox safe areas:

  • Top row: coin counter, day counter, weather widget.
  • Stand surface: price sign and upgrade prompt.
  • Bottom reach zone: primary action button for buy, squeeze, pour, or serve.
  • Customer bubble: recipe icon and patience bar above customer head.
  • Avoid tiny multi-tab economy panels in the first minute.
  • Use ScreenGui safe-area behavior and avoid placing frequently used buttons in hard-to-reach corners.

Recommended MVP HUD:


[Day 1] [Sunny icon] [Coins 12]

Customer want bubble over NPC
Chalk price sign on stand

[Buy Lemons] / [Squeeze] / [Serve]
[Upgrade Stand] when earned
Moderated Audio And Copy

Audio and copy should be deterministic:

  • Voice and sound effects resolve to approved Roblox audio assets before references land in gameplay or capture scripts.
  • Use text fallback for every voice cue.
  • Avoid user-generated stand names unless text filtering is implemented.
  • If free-text names are allowed later, use Roblox text filtering before display.
  • Do not imply Robux is earned from gameplay. Use fictional coins, tips, and stand stars.
Paid Random Item Posture

LST can support recipe packs or cosmetic crates later, but the first loop should be earnable.

Allowed future surfaces:

  • Stand skins.
  • Sign styles.
  • Helper outfits.
  • Convenience restock.
  • Recipe-card collection with clear odds, free earn path, and policy controls if random paid items ever appear.

Disallowed surfaces:

  • Paid-only core lemonade making.
  • Paid-only first stand upgrade.
  • Random paid items without actual odds before spend.
  • Paid random items visible or usable for players with restricted paid-random policy.
  • Robux framed as a gameplay reward.

Roblox-Fidelity Translation For Later Video

The later video must read as Roblox gameplay, not a generic lemonade commercial. Every domain beat should map to at least one of the four OD-018 fidelity axes.

Art And World

Required cues:

  • Sunny sidewalk, park, or front-yard map.
  • Blocky low-poly stand tiers and chunky props.
  • Lemon crates, pitcher, cups, chalkboard, sign, cooler, coin pile.
  • Clear material grammar: plastic, simple wood, bright fabric, flat UI panels.
  • Weather variants visible in the same map: sun, clouds, rain prep, heatwave shimmer.

Avoid:

  • Photoreal fruit still life.
  • Generic mobile-game kiosk art.
  • Soft illustration that does not show Roblox parts or walkable map space.
Avatars

Required cues:

  • R15 or R6 proportions for player and customers.
  • Roblox face grammar and simple accessories.
  • Customer NPCs walk, stop, drink, react, and leave.
  • Player avatar performs visible stand verbs: buy, squeeze, pour, serve, upgrade.
  • Dad, Twin A, and Twin B appear only in project-story surfaces unless a later canon rewrite explicitly brings them into game/video content.

Avoid:

  • Hand-painted mascot customers.
  • Photoreal children.
  • Family likeness drift from BRAND-CANON.md.
UI And HUD Chrome

Required cues:

  • Coin counter.
  • Day counter.
  • Weather widget.
  • Price sign or price popup.
  • Upgrade button.
  • Customer want bubble.
  • Recipe card or lemon variety card.
  • Optional mobile-screen frame for capture.

At least most video shots should include HUD or interaction chrome unless the shot is a deliberate hero beat.

Gameplay-Loop Visibility

Required order:

  1. Buy lemons.
  2. Squeeze and pour.
  3. Set price.
  4. Serve customer.
  5. Earn coins.
  6. Upgrade stand.
  7. Weather event.
  8. Repeat bigger.

If a shot could be mistaken for a generic lemonade picture, add HUD, an avatar action, a customer reaction, or a before/after stand change.

Five Elicitations Applied

The accepted LST brainstorm used these recommended lenses, and this research applies them as domain constraints:

  1. Stakeholder Round Table: twin excitement, Dad governance, RobloxSME platform risk, downstream PM/UX/Architect needs.
  2. User Persona Focus Group: first-time 6-10-year-old player, builder-twin, parent observer, Roblox capture reviewer.
  3. SCAMPER Method: substitute grooming with lemonade making, combine weather with demand, adapt tycoon upgrades to stand tiers, eliminate passive factory drift.
  4. Pre-mortem Analysis: generic CGI, DataStore bloat, hidden economy multipliers, unreadable mobile HUD, paid-random policy mistakes.
  5. Expand or Contract for Audience: keep MVP one stand and one map; leave multi-location franchise, helper staff, and deep prestige for later.

Party-mode synthesis is folded into the domain rules rather than preserved as transcript.

Downstream Risks For Step 4 And Step 5

Market research risk:

  • Step 4 must benchmark actual Roblox tycoon loops and visual grammar, not generic lemonade mobile games.
  • LST comparables should inspect how Roblox games show counters, rushes, upgrades, queues, pets/customers, and mobile HUDs.
  • Current player counts and shipped loops belong in market research, not this domain note.

Product brief risk:

  • The first-loop screenshot moment should be the upgraded stand with customer, cup, sunny widget, coin pop, and glowing upgrade prompt.
  • The product brief should cite the twins' brainstorm-stage feedback from brainstorm-lst.md: they liked the tycoon part and preferred Lemonade Stand Tycoon over the pet-salon theme.
  • Avoid restoring PST as active Build #1 language outside deliberate tier-2 vault references.

Implementation risk:

  • Do not persist cup-level logs or large blobs.
  • Do not use unmoderated/random paid-item surfaces.
  • Do not produce generic video guidance that drops R15/R6 avatars, HUD chrome, or visible loop order.

Sources

  • OD-018 pivot directive: /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • Accepted LST brainstorm: /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • Roblox Creator Hub, Data Store best practices: https://create.roblox.com/docs/cloud-services/data-stores/best-practices
  • Roblox Creator Hub, Data Store error codes and limits: https://create.roblox.com/docs/cloud-services/data-stores/error-codes-and-limits
  • Roblox Creator Hub, virtual item policies: https://create.roblox.com/docs/production/monetization/virtual-items
  • Roblox Creator Hub, PolicyService:GetPolicyInfoForPlayerAsync: https://create.roblox.com/docs/reference/engine/classes/PolicyService#GetPolicyInfoForPlayerAsync
  • Roblox Creator Hub, ScreenGui safe area and insets: https://create.roblox.com/docs/reference/engine/classes/ScreenGui
  • Roblox Creator Hub, position and size UI objects: https://create.roblox.com/docs/building-and-visuals/ui/positioning-and-sizing-guiobjects
  • Roblox Creator Hub, audio assets: https://create.roblox.com/docs/audio/assets
  • Roblox Creator Hub, asset moderation: https://create.roblox.com/docs/studio/asset-types
  • Roblox Creator Hub, text filtering: https://create.roblox.com/docs/ui/text-filtering

Market Research

complete

_bmad-output/planning-artifacts/market-research.md · 18.6 KB

Read

LST Market Research: Roblox Tycoon Comparables And Visual Grammar

Issue: ROB-29 Date: 2026-05-18 Workflow: /bmad-market-research, applied headlessly for OD-018 cascade step 4 Live data timestamp: 2026-05-18 UTC, queried through official Roblox public APIs and Roblox search.

Research Question

What are Roblox tycoon and adjacent simulator players actually seeing now, and what does Lemonade Stand Tycoon need to borrow, avoid, or sharpen so it reads as a real Roblox game for Dad, Twin A, Twin B, and their friends?

This artifact rewrites the prior PST market-research note for Lemonade Stand Tycoon. It does not run product brief, PRD, storyboard, canon rewrites, asset generation, site publishing, or video work.

Source Inputs

  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/brainstorm-lst.md
  • /srv/http/roblox/_bmad-output/planning-artifacts/domain-research.md
  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md

Live Benchmark Table

Counts below are point-in-time API reads, not ranking claims.

ExperienceRoblox genre tagsPlaying nowVisitsMarket signalLST implication
Adopt Me!Roleplay & Avatar Sim / Pet Care347,30443.5BKid-scale social play still wins when pets, homes, trading, and roleplay feel personal.Borrow social readability and homegrown identity, not the pet-care theme the twins rejected.
Pet Simulator 99Simulation / Incremental Simulator137,0082.43BCollection depth, clear icons, constant reward surfacing, and R15 avatars keep incremental loops legible.Use lemon varieties and recipe cards for collection clarity, but keep the first loop active.
Grow a GardenSimulation / Tycoon88,96935.4BSeeds, waiting, harvesting, offline growth, and flexing produce make a simple economy feel shareable.Lemon stock, day/weather, and stand growth can create the same "look what I built" appeal.
Bee Swarm SimulatorSimulation / Incremental Simulator23,6734.41BLong-tail depth comes from helpers, quests, resource conversion, and map progression.Later helpers and recipe quests fit, but Build #1 should not chase full-system depth.
Welcome to BloxburgRoleplay & Avatar Sim / Life11,9539.93BJobs, homes, town travel, roleplay, and interactive props make earning money feel grounded.LST should make the stand job visibly playable: buy, squeeze, price, serve, earn, upgrade.
Restaurant Tycoon 3Simulation / Tycoon11,006273.8MClosest active service-management comp: serve customers, cook, collect bills, build, upgrade.LST needs customer queues, station verbs, bill/coin feedback, and visible stand expansion.
Restaurant Tycoon 2Simulation / Tycoon2,1821.62BOlder restaurant service loop still has traffic because decorating and friend visits persist.Friends should immediately understand the stand tier, recipe, and price board.
My Hello Kitty CafeSimulation / Tycoon324515.0MBranded cafe loop uses staff, customers, decor, limited-time events, and cute reward cadence.LST can use cozy stand decor and recipe unlocks without needing licensed characters.
Busy Business!Simulation / Tycoon16149.1MBusiness simulator language is simple: serve customers, upgrade machines, hire workers, build empire.Good comp for machine/helper progression, but LST should avoid factory-first framing.
Lemonade Tycoon by Lightbulb's StudioSimulation / Tycoon1233.4MExisting lemonade title validates theme and loop: harvest lemons, make lemonade, serve, expand.The market exists, but low current traffic suggests LST needs stronger polish and Roblox-fidelity.
Lemonade Stand!Simulation / Incremental Simulator471.59MNewer stand title promises make/sell/upgrade/workers/offline earn.Offline earn is familiar, but Build #1 should foreground active serving before passive income.
My Lemonade TycoonSimulation / Tycoon8550.6KBeta title lists drink flavors, customers, employees, stock, and stand upgrades.Confirms the exact LST feature set is Roblox-native, not imported from generic mobile games.
Be a Lemonade SellerSimulation / Incremental Simulator1128.4KDescribes front-yard stand, minigames, NPC customers, employees, recipes, and mobile support.Minigames can help, but any slapstick customer punishment should stay out of the family build.
Smoothie Factory TycoonSimulation / Tycoon29058.6MAdjacent drink-production loop leans factory, blenders, skill tree, rebirth, and worlds.LST should borrow ingredient-color clarity, not become a hidden factory or rebirth grind.
My Boba StoreSimulation / Tycoon4349.27MDrink store loop uses customer orders, cash collection, store paint, and friend work.Boba-style drink service supports visible recipes and friend-readable shop identity.
Donuts TycoonSimulation / Tycoon69321.6MFood tycoon with restaurant ownership, selling, upgrading, leaderboards, and private servers.Food-service tycoons remain active when the job fantasy is obvious at thumbnail scale.

Player Loop Findings

  1. The pivot fixes audience fit without losing the proven tycoon shape. The accepted LST brainstorm records the twins' signal: they liked the tycoon part, did not want the pet-salon theme first, and recognized Lemonade Stand Tycoon faster. Market comps support keeping buy/make/sell/upgrade while changing the fantasy.
  1. Real Roblox service loops show the job, not just the reward. Restaurant Tycoon 3's shipped description names customer serving, cooking, bill collection, and restaurant upgrades. Bloxburg names jobs and skills. LST should name and show every stand verb: buy lemons, squeeze, pour, set price, serve, earn, upgrade.
  1. The lemonade category exists, but current titles are not dominant. Lightbulb's Lemonade Tycoon has 33.4M visits but only 12 players at query time; newer lemonade titles had 1-47 players. That is opportunity and warning: theme recognition is real, but a static or generic lemonade tycoon will not feel like a premium studio build.
  1. Collection is expected, but paid-random pressure is not required for the first loop. Pet Simulator 99 proves collection clarity matters, while LST can translate that into lemon varieties, recipe cards, and stand skins. Build #1 should keep core recipes and first upgrades earnable.
  1. Kids share visible ownership. Grow a Garden says players can flex fruits and finds on friends; Restaurant Tycoon 2 keeps friend visiting prominent; Bloxburg lets players build and decorate. LST's share moment should be a stand screenshot, not an abstract balance screen.
  1. Mobile-safe HUD is part of the market expectation. Current Roblox tycoon pages consistently target mobile/tablet/desktop play, and Creator Hub safe-area guidance exists because Roblox core UI and device cutouts can hide controls. LST's first loop needs large action buttons, over-head want bubbles, and compact counters.

What LST Should Copy

  • From Restaurant Tycoon 3: visible service order, station action, customer completion, bill/coin feedback, and build/upgrade loop.
  • From Bloxburg: grounded kid-readable work fantasy where money comes from a recognizable job, not from invisible multipliers.
  • From Pet Simulator 99: collection board clarity, big icons, clean rarity/readability language, and constant progress pips.
  • From Grow a Garden: simple resource cycle, offline anticipation as a later hook, and shareable "look what grew" payoff.
  • From Adopt Me: friend-readable world state, expressive avatar/NPC identity, and social-safe props that invite showing friends.
  • From existing Lemonade Tycoon titles: harvest/make/serve/expand vocabulary, workers as later automation, and stock management as a light constraint.

What LST Should Avoid

  • Passive-only droppers where lemonade is just a label on cash machines.
  • Generic factory bloat: skill trees, rebirth worlds, and machine chains before the first stand feels fun.
  • Robux or premium currency framed as a gameplay reward.
  • Paid-only recipes, paid-only first upgrades, or paid random item pressure in the core path.
  • Overcomplex recipe math that makes kids tune out before the first sale.
  • Customer punishment beats that make the stand feel mean or chaotic.
  • CGI/video prompts that show shiny lemonade but no Roblox avatars, HUD chrome, or visible gameplay loop.

Roblox-Fidelity Axes

1. Art And World

Market anchor: the strongest comps show walkable Roblox worlds, blocky props, and obvious build surfaces. Adopt Me, Bloxburg, Restaurant Tycoon, and Grow a Garden all sell place identity as much as mechanics.

LST implications:

  • Use a sunny sidewalk, park, or front-yard map that reads as a Roblox space players can walk through.
  • Build stands from chunky parts: crate table, wooden cart, painted kiosk, branded storefront.
  • Keep lemons, pitchers, cups, signs, coolers, billboards, and coin piles large enough for phone screens.
  • Weather must change the same map visually: sun, cloudy sky, rain-prep umbrella, heatwave shimmer.
  • Avoid photoreal fruit, flat app-store kiosk art, and soft illustration that hides Roblox material grammar.
2. Avatars

Market anchor: the API records for the major comps expose R15/R6 avatar-type fields, and OD-018 requires the later video to show R15 or R6 Roblox avatars rather than generic mascots.

LST implications:

  • Player and customers should read as R15 or R6 Roblox avatars with recognizable face grammar and blocky proportions.
  • Customer NPCs need simple silhouettes: kid, parent, runner, dog-walker, mail-carrier, tourist.
  • Reactions should be face/pose/text-bubble beats after drinking, before rewards.
  • Dad, Twin A, and Twin B remain project-story canon unless a later canon rewrite brings them into in-game/video content.
3. UI And HUD Chrome

Market anchor: Roblox experiences are judged inside the Roblox app, with top bar, chat/leaderboard expectations, counters, game icons, and mobile safe areas. Roblox Creator Hub guidance says gameplay video should set accurate expectations and ScreenGui safe areas protect UI from core controls and device cutouts.

LST implications:

  • At least most later promo shots should include HUD chrome: coin counter, day counter, weather widget, price sign, upgrade button, customer want bubble, mobile frame, leaderboard or chat where appropriate.
  • First-minute gameplay UI should be compact: [Day 1] [Sunny] [Coins], overhead customer request, chalk price sign, one primary action button, and Upgrade Stand when earned.
  • Do not hide the interface for beauty shots unless the shot is clearly a deliberate hero beat.
  • The product brief should define the screenshot moment with HUD included, not cropped away.
4. Gameplay-Loop Visibility

Market anchor: service and production comps explain their loops in verbs: serve customers, cook dishes, collect bills, buy seeds, plant, harvest, make drinks, collect cash, upgrade.

LST implications:

  • The first loop should close in under 30 seconds:

buy lemons -> squeeze/pour -> set price -> serve customer -> earn coins -> upgrade stand
  • The later 60-second video must show the full OD-018 order:

buy lemons -> squeeze/pour -> set price -> serve customer -> earn coin -> upgrade stand -> weather event -> repeat-bigger
  • Every loop beat needs a prop, avatar action, and UI response. If one is missing, the shot risks reading as generic lemonade art instead of Roblox gameplay.

Differentiation For LST

LST beats PST for this build because it preserves the tycoon loop the twins liked while replacing the pet-salon theme they rejected. Lemonade is easier to recognize in one second: lemons, pitcher, cups, price sign, customer, coins, bigger stand. It also fits a friend-share surface better for the current target audience: "our stand got bigger" is a fast brag.

The strongest screenshot moment for the product brief:


Fresh painted lemonade stand + customer holding cup + coin pop + sunny weather widget + glowing Upgrade Stand button.

Twin-layer candidate wording for later customer surfaces:

  • "We sold our first cup and upgraded our stand."
  • "Our lemonade stand looks bigger every day."
  • "Friends can see our stand right away."

Parent-layer explanation for later customer surfaces:

The pivot keeps the learning value of a Roblox tycoon while moving the fantasy closer to the twins' taste. The game can teach loops, choices, tradeoffs, and iteration through props a child recognizes immediately.

Video And Storyboard Visual Grammar

For downstream step 8 and later video work, LST should use these market-backed visual anchors:

  • Open on the Roblox world, not a fruit close-up.
  • Show R15/R6 player avatar near the stand in the first seconds.
  • Put HUD chrome in the frame early: coin counter, day counter, weather widget, price sign.
  • Use overhead customer request bubbles to make orders readable without narration.
  • Animate one stand verb per beat: buy crate, squeeze lever, pour pitcher, flip price, hand cup, coin pop, upgrade flash.
  • Hold the stand before/after upgrade for one beat so kids can see the change.
  • Add weather as a visible gameplay state, not a background mood.
  • Frame at mobile-safe composition first; desktop crop can be more generous later.
  • Keep the thumbnail and video honest: Creator Hub guidance favors media that tells players what the experience offers and sets accurate gameplay expectations.

Risks And Anti-Patterns

RiskMarket evidenceLST guardrail
Generic simulator bloatMany search results share the same tycoon tags, rebirth language, worker upgrades, and factory vocabulary.Build one excellent visible stand loop before skill trees, worlds, or rebirth.
Passive-only droppersAdjacent drink/factory tycoons lean machine progression and offline earn.Active serve loop must come before passive overnight or worker income.
Weak lemonade incumbentsExisting lemonade titles show visits but low point-in-time concurrency.Differentiate through polish, Roblox-fidelity, weather, customer reaction, and friend-readable stand growth.
Overcomplex economyClassic lemonade variables can explode into stock, weather, recipe, price, ads, staff, and locations.MVP uses bounded supply, simple price states, four weather states, and one stand upgrade path.
Non-Roblox video readOD-018 records failure on art/world, avatars, UI/HUD chrome, and gameplay-loop visibility.Every storyboard beat maps to at least one fidelity axis; most map to several.
Monetization driftRoblox policy-sensitive paid-random surfaces can create compliance risk.No paid random core path; future recipe/card crates require policy handling and clear odds.

Five Elicitations Applied

The BMAD market pass carried forward the five recommended elicitation lenses from the accepted brainstorm and domain research:

  1. Stakeholder Round Table: twins' excitement, Dad governance, RobloxSME platform risk, downstream PM/story/video needs.
  2. User Persona Focus Group: 6-10-year-old first-time player, builder twin, friend watching a clip, parent observer, Roblox capture reviewer.
  3. SCAMPER Method: substitute pet grooming with lemonade making, combine weather with demand, adapt restaurant service to a stand, eliminate passive factory drift, rearrange reward after reaction.
  4. Pre-mortem Analysis: generic CGI, hidden tycoon loop, unreadable mobile HUD, lemonade incumbent sameness, Robux-as-reward mistake.
  5. Expand or Contract for Audience: Build #1 stays one stand and one map; later versions can add staff, locations, recipe depth, and prestige.

Party-mode synthesis is folded into the findings rather than preserved as transcript.

Downstream Recommendations For Step 5 Product Brief

  • Define LST as Build #1 from the start; do not frame it as a late rescue.
  • Cite the twins' brainstorm-stage signal: they liked the tycoon part and preferred Lemonade Stand Tycoon over pet salon.
  • Name the first-loop close: one cup sold and one visible stand upgrade in under 30 seconds.
  • Define the screenshot moment as the upgraded stand with a customer, cup, coin pop, sunny widget, and glowing upgrade button.
  • State the four Roblox-fidelity axes explicitly: art/world, avatars, UI/HUD chrome, gameplay-loop visibility.
  • Keep Build #1 scope conservative: one map, one starter stand path, one customer queue, simple weather, simple recipes, no paid random core loop.

Sources

Official Roblox API query pattern:

  • Universe lookup: https://apis.roblox.com/universes/v1/places/{placeId}/universe
  • Game data: https://games.roblox.com/v1/games?universeIds=...
  • Roblox search: https://apis.roblox.com/search-api/omni-search?searchQuery=lemonade%20tycoon

Official Roblox experience pages and API records used:

  • Adopt Me!: https://www.roblox.com/games/920587237/Adopt-Me
  • Pet Simulator 99: https://www.roblox.com/games/8737899170/Pet-Simulator-99
  • Welcome to Bloxburg: https://www.roblox.com/games/185655149/Welcome-to-Bloxburg
  • Grow a Garden: https://www.roblox.com/games/126884695634066/Grow-a-Garden
  • Bee Swarm Simulator: https://www.roblox.com/games/1537690962/Bee-Swarm-Simulator
  • Restaurant Tycoon 3: https://www.roblox.com/games/119048529960596/Restaurant-Tycoon-3
  • Restaurant Tycoon 2: https://www.roblox.com/games/3398014311/Restaurant-Tycoon-2
  • My Hello Kitty Cafe: https://www.roblox.com/games/9346039031/My-Hello-Kitty-Cafe
  • Busy Business!: https://www.roblox.com/games/10914683361/Busy-Business
  • Lemonade Tycoon: https://www.roblox.com/games/10675042838/Lemonade-Tycoon
  • Lemonade Stand!: https://www.roblox.com/games/105446329981191/Lemonade-Stand
  • My Lemonade Tycoon: https://www.roblox.com/games/138018802619610/My-Lemonade-Tycoon
  • Be a Lemonade Seller: https://www.roblox.com/games/86270622488354/Be-a-Lemonade-Seller
  • Smoothie Factory Tycoon: https://www.roblox.com/games/10905034443/Smoothie-Factory-Tycoon
  • My Boba Store: https://www.roblox.com/games/82338394608938/My-Boba-Store
  • Donuts Tycoon: https://www.roblox.com/games/118337332422903/Donuts-Tycoon

Roblox Creator Hub references:

  • Thumbnails, videos, and icons: https://create.roblox.com/docs/education/build-it-play-it-create-and-destroy/icons-and-thumbnails
  • On-screen UI containers and safe areas: https://create.roblox.com/docs/ui/on-screen-containers
  • ScreenGui safe-area behavior: https://create.roblox.com/docs/reference/engine/classes/ScreenGui/ScreenInsets
  • PolicyService paid-random posture: https://create.roblox.com/docs/reference/engine/classes/PolicyService#GetPolicyInfoForPlayerAsync

01

Story & Voice

Shot kernel, voice manifest, copy register — the words and beats.

2/5 docs · 10 shot manifests

Storyboard Kernel

pending

_bmad-output/video-artifacts/lst-promo-storyboard-kernel.md — file not on disk yet.

RobloxSME Storyboard Audit

complete

_bmad-output/video-artifacts/lst-storyboard-phase-a2-roblox-sme-audit.md · 6.3 KB

Read

LST Storyboard Phase A.2 RobloxSME Audit

Issue: ROB-43 Source storyboard: /srv/http/roblox/_bmad-output/video-artifacts/lst-promo-storyboard-kernel.md Audit role: RobloxSME shadow, OD-020 Phase A.2 Date: 2026-05-18

Verdict

Phase A.3 may proceed after the required amendments below are folded into the shot-manifest re-spin instructions. The revised storyboard is ACCEPT on Roblox gameplay realism and OD-020 production direction, with one WEAK asset-library/reference-lock risk that must be handled before any manifest is treated as render-ready.

Fidelity Axis Table

AxisVerdictEvidence
Art / worldACCEPTBeat 01 establishes a sunny Roblox park, crate-table stand, blocky gameplay framing, and no PST salon remnants. Beats 07-10 keep stand-tier growth visible from crate table to painted cart / kiosk. This matches BRAND-CANON.md Build #1 LST context and its forbidden drift rules.
AvatarsACCEPTStoryboard requires hero kid, customers, multiplayer crowd, and family cameos to read as Roblox R15/R6. Cameos are background/easter-egg only, not replacements for the player or customer loop. This matches BRAND-CANON.md in-game LST avatar constraints.
UI / HUD chromeACCEPTAll 10 beats include HUD/UI targets or explicit game chrome: Day/weather/coins, Buy Lemons, fill meter, price sign, leaderboard, chat bubble, +50 coins, playing-now badge, Upgrade Stand, and final title/store-read tag. This satisfies ASSET-LIBRARY.md Roblox-fidelity contract and OD-020 #1-hit visual additions.
Gameplay-loop visibilityACCEPTBeats 02-09 preserve the PRD first-loop order: buy lemons, squeeze/pour, set price, serve customer, earn coins, upgrade stand, weather event, repeat bigger. Beat 10 lands the PRD screenshot moment: painted stand, customer, cup/coin feedback, weather widget, and glowing Upgrade Stand.
Production polish / #1-hit energyACCEPTThe storyboard adds leaderboard, customer chat bubble, +50 coins, multiplayer approach, 1,247 playing, and Free • Roblox. Audio direction is specific enough for downstream work: one narrator, reusable SFX names, music ducks/swells, and cross-cut carry notes.

Family Cameo Audit

CameoStoryboard placementVerdictRobloxSME notes
Twin ABeat 06, background admin avatar walks past after sale with [ADMIN] Twin A: nice sale!ACCEPTPlacement is plausible because the sale/coin moment is already celebratory. It does not steal the customer reaction or payout. The chat overlay is short, TWIN-simple, and avoids COPY-VOICE.md banned words.
DadBeat 07, one-second build-helper moment during stand upgradeACCEPTDad as a helper tightening a board is the least disruptive cameo placement. It supports the upgrade verb without turning Dad into the owner/player. Must preserve beard and canonical likeness in the R15 adaptation per BRAND-CANON.md.
Twin BBeat 09, low-contrast crowd / leaderboard / queue cameo during repeat-bigger montageACCEPTThe "spot-it-again" placement fits OD-020. Keep Twin B secondary to queue/montage energy and preserve messier asymmetric hair + hoodie/icon signature in the R15 adaptation.

R15 adaptation plausibility: ACCEPT as a storyboard direction. The family seeds exist under site/assets/library/personas/{dad,twin-a,twin-b}/, and OD-020 explicitly calls for props/avatars-lst/{twin-a-r15-admin,twin-b-r15-admin,dad-r15-helper}.png generated from those seeds. The adaptation is plausible if Phase B uses the canonical persona PNGs as reference inputs and registers parent chains in the target folder _index.yaml.

Required Amendments Before Phase A.3

ROBLOX-SME-AMENDMENT: Do not let Phase A.3 treat newly named OD-020 assets as render-ready references until they exist under site/assets/library/ and are registered in the nearest _index.yaml. Current missing/new targets include props/avatars-lst/twin-a-r15-admin.png, props/avatars-lst/twin-b-r15-admin.png, props/avatars-lst/dad-r15-helper.png, props/ui-cards/leaderboard-top-3.png, props/ui-cards/chat-bubble-customer.png, props/ui-cards/chat-bubble-admin.png, props/ui-cards/playing-now-badge.png, props/ui-cards/title-card-lst-logo.png, and props/vfx/plus-50-coins-float.png.

ROBLOX-SME-AMENDMENT: Phase A.3 shot manifests must either wait for Phase B reference-lock output or clearly mark these as planned references, not signed render inputs. ASSET-LIBRARY.md requires shot-manifest references to be library-relative paths that exist and are registered; prose intent or future filenames are not enough for paid still/motion work.

ROBLOX-SME-AMENDMENT: Beat 10 needs an explicit asset contract for the Free • Roblox tag. Either include that text inside props/ui-cards/title-card-lst-logo.png and state it in the manifest brief, or add a dedicated library path such as props/ui-cards/free-roblox-tag.png. The current storyboard says the tag appears but the required target list only names the title-card logo.

ROBLOX-SME-AMENDMENT: Family cameo manifests must cite both the R15 adaptation path and its parent canonical persona seed. This is the canon bridge that prevents a generic Roblox child/adult from replacing Twin A, Twin B, or Dad. Required parent seeds are personas/twin-a/twin-a-canonical-avatar.png, personas/twin-b/twin-b-canonical-avatar.png, and personas/dad/dad-canonical-avatar.png.

Non-Blocking Observations

  • The narrator lines are TWIN-layer simple and avoid the COPY-VOICE.md TWIN banned-word list.
  • The storyboard correctly keeps twins silent in spoken narration; cameos are visual/chat overlays only.
  • The PRD excludes multiplayer from MVP runtime scope, but OD-020 is a promo/commercial directive. Showing multiple approaching players in beat 08 is acceptable as #1-hit promo energy, not a Build #1 MVP promise, as long as downstream public/product docs do not reinterpret it as launch MVP multiplayer.
  • OD-020 remains production/universe-building only and does not alter /journey/, consistent with JOURNEY-STORY-CANON.md.

Handoff

No storyboard rewrite is required from RobloxSME. Phase A.3 may proceed if the shot-manifest worker folds the amendments above into manifest reference status and Phase B dependency notes. Paid still/motion work remains blocked until reference-lock and reviewer signatures exist.

Audio Lock

complete

_bmad-output/video-artifacts/audio/lst-promo-audio-lock.md · 5.6 KB

Read

LST Promo Audio Lock

Issue: ROB-39 Workflow: OD-018 cascade step 9, StoryCreator audio-lock pass Storyboard source: bmad-output/video-artifacts/lst-promo-storyboard-kernel.md Machine manifest: bmad-output/video-artifacts/audio/lst-promo-audio-manifest.yaml Status: locked plan only; no audio files generated

Canon References

  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md
  • /srv/http/_hq/projects/project-roblox/OD-018-pivot-to-lemonade-stand-tycoon.md
  • /srv/http/_hq/projects/project-roblox/OD-016-final-provider-stack.md
  • /srv/http/roblox/_bmad-output/video-artifacts/lst-promo-storyboard-kernel.md

Supersession

ROB-22's PST promo audio lock is superseded once this LST audio plan is accepted. Do not unblock, reuse, or remix PST voice, music, SFX, or proxy assets for current-state Lemonade Stand Tycoon planning.

Storytelling Lock

Framework: Roblox-fidelity gameplay-loop promo.

Story spine: the player starts with a tiny stand, buys lemons, fills the pitcher, sets a fair price, serves a customer, earns coins, upgrades the stand, reacts to hot weather, and repeats bigger.

This is not a pet-salon, bubble, battle, boss-drop, or factory-dropper track. The sound should feel sunny, quick, readable, and kid-clear.

Global Mix Direction

  • Target length: exactly 60.0 seconds.
  • Target final loudness for assembly: -16 LUFS integrated, true peak under -1.5 dBTP.
  • Music bed: warm sunny upbeat lemonade-stand bed, light handclaps, bright plucks, soft shaker, tiny coin accents, and a clean final title hit. Lift after the first sale and again when the stand upgrades.
  • Voice plan: future synthetic provider voice placeholders only, compatible with OD-016 default-library labels bill, liam, and sarah.
  • Voice safety: no family, twin, or persona voice cloning. The voice labels are provider placeholders for later generation, not likeness claims.
  • Generation boundary: this issue creates only lst-promo-audio-lock.md and lst-promo-audio-manifest.yaml.
  • Later steps: actual ElevenLabs voice generation is OD-018 step 14. Suno music-bed generation is OD-018 step 15 and remains a manual operator action.

Locked Timing Map

ShotTimeMusic / sound directionVoice cueText fallback
lst-00100:00-00:05Sunny pluck hook, soft park air, light UI open.Bill: "We start with lemons and one tiny stand."Same line
lst-00200:05-00:10Buy tap, coin dip, crate-fill accents.Liam: "Tap buy lemons. The crate fills up."Same line
lst-00300:10-00:16Squeeze pops, pour splash, pitcher-fill rise.Bill: "Squeeze, pour, and watch the pitcher fill."Same line
lst-00400:16-00:22Chalk sign flip, want-bubble ping, customer steps.Sarah: "Set the price before the customer arrives."Same line
lst-00500:22-00:29Cup handoff, sip, small smile sparkle.Liam: "Serve one cup. Wait for the smile."Same line
lst-00600:29-00:35Coin pop burst, counter ticks, upgrade glow.Bill: "Coins pop, and the upgrade button glows."Same line
lst-00700:35-00:42Upgrade whoosh, stand sparkle, music lift.Sarah: "Our tiny stand turns into a real cart."Same line
lst-00800:42-00:48Weather sting, heat shimmer, busier clap pulse.Liam: "Hot day. More thirsty people are coming."Same line
lst-00900:48-00:55Fast sunny montage, flyer flap, billboard pop, bigger groove.Bill: "We sell more cups, and everything grows."Same line
lst-01000:55-01:00Final title hit, coin sparkle tail, clean resolve.Bill: "We sold one cup. Our stand got bigger."Same line

SFX Cue Map

CueShotTime targetDirection
buy taplst-00200:05.45Friendly Roblox UI tap, short and bright.
lemons filllst-00200:06.20Chunky lemons landing in a crate, not realistic fruit foley.
squeezelst-00300:10.80Soft pop-squeeze accent for the first lemon action.
pourlst-00300:12.60Light lemonade pour splash that stays under voice.
chalk sign fliplst-00400:16.55Wooden flip plus chalk tick, tied to the fair price state.
customer siplst-00500:24.60Tiny cup sip and happy reaction sparkle.
coin poplst-00600:29.70Bright coin burst, then two quick counter ticks.
upgrade whooshlst-00700:36.20Upward whoosh with stand sparkle, no heavy impact.
weather stinglst-00800:42.35Sunny heatwave alert, busy but not scary.
final title hitlst-01000:56.40Clean title chime with short tail through 60.0s.

Provider Boundary

Allowed in this issue:

  • Voice-line text.
  • Voice assignment placeholders: bill, liam, sarah.
  • Music-bed direction for the later Suno prompt.
  • SFX cue names, timings, and direction.
  • Machine-readable YAML plan.

Not allowed in this issue:

  • ElevenLabs calls.
  • Suno generation.
  • Cloudflare, Runway, Hyperframes, or paid provider calls.
  • Voice WAVs, music files, SFX files, stills, motion clips, final renders, public URLs, site publishing, or reference-image generation.

Handoff Notes

Step 10 reference-image generation can consume the shot-manifest order and timing alignment from this lock, but it must not treat audio as generated. Reference-image work remains blocked by the LST reference-lock rules in lst-reference-lock-needed.md and the reviewer signature fields in each lst-NNN-SHOT-MANIFEST.yaml.

Brand Canon

pending

_hq/projects/project-roblox/BRAND-CANON.md — file not on disk yet.

Copy Voice

pending

_hq/projects/project-roblox/COPY-VOICE.md — file not on disk yet.

Voice + SFX Manifest (YAML)

complete

_bmad-output/video-artifacts/audio/lst-promo-audio-manifest.yaml

Read
issue: ROB-76
artifact: lst-promo-audio-manifest
created_at_utc: 2026-05-18T16:32:00Z
workflow: OD-020 Phase D.1 single-narrator audio manifest
status: locked_manifest_no_audio_generated
duration_s: 60.0
active_for_od020: true

supersedes:
  - artifact: _bmad-output/video-artifacts/audio/lst-promo-audio-manifest.yaml
    previous_issue: ROB-39
    note: "Replaces the ROB-39 three-voice LST plan with one pending narrator slot."
  - artifact: _bmad-output/video-artifacts/audio/pst-promo-audio-manifest.yaml
    active_for_od020: false
    note: "Legacy Pet Salon Tycoon audio manifest is not active for OD-020."

canon_refs:
  - /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  - /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  - /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  - /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md
  - /srv/http/_hq/projects/project-roblox/OD-020-advanced-production.md
  - /srv/http/_hq/projects/project-roblox/OD-020-phase-b-ceo-signoff.md
storyboard_source:
  issue: ROB-42
  path: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
shot_manifest_set:
  - _bmad-output/video-artifacts/shot-manifests/lst-001-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-002-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-003-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-004-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-005-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-006-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-007-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-008-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-009-SHOT-MANIFEST.yaml
  - _bmad-output/video-artifacts/shot-manifests/lst-010-SHOT-MANIFEST.yaml

copy_register:
  primary: TWIN
  average_sentence_words_target: "8-12"
  customer_facing_lines:
    spoken_narrator: true
    visible_chat_overlay: false
  banned_word_check_scope: narrator_lines
  no_tech_layer_in_video: true

generation_boundary:
  this_issue_creates_audio_files: false
  narrator_voice_selection_step: OD-020 Phase D.3
  sfx_generation_step: OD-020 Phase D.2
  music_generation_step: OD-020 Phase D.4 operator/Suno handoff
  disallowed_actions:
    - elevenlabs_voice_generation
    - elevenlabs_sfx_generation
    - suno_generation
    - provider_api_calls
    - paid_provider_calls
    - audio_file_creation
    - final_mix
    - public_url_change

narrator_voice_slot:
  id: lst_single_narrator
  count: 1
  provider_for_later: ElevenLabs Creator
  role: narrator
  status: locked_for_production
  locked_voice_id: TX3LPaxmHKxFdv7VOQHJ
  locked_voice_name: Liam - Energetic, Social Media Creator
  audition_candidates:
    - Adam
    - Antoni
    - Daniel
    - Sam
  audition_sample_line: "We start with lemons and one tiny stand."
  selection_owner: CEO plus Claude main
  selection_step: OD-020 Phase D.3
  direction: "Young-adult Roblox creator energy, upbeat and kid-targeted, consistent across all ten beats."
  prohibited: "Do not split the read across multiple narrator voices."

music_bed:
  id: lst-promo-music-bed-v01
  provider_for_later_manual_step: Suno Pro or approved equivalent
  status: generated_2026-05-18T20:27Z_60.00s
  future_asset_contract:
    library_path: audio/music-references/lst/lst-promo-music-bed-v01.wav
    workspace_drop_path: _bmad-output/video-artifacts/audio/assets/lst-promo-music-bed-v01.wav
    generated_in_step: OD-020 Phase D.4
  prompt: "Warm Roblox lemonade stand tycoon commercial bed, 60 seconds. Bright sunny opening with curious pluck motif. Bubbly upbeat tycoon groove starts at 5 seconds with light handclaps, bright xylophone, and soft cash-register accents. First lift at 22 seconds when the customer sips. Second lift at 35 seconds when the stand upgrades. Heatwave busier groove at 42 seconds with faster percussion, not scary. Big triumphant payoff at 48 seconds. Gentle title-card tail. No battle drop, no boss tension, no dark cinematic drums, no pet salon bubble bath, no factory dropper."
  timing_notes:
    - "Keep clear voice space at each narrator start."
    - "Duck about 30 percent under squeeze, pour, sale, and upgrade impact sounds."
    - "Swell at 22.0s, 35.0s, 48.0s, and resolve at 55.0s on the title-card hit."

voice_cues:
  - id: lst.vo.001.tiny_stand
    shot_id: lst-001
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-001-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 0.20
    end_s_target: 5.30
    carry_out_s: 0.30
    text: "We start with lemons and one tiny stand."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-001-single-narrator-tiny-stand.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.002.buy_lemons
    shot_id: lst-002
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-002-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 5.55
    end_s_target: 9.30
    text: "Tap buy lemons, and our crate fills right up."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-002-single-narrator-buy-lemons.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.003.pitcher_fill
    shot_id: lst-003
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-003-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 10.45
    end_s_target: 15.10
    text: "Squeeze, pour, and watch the pitcher fill."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-003-single-narrator-pitcher-fill.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.004.price_customer
    shot_id: lst-004
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-004-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 17.05
    end_s_target: 21.30
    text: "Set the price before the customer arrives."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-004-single-narrator-price-customer.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.005.serve_smile
    shot_id: lst-005
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-005-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 22.75
    end_s_target: 27.90
    text: "Serve one fresh cup. Then wait for the smile."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-005-single-narrator-serve-smile.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.006.coins_glow
    shot_id: lst-006
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-006-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 29.55
    end_s_target: 34.20
    text: "Coins pop, and the upgrade button glows."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-006-single-narrator-coins-glow.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.007.real_cart
    shot_id: lst-007
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-007-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 35.80
    end_s_target: 40.50
    text: "Our tiny stand turns into a real cart."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-007-single-narrator-real-cart.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.008.hot_day
    shot_id: lst-008
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-008-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 42.65
    end_s_target: 46.50
    text: "Hot day. More thirsty people come to our stand."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-008-single-narrator-hot-day.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.009.everything_grows
    shot_id: lst-009
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-009-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 48.85
    end_s_target: 55.20
    carry_out_s: 0.20
    text: "We sell more cups, and everything grows."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-009-single-narrator-everything-grows.wav
      generated_in_step: OD-020 Phase D.3
  - id: lst.vo.010.bigger_stand
    shot_id: lst-010
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-010-SHOT-MANIFEST.yaml
    narrator_voice_slot: lst_single_narrator
    start_s: 55.65
    end_s_target: 59.45
    text: "We sold one cup. Now our stand got bigger."
    future_asset_contract:
      library_path: audio/voice-clips/lst/lst-010-single-narrator-bigger-stand.wav
      generated_in_step: OD-020 Phase D.3

sfx_cues:
  - id: ui-tap
    shot_id: lst-002
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-002-SHOT-MANIFEST.yaml
    start_s: 5.10
    insertion_frame: 3
    duration_s_target: 0.35
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/ui-tap.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Short bright Roblox mobile UI tap, friendly plastic click, clean transient, no menu error tone."
  - id: coin-chime
    shot_id: lst-002
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-002-SHOT-MANIFEST.yaml
    start_s: 5.45
    insertion_frame: 14
    duration_s_target: 0.70
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/coin-chime.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Single cheerful coin pickup for Roblox tycoon UI, bright chime with tiny counter tick, not casino-like."
  - id: cash-register-ding
    shot_id: lst-005
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-005-SHOT-MANIFEST.yaml
    start_s: 23.40
    insertion_frame: 42
    duration_s_target: 0.90
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/cash-register-ding.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Playful sale confirmation ding for a lemonade stand game, soft register bell plus tiny sparkle, kid friendly."
  - id: customer-cheer-yum
    shot_id: lst-005
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-005-SHOT-MANIFEST.yaml
    start_s: 27.80
    insertion_frame: 174
    duration_s_target: 1.20
    overlap_next_cut_s: 0.20
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/customer-cheer-yum.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Tiny happy customer reaction for a Roblox lemonade sip, cute yum cheer, no spoken words, no crowd roar."
  - id: coin-burst
    shot_id: lst-006
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-006-SHOT-MANIFEST.yaml
    start_s: 29.05
    insertion_frame: 2
    duration_s_target: 1.10
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/coin-burst.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Multi-coin payout burst for Roblox tycoon reward, bright stacked chimes and quick counter ticks, energetic but clean."
  - id: upgrade-whoosh
    shot_id: lst-007
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-007-SHOT-MANIFEST.yaml
    start_s: 35.20
    insertion_frame: 6
    duration_s_target: 1.80
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/upgrade-whoosh.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Upward magical whoosh for a Roblox stand upgrade, wood-to-cart transformation energy, no explosion."
  - id: upgrade-sparkle-tail
    shot_id: lst-007
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-007-SHOT-MANIFEST.yaml
    start_s: 40.80
    insertion_frame: 174
    duration_s_target: 1.60
    overlap_next_cut_s: 0.40
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/upgrade-sparkle-tail.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Sparkle tail after a successful stand upgrade, bright star ticks that trail softly into the next shot."
  - id: weather-pop-heat
    shot_id: lst-008
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-008-SHOT-MANIFEST.yaml
    start_s: 42.15
    insertion_frame: 5
    duration_s_target: 1.10
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/weather-pop-heat.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Sunny heatwave widget pop for Roblox UI, warm shimmer, playful alert, busy but not scary."
  - id: customer-spawn-pop
    shot_id: lst-008
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-008-SHOT-MANIFEST.yaml
    start_s: 43.35
    insertion_frame: 41
    duration_s_target: 0.90
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/customer-spawn-pop.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Friendly customer arrival pop for Roblox tycoon, tiny whoop and soft sparkle, useful under a busy music bed."
  - id: title-card-stinger
    shot_id: lst-010
    shot_manifest: _bmad-output/video-artifacts/shot-manifests/lst-010-SHOT-MANIFEST.yaml
    start_s: 55.00
    insertion_frame: 1
    duration_s_target: 2.00
    future_asset_contract:
      workspace_drop_path: _bmad-output/video-artifacts/audio/assets/sfx/title-card-stinger.wav
      takes_required: 2
      generated_in_step: OD-020 Phase D.2
    prompt: "Clean bright title reveal stinger for Lemonade Stand Tycoon, chime plus short sparkle tail, resolves under final narration."

cross_cut_timing_notes:
  - boundary: lst-001_to_lst-002
    cut_s: 5.0
    direction: "The narrator's final word carries 0.3s into beat 02. Music continues. Coin chime punches at the first coin-counter tick."
  - boundary: lst-002_to_lst-003
    cut_s: 10.0
    direction: "Beat 03 opens with 0.4s of squeeze and pour sound space before narration. Music ducks about 30 percent."
  - boundary: lst-005_to_lst-006
    cut_s: 29.0
    direction: "Customer cheer overlaps 0.2s into beat 06, then coin burst lands on the first payout frame."
  - boundary: lst-007_to_lst-008
    cut_s: 42.0
    direction: "Upgrade whoosh and sparkle tail carry into the heatwave widget flip."
  - boundary: lst-009_to_lst-010
    cut_s: 55.0
    direction: "Montage swell resolves into title-card stinger on frame 1 of beat 10 while the final line stays clean."

deliverables:
  machine_manifest: _bmad-output/video-artifacts/audio/lst-promo-audio-manifest.yaml
  generated_voice_stems: not_created_in_this_issue
  generated_sfx_stems: not_created_in_this_issue
  generated_music_bed: not_created_in_this_issue
  recommended_next_handoff: "D.2 should generate two takes for each SFX cue, then D.3 should audition Adam, Antoni, Daniel, and Sam using the shared sample line without selecting multiple narrators."

02

Asset Library

Every character, prop, HUD card, lemon, environment, and VFX used in the shoot.

65 assets
OD-026 Anti-Lego Refresh — character sprite sheets v2 · 2026-05-20

Why we re-cut the characters

complete

Half-way through the cut, the operator noticed our characters were drifting toward Lego — claw-clamp hands, stud-peg shoulders, brick seams on torsos. We added an anti-Lego anchor block to every character generator and set a hard visual gate on hands before any other work could proceed. Twin A’s canary needed three attempts before the hands passed. Then all five characters were regenerated under the new prompt and the per-shot stills were re-rendered.

The anchor itself, verbatim from OD-026 §3.1:

This is a Roblox R15 avatar, NOT a Lego minifigure and NOT a stud-and-tube brick toy. Hands must be rounded R15 mitt-style hands with subtle finger geometry suggestion, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs.

Twin A canary — three attempts to get the hands right
Attempt 1 — rejected
Attempt 1 — rejectedc-clamp hands · 945 KB
Attempt 2 — rejected
Attempt 2 — rejectedstill c-clamp hands · 926 KB
Attempt 3 — passed
Attempt 3 — passedRobloxSME R15 fidelity · 938 KB
Accepted
Acceptedlocked as new canary · 938 KB
Regenerated character sprite sheets · 5 subjects · 8 sheets
Twin A · Khalil — neutral angles
Twin A · Khalil — neutral anglestwin-a-neutral-angles-sheet.png · 1.05 MB
Twin B · Kareem — neutral angles
Twin B · Kareem — neutral anglestwin-b-neutral-angles-sheet.png · 1.11 MB
Twin B · Kareem — pose sheet
Twin B · Kareem — pose sheettwin-b-pose-sheet.png · 1.10 MB
Dad — neutral angles
Dad — neutral anglesdad-neutral-angles-sheet.png · 1.17 MB
Dad — pose sheet
Dad — pose sheetdad-pose-sheet.png · 1.11 MB
Hero Kid — neutral angles
Hero Kid — neutral angleshero-kid-neutral-angles-sheet.png · 1.02 MB
Hero Kid — pose sheet
Hero Kid — pose sheethero-kid-pose-sheet.png · 976 KB
Customers — NPC sheet
Customers — NPC sheetcustomer-npcs-sheet.png · 1.16 MB
Phase B Contact Sheets — composition lock
Asset Library Phase B2 Contact Sheet
Asset Library Phase B2 Contact Sheetlst-asset-library-phase-b2-contact-sheet.png · 161.2 KB
Asset Library Phase B4 Ux Required Respin Contact Sheet
Asset Library Phase B4 Ux Required Respin Contact Sheetlst-asset-library-phase-b4-ux-required-respin-contact-sheet.png · 104.0 KB
Family Cameos & Hero Kid 5 PIL · 13 Gen 1 · 13 Gen 2

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Dad R15 Helper
Dad R15 Helperdad-r15-helper.png · 8.8 KB
Build notes
Prompt
ROB-61 no-text Roblox R15 helper cameo preserving Dad full beard, dark hoodie, adult helper read, lemonade prop, and helper tray silhouette.
Source Issue
ROB-61
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T14:46:32Z
Library Path
props/avatars-lst/dad-r15-helper.png
Parent Assets
personas/dad/dad-canonical-avatar.png · style-packs/lst-tycoon-sunny-v1/reference-board.png
Hero Kid R15 3Q
Hero Kid R15 3Qhero-kid-r15-3q.png · 13.0 KB
Hero Kid R15 Front
Hero Kid R15 Fronthero-kid-r15-front.png · 10.4 KB
Twin A R15 Admin
Twin A R15 Admintwin-a-r15-admin.png · 8.6 KB
Build notes
Prompt
ROB-61 no-text Roblox R15 admin cameo preserving Twin A neat hair, blue hoodie, yellow hex icon, composed smile, lemonade prop, and clipboard silhouette.
Source Issue
ROB-61
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T14:46:32Z
Library Path
props/avatars-lst/twin-a-r15-admin.png
Parent Assets
personas/twin-a/twin-a-canonical-avatar.png · style-packs/lst-tycoon-sunny-v1/reference-board.png
Twin B R15 Admin
Twin B R15 Admintwin-b-r15-admin.png · 9.3 KB
Build notes
Prompt
ROB-61 no-text Roblox R15 admin cameo preserving Twin B messier asymmetric hair, blue hoodie, bigger grin, raised action pose, lemonade prop, and sparkle cues.
Source Issue
ROB-61
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T14:46:32Z
Library Path
props/avatars-lst/twin-b-r15-admin.png
Parent Assets
personas/twin-b/twin-b-canonical-avatar.png · style-packs/lst-tycoon-sunny-v1/reference-board.png

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

Adult Customer
Adult Customeradult-customer.png · 253.7 KB
Customer Npcs Sheet
Customer Npcs Sheetcustomer-npcs-sheet.png · 940.5 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Four generic Roblox customer NPC archetypes for a lemonade stand: kid customer, adult customer, dog walker without visible dog detail overload, skateboarder. Layout: 4x1 sprite sheet panels ordered kid-customer, adult-customer, dog-walker, skateboarder. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Each is one full-body R15-style customer, isolated, friendly, not based on Dad, Twin A, Twin B, Claude, Crew, or Hero Kid. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:26:39Z
Library Path
sprite-sheets/characters/customers/customer-npcs-sheet.png
Dad Front Neutral
Dad Front Neutraldad-front-neutral.png · 560.6 KB
Dad Neutral Angles Sheet
Dad Neutral Angles Sheetdad-neutral-angles-sheet.png · 1.08 MB
Build notes
Prompt
Use the provided Dad canonical avatar as the likeness lock. Preserve Dad's adult helper identity: brown spiky low-poly hair, full short brown beard, warm confident smile, charcoal hoodie, and friendly weekend-builder read. Produce a 3x2 panel sprite sheet of Dad on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Convert the referenced character into full-body Roblox-fidelity sprites. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. No props, no UI, no text, no watermark, no extra characters.
Source Issue
ROB-87
Provider Used
gpt-image-2
Generated At
2026-05-18T19:02:23Z
Library Path
sprite-sheets/characters/dad/dad-neutral-angles-sheet.png
Dad Pose Sheet
Dad Pose Sheetdad-pose-sheet.png · 1.06 MB
Build notes
Prompt
Use the provided Dad canonical avatar as the likeness lock. Preserve Dad's adult helper identity: brown spiky low-poly hair, full short brown beard, warm confident smile, charcoal hoodie, and friendly weekend-builder read. Use the provided Dad canonical avatar and Dad front-neutral sprite as the likeness and sprite-style lock. Produce a 2x2 panel pose sheet of Dad on a single 1024x1024 image. Four panels in this exact order: top-left = neutral front stance; top-right = action-pose-1 point-to-stand / show-it-off; bottom-left = action-pose-2 thumbs-up; bottom-right = action-pose-3 carry-pitcher. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Convert the referenced character into full-body Roblox-fidelity sprites. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. The carry-pitcher pose may include one simple Roblox-style lemonade pitcher prop. No UI, no text, no watermark, no extra characters.
Source Issue
ROB-87
Provider Used
gpt-image-2
Generated At
2026-05-18T19:03:45Z
Library Path
sprite-sheets/characters/dad/dad-pose-sheet.png
Hero Kid Front Neutral
Hero Kid Front Neutralhero-kid-front-neutral.png · 403.6 KB
Hero Kid Neutral Angles Sheet
Hero Kid Neutral Angles Sheethero-kid-neutral-angles-sheet.png · 1.05 MB
Build notes
Prompt
Use the provided identity reference image as the likeness lock for Hero Kid. Preserve the same playable protagonist identity from hero-kid-canonical-avatar.png: rb-blue jacket or hoodie, rb-yellow shirt accent, rb-orange accessory stripe, simple pants, chunky Roblox shoes, short stylized dark-brown low-poly hair, child-readable proportions, and friendly confident helper energy. Do not turn Hero Kid into Twin A, Twin B, Dad, or any family portrait likeness. Produce a 3x2 panel sprite sheet of Hero Kid on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. No props, no UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-88
Provider Used
gpt-image-2
Generated At
2026-05-18T19:03:42Z
Library Path
sprite-sheets/characters/hero-kid/hero-kid-neutral-angles-sheet.png
Hero Kid Pose Sheet
Hero Kid Pose Sheethero-kid-pose-sheet.png · 977.3 KB
Build notes
Prompt
Use the provided Hero Kid identity reference image and the just-generated neutral-front sprite as the likeness and style lock. Preserve the same playable protagonist identity from hero-kid-canonical-avatar.png and hero-kid-front-neutral.png: rb-blue jacket or hoodie, rb-yellow shirt accent, rb-orange accessory stripe, simple pants, chunky Roblox shoes, short stylized dark-brown low-poly hair, child-readable proportions, and friendly confident helper energy. Do not turn Hero Kid into Twin A, Twin B, Dad, or any family portrait likeness. Produce a 2x2 panel pose sheet of Hero Kid on a single 1024x1024 image. Four panels in this exact order: top row = neutral, action-pose-1 drink-cup sip; bottom row = action-pose-2 cheer arms-up, action-pose-3 running approach-stand. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Pose details: neutral panel uses the same front neutral stance; sip panel holds a simple cup near the mouth; cheer panel has arms up in a friendly celebration; run panel leans forward in an approach-stand running pose. No UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-88
Provider Used
gpt-image-2
Generated At
2026-05-18T19:04:46Z
Library Path
sprite-sheets/characters/hero-kid/hero-kid-pose-sheet.png
Twin A Front Neutral
Twin A Front Neutraltwin-a-front-neutral.png · 963.0 KB
Build notes
Prompt
Use the uploaded image as the identity reference for Twin A. Preserve Twin A's canonical identity: 10-year-old boy, neat evenly tufted brown spiky hair, child face, composed confident smile, saturated blue hoodie family color, small yellow hex chest icon, same warm skin tone. Convert this exact identity into a full-body front-facing neutral Roblox R15 sprite. OD-021 Roblox-fidelity anchor: 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Sprite requirements: full body visible, centered, front neutral pose, arms relaxed slightly away from torso, feet apart, segmented Roblox torso/arms/legs/hands/feet, glossy plastic hoodie and shoes, no props, no UI, no text, no watermark, no logo, no extra characters. Put the isolated subject on a perfectly flat solid chroma green background #00FF00 for approved local alpha matting. Avoid green clothing or accessories.
Source Issue
ROB-80
Provider Used
gpt-image-2
Generated At
2026-05-18T17:27:21Z
Library Path
sprite-sheets/characters/twin-a/twin-a-front-neutral.png
Twin A Neutral Angles Sheet
Twin A Neutral Angles Sheettwin-a-neutral-angles-sheet.png · 1.07 MB
Build notes
Prompt
Use the provided identity reference image and accepted canary image as the likeness and style lock for Twin A. Preserve the same character identity: neat hair, blue/yellow palette, and the accepted Twin A face/figure proportions from twin-a-front-neutral.png. Produce a 3x2 panel sprite sheet of Twin A on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art.
Source Issue
ROB-81
Provider Used
gpt-image-2
Generated At
2026-05-18T18:01:05Z
Library Path
sprite-sheets/characters/twin-a/twin-a-neutral-angles-sheet.png
Twin B Front Neutral
Twin B Front Neutraltwin-b-front-neutral.png · 449.6 KB
Twin B Neutral Angles Sheet
Twin B Neutral Angles Sheettwin-b-neutral-angles-sheet.png · 1.14 MB
Build notes
Prompt
Use the uploaded image as the identity reference for Twin B. Preserve Twin B's canonical identity: 10-year-old boy, same brown hair color and length as Twin A but with messier asymmetric spiky tufts, child face, bigger grin, saturated blue hoodie family color, small yellow hex chest icon, same warm skin tone. Convert this exact identity into a full-body Roblox R15 sprite sheet. OD-021 Roblox-fidelity anchor: 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Produce a 3x2 panel sprite sheet of Twin B on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. No props, no UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-86
Provider Used
gpt-image-2
Generated At
2026-05-18T19:02:48Z
Library Path
sprite-sheets/characters/twin-b/twin-b-neutral-angles-sheet.png
Twin B Pose Sheet
Twin B Pose Sheettwin-b-pose-sheet.png · 1.03 MB
Build notes
Prompt
Use the uploaded Twin B canonical identity reference and the uploaded Twin B neutral-front sprite as the likeness, material, and proportion lock. Preserve Twin B's canonical identity: messier asymmetric brown spiky hair, child face, bigger grin, saturated blue hoodie family color, small yellow hex chest icon, and the same warm skin tone. Match the neutral-front sprite's Roblox R15 proportions, materials, lighting, and scale. OD-021 Roblox-fidelity anchor: 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Produce a 2x2 panel pose sheet of Twin B on a single 1024x1024 image. Four panels in this exact order: top-left = neutral, top-right = action-pose-1 pour, bottom-left = action-pose-2 call-out wave, bottom-right = action-pose-3 cash-up coin-grab. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Props are allowed only when required by the named pose: a simple cup/pitcher for pour and a small coin for cash-up. No UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-86
Provider Used
gpt-image-2
Generated At
2026-05-18T19:03:50Z
Library Path
sprite-sheets/characters/twin-b/twin-b-pose-sheet.png

Gen 2 sprite OD-026 · anti-Lego

2026-05-20 · hands hard-gated · R15 fidelity

Adult Customer
Adult Customeradult-customer.png · 386.8 KB
Customer Npcs Sheet
Customer Npcs Sheetcustomer-npcs-sheet.png · 1.16 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Subject: Four generic Roblox customer NPC archetypes for a lemonade stand: kid customer, adult customer, dog walker without visible dog detail overload, skateboarder. Layout: 4x1 sprite sheet panels ordered kid-customer, adult-customer, dog-walker, skateboarder. Every panel must have one isolated subject on transparent background. Each is one full-body R15-style customer, isolated, friendly, not based on Dad, Twin A, Twin B, Claude, Crew, or Hero Kid. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:44:07Z
Library Path
sprite-sheets/characters/customers/customer-npcs-sheet.png
Dad Front Neutral
Dad Front Neutraldad-front-neutral.png · 644.7 KB
Dad Neutral Angles Sheet
Dad Neutral Angles Sheetdad-neutral-angles-sheet.png · 1.17 MB
Build notes
Prompt
Use the provided Dad canonical avatar as the likeness lock. Preserve Dad's adult helper identity: brown spiky low-poly hair, full short brown beard, warm confident smile, charcoal hoodie, and friendly weekend-builder read. Convert the referenced character into full-body Roblox-fidelity sprites. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 3x2 panel sprite sheet of Dad on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. No props, no UI, no text, no watermark, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:38:58Z
Library Path
sprite-sheets/characters/dad/dad-neutral-angles-sheet.png
Dad Pose Sheet
Dad Pose Sheetdad-pose-sheet.png · 1.11 MB
Build notes
Prompt
Use the provided Dad canonical avatar as the likeness lock. Preserve Dad's adult helper identity: brown spiky low-poly hair, full short brown beard, warm confident smile, charcoal hoodie, and friendly weekend-builder read. Use the provided Dad canonical avatar and Dad front-neutral sprite as the likeness and sprite-style lock. Convert the referenced character into full-body Roblox-fidelity sprites. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 2x2 panel pose sheet of Dad on a single 1024x1024 image. Four panels in this exact order: top-left = neutral front stance; top-right = action-pose-1 point-to-stand / show-it-off; bottom-left = action-pose-2 thumbs-up; bottom-right = action-pose-3 carry-pitcher. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. The carry-pitcher pose may include one simple Roblox-style lemonade pitcher prop. No UI, no text, no watermark, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:40:24Z
Library Path
sprite-sheets/characters/dad/dad-pose-sheet.png
Hero Kid Front Neutral
Hero Kid Front Neutralhero-kid-front-neutral.png · 396.1 KB
Hero Kid Neutral Angles Sheet
Hero Kid Neutral Angles Sheethero-kid-neutral-angles-sheet.png · 1.02 MB
Build notes
Prompt
Use the provided identity reference image as the likeness lock for Hero Kid. Preserve the same playable protagonist identity from hero-kid-canonical-avatar.png: rb-blue jacket or hoodie, rb-yellow shirt accent, rb-orange accessory stripe, simple pants, chunky Roblox shoes, short stylized dark-brown low-poly hair, child-readable proportions, and friendly confident helper energy. Do not turn Hero Kid into Twin A, Twin B, Dad, or any family portrait likeness. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 3x2 panel sprite sheet of Hero Kid on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. No props, no UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:41:37Z
Library Path
sprite-sheets/characters/hero-kid/hero-kid-neutral-angles-sheet.png
Hero Kid Pose Sheet
Hero Kid Pose Sheethero-kid-pose-sheet.png · 976.5 KB
Build notes
Prompt
Use the provided Hero Kid identity reference image and the just-generated neutral-front sprite as the likeness and style lock. Preserve the same playable protagonist identity from hero-kid-canonical-avatar.png and hero-kid-front-neutral.png: rb-blue jacket or hoodie, rb-yellow shirt accent, rb-orange accessory stripe, simple pants, chunky Roblox shoes, short stylized dark-brown low-poly hair, child-readable proportions, and friendly confident helper energy. Do not turn Hero Kid into Twin A, Twin B, Dad, or any family portrait likeness. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 2x2 panel pose sheet of Hero Kid on a single 1024x1024 image. Four panels in this exact order: top row = neutral, action-pose-1 drink-cup sip; bottom row = action-pose-2 cheer arms-up, action-pose-3 running approach-stand. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Pose details: neutral panel uses the same front neutral stance; sip panel holds a simple cup near the mouth; cheer panel has arms up in a friendly celebration; run panel leans forward in an approach-stand running pose. No UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:42:46Z
Library Path
sprite-sheets/characters/hero-kid/hero-kid-pose-sheet.png
Twin A Front Neutral
Twin A Front Neutraltwin-a-front-neutral.png · 938.3 KB
Build notes
Prompt
Use the provided identity reference image as the likeness lock for Twin A. Preserve Twin A's canonical identity: neat evenly tufted brown spiky hair, child face, composed confident smile, saturated blue hoodie family color, small yellow hex chest icon, and the same warm skin tone. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Pose + angle: full-body front-facing neutral stance, head and torso facing camera, arms relaxed slightly away from torso, feet apart, no props, no UI, no text, no watermark, no extra characters. Hand design is the primary acceptance target. Make both hands closed filled Roblox R15 mitten hands: solid peach rounded capsule palms, one small fused thumb bump, no visible hole, no cutout, no pincer gap, no C silhouette, no hook, no clamp, no separated claw tips. If uncertain, choose a closed rounded fist/mitten shape rather than an open hand.
Source Issue
ROB-161
Provider Used
gpt-image-2
Generated At
2026-05-20T12:23:38Z
Library Path
sprite-sheets/characters/twin-a/twin-a-front-neutral.png
Twin A Neutral Angles Sheet
Twin A Neutral Angles Sheettwin-a-neutral-angles-sheet.png · 1.05 MB
Build notes
Prompt
Use the provided identity reference image and accepted canary image as the likeness and style lock for Twin A. Preserve the same character identity: neat hair, blue/yellow palette, and the accepted Twin A face/figure proportions from twin-a-front-neutral.png. Convert the referenced character into a full-body Roblox-fidelity sprite. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject on transparent background, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 3x2 panel sprite sheet of Twin A on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:35:17Z
Library Path
sprite-sheets/characters/twin-a/twin-a-neutral-angles-sheet.png
Twin B Front Neutral
Twin B Front Neutraltwin-b-front-neutral.png · 467.7 KB
Twin B Neutral Angles Sheet
Twin B Neutral Angles Sheettwin-b-neutral-angles-sheet.png · 1.11 MB
Build notes
Prompt
Use the uploaded image as the identity reference for Twin B. Preserve Twin B's canonical identity: 10-year-old boy, same brown hair color and length as Twin A but with messier asymmetric spiky tufts, child face, bigger grin, saturated blue hoodie family color, small yellow hex chest icon, same warm skin tone. Convert this exact identity into a full-body Roblox R15 sprite sheet. OD-021 Roblox-fidelity anchor: 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 3x2 panel sprite sheet of Twin B on a single 1024x1024 image. Six panels in this exact order: top row = front, 3q-left, 3q-right; bottom row = side-left, side-right, back. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. No props, no UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:36:35Z
Library Path
sprite-sheets/characters/twin-b/twin-b-neutral-angles-sheet.png
Twin B Pose Sheet
Twin B Pose Sheettwin-b-pose-sheet.png · 1.10 MB
Build notes
Prompt
Use the uploaded Twin B canonical identity reference and the uploaded Twin B neutral-front sprite as the likeness, material, and proportion lock. Preserve Twin B's canonical identity: messier asymmetric brown spiky hair, child face, bigger grin, saturated blue hoodie family color, small yellow hex chest icon, and the same warm skin tone. Match the neutral-front sprite's Roblox R15 proportions, materials, lighting, and scale. OD-021 Roblox-fidelity anchor: 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, R15 avatar style with segmented body parts and visible joint divisions, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, isolated subject, NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. This is a Roblox R15 avatar, **NOT a Lego minifigure** and NOT a stud-and-tube brick toy. Hands must be **rounded R15 mitt-style hands with subtle finger geometry suggestion**, NOT C-shaped claw clamps, NOT cylindrical clip hands, NOT two-prong gripper hands, NOT pin-and-axle hands. Avoid all Lego identifiers: NO stud pegs on the top of the head or shoulders, NO ABS-plastic brick seams, NO injection-mold split lines, NO Technic pin holes, NO stud-and-tube body connection points, NO trapezoidal Lego torso block, NO short-cylinder Lego legs. Limbs are R15-segmented but with **slight tapering and bevelled joint transitions** — joint divisions read as articulated avatar joints, not snap-fit brick connectors. Materials are glossy plastic *like a Roblox character on the platform's official thumbnails*, not the matte high-density ABS of a Lego figurine. Face is on a smooth ovoid Roblox head with painted-on features, NOT a printed cylindrical Lego head. Produce a 2x2 panel pose sheet of Twin B on a single 1024x1024 image. Four panels in this exact order: top-left = neutral, top-right = action-pose-1 pour, bottom-left = action-pose-2 call-out wave, bottom-right = action-pose-3 cash-up coin-grab. Identical character identity across all panels. Identical lighting, materials, proportions, scale, and camera distance across panels. Each panel contains one isolated full-body subject on transparent background. Props are allowed only when required by the named pose: a simple cup/pitcher for pour and a small coin for cash-up. No UI, no text, no watermark, no logo, no extra characters.
Source Issue
ROB-165
Provider Used
gpt-image-2
Generated At
2026-05-20T12:37:38Z
Library Path
sprite-sheets/characters/twin-b/twin-b-pose-sheet.png
UI / HUD Chrome 19 PIL · 8 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Before After Frame
Before After Framebefore-after-frame.png · 19.4 KB
Breed Journal Card Common
Breed Journal Card Commonbreed-journal-card-common.png · 16.5 KB
Chat Bubble Admin
Chat Bubble Adminchat-bubble-admin.png · 13.8 KB
Build notes
Prompt
ROB-70 re-spin visible bubble text: Nice sale, keep pouring! Softer in-world helper line with no family names or role label.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/ui-cards/chat-bubble-admin.png
Parent Assets
props/ui-cards/hud-mobile-safe-frame.png
Chat Bubble Customer
Chat Bubble Customerchat-bubble-customer.png · 12.1 KB
Build notes
Prompt
ROB-70 re-spin visible customer text: Fresh lemonade, please! Kid-natural NPC dialogue with bigger mobile-readable bubble chrome.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/ui-cards/chat-bubble-customer.png
Parent Assets
props/ui-cards/hud-mobile-safe-frame.png
Coin Counter
Coin Countercoin-counter.png · 12.1 KB
Day Weather Widget
Day Weather Widgetday-weather-widget.png · 14.9 KB
Free Roblox Tag
Free Roblox Tagfree-roblox-tag.png · 9.7 KB
Build notes
Prompt
ROB-70 re-spin visible text: Free Roblox. Plain text/tag only, no platform logo, no official endorsement styling.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/ui-cards/free-roblox-tag.png
Parent Assets
props/ui-cards/title-card-lst-logo.png
Happy Points Counter
Happy Points Counterhappy-points-counter.png · 17.0 KB
Hud Mobile Safe Frame
Hud Mobile Safe Framehud-mobile-safe-frame.png · 14.7 KB
Leaderboard Top 3
Leaderboard Top 3leaderboard-top-3.png · 20.5 KB
Build notes
Prompt
ROB-70 re-spin: live-game top stands widget with thicker chrome, medal icons, generic names, no real usernames.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/ui-cards/leaderboard-top-3.png
Parent Assets
props/ui-cards/hud-mobile-safe-frame.png
Playing Now Badge
Playing Now Badgeplaying-now-badge.png · 35.2 KB
Build notes
Prompt
ROB-70 reviewer-required readability fix: icon-free badge text 1,247 playing with clear leading digit and mobile-readable glow.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:06:43Z
Library Path
props/ui-cards/playing-now-badge.png
Parent Assets
props/ui-cards/hud-mobile-safe-frame.png
Price Sign States
Price Sign Statesprice-sign-states.png · 13.2 KB
Rare Breed Adoption Crate Ticket Progress
Rare Breed Adoption Crate Ticket Progressrare-breed-adoption-crate-ticket-progress.png · 19.0 KB
Recipe Card Classic
Recipe Card Classicrecipe-card-classic.png · 15.4 KB
Build notes
Prompt
Classic recipe card with TWIN-readable concrete recipe labels.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
props/ui-cards/recipe-card-classic.png
Parent Assets
props/lemons/lemon-classic.png
Recipe Card Pink
Recipe Card Pinkrecipe-card-pink.png · 13.6 KB
Title Card Lst Logo
Title Card Lst Logotitle-card-lst-logo.png · 23.1 KB
Build notes
Prompt
ROB-70 re-spin: polished title card with blocky lemonade stand silhouette, Lemonade Stand Tycoon title, Free Roblox tag as plain text only.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/ui-cards/title-card-lst-logo.png
Parent Assets
environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png
Upgrade Button Ready
Upgrade Button Readyupgrade-button-ready.png · 17.9 KB
Upgrade Stand Button Pressed
Upgrade Stand Button Pressedupgrade-stand-button-pressed.png · 10.1 KB
Build notes
Prompt
Pressed state for Upgrade Stand action.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
props/ui-cards/upgrade-stand-button-pressed.png
Parent Assets
props/ui-cards/upgrade-stand-button-ready.png
Upgrade Stand Button Ready
Upgrade Stand Button Readyupgrade-stand-button-ready.png · 17.2 KB

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

Cash Counter Card
Cash Counter Cardcash-counter-card.png · 585.6 KB
Customer Queue Card
Customer Queue Cardcustomer-queue-card.png · 469.6 KB
Hud Cards Sheet Opaque Source
Hud Cards Sheet Opaque Sourcehud-cards-sheet-opaque-source.png · 1.12 MB
Hud Cards Sheet
Hud Cards Sheethud-cards-sheet.png · 1.19 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Flat clean Roblox HUD overlay cards for Lemonade Stand Tycoon: title card, cash counter card, tier upgrade card, customer queue card, win state card, level card. Layout: 3x2 sprite sheet panels ordered title-card-lemonade-stand-tycoon, cash-counter-card, tier-upgrade-card, customer-queue-card, win-state-card, level-card. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Flat 2D overlay style with glossy Roblox UI chrome; short readable title text only on the title card, icon-first cards elsewhere. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:20:41Z
Library Path
sprite-sheets/ui/hud-cards-sheet.png
Level Card
Level Cardlevel-card.png · 486.0 KB
Tier Upgrade Card
Tier Upgrade Cardtier-upgrade-card.png · 500.3 KB
Title Card Lemonade Stand Tycoon
Title Card Lemonade Stand Tycoontitle-card-lemonade-stand-tycoon.png · 564.2 KB
Win State Card
Win State Cardwin-state-card.png · 445.1 KB
Lemon Varieties 5 PIL · 40 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Lemon Classic
Lemon Classiclemon-classic.png · 12.5 KB
Lemon Lavender
Lemon Lavenderlemon-lavender.png · 13.3 KB
Build notes
Prompt
Lavender lemon variant, same chunky prop silhouette and palette family.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
props/lemons/lemon-lavender.png
Parent Assets
props/lemons/lemon-pink.png
Lemon Meyer
Lemon Meyerlemon-meyer.png · 12.7 KB
Build notes
Prompt
Meyer lemon variant, same chunky prop style.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
props/lemons/lemon-meyer.png
Parent Assets
props/lemons/lemon-classic.png
Lemon Pink
Lemon Pinklemon-pink.png · 12.1 KB
Lemon Strawberry
Lemon Strawberrylemon-strawberry.png · 15.4 KB
Build notes
Prompt
Strawberry lemon variant, same chunky prop silhouette and palette family.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
props/lemons/lemon-strawberry.png
Parent Assets
props/lemons/lemon-pink.png

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

Lemon Blueberry
Lemon Blueberrylemon-blueberry.png · 97.4 KB
Lemon Classic
Lemon Classiclemon-classic.png · 78.0 KB
Lemon Mint
Lemon Mintlemon-mint.png · 108.1 KB
Lemon Pink
Lemon Pinklemon-pink.png · 101.3 KB
Lemon Spicy
Lemon Spicylemon-spicy.png · 109.4 KB
Lemon Varieties Sheet Opaque Source
Lemon Varieties Sheet Opaque Sourcelemon-varieties-sheet-opaque-source.png · 916.4 KB
Lemon Varieties Sheet
Lemon Varieties Sheetlemon-varieties-sheet.png · 856.5 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Five glossy Roblox-style lemon ingredient props: classic yellow lemon, pink lemonade fruit, blueberry lemonade fruit, mint lemonade fruit, spicy pepper-lemon hybrid. Layout: 5x1 sprite sheet panels ordered classic, pink, blueberry, mint, spicy. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Each prop should be a single clean spheroid or simple combined ingredient icon, centered with consistent scale. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:17:42Z
Library Path
sprite-sheets/props/lemons/lemon-varieties-sheet.png
Chalkboard Menu Sign
Chalkboard Menu Signchalkboard-menu-sign.png · 117.3 KB
Cup Lemonade
Cup Lemonadecup-lemonade.png · 101.8 KB
Cup Stack
Cup Stackcup-stack.png · 119.6 KB
Pitcher Lemonade
Pitcher Lemonadepitcher-lemonade.png · 146.2 KB
Serving Signage Sheet Opaque Source
Serving Signage Sheet Opaque Sourceserving-signage-sheet-opaque-source.png · 858.9 KB
Serving Signage Sheet
Serving Signage Sheetserving-signage-sheet.png · 814.5 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Lemonade serving props and generic signage: glass pitcher full of lemonade, lemonade cup, cup stack, small chalkboard menu sign, upgrade arrow sign. Layout: 5x1 sprite sheet panels ordered pitcher, cup, cup-stack, chalkboard-menu, upgrade-sign. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. No readable text; use simple icon shapes instead of letters. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:18:39Z
Library Path
sprite-sheets/props/serving/serving-signage-sheet.png
Upgrade Arrow Sign
Upgrade Arrow Signupgrade-arrow-sign.png · 113.4 KB
Billboard Panel
Billboard Panelbillboard-panel.png · 155.2 KB
Hanging Lemon Sign
Hanging Lemon Signhanging-lemon-sign.png · 162.5 KB
Price Placard
Price Placardprice-placard.png · 107.8 KB
Sidewalk Arrow Board
Sidewalk Arrow Boardsidewalk-arrow-board.png · 148.2 KB
Signage Bonus Sheet Opaque Source
Signage Bonus Sheet Opaque Sourcesignage-bonus-sheet-opaque-source.png · 852.5 KB
Signage Bonus Sheet
Signage Bonus Sheetsignage-bonus-sheet.png · 808.8 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Generic lemonade stand signage props: hanging lemon sign, sidewalk arrow board, small price placard, billboard panel. Layout: 4x1 sprite sheet panels ordered hanging-lemon-sign, sidewalk-arrow-board, price-placard, billboard-panel. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. No readable text; use abstract lemon and arrow icon shapes. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:19:39Z
Library Path
sprite-sheets/props/signage/signage-bonus-sheet.png
Stand Tier1 3Q
Stand Tier1 3Qstand-tier1-3q.png · 268.4 KB
Stand Tier1 Cardboard Sheet Opaque Source
Stand Tier1 Cardboard Sheet Opaque Sourcestand-tier1-cardboard-sheet-opaque-source.png · 951.0 KB
Stand Tier1 Cardboard Sheet
Stand Tier1 Cardboard Sheetstand-tier1-cardboard-sheet.png · 909.4 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Tier 1 cardboard lemonade stand, simple taped cardboard booth, hand-built starter tycoon feel, lemon-yellow accents, small counter, no readable text. Layout: 3x1 sprite sheet panels ordered front, 3q, isometric. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Keep the stand centered and full visible in each panel. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:13:31Z
Library Path
sprite-sheets/props/stands/stand-tier1-cardboard-sheet.png
Stand Tier1 Front
Stand Tier1 Frontstand-tier1-front.png · 271.6 KB
Stand Tier1 Iso
Stand Tier1 Isostand-tier1-iso.png · 259.2 KB
Stand Tier2 3Q
Stand Tier2 3Qstand-tier2-3q.png · 313.9 KB
Stand Tier2 Front
Stand Tier2 Frontstand-tier2-front.png · 269.7 KB
Stand Tier2 Iso
Stand Tier2 Isostand-tier2-iso.png · 313.9 KB
Stand Tier2 Plywood Sheet Opaque Source
Stand Tier2 Plywood Sheet Opaque Sourcestand-tier2-plywood-sheet-opaque-source.png · 950.9 KB
Stand Tier2 Plywood Sheet
Stand Tier2 Plywood Sheetstand-tier2-plywood-sheet.png · 939.9 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Tier 2 plywood lemonade cart, painted wood, sturdier counter, lemon crate, striped awning, no readable text. Layout: 3x1 sprite sheet panels ordered front, 3q, isometric. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Keep all tier details consistent across panels. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:14:32Z
Library Path
sprite-sheets/props/stands/stand-tier2-plywood-sheet.png
Stand Tier3 3Q
Stand Tier3 3Qstand-tier3-3q.png · 322.6 KB
Stand Tier3 Front
Stand Tier3 Frontstand-tier3-front.png · 302.0 KB
Stand Tier3 Iso
Stand Tier3 Isostand-tier3-iso.png · 344.3 KB
Stand Tier3 Polished Sheet Opaque Source
Stand Tier3 Polished Sheet Opaque Sourcestand-tier3-polished-sheet-opaque-source.png · 964.1 KB
Stand Tier3 Polished Sheet
Stand Tier3 Polished Sheetstand-tier3-polished-sheet.png · 952.8 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Tier 3 polished lemonade kiosk, glossy plastic and painted wood, branded yellow-white awning shape without readable text, display shelf, coin jar. Layout: 3x1 sprite sheet panels ordered front, 3q, isometric. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Make it feel like a mid-game Roblox tycoon upgrade. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:15:38Z
Library Path
sprite-sheets/props/stands/stand-tier3-polished-sheet.png
Stand Tier4 3Q
Stand Tier4 3Qstand-tier4-3q.png · 420.4 KB
Stand Tier4 Front
Stand Tier4 Frontstand-tier4-front.png · 350.1 KB
Stand Tier4 Iso
Stand Tier4 Isostand-tier4-iso.png · 426.5 KB
Stand Tier4 Mega Sheet Opaque Source
Stand Tier4 Mega Sheet Opaque Sourcestand-tier4-mega-sheet-opaque-source.png · 1.02 MB
Stand Tier4 Mega Sheet
Stand Tier4 Mega Sheetstand-tier4-mega-sheet.png · 1.03 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Tier 4 mega lemonade stand, compact storefront-scale tycoon booth, glossy yellow sign shapes, bright canopy, upgrade lights, decorative lemon props, no readable text. Layout: 3x1 sprite sheet panels ordered front, 3q, isometric. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Make the final tier aspirational but still usable as a composited sprite. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:16:42Z
Library Path
sprite-sheets/props/stands/stand-tier4-mega-sheet.png
VFX 10 PIL · 8 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Coin Pop
Coin Popcoin-pop.png · 6.0 KB
Customer Spawn Glow
Customer Spawn Glowcustomer-spawn-glow.png · 12.0 KB
Build notes
Prompt
ROB-70 re-spin: friendly customer spawn ring with sparkle/motion language and transparent game VFX energy.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/vfx/customer-spawn-glow.png
Parent Assets
style-packs/lst-tycoon-sunny-v1/reference-board.png
Glow Up Sparkle Arc
Glow Up Sparkle Arcglow-up-sparkle-arc.png · 8.1 KB
Heatwave Shimmer
Heatwave Shimmerheatwave-shimmer.png · 5.2 KB
Mud Pop
Mud Popmud-pop.png · 11.4 KB
Plus 50 Coins Float
Plus 50 Coins Floatplus-50-coins-float.png · 21.1 KB
Build notes
Prompt
ROB-70 re-spin: floating +50 coins reward burst with coin arcs, sparkles, transparent game-juice feel, no premium-currency reward framing.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
props/vfx/plus-50-coins-float.png
Parent Assets
props/vfx/coin-pop.png
Pour Splash
Pour Splashpour-splash.png · 5.3 KB
Stand Star Sparkle
Stand Star Sparklestand-star-sparkle.png · 6.1 KB
Suds Burst
Suds Burstsuds-burst.png · 12.6 KB
Sun Glint
Sun Glintsun-glint.png · 10.2 KB

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

Cash Poof
Cash Poofcash-poof.png · 312.9 KB
Coin Pop
Coin Popcoin-pop.png · 266.8 KB
Customer Arrive Burst
Customer Arrive Burstcustomer-arrive-burst.png · 200.8 KB
Heat Shimmer
Heat Shimmerheat-shimmer.png · 212.7 KB
Sparkle Burst
Sparkle Burstsparkle-burst.png · 163.5 KB
Sun Flare
Sun Flaresun-flare.png · 229.8 KB
Vfx Bursts Sheet Opaque Source
Vfx Bursts Sheet Opaque Sourcevfx-bursts-sheet-opaque-source.png · 914.9 KB
Vfx Bursts Sheet
Vfx Bursts Sheetvfx-bursts-sheet.png · 896.5 KB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Transparent single-frame VFX sprites: sparkle burst, coin pop, heat shimmer, sun flare, cash poof, customer arrival burst. Layout: 3x2 sprite sheet panels ordered sparkle, coin-pop, heat-shimmer, sun-flare, cash-poof, customer-arrive-burst. Every panel must have one isolated subject on transparent background. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Effects should be bright, isolated, single-frame, and ready for downstream motion generation. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:21:40Z
Library Path
sprite-sheets/vfx/vfx-bursts-sheet.png
Environments & Backgrounds 10 PIL · 8 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Park Busy Map
Park Busy Mappark-busy-map.png · 18.1 KB
Build notes
Prompt
Same park, busier queue and multiplayer paths, no new game world.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
environments/lst-lemonade-stand-v1/park-busy-map.png
Parent Assets
environments/lst-lemonade-stand-v1/park-sidewalk-map.png
Park Sidewalk Map
Park Sidewalk Mappark-sidewalk-map.png · 10.7 KB
Stand Tier 01 Crate Table
Stand Tier 01 Crate Tablestand-tier-01-crate-table.png · 8.0 KB
Stand Tier 02 Painted Cart
Stand Tier 02 Painted Cartstand-tier-02-painted-cart.png · 9.7 KB
Stand Tier 03 Kiosk
Stand Tier 03 Kioskstand-tier-03-kiosk.png · 9.0 KB
Stand Tier 04 Branded Storefront
Stand Tier 04 Branded Storefrontstand-tier-04-branded-storefront.png · 17.8 KB
Build notes
Prompt
ROB-70 re-spin: chunkier final-upgrade storefront with blocky depth, material cues, lemon awning, raised sign, no real logos.
Source Issue
ROB-70
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL re-spin renderer
Generator
ROB-70 deterministic PIL UX-required re-spin renderer
Generated At
2026-05-18T15:01:54Z
Library Path
environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png
Parent Assets
environments/lst-lemonade-stand-v1/stand-tier-03-kiosk.png
Weather Cloudy
Weather Cloudyweather-cloudy.png · 10.8 KB
Build notes
Prompt
Cloudy overlay compatible with sunny map.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
environments/lst-lemonade-stand-v1/weather-cloudy.png
Parent Assets
style-packs/lst-tycoon-sunny-v1/STYLE-PACK.md
Weather Heatwave
Weather Heatwaveweather-heatwave.png · 9.4 KB
Weather Rain Prep
Weather Rain Prepweather-rain-prep.png · 12.0 KB
Build notes
Prompt
Rain-prep overlay compatible with sunny park, readable as gameplay weather preparation.
Source Issue
ROB-54
Provider Preferred
gpt-image-2
Provider Used
deterministic PIL candidate renderer
Generator
site/scripts/gen-lst-assets.py deterministic OD-020 Phase B.2 candidate pass
Generated At
2026-05-18T13:54:46Z
Library Path
environments/lst-lemonade-stand-v1/weather-rain-prep.png
Parent Assets
environments/lst-lemonade-stand-v1/weather-sunny.png
Weather Sunny
Weather Sunnyweather-sunny.png · 10.4 KB

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

Downtown Night Opaque Source
Downtown Night Opaque Sourcedowntown-night-opaque-source.png · 1.30 MB
Downtown Night
Downtown Nightdowntown-night.png · 1.36 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Full-scene Roblox lemonade stand background plate: downtown night plaza, glowing shop windows, street lamps, clean open foreground for compositing. Layout: One full 1024x1024 scene. This is one full-scene background plate, not transparent, with no UI overlay. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Make it vibrant and polished without looking dark or realistic. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:25:36Z
Library Path
sprite-sheets/backgrounds/downtown-night.png
Park Festival Opaque Source
Park Festival Opaque Sourcepark-festival-opaque-source.png · 1.36 MB
Park Festival
Park Festivalpark-festival.png · 1.42 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Full-scene Roblox lemonade stand background plate: bright park festival, booths in the far background, path, trees, open foreground for compositing. Layout: One full 1024x1024 scene. This is one full-scene background plate, not transparent, with no UI overlay. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Keep background NPCs absent or tiny silhouettes only; no readable text. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:24:36Z
Library Path
sprite-sheets/backgrounds/park-festival.png
Sidewalk Suburban Afternoon Opaque Source
Sidewalk Suburban Afternoon Opaque Sourcesidewalk-suburban-afternoon-opaque-source.png · 1.62 MB
Sidewalk Suburban Afternoon
Sidewalk Suburban Afternoonsidewalk-suburban-afternoon.png · 1.63 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Full-scene Roblox lemonade stand background plate: suburban sidewalk afternoon, warmer sun, street corner, trees, empty foreground space for compositing. Layout: One full 1024x1024 scene. This is one full-scene background plate, not transparent, with no UI overlay. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Use polished game-engine materials and leave center foreground clear for stand sprites. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:23:35Z
Library Path
sprite-sheets/backgrounds/sidewalk-suburban-afternoon.png
Sidewalk Suburban Morning Opaque Source
Sidewalk Suburban Morning Opaque Sourcesidewalk-suburban-morning-opaque-source.png · 1.38 MB
Sidewalk Suburban Morning
Sidewalk Suburban Morningsidewalk-suburban-morning.png · 1.39 MB
Build notes
Prompt
Use the uploaded Twin A sprite only as the Roblox-fidelity material and lighting style reference. Do not include Twin A or any family character in the output. Subject: Full-scene Roblox lemonade stand background plate: suburban sidewalk morning, sunny street, grass strip, simple houses, empty foreground space for compositing. Layout: One full 1024x1024 scene. This is one full-scene background plate, not transparent, with no UI overlay. 3D rendered, polished real-time game engine screenshot, Roblox aesthetic, glossy plastic materials with subtle specular highlights, low-poly geometry, vibrant saturated colors, soft 3D lighting with shadows, clean readable silhouettes. For humanoids only, use R15 avatar sensibility with segmented body parts and visible joint divisions. NOT illustration, NOT 2D, NOT hand-drawn, NOT cartoon, NOT flat-shaded, NOT mascot art. Use game-engine depth, readable horizon, and leave center foreground clear for stand sprites. No watermark, no logo unless the requested asset is a title card, no extra characters unless the requested asset is a customer NPC.
Source Issue
ROB-92
Provider Used
gpt-image-2
Generated At
2026-05-18T19:22:34Z
Library Path
sprite-sheets/backgrounds/sidewalk-suburban-morning.png
Customers 8 PIL · 0 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Customer 001 Kid
Customer 001 Kidcustomer-001-kid.png · 10.5 KB
Customer 002 Parent
Customer 002 Parentcustomer-002-parent.png · 10.9 KB
Customer 003 Dog Walker
Customer 003 Dog Walkercustomer-003-dog-walker.png · 12.8 KB
Customer 004 Mail Carrier
Customer 004 Mail Carriercustomer-004-mail-carrier.png · 11.0 KB
Reaction Set Sip Smile Tip
Reaction Set Sip Smile Tipreaction-set-sip-smile-tip.png · 15.0 KB
Customer 001 Worried To Happy
Customer 001 Worried To Happycustomer-001-worried-to-happy.png · 17.3 KB
Group Happy
Group Happygroup-happy.png · 15.4 KB
Reaction Set Relieved Delighted Silly
Reaction Set Relieved Delighted Sillyreaction-set-relieved-delighted-silly.png · 16.4 KB

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

⏳ Gen 1 sprites pending

Signage & Stand Props 6 PIL · 0 Gen 1

PIL placeholder PIL

Hand-drawn placeholder · pre-stylization

Billboard Upgrade
Billboard Upgradebillboard-upgrade.png · 16.0 KB
Chalkboard Price Sign
Chalkboard Price Signchalkboard-price-sign.png · 15.4 KB
Cup Stack
Cup Stackcup-stack.png · 9.8 KB
Flyer Board
Flyer Boardflyer-board.png · 10.2 KB
Lemon Crate
Lemon Cratelemon-crate.png · 9.7 KB
Pitcher Fill Sequence
Pitcher Fill Sequencepitcher-fill-sequence.png · 9.5 KB

Gen 1 sprite OD-021

gpt-image-2 · first Roblox-fidelity pass

⏳ Gen 1 sprites pending

Reports & Canon

Phase B Production Plan

complete

_bmad-output/site-artifacts/lst-asset-library-production-plan.md · 25.6 KB

Read

LST Asset Library Production Plan

Issue: ROB-49 Phase: OD-020 Phase B.1 Owner: Architect Status: planning artifact, no provider calls authorized Date: 2026-05-18

Scope

This plan converts OD-020 Phase B into executable asset-library work for the Lemonade Stand Tycoon promo. It preserves the ROB-40 OD-018 reference lock as a partial lock, then adds the OD-020-only deltas needed before Phase C can use Runway stills or motion.

Out of scope for ROB-49: script implementation, image generation, asset review signatures, provider calls, shot rendering, motion generation, audio generation, site publishing, and public URLs.

Inputs Read

  • /srv/http/_hq/projects/project-roblox/OD-020-advanced-production.md
  • /srv/http/_hq/projects/project-roblox/OD-020-phase-a-ceo-signoff.md
  • _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  • _bmad-output/video-artifacts/lst-storyboard-phase-a2-roblox-sme-audit.md
  • _bmad-output/video-artifacts/shot-manifests/lst-001-SHOT-MANIFEST.yaml through lst-010-SHOT-MANIFEST.yaml
  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/JOURNEY-STORY-CANON.md
  • Current library indexes under site/assets/library/

Gate Position

Phase A is CEO-signed ACCEPT. Phase B may begin with asset-library production only.

No per-shot Runway stills, motion generation, narration/SFX generation, Suno music, public URL changes, or final composite work is authorized until the relevant downstream locks and signatures exist.

Phase B exits only when every reused and newly generated LST reference below exists under site/assets/library/, is registered in the nearest index.yaml, and has approvedby plus approved_at set by CodeReviewer after UXDesigner and RobloxSME audit.

ROB-40 Preservation Rule

ROB-40 produced a deterministic OD-018 reference set before OD-020 ratified. Those files are retained as a partial lock:

  • Source issue is already recorded as ROB-40.
  • rendergenerationcalled: false and externalgenerationspend_usd: 0.0.
  • Approval state is awaitingreviewersignature.
  • They are not final Phase B locks until OD-020 deltas are added and CodeReviewer signs the unified augmented library.

Do not overwrite ROB-40 assets by default. Verify them first. Regenerate only if a batch-level continuity check finds material visual mismatch or if they cannot support the OD-020 shot contracts.

Provider Strategy

Preferred provider: gpt-image-2, following the working pattern in site/scripts/gen-avatars.py.

Use gpt-image-2 for:

  • Family R15 cameo adaptations from canonical persona PNG references.
  • New OD-020 HUD, VFX, UI, and title assets.
  • Any regenerated continuity batch if ROB-40 stand tiers or character sets fail review.

Fallback provider: Runway reference image generation, only if gpt-image-2 cannot preserve the required parent reference or visual continuity after prompt tuning.

No Runway per-shot image generation is allowed in Phase B. Runway fallback here means asset reference generation only, not scene stills.

Shared Style Anchor

All new LST commercial assets must anchor to:

  • style-packs/lst-tycoon-sunny-v1/STYLE-PACK.md
  • style-packs/lst-tycoon-sunny-v1/reference-board.png
  • style-packs/lst-tycoon-sunny-v1/swatch-palette.png
  • style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt

Shared prompt prefix:


Create a reusable Lemonade Stand Tycoon Roblox promo reference asset. Bright sunny blocky Roblox-stylized tycoon world, R15/R6 readable proportions where characters appear, chunky simple props, clean mobile-readable silhouettes, high clarity at thumbnail size, warm lemon yellow / stand blue / leaf green palette from lst-tycoon-sunny-v1, no real brand logos, no watermark, no text unless explicitly specified. The asset must look usable as a locked reference inside a Roblox gameplay commercial, not as a standalone ad illustration.

Shared negative prompt:


photorealistic, food commercial, generic CGI, anime, watercolor, claymation, flat vector, dark, moody, horror, gritty, pet salon, grooming station, bath tub, muddy pet, realistic human proportions, illegible tiny UI, adult business dashboard, stock-photo lemonade, copy of Roblox logos, copied game UI, watermark, signature, blurry, low contrast

For text-bearing UI/HUD assets, add this constraint:


Use only TWIN-layer copy from COPY-VOICE.md. Keep text short, concrete, active, and kid-readable. Do not use banned TWIN words. Do not imitate or copy real Roblox UI or platform logos.

Batch Continuity Rules

Use stable batch families rather than one-off independent generations:

  1. Stand tiers: one shared prefix, one seed/reference strategy, consistent camera angle and materials. Existing ROB-40 tiers may pass if they already read as one growth sequence.
  2. Gameplay avatars/customers: one shared character-set prefix, consistent R15/R6 proportions, compatible scale, compatible lighting.
  3. HUD/UI: one shared UI prefix, same rounded geometry, color system, stroke weight, and mobile-safe framing.
  4. VFX: one shared transparent/effect prefix, consistent sparkle/coin/liquid grammar.
  5. Family cameos: each uses its canonical persona PNG as direct parent input plus the LST style pack. Do not make Twin A, Twin B, or Dad from prose alone.

If regenerating a batch, register replacements as new files only when the plan below names a new target. If the team must replace an existing ROB-40 filename, preserve the old file under an archive-rob40-pre-od020/ folder and record the reason in index.yaml.

Provenance And Index Contract

Every asset row must include:


- file: <filename.png>
  dims: 1024x1024 or documented generated size
  source: generated
  generator: gpt-image-2
  prompt_or_reference: "<brief prompt summary or sidecar path>"
  parent_asset:
    - style-packs/lst-tycoon-sunny-v1/reference-board.png
  source_issue: ROB-49
  approval_state: awaiting_reviewer_signature
  approved_by: null
  approved_at: null
  used_in:
    - <shot manifest or storyboard target>
  od020_role: <reuse | verify | generate | regenerate_if_failed>

Family cameos must use a parent chain like:


parent_asset:
  - personas/twin-a/twin-a-canonical-avatar.png
  - style-packs/lst-tycoon-sunny-v1/reference-board.png

Reviewer signature requirement:

  • UXDesigner: visual quality and style-pack fit.
  • RobloxSME: Roblox R15/R6 fidelity, gameplay readability, and cameo plausibility.
  • CodeReviewer: final index.yaml approvedby / approvedat updates after checking file existence, parent chain, source issue, dimensions, and usedin.

Inventory And Actions

Legend:

  • Reuse/verify: keep ROB-40 file if it passes OD-020 review; do not regenerate by default.
  • Generate: missing OD-020 delta.
  • Verify/regenerate batch: inspect first, regenerate only if continuity fails.
Target library pathStatusParent/reference inputsProviderPrompt contractReview notes
style-packs/lst-tycoon-sunny-v1/STYLE-PACK.mdReuse/verifyASSET-LIBRARY, BRAND-CANON, COPY-VOICEnoneExisting style anchorConfirm no PST drift
style-packs/lst-tycoon-sunny-v1/reference-board.pngReuse/verifystyle packnoneExisting style boardMust be parent for generated assets
style-packs/lst-tycoon-sunny-v1/swatch-palette.pngReuse/verifystyle packnoneExisting paletteConfirm warm LST palette
style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txtReuse/verifystyle packnoneExisting negative promptUse as base neg prompt
environments/lst-lemonade-stand-v1/park-sidewalk-map.pngReuse/verifyROB-40 + style packnone unless failedSunny Roblox park mapMust support beats 01, 04, 08, 09
environments/lst-lemonade-stand-v1/park-busy-map.pngGeneratepark-sidewalk-map + style packgpt-image-2Same park, busier queue/multiplayer paths, no new game worldSupports beat 08/09 #1-hit energy
environments/lst-lemonade-stand-v1/stand-tier-01-crate-table.pngVerify/regenerate batchROB-40 tiers + style packgpt-image-2 only if failedTier 1 crate table, same camera and material familyBatch continuity with tiers 02-04
environments/lst-lemonade-stand-v1/stand-tier-02-painted-cart.pngVerify/regenerate batchROB-40 tiers + style packgpt-image-2 only if failedTier 2 painted cart, visible upgrade from tier 01Used beats 07 and 10
environments/lst-lemonade-stand-v1/stand-tier-03-kiosk.pngVerify/regenerate batchROB-40 tiers + style packgpt-image-2 only if failedTier 3 kiosk, consistent with earlier tiersUsed beat 09
environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.pngGeneratetiers 01-03 + style packgpt-image-2Final storefront, same materials and sign language, no real logosNeeded by OD-020 inventory even if not primary in beat 10
environments/lst-lemonade-stand-v1/weather-sunny.pngReuse/verifyROB-40 + style packnone unless failedSunny weather tileUsed beat 10
environments/lst-lemonade-stand-v1/weather-heatwave.pngReuse/verifyROB-40 + style packnone unless failedHeatwave overlay/tile, busy not scaryUsed beat 08
environments/lst-lemonade-stand-v1/weather-cloudy.pngGeneratestyle packgpt-image-2Cloudy overlay compatible with sunny mapRequired by ASSET-LIBRARY LST lock
environments/lst-lemonade-stand-v1/weather-rain-prep.pngGeneratestyle pack + weather-sunny/weather-cloudy visual grammargpt-image-2Rain-prep overlay compatible with the sunny park, readable as gameplay weather preparation, not gloomy storm artActive ASSET-LIBRARY LST lock item; budget impact +1 generated asset; Phase C blocked until file exists, is indexed, and is signed
props/avatars-lst/hero-kid-r15-front.pngReuse/verifyROB-40 + style packnone unless failedR15 hero, front poseMust stay generic player, not family clone
props/avatars-lst/hero-kid-r15-3q.pngReuse/verifyROB-40 + style packnone unless failedR15 hero action/three-quarter poseFilename remains 3q; manifests may say three-quarter in prose
props/customers-park/customer-001-kid.pngReuse/verifyROB-40 + style packnone unless failedKid customer R15/R6Used beats 04/05/09/10
props/customers-park/customer-002-parent.pngReuse/verifyROB-40 + style packnone unless failedParent customer R15/R6Used beat 08/09
props/customers-park/customer-003-dog-walker.pngReuse/verifyROB-40 + style packnone unless failedDog-walker customer, not dog mascot focusUsed beat 08
props/customers-park/customer-004-mail-carrier.pngReuse/verifyROB-40 + style packnone unless failedMail-carrier customer R15/R6Already exists and supports beat 09
props/customers-park/reaction-set-sip-smile-tip.pngReuse/verifyROB-40 + customer-001none unless failedSip, smile, tip posesBeat 05 readability gate
props/avatars-lst/twin-a-r15-admin.pngGeneratepersonas/twin-a/twin-a-canonical-avatar.png + style packgpt-image-2Roblox R15 admin cameo, neat brown spiky hair, blue hoodie, yellow hex chest icon, composed smile, background-scale friendly waveLikeness check by UXDesigner + RobloxSME
props/avatars-lst/twin-b-r15-admin.pngGeneratepersonas/twin-b/twin-b-canonical-avatar.png + style packgpt-image-2Roblox R15 admin cameo, same hair color/length as Twin A but messier asymmetric tufts, same hoodie/icon, bigger grinMust be distinct from Twin A at small size
props/avatars-lst/dad-r15-helper.pngGeneratepersonas/dad/dad-canonical-avatar.png + style packgpt-image-2Roblox R15 helper, brown spiky hair, full brown beard, dark hoodie, warm helper action poseDad must remain bearded
props/lemonade-stand/lemon-crate.pngReuse/verifyROB-40 + style packnone unless failedChunky lemon crateBeat 02
props/lemonade-stand/pitcher-fill-sequence.pngReuse/verifyROB-40 + style packnone unless failedThree-frame style pitcher fill sequenceBeat 03
props/lemonade-stand/cup-stack.pngReuse/verifyROB-40 + style packnone unless failedChunky stack of cupsBeats 01/03/05
props/lemonade-stand/chalkboard-price-sign.pngReuse/verifyROB-40 + style packnone unless failedChalk price sign, kid-readableBeats 01/04/10
props/ui-cards/price-sign-states.pngReuse/verifyROB-40 + chalkboard-price-signnone unless failedCheap/fair/pricey states without adult languageBeat 04
props/lemonade-stand/flyer-board.pngReuse/verifyROB-40 + style packnone unless failedFlyer board upgrade propBeat 09
props/lemonade-stand/billboard-upgrade.pngReuse/verifyROB-40 + style packnone unless failedIn-game billboard prop, not real ad platformBeat 09
props/lemons/lemon-classic.pngReuse/verifyROB-40 + style packnone unless failedClassic yellow lemon propBeat 02
props/lemons/lemon-pink.pngReuse/verifyROB-40 + style packnone unless failedPink lemonade recipe visualBeat 09
props/lemons/lemon-meyer.pngGeneratestyle pack + lemon-classicgpt-image-2Meyer lemon variant, same prop styleRequired by OD-020 inventory
props/lemons/lemon-strawberry.pngGeneratestyle pack + lemon-classic/lemon-pink prop familygpt-image-2Strawberry lemon variant, same chunky prop silhouette and palette family, no photoreal fruit textureActive ASSET-LIBRARY LST lock item; budget impact +1 generated asset; Phase C blocked until file exists, is indexed, and is signed
props/lemons/lemon-lavender.pngGeneratestyle pack + lemon-classic/lemon-pink prop familygpt-image-2Lavender lemon variant, same chunky prop silhouette and palette family, no adult recipe-board stylingActive ASSET-LIBRARY LST lock item; budget impact +1 generated asset; Phase C blocked until file exists, is indexed, and is signed
props/ui-cards/recipe-card-classic.pngGeneratestyle pack + lemon-classicgpt-image-2Classic recipe card, TWIN-readable, no banned wordsOD-020 inventory
props/ui-cards/recipe-card-pink.pngReuse/verifyROB-40 + lemon-pinknone unless failedPink recipe cardBeat 09
props/vfx/pour-splash.pngReuse/verifyROB-40 + style packnone unless failedTransparent chunky pour splashBeat 03
props/vfx/coin-pop.pngReuse/verifyROB-40 + style packnone unless failedCoin pop VFX, not Robux rewardBeats 06/10
props/vfx/stand-star-sparkle.pngReuse/verifyROB-40 + style packnone unless failedUpgrade sparkleBeats 06/07
props/vfx/heatwave-shimmer.pngReuse/verifyROB-40 + style packnone unless failedHeat shimmer, sunny not scaryBeat 08
props/vfx/sun-glint.pngReuse/verifyROB-40 + style packnone unless failedSunny glintBeat 08
props/vfx/plus-50-coins-float.pngGeneratecoin-pop + coin-counter + style packgpt-image-2Text-bearing float +50 coins, bright game feedback, not RobuxBeat 06 OD-020 delta
props/vfx/customer-spawn-glow.pngGeneratestyle packgpt-image-2Friendly spawn glow for approaching customersBeat 08 OD-020 delta
props/ui-cards/hud-mobile-safe-frame.pngReuse/verifyROB-40 + style packnone unless failedMobile-safe HUD frameMost beats
props/ui-cards/coin-counter.pngReuse/verifyROB-40 + style packnone unless failedCoin counter, no Robux iconBeats 01/02/06/09
props/ui-cards/day-weather-widget.pngReuse/verifyROB-40 + style packnone unless failedDay/weather widgetBeats 01/02/04/08/09/10
props/ui-cards/upgrade-stand-button-ready.pngReuse/verifyROB-40 + style packnone unless failedUpgrade Stand ready stateBeats 06/07/10
props/ui-cards/upgrade-stand-button-pressed.pngGenerateupgrade-stand-button-ready + style packgpt-image-2Pressed state for button actionBeat 07
props/ui-cards/leaderboard-top-3.pngGeneratehud frame + style packgpt-image-2Top-3 leaderboard widget with generic names, hero mid-table if shown, no real usernamesBeats 04/09
props/ui-cards/chat-bubble-customer.pngGeneratehud frame + COPY-VOICEgpt-image-2Customer bubble: great lemonade! or equally short TWIN lineBeat 05
props/ui-cards/chat-bubble-admin.pngGeneratehud frame + COPY-VOICEgpt-image-2Visible bubble: Twin A helper: nice sale!; keep internal admin meaning in production notes onlyBeat 06; no bare acronym in customer-visible text
props/ui-cards/playing-now-badge.pngGeneratehud frame + style packgpt-image-2Badge text 1,247 playing, store/read energy, not a public performance claim outside promo frameBeat 09
props/ui-cards/title-card-lst-logo.pngGeneratestyle pack + stand-tier-02gpt-image-2Lemonade Stand Tycoon title card plus Free &#8226; Roblox tag contract; do not use platform logoBeat 10; matches Phase A storyboard wording while this plan stays ASCII-only
props/ui-cards/free-roblox-tag.pngOptional generatetitle-card-lst-logo + style packgpt-image-2Separate Free &#8226; Roblox tag if title card cannot hold text cleanlyOnly if title-card asset is too crowded

Family Cameo Prompt Templates

Twin A:


Use `personas/twin-a/twin-a-canonical-avatar.png` as the likeness parent. Adapt this exact character into a Roblox R15 in-game admin cameo for Lemonade Stand Tycoon. Preserve neat evenly tufted brown spiky hair, child face, blue hoodie, small yellow hex chest icon, and composed smile. Make the body R15 blocky with visible segmented arms and legs. Pose: small background wave, friendly admin helper energy. Keep it as an easter egg asset, not the main hero. Match lst-tycoon-sunny-v1 lighting and palette.

Twin B:


Use `personas/twin-b/twin-b-canonical-avatar.png` as the likeness parent. Adapt this exact character into a Roblox R15 in-game admin cameo for Lemonade Stand Tycoon. Preserve same brown hair color and length as Twin A but with messier asymmetric spiky tufts, same blue hoodie, same yellow hex chest icon, and bigger grin. Make the body R15 blocky with visible segmented arms and legs. Pose: cheering or queue cameo, readable as Twin B at small size. Match lst-tycoon-sunny-v1 lighting and palette.

Dad:


Use `personas/dad/dad-canonical-avatar.png` as the likeness parent. Adapt this exact character into a Roblox R15 helper cameo for Lemonade Stand Tycoon. Preserve brown spiky hair, full brown beard, warm smile, and dark hoodie. Make the body R15 blocky with visible segmented arms and legs. Pose: tightening a board or helping the stand upgrade for a one-second background moment. Match lst-tycoon-sunny-v1 lighting and palette.

Family cameo negative addendum:


do not change hair color, do not remove Dad's beard, do not make twins different ages, do not add glasses, do not add real names, do not make photoreal people, do not make generic unrelated Roblox avatars, do not center the cameo as the hero

Text-Bearing Asset Copy Register

Allowed visible text contracts:

AssetText contractCopy layer
props/ui-cards/chat-bubble-customer.pnggreat lemonade!TWIN
props/ui-cards/chat-bubble-admin.pngTwin A helper: nice sale!TWIN; internal admin meaning stays in production notes only
props/vfx/plus-50-coins-float.png+50 coinsTWIN
props/ui-cards/playing-now-badge.png1,247 playingTWIN-visible promo UI
props/ui-cards/title-card-lst-logo.pngLemonade Stand Tycoon; Free &#8226; RobloxTWIN-visible title/store-read
props/ui-cards/upgrade-stand-button-ready.pngUpgrade StandTWIN
props/ui-cards/price-sign-states.pngprice states only, no adult business termsTWIN

The word tier is banned in kid-facing copy. It may appear in internal file names and production notes only.

Execution Sequence

  1. Developer implements or extends site/scripts/gen-avatars.py as site/scripts/gen-lst-assets.py or equivalent batch driver.

- Reads a declarative asset manifest based on this plan. - Uses gpt-image-2 by default. - Supports reference inputs for family cameos. - Writes image files plus sidecar metadata. - Updates nearest index.yaml with approvedby: null, approvedat: null, source issue, parent chain, prompt summary, generator, dimensions, and usedin.

  1. Developer runs a dry-run manifest validation.

- Confirms every target path has a folder. - Confirms parent paths exist. - Confirms no _archive-pst-pre-pivot/ paths are referenced. - Confirms no provider key or secret is logged.

  1. Developer verifies ROB-40 partial-lock assets.

- Produce a contact sheet for existing stand tiers, characters/customers, props, HUD, and VFX. - Do not regenerate before UXDesigner/RobloxSME review identifies a concrete failure.

  1. Developer generates missing OD-020 deltas in batches.

- Family cameos. - HUD/UI/text assets. - VFX additions. - Environment/weather/storefront additions, including active ASSET-LIBRARY lock items weather-rain-prep.png, lemon-strawberry.png, and lemon-lavender.png. - Optional regenerated stand/character batch only if review requires it.

  1. Developer posts contact sheets back to the Phase B thread.

- Batch 1: ROB-40 reuse/verify sheet. - Batch 2: family cameos. - Batch 3: #1-hit HUD/UI/text. - Batch 4: VFX/environment/storefront additions. - Batch 5: regenerated continuity assets, only if needed.

  1. UXDesigner audits each batch.

- Style-pack fit. - Visual quality. - Text legibility. - Contact sheet consistency.

  1. RobloxSME audits each batch.

- Roblox R15/R6 proportions. - Gameplay-loop readability. - UI/HUD reads as game chrome. - Family cameo plausibility against canonical persona references.

  1. Family-cameo fallback gate.

- Maximum 5 iterations plus prompt tuning for each cameo set. - If likeness cannot pass, CEO posts the escalation/fallback decision. - Cameos may be cut and storyboard/manifest targets revised without blocking the whole cut.

  1. CodeReviewer signs the unified augmented asset library.

- Verify files exist. - Verify nearest index.yaml registration. - Verify parent chain. - Verify no missing OD-020 deltas. - Set approvedby and approved_at in each relevant folder index.

  1. CEO Phase B sign-off.

- Confirm full library is reviewer-signed. - Confirm ROB-40 partial assets are either reused, verified, or explicitly replaced with rationale. - Confirm Phase C remains blocked until this sign-off is complete.

Phase C Readiness Checklist

Before any per-shot Runway still or motion work:

  • [ ] All required asset files exist under site/assets/library/.
  • [ ] Every file is registered in the nearest _index.yaml.
  • [ ] Every registration has a parent chain to a style pack, persona seed, or approved reference.
  • [ ] Every registration has approvedby and approvedat.
  • [ ] Missing OD-020 storyboard deltas are resolved: family cameos, leaderboard, chat bubbles, +50 coins, playing-now badge, title/free-Roblox tag, customer-spawn glow.
  • [ ] Active ASSET-LIBRARY LST lock items are resolved, including weather-rain-prep.png, lemon-strawberry.png, and lemon-lavender.png.
  • [ ] Final title/store-read tag uses the Phase A storyboard contract Free &#8226; Roblox.
  • [ ] Stand tiers pass continuity review or have been regenerated as a coherent batch.
  • [ ] Text-bearing assets pass COPY-VOICE TWIN banned-word check.
  • [ ] Cameo assets pass BRAND-CANON differentiator checks.
  • [ ] No actual Runway shot stills, motion clips, ElevenLabs audio, Suno music, Hyperframes composites, or public site updates were produced during Phase B.

Budget Notes

ROB-40 spent $0.00 externally. OD-020 estimates image-gen 2.0 at about $0.04-$0.08 per generation.

Expected Phase B generation:

  • Missing OD-020 deltas and active ASSET-LIBRARY lock gaps: about 17-21 assets.
  • Cameo iterations: up to 3 cameos x 5 attempts = 15 generations if hard.
  • Optional continuity regeneration: about 8-12 additional generations only if verification fails.

Conservative upper bound: 53-63 image generations x $0.08 = $4.24-$5.04, plus provider overhead already inside the OD-013 $200 video-chain envelope. Even with fallback retries, this plan leaves the downstream Runway, ElevenLabs, Suno, and Hyperframes budget intact.

Risks

RiskMitigation
Family cameos drift from canonical likenessUse persona PNGs as reference inputs, enforce differentiators, cap at 5 iterations, allow cameo cut
ROB-40 assets are treated as final despite missing OD-020 deltasUnified Phase B CodeReviewer signature required after deltas
Stand tiers look like unrelated objectsBatch continuity review; regenerate all tiers together only if needed
Text-bearing UI violates TWIN copy rulesUse the copy register and banned-word check before approval
Assets imply launch multiplayer beyond MVPKeep multiplayer/player-count as promo visual energy only; do not alter public journey or MVP docs
Provider call leaks credentialsSource env locally only in implementation issue; never log keys; no provider calls in ROB-49

Handoff

Recommended next issues after ROB-49 review:

  1. Developer: implement gen-lst-assets.py or equivalent batch driver from this plan.
  2. Developer: run Phase B generation and contact-sheet posting.
  3. UXDesigner + RobloxSME: audit batches.
  4. CodeReviewer: sign _index.yaml rows for the unified augmented library.
  5. CEO: Phase B sign-off or cameo fallback decision.

This plan is ready for review. It does not authorize generation by itself.

Phase B.2 Report

complete

_bmad-output/site-artifacts/lst-asset-library-phase-b2-report.md · 5.4 KB

Read

OD-020 Phase B.2 Asset-Library Production Report

Issue: ROB-54 Generated at: 2026-05-18T14:46:34Z Workflow: /bmad-asset-library-extend issue contract, executed by site/scripts/gen-lst-assets.py.

Scope

  • Preserved all existing ROB-40 partial-lock files.
  • Produced only OD-020 delta candidates under site/assets/library/.
  • Registered nearest index.yaml rows with approvalstate: awaitingreviewersignature, approvedby: null, and approvedat: null.
  • Did not create Runway stills, motion clips, narration, SFX, music, composites, public URLs, or site publishing changes.

Provider And Spend

  • /home/devuser/.config/roblox-providers.env present: True.
  • OPENAIAPIKEY present in that provider env: False.
  • Secret values logged or committed: false.
  • Preferred provider in index rows: gpt-image-2.
  • Provider used for this candidate pass: deterministic PIL renderer.
  • External spend estimate for this pass: $0.00.
  • Review note: provider generation can replace these candidates after UXDesigner/RobloxSME approve composition targets or request specific visual changes.

Output Summary

  • Phase B.2 inventory files listed: 20.
  • Generated files: 3.
  • Reused existing delta files: 0.
  • Verified existing delta files: 17.
  • Contact sheet: _bmad-output/site-artifacts/lst-asset-library-phase-b2-contact-sheet.png.

Assets

  • environments/lst-lemonade-stand-v1/park-busy-map.png - verified-existing - batch: environment
  • environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png - verified-existing - batch: environment
  • environments/lst-lemonade-stand-v1/weather-cloudy.png - verified-existing - batch: environment
  • environments/lst-lemonade-stand-v1/weather-rain-prep.png - verified-existing - batch: environment
  • props/avatars-lst/twin-a-r15-admin.png - generated - batch: family cameos
  • props/avatars-lst/twin-b-r15-admin.png - generated - batch: family cameos
  • props/avatars-lst/dad-r15-helper.png - generated - batch: family cameos
  • props/lemons/lemon-meyer.png - verified-existing - batch: props
  • props/lemons/lemon-strawberry.png - verified-existing - batch: props
  • props/lemons/lemon-lavender.png - verified-existing - batch: props
  • props/ui-cards/recipe-card-classic.png - verified-existing - batch: HUD and UI
  • props/ui-cards/upgrade-stand-button-pressed.png - verified-existing - batch: HUD and UI
  • props/ui-cards/leaderboard-top-3.png - verified-existing - batch: HUD and UI
  • props/ui-cards/chat-bubble-customer.png - verified-existing - batch: HUD and UI
  • props/ui-cards/chat-bubble-admin.png - verified-existing - batch: HUD and UI
  • props/ui-cards/playing-now-badge.png - verified-existing - batch: HUD and UI
  • props/ui-cards/title-card-lst-logo.png - verified-existing - batch: HUD and UI
  • props/ui-cards/free-roblox-tag.png - verified-existing - batch: HUD and UI
  • props/vfx/plus-50-coins-float.png - verified-existing - batch: VFX
  • props/vfx/customer-spawn-glow.png - verified-existing - batch: VFX

Verification

Command:


python3 site/tools/asset_library_validate.py --library-root site/assets/library --staged \
  site/assets/library/environments/lst-lemonade-stand-v1/_index.yaml \
  site/assets/library/environments/lst-lemonade-stand-v1/park-busy-map.png \
  site/assets/library/environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png \
  site/assets/library/environments/lst-lemonade-stand-v1/weather-cloudy.png \
  site/assets/library/environments/lst-lemonade-stand-v1/weather-rain-prep.png \
  site/assets/library/props/avatars-lst/_index.yaml \
  site/assets/library/props/avatars-lst/dad-r15-helper.png \
  site/assets/library/props/avatars-lst/twin-a-r15-admin.png \
  site/assets/library/props/avatars-lst/twin-b-r15-admin.png \
  site/assets/library/props/lemons/_index.yaml \
  site/assets/library/props/lemons/lemon-lavender.png \
  site/assets/library/props/lemons/lemon-meyer.png \
  site/assets/library/props/lemons/lemon-strawberry.png \
  site/assets/library/props/ui-cards/_index.yaml \
  site/assets/library/props/ui-cards/chat-bubble-admin.png \
  site/assets/library/props/ui-cards/chat-bubble-customer.png \
  site/assets/library/props/ui-cards/free-roblox-tag.png \
  site/assets/library/props/ui-cards/leaderboard-top-3.png \
  site/assets/library/props/ui-cards/playing-now-badge.png \
  site/assets/library/props/ui-cards/recipe-card-classic.png \
  site/assets/library/props/ui-cards/title-card-lst-logo.png \
  site/assets/library/props/ui-cards/upgrade-stand-button-pressed.png \
  site/assets/library/props/vfx/_index.yaml \
  site/assets/library/props/vfx/customer-spawn-glow.png \
  site/assets/library/props/vfx/plus-50-coins-float.png

Actual full Phase B.2 staged validation exit code: 0.

Validator stdout:


asset_library_validate: clean

Validator stderr:


(empty)

Review Risks

  • Family cameos are deterministic candidates and still need UXDesigner visual-quality review plus RobloxSME R15/cameo-plausibility review.
  • Text-bearing PNGs use the approved short visible strings from ROB-49; reviewers should still inspect legibility in contact sheet and final composites.
  • Full-tree asset validation has unrelated legacy PST failures outside this LST delta scope; this report records full Phase B.2 staged validation only.

Review Readiness

UXDesigner, RobloxSME, and CodeReviewer review can start on the generated Phase B.2 candidates and _index.yaml rows. CEO Phase B sign-off remains blocked until those signatures land.

Phase B.4 UX-Required Re-spin Report

complete

_bmad-output/site-artifacts/lst-asset-library-phase-b4-ux-required-respin-report.md · 6.6 KB

Read

OD-020 Phase B.4 UX-Required Asset Re-Spin Report

Issue: ROB-70 Generated at: 2026-05-18T15:06:43Z Scope: targeted non-cameo UX-required asset re-spin only. No Phase C stills, motion, audio, site publishing, public URLs, or reviewer signatures were performed.

Provider And Spend

  • /home/devuser/.config/roblox-providers.env present: True.
  • OPENAIAPIKEY present in that provider env: False.
  • Secret values logged or committed: false.
  • Preferred provider recorded in rows: gpt-image-2.
  • Provider/generator used for this re-spin: deterministic PIL re-spin renderer.
  • External generation spend for this re-spin: $0.00.
  • Reason for fallback: the provider env available in this run does not expose OPENAIAPIKEY; this preserves budget while producing auditable replacement files.

Output Files

environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: environments/lst-lemonade-stand-v1/stand-tier-03-kiosk.png.
  • Prompt summary: ROB-70 re-spin: chunkier final-upgrade storefront with blocky depth, material cues, lemon awning, raised sign, no real logos.
  • ROB-59 finding addressed: Addresses ROB-59 flat final storefront read with chunkier roof, side depth, posts, counters, raised lemon sign, and material shading.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/chat-bubble-admin.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/ui-cards/hud-mobile-safe-frame.png.
  • Prompt summary: ROB-70 re-spin visible bubble text: Nice sale, keep pouring! Softer in-world helper line with no family names or role label.
  • ROB-59 finding addressed: Removes adult-label-ish family/role text and replaces it with a softer helper line: Nice sale, keep pouring!
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/chat-bubble-customer.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/ui-cards/hud-mobile-safe-frame.png.
  • Prompt summary: ROB-70 re-spin visible customer text: Fresh lemonade, please! Kid-natural NPC dialogue with bigger mobile-readable bubble chrome.
  • ROB-59 finding addressed: Keeps NPC dialogue concrete while adding heavier bubble chrome and larger mobile-readable text.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/leaderboard-top-3.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/ui-cards/hud-mobile-safe-frame.png.
  • Prompt summary: ROB-70 re-spin: live-game top stands widget with thicker chrome, medal icons, generic names, no real usernames.
  • ROB-59 finding addressed: Adds medal shapes, beveled rows, stronger game UI chrome, and clearer thumbnail hierarchy.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/playing-now-badge.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/ui-cards/hud-mobile-safe-frame.png.
  • Prompt summary: ROB-70 reviewer-required readability fix: icon-free badge text 1,247 playing with clear leading digit and mobile-readable glow.
  • ROB-59 finding addressed: Adds store-read polish and glow while keeping the promo-only count as plain text.
  • CodeReviewer finding addressed: Removes the overlapping play icon so 1,247 playing reads clearly in the asset and contact sheet thumbnail.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/title-card-lst-logo.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png.
  • Prompt summary: ROB-70 re-spin: polished title card with blocky lemonade stand silhouette, Lemonade Stand Tycoon title, Free Roblox tag as plain text only.
  • ROB-59 finding addressed: Replaces placeholder-card feel with a fuller title composition, blocky stand silhouette, coins, lemons, and plain text tag.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/ui-cards/free-roblox-tag.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/ui-cards/title-card-lst-logo.png.
  • Prompt summary: ROB-70 re-spin visible text: Free Roblox. Plain text/tag only, no platform logo, no official endorsement styling.
  • ROB-59 finding addressed: Keeps Free Roblox as plain text only with no copied platform logo or official endorsement mark.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/vfx/plus-50-coins-float.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: props/vfx/coin-pop.png.
  • Prompt summary: ROB-70 re-spin: floating +50 coins reward burst with coin arcs, sparkles, transparent game-juice feel, no premium-currency reward framing.
  • ROB-59 finding addressed: Removes badge-like backing and adds floating coin arcs, sparkles, and transparent in-world reward motion.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.
props/vfx/customer-spawn-glow.png
  • Provider/generator: ROB-70 deterministic PIL UX-required re-spin renderer.
  • Parent reference: style-packs/lst-tycoon-sunny-v1/reference-board.png.
  • Prompt summary: ROB-70 re-spin: friendly customer spawn ring with sparkle/motion language and transparent game VFX energy.
  • ROB-59 finding addressed: Adds layered rings, starbursts, and dotted motion cues so the spawn effect reads as gameplay juice.
  • Approval row state: awaitingreviewersignature; approvedby: null; approvedat: null.

Contact Sheet

  • _bmad-output/site-artifacts/lst-asset-library-phase-b4-ux-required-respin-contact-sheet.png

Verification

  • python3 site/tools/assetlibraryvalidate.py --library-root site/assets/library --staged ...
  • Result: assetlibraryvalidate: clean
  • Confirmed the three already accepted cameo files were not modified.

Scope Guardrails

  • Family cameo files were not modified in this issue.
  • Text-bearing assets use TWIN/customer-surface short concrete copy and avoid COPY-VOICE.md banned words.
  • Free Roblox is plain text only; no platform logo or official endorsement mark was used.
  • Reward framing uses coins only and avoids premium-currency reward framing.

Phase B.4 UX Audit

complete

_bmad-output/site-artifacts/lst-asset-library-phase-b4-ux-audit.md · 9.9 KB

Read

OD-020 Phase B.4 UX Visual Audit

Issue: ROB-59 Auditor: UXDesigner Date: 2026-05-18 Scope: Review only. No assets, indexes, scripts, manifests, provider outputs, or public URLs were edited.

Canon Read

  • /srv/http/_hq/projects/project-roblox/BRAND-CANON.md
  • /srv/http/_hq/projects/project-roblox/COPY-VOICE.md
  • /srv/http/_hq/projects/project-roblox/ASSET-LIBRARY.md
  • /srv/http/_hq/projects/project-roblox/OD-020-advanced-production.md
  • /srv/http/_hq/projects/project-roblox/OD-020-phase-a-ceo-signoff.md
  • /srv/http/roblox/_bmad-output/site-artifacts/lst-asset-library-production-plan.md
  • /srv/http/roblox/_bmad-output/site-artifacts/lst-asset-library-phase-b2-report.md
  • /srv/http/roblox/_bmad-output/site-artifacts/lst-asset-library-phase-b2-contact-sheet.png
  • /srv/http/roblox/_bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  • /srv/http/roblox/_bmad-output/video-artifacts/shot-manifests/lst-001-SHOT-MANIFEST.yaml through lst-010-SHOT-MANIFEST.yaml

Note: the ROB-59 description names repo-root canon copies under /srv/http/roblox/. In this checkout, the ratified canon files are present under /srv/http/_hq/projects/project-roblox/; this audit uses those ratified HQ paths.

Executive Verdict

The Phase B.2 library is structurally useful and follows the LST path/index contract, but it is not ready for broad CodeReviewer visual signatures as-is. The style pack and several simple prop/UI composition targets can pass as direction references. The customer-facing, avatar, stand-tier, title, and high-energy HUD/VFX assets need provider re-spin before they become locked production references.

The main UX risk is not path hygiene. It is screenshot believability: many candidates read as flat placeholder diagrams rather than a bright, blocky Roblox tycoon world. Signing them would make later Runway stills inherit weak visual grammar.

Family Ratings

Asset familyRatingUX audit notes
Style packACCEPTThe palette, style rules, reference board contract, and negative prompt are aligned with LST canon. The pack correctly bans pet-salon drift, photoreal food ads, and adult dashboard UI.
Environments / stand tiersWEAKThe sunny park, weather states, and tier progression are readable, but they are too flat and diagram-like for final reference lock. Tier 04 adds a useful final-storefront target but does not yet feel like a Roblox Discover-quality storefront.
Avatars / customersREJECT for family cameos; WEAK for generic customersThe family cameos preserve broad hair/hoodie/beard notes but do not preserve enough canonical likeness or R15 body fidelity. Generic customers communicate crowd roles but remain simple stick/avatar diagrams.
Lemonade props / lemonsWEAKLemon colors and silhouette families are readable. The lemons are clean prop targets, but the props need more blocky Roblox material treatment before final shots.
HUD / UIWEAK with exact re-spin list belowUI hierarchy is clean and mobile-readable in isolation, but several text-bearing assets fail TWIN voice or store-read polish. The title card and player-count badge are especially likely to look like prototype UI in final screenshots.
VFXWEAKEffects read as gameplay intent, but the new +50 coins and spawn glow do not yet have enough Roblox game-juice energy. Existing transparent ROB-40 VFX are better direction anchors than the new flat candidates.

Required Re-Spin Before CodeReviewer Signature

These files should not be signed as final locked visual references:

  • site/assets/library/props/avatars-lst/twin-a-r15-admin.png
  • site/assets/library/props/avatars-lst/twin-b-r15-admin.png
  • site/assets/library/props/avatars-lst/dad-r15-helper.png
  • site/assets/library/environments/lst-lemonade-stand-v1/stand-tier-04-branded-storefront.png
  • site/assets/library/props/ui-cards/chat-bubble-admin.png
  • site/assets/library/props/ui-cards/chat-bubble-customer.png
  • site/assets/library/props/ui-cards/leaderboard-top-3.png
  • site/assets/library/props/ui-cards/playing-now-badge.png
  • site/assets/library/props/ui-cards/title-card-lst-logo.png
  • site/assets/library/props/ui-cards/free-roblox-tag.png
  • site/assets/library/props/vfx/plus-50-coins-float.png
  • site/assets/library/props/vfx/customer-spawn-glow.png

Optional but recommended re-spin before paid stills:

  • site/assets/library/environments/lst-lemonade-stand-v1/park-busy-map.png
  • site/assets/library/environments/lst-lemonade-stand-v1/weather-cloudy.png
  • site/assets/library/environments/lst-lemonade-stand-v1/weather-rain-prep.png
  • site/assets/library/props/lemons/lemon-meyer.png
  • site/assets/library/props/lemons/lemon-strawberry.png
  • site/assets/library/props/lemons/lemon-lavender.png
  • site/assets/library/props/ui-cards/recipe-card-classic.png
  • site/assets/library/props/ui-cards/upgrade-stand-button-pressed.png

Visual Quality Notes

Style Pack

ACCEPT. lst-tycoon-sunny-v1 gives the right product read: lemon yellow, stand blue, park green, tan path, UI cream, and dark ink. The negative prompt correctly blocks the highest-risk drift: photoreal food ad, generic CGI, flat vector, pet salon, grooming props, copied Roblox logos, and illegible tiny UI.

The audit caveat is that several produced candidates still look like the banned "flat vector" direction. This is an asset-production issue, not a style-pack issue.

Environments And Stand Tiers

WEAK. The environment set communicates the intended geography: sky, path, grass, stand, weather badge, and customer approach. That is enough to guide composition.

The stand-tier progression needs stronger production art before lock. Tier 04 adds a roof, lemon cluster, and upgrade label, but it still reads as a flat icon scene rather than a final Roblox reference. The tiers should have chunkier materials, visible depth, and stronger tycoon-upgrade silhouette changes.

Weather tiles are directionally correct and non-scary. They need more world response, especially weather-rain-prep.png, which currently reads as light rain over the same scene instead of a gameplay prep state.

Avatars And Customers

Family cameos are REJECT for signature. They hit only the broadest canon traits: Twin A/Twin B blue hoodie, Dad dark hoodie, Dad beard. They do not preserve canonical seed likeness row-for-row, and their bodies do not read as credible Roblox R15 admin/helper cameos. Twin A and Twin B are distinct enough by pose and hair height, but the difference is too fragile at mobile scale.

Generic customers are WEAK. The archetypes are useful for storyboard blocking, but the figures need Roblox body segmentation, face grammar, and clothing detail before production stills use them as reference parents.

Lemonade Props And Lemons

WEAK. The lemon variants are coherent as a family and avoid photoreal fruit texture. They are readable in the contact sheet. They should gain Roblox-prop depth, cleaner material cues, and less worksheet-like framing before final render reference lock.

Existing lemonade props support the gameplay loop: crate, pitcher fill, cup stack, chalk price sign, flyer board, billboard upgrade. No pet-salon drift was visible in the LST target list.

HUD And UI

WEAK. The UI assets are readable, but the best final screenshots need more polish.

Text-bearing review:

  • chat-bubble-customer.png: great lemonade! is readable and concrete, but it is not first-person we/our. Acceptable for an NPC bubble only if the team treats it as customer dialogue, not TWIN narrator copy.
  • chat-bubble-admin.png: Twin A helper: nice sale! avoids the banned acronym from the storyboard draft, but it is adult-label-ish and not kid-natural. Re-spin with a softer in-world helper line.
  • leaderboard-top-3.png: Top Stands, SunnySam, LemonKid, and Our Stand are legible and not banned. The widget needs stronger live-game chrome and better final-shot presence.
  • playing-now-badge.png: 1,247 playing is readable but risks unsupported store-performance read if used outside the promo frame. Keep only in the shot context specified by the storyboard.
  • title-card-lst-logo.png and free-roblox-tag.png: the title is readable, but the composition feels like a placeholder end card. The Free • Roblox copy is short and clear, but any final version must avoid implying official platform branding or copying Roblox marks.
  • recipe-card-classic.png: labels are readable and concrete. It is acceptable as a direction card, but visually too plain for final production lock.
  • upgrade-stand-button-pressed.png: clear button state. It needs more Roblox-like button depth and press feedback before a final screenshot moment.

No TWIN banned words were visible in the reviewed contact-sheet assets.

VFX

WEAK. The existing transparent ROB-40 VFX have clearer effect intent than the new flat candidates. plus-50-coins-float.png is readable and avoids Robux, but the dark backing in the contact sheet makes it feel like a standalone badge instead of an in-world floating reward. customer-spawn-glow.png has a clean spawn-ring idea but needs more sparkle/motion language to read as #1-hit gameplay juice.

Handoff Guidance

CodeReviewer should not set approvedby / approvedat for the required re-spin list above. For the remaining LST assets, CodeReviewer can treat this UX audit as composition-direction acceptance only, not final visual polish acceptance.

Recommended provider pass: use gpt-image-2 with direct parent inputs from the style pack and persona seeds for the rejected/weak files. Preserve the current library paths and index rows, but replace visuals only through the approved asset-production workflow so provenance stays intact.

Verification Performed

  • Reviewed the Phase B.2 contact sheet visually.
  • Checked target directories and image dimensions for the listed LST asset families.
  • Read nearest _index.yaml rows for reviewed folders.
  • Read the current LST storyboard kernel and shot manifests for intended use.
  • Confirmed no audit-scope asset or index edits were made.

Phase B.4 RobloxSME Audit

complete

_bmad-output/site-artifacts/lst-asset-library-phase-b4-roblox-sme-audit.md · 7.5 KB

Read

OD-020 Phase B.4 RobloxSME Asset-Library Audit

Issue: ROB-60 Source production report: bmad-output/site-artifacts/lst-asset-library-phase-b2-report.md Contact sheet: bmad-output/site-artifacts/lst-asset-library-phase-b2-contact-sheet.png Audit role: RobloxSME, OD-020 Phase B.4 Date: 2026-05-18

Verdict

Phase B may continue, but CodeReviewer should not sign the family cameo rows yet.

General LST gameplay assets are ACCEPT or WEAK and can proceed to UXDesigner/CodeReviewer review. The three family cameo assets are REJECT as final locked references because the PNGs visibly label the family roles on-screen (Twin A helper, Twin B helper, Dad helper) and the index rows do not preserve the full canon parent chain required for cameo likeness review.

This is a contained re-spin, not a full asset-library failure. The re-spin should count as OD-020 family-cameo iteration 1 for the 5-iteration fallback rule.

Audit Matrix

AreaVerdictNotes
R15/R6 fidelityWEAKHero/customer/stand assets preserve a blocky Roblox-readable grammar. The family cameo bodies are simplified enough to read as Roblox-like background avatars, but they are closer to flat stick-figure avatars than locked R15 adaptations with clear segmented limbs.
Family likeness bridgeREJECTDad keeps beard/dark hoodie, Twin A and Twin B keep blue hoodies/yellow icon, and Twin B has messier hair. However, all three cameo PNGs include visible role labels. The twins are also only weakly distinct without those labels at thumbnail size.
Gameplay readabilityACCEPTStand growth, weather states, lemon variants, recipe card, coin feedback, leaderboard, chat bubbles, and customer spawn glow all support the ordered LST verbs from BRAND-CANON.md and COPY-VOICE.md: buy lemons, make lemonade, serve customers, earn coins, upgrade the stand, repeat bigger.
#1-hit UI/VFX plausibilityACCEPTleaderboard-top-3.png, chat-bubble-customer.png, chat-bubble-admin.png, playing-now-badge.png, plus-50-coins-float.png, and customer-spawn-glow.png read as promo/game juice references rather than MVP runtime promises. No Robux reward is implied.
Provenance/path disciplineWEAKFiles exist and staged validation passed. Several new rows use a scalar parent_asset where Phase B.1 requested a parent chain; family cameos cite only the persona seed and omit the style pack/reference-board parent needed to prove the R15 adaptation bridge.
Promo-only scopeACCEPTThe assets do not require MVP runtime multiplayer or live-player-count functionality. The 1,247 playing badge remains acceptable only as OD-020 commercial energy, not a public product claim outside the promo frame.

Family Cameo Decisions

FileVerdictDecision
site/assets/library/props/avatars-lst/twin-a-r15-admin.pngREJECTRe-spin before signature. Remove the visible Twin A helper label from the image. Preserve neat brown spiky hair, blue hoodie, yellow hex chest icon, child face, and a subtle background-admin pose.
site/assets/library/props/avatars-lst/twin-b-r15-admin.pngREJECTRe-spin before signature. Remove the visible Twin B helper label. Make Twin B distinguishable by messier asymmetric hair and bigger grin, not by text.
site/assets/library/props/avatars-lst/dad-r15-helper.pngREJECTRe-spin before signature. Remove the visible Dad helper label. Preserve full brown beard, dark hoodie, adult read, and helper action.

ROBLOX-SME-AMENDMENT: Family cameo assets must not contain visible real-family role labels inside the PNG. OD-020 allows abstract handles in chat overlays, but BRAND-CANON.md and OD-020 both keep cameos as easter eggs, not explicit customer-facing family identification. The cameo image itself should carry likeness through hair, hoodie/icon, beard, pose, and Roblox R15 form.

ROBLOX-SME-AMENDMENT: The family cameo _index.yaml rows should cite a full parent chain before CodeReviewer signature: personas/twin-a/twin-a-canonical-avatar.png plus style-packs/lst-tycoon-sunny-v1/reference-board.png for Twin A; equivalent persona seed plus style-pack reference board for Twin B and Dad. This follows ASSET-LIBRARY.md parent-chain discipline and the Phase B.1 provenance contract.

ROBLOX-SME-AMENDMENT: Twin A/Twin B distinction must survive without labels at small size. Twin A should read as neat/even hair and composed smile; Twin B should read as messier/asymmetric hair and larger grin. If a reviewer needs the printed label to tell them apart, the cameo likeness bridge is not strong enough.

Asset Family Calls

FamilyVerdictExact paths / notes
Environments and stand tiersACCEPTpark-busy-map.png, stand-tier-04-branded-storefront.png, weather-cloudy.png, and weather-rain-prep.png keep the sunny/blocky LST world and avoid PST drift.
Customers and non-family avatarsACCEPTExisting props/customers-park/ and props/avatars-lst/hero-kid-r15- are simple but Roblox-readable enough for reference-lock review.
Family cameosREJECTtwin-a-r15-admin.png, twin-b-r15-admin.png, dad-r15-helper.png need re-spin for no visible labels and stronger no-text likeness.
Lemons and recipe cardACCEPTlemon-meyer.png, lemon-strawberry.png, lemon-lavender.png, and recipe-card-classic.png are chunky, kid-readable, and not photoreal food advertising.
HUD/UI cardsACCEPTText-bearing UI uses short TWIN-visible strings and avoids banned words from COPY-VOICE.md. Free • Roblox uses the platform name without copying a platform logo.
VFXACCEPTplus-50-coins-float.png and customer-spawn-glow.png read as game feedback. +50 coins correctly avoids Robux reward framing.

Manifest Integration Note

The Phase B.2 asset library includes OD-020 #1-hit additions, but the current shot manifests I inspected still do not reference every new addition in their planned_paths. Before paid still or motion generation, Phase C should ensure the relevant manifests include:

  • props/vfx/plus-50-coins-float.png in beat 06 if the floating +50 coins visual is required.
  • props/ui-cards/leaderboard-top-3.png, props/ui-cards/playing-now-badge.png, and the accepted/re-spun Twin B cameo reference in beat 09 if the #1-hit montage uses them.
  • props/ui-cards/title-card-lst-logo.png and/or props/ui-cards/free-roblox-tag.png in beat 10 if the final title/store-read tag is rendered from locked references.

This does not block the asset-library re-spin itself, but it blocks treating the existing manifests as complete render inputs.

Required Re-Spin List

  1. site/assets/library/props/avatars-lst/twin-a-r15-admin.png
  2. site/assets/library/props/avatars-lst/twin-b-r15-admin.png
  3. site/assets/library/props/avatars-lst/dad-r15-helper.png

Re-spin constraints:

  • No visible labels, no real names, no watermark, no UI text inside the cameo PNG.
  • R15/R6-readable segmented arms and legs.
  • Same LST sunny style as style-packs/lst-tycoon-sunny-v1/reference-board.png.
  • Use canonical persona PNGs as reference inputs, not prose-only likeness.
  • Register the regenerated rows with full parent chain and approvalstate: awaitingreviewer_signature.

Handoff

RobloxSME does not sign _index.yaml; CodeReviewer owns Phase B.5 signatures after UXDesigner and RobloxSME audit. My recommendation is to reassign to the ROB-54/asset-library production owner for the three cameo re-spins and parent-chain row corrections, then return to RobloxSME only if the re-spin changes likeness, R15 readability, or cameo placement.

03

Per-Shot Renders

Stills and motion clips, one per beat.

18/10 stills · 10/10 clips

Scene-composition canary 3 pipelines · lst-001

OD-021 test: pick the production pipeline for static scene compose before scaling to all 10 LST shots. Operator picks the winner. Once a pipeline is locked, Runway Gen-4.5 motion-gen runs on the winning composed stills.

Pipeline APipeline A
gpt-image-2 scene compose
landed 2026-05-20 19:46Z
Pipeline BPipeline B
PIL alpha-composite
landed 2026-05-20 19:46Z
Pipeline CPipeline C
Runway direct multi-ref
landed 2026-05-20 19:46Z
Side-by-side comparison sheet
Canary comparison A/B/C
Canary report — operator decision input
# ROB-93 lst-001 Pipeline Canary Report

Status: complete; all three canary outputs and the side-by-side comparison sheet were produced.

## Local Outputs

- Pipeline A output: `_bmad-output/video-artifacts/renders/pipeline-canary/lst-001-pipeline-a-gpt-scene.png`
- Pipeline B output: `_bmad-output/video-artifacts/renders/pipeline-canary/lst-001-pipeline-b-pil-composite.png`
- Pipeline C output: `_bmad-output/video-artifacts/renders/pipeline-canary/lst-001-pipeline-c-runway-multiref.png`
- Comparison sheet: `_bmad-output/video-artifacts/renders/pipeline-canary/lst-001-canary-comparison.png`
- Provider receipts: `_bmad-output/video-artifacts/renders/pipeline-canary/lst-001-provider-receipts.json`

## Pipeline A - gpt-image-2 Scene Compose

- Cost: one `gpt-image-2` Images edits call. Provider usage is recorded in receipts when the response is captured; dollar conversion is not exposed by the local API response.
- Time: completed earlier in this heartbeat; exact elapsed time was not retained after the first Runway validation retry.
- Identity fidelity: medium. The composed still follows the Twin A reference, but the provider re-renders the sprite instead of preserving exact pixels.
- Scene composability for Runway motion-gen: strong. It produces a unified 16:9 scene without manual plate edges.
- Provider task ID: not retained after the first Runway validation retry; the output file is the actual gpt-image-2 result from this heartbeat.

## Pipeline B - PIL Composite

- Cost: 0 USD incremental provider spend.
- Time: 1.3 seconds.
- Identity fidelity: high for exact sprite pixels, weak for final-shot polish.
- Scene composability for Runway motion-gen: weak. The offline composition preserves references but shows manual layering and asset edge artifacts.
- Notes: retained only as a control sample; OD-021 hard rules do not allow PIL to be the still-asset source.

## Pipeline C - Runway Direct Multi-ref

- Cost: estimated 8 Runway credits for one 1080p image generation.
- Time: 25.6 seconds.
- Identity fidelity: medium-low. Runway follows the scene prompt and references, but exact character/sprite identity is less controlled than Pipeline A.
- Scene composability for Runway motion-gen: medium. It is native to the motion provider family, but the still can drift from locked sprite shapes.
- Provider task ID: `67ccf64e-7f79-43a4-8a8f-2ff25817df26`
- Note: Runway accepts at most three reference images, so props were bundled into `lst-001-pipeline-c-prop-reference-board.png`.

## Recommendation

Recommend Pipeline A as the canonical scene-compose tool for lst-002 through lst-010. It best balances Roblox-fidelity scene polish, reference conditioning, and downstream motion readiness while avoiding Pipeline B's manual composite artifacts and Pipeline C's higher identity drift risk.
Shot 01

001 Shot Manifest

0 still iter · 1 motion
? motionlst-001-motion.mp4 · 19:46Z

We start with lemons and one tiny stand.

Manifest YAML
shot_id: lst-001
phase: 8
scene_description: "Day 1 opens on a crate-table lemonade stand in a sunny Roblox park. The hero kid avatar faces the stand while the HUD shows Day 1, sunny weather, coins, and empty cups."
duration_s: 5.0
beat_position: "00:00-00:05"
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats: [1]
  beat_label: "Day 1 tiny stand hook"
references:
  characters:
    - props/avatars-lst/hero-kid-r15-front.png
  environment:
    - environments/lst-lemonade-stand-v1/park-sidewalk-map.png
    - environments/lst-lemonade-stand-v1/stand-tier-01-crate-table.png
  props:
    - props/lemonade-stand/cup-stack.png
    - props/lemonade-stand/chalkboard-price-sign.png
    - props/ui-cards/hud-mobile-safe-frame.png
    - props/ui-cards/coin-counter.png
    - props/ui-cards/day-weather-widget.png
roblox_fidelity_gates:
  art_world: "Sunny blocky Roblox park or sidewalk map with crate-table stand."
  avatars: "Hero player reads as Roblox R15/R6, not generic child mascot."
  hud_chrome: "Mobile-safe HUD, coin counter, day/weather widget visible."
  gameplay_loop: "Goal read sets up the buy-make-sell-upgrade loop."
reference_lock_status: reference_locked
render_readiness: corrective_review_required_paid_provider_spend_already_occurred
locked_reference_contract:
  renderable: false
  note: "Paid still generation already occurred before CodeReviewer signature. Hold this shot for corrective review; do not route to motion or final-cut input until reviewer_signature is approved."
  planned_paths:
    characters:
      - props/avatars-lst/hero-kid-r15-front.png
    environment:
      - environments/lst-lemonade-stand-v1/park-sidewalk-map.png
      - environments/lst-lemonade-stand-v1/stand-tier-01-crate-table.png
    props:
      - props/lemonade-stand/cup-stack.png
      - props/lemonade-stand/chalkboard-price-sign.png
    ui:
      - props/ui-cards/hud-mobile-safe-frame.png
      - props/ui-cards/coin-counter.png
      - props/ui-cards/day-weather-widget.png
generator:
  status: corrective_review_required_paid_provider_spend_already_occurred
  stills: "Paid Runway still exists from ROB-82 pass-03. Treat as held for corrective review until CodeReviewer signature is complete."
  motion: "Do not run motion generation until stills, G3 approval, and reviewer signature are complete."
prompt_or_brief: |
  Use the locked LST references as the visual source. Keep the scene blocky, Roblox-stylized, sunny, and mobile-readable. The first frame must immediately read as Lemonade Stand Tycoon gameplay, with Day 1, coin counter, weather widget, the hero kid, and a tiny crate-table stand.
  Visible or spoken TWIN line: "We start with lemons and one tiny stand."
  No pet-salon props, no photoreal lemonade ad, no UI-free beauty render.
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18T17:51:33Z
budget_estimate_usd: 1.20

Shot 02

002 Shot Manifest

2 still iter · 1 motion

Tap buy lemons, and our crate fills right up.

Manifest YAML
shot_id: lst-002
phase: 8
scene_description: The player taps Buy Lemons; the coin counter drops and the lemon crate fills on the stand counter.
duration_s: 5.0
beat_position: 00:05-00:10
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 2
  beat_label: Buy lemons
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-3q-left-neutral.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
  props:
  - sprite-sheets/props/stands/stand-tier1-3q.png
  - sprite-sheets/props/lemons/lemon-classic.png
  - sprite-sheets/ui/cash-counter-card.png
  - sprite-sheets/ui/level-card.png
roblox_fidelity_gates:
  art_world: Blocky stand counter and lemon crate inside the sunny Roblox map.
  avatars: Hero player hand or body silhouette remains Roblox-proportioned if visible.
  hud_chrome: Coin counter and day/weather widget visible while the buy action resolves.
  gameplay_loop: Explicitly shows buy lemons before making lemonade.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-3q-left-neutral.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
    props:
    - sprite-sheets/props/stands/stand-tier1-3q.png
    - sprite-sheets/props/lemons/lemon-classic.png
    ui:
    - sprite-sheets/ui/cash-counter-card.png
    - sprite-sheets/ui/level-card.png
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Camera holds close enough for phone viewers to see the Buy Lemons action, coin counter change, and crate
  fill. Lemons should look like chunky Roblox props, not photoreal fruit.

  Visible or spoken TWIN line: "Tap buy lemons. The crate fills up."

  No cash-dropper-only framing; the purchased lemons must be physically visible.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.15
Shot 03

003 Shot Manifest

2 still iter · 1 motion

Squeeze, pour, and watch the pitcher fill.

Manifest YAML
shot_id: lst-003
phase: 8
scene_description: 'Close-up on the squeeze and pour station: lemons pop into the pitcher-fill sequence and pour splash shows
  the first batch becoming lemonade.'
duration_s: 6.0
beat_position: 00:10-00:16
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 3
  beat_label: Squeeze and pour
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-pose-neutral.png
  props:
  - sprite-sheets/props/serving/pitcher-lemonade.png
  - sprite-sheets/props/serving/cup-stack.png
  - sprite-sheets/props/lemons/lemon-classic.png
  - sprite-sheets/props/stands/stand-tier1-front.png
  - sprite-sheets/vfx/sparkle-burst.png
roblox_fidelity_gates:
  art_world: Chunky stand props and low-poly liquid read as Roblox gameplay objects.
  avatars: Hero hand/action, if shown, uses Roblox blocky proportions.
  hud_chrome: Mobile-safe game interface frame remains visible at the edge of the close-up.
  gameplay_loop: Shows squeeze and pour after buying lemons.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-pose-neutral.png
    props:
    - sprite-sheets/props/serving/pitcher-lemonade.png
    - sprite-sheets/props/serving/cup-stack.png
    - sprite-sheets/props/lemons/lemon-classic.png
    - sprite-sheets/props/stands/stand-tier1-front.png
    - sprite-sheets/vfx/sparkle-burst.png
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-003-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-003-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Keep the before/after state readable: whole lemons, squeeze motion, pitcher fill, then bright lemonade.
  Use a tight mobile-readable gameplay angle, not a kitchen-commercial angle.

  Visible or spoken TWIN line: "Squeeze, pour, and watch the pitcher fill."

  No realistic glassware, no stock-photo counter, no hidden game interface.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.35
Shot 04

004 Shot Manifest

2 still iter · 1 motion

Set the price before the customer arrives.

Manifest YAML
shot_id: lst-004
phase: 8
scene_description: The price sign flips from cheap to fair as a want bubble appears above a kid customer walking toward the
  stand.
duration_s: 6.0
beat_position: 00:16-00:22
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 4
  beat_label: Set price before customer
references:
  characters:
  - sprite-sheets/characters/customers/kid-customer.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
  props:
  - sprite-sheets/props/stands/stand-tier1-3q.png
  - sprite-sheets/props/signage/price-placard.png
  - sprite-sheets/ui/level-card.png
roblox_fidelity_gates:
  art_world: Sunny sidewalk and stand sign read as Roblox tycoon props.
  avatars: Customer reads as Roblox R15/R6 with blocky joints and simple face grammar.
  hud_chrome: Price sign states and day/weather widget visible.
  gameplay_loop: Shows set price before serve customer.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/customers/kid-customer.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
    props:
    - sprite-sheets/props/stands/stand-tier1-3q.png
    - sprite-sheets/props/signage/price-placard.png
    ui:
    - sprite-sheets/ui/level-card.png
audio_direction_per_beat:
- beat: 4
  cue: Narrator starts just before the price-sign flip; ui-tap lands on the flip frame, then the music dips under the want-bubble
    pop.
production_polish_targets:
- Keep the leaderboard as readable game interface chrome, not the focal story beat.
- Preserve the price-sign flip and customer path as the main action.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-004-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-004-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Show the sign flipping to a fair starter price while a customer with a lemonade want bubble enters. The
  price choice should look like a simple game state, not an adult dashboard.

  Visible or spoken TWIN line: "Set the price before the customer arrives."

  No spreadsheet UI, no real-world brand logos, no illegible tiny text.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.25
Shot 05

005 Shot Manifest

2 still iter · 1 motion

Serve one fresh cup. Then wait for the smile.

Manifest YAML
shot_id: lst-005
phase: 8
scene_description: The hero kid serves one cup. The customer sips, smiles, and lands a clear happy reaction before reward
  payout.
duration_s: 7.0
beat_position: 00:22-00:29
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 5
  beat_label: Serve one customer
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-pose-sip.png
  - sprite-sheets/characters/customers/kid-customer.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
  props:
  - sprite-sheets/props/serving/cup-lemonade.png
  - sprite-sheets/props/stands/stand-tier1-front.png
  - sprite-sheets/ui/customer-queue-card.png
roblox_fidelity_gates:
  art_world: Stand counter, cup, and park path remain blocky and gameplay-readable.
  avatars: Hero and customer both read as Roblox R15/R6.
  hud_chrome: Game interface frame remains visible without covering the serve action.
  gameplay_loop: Shows serve customer and reaction before reward.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-pose-sip.png
    - sprite-sheets/characters/customers/kid-customer.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
    props:
    - sprite-sheets/props/serving/cup-lemonade.png
    - sprite-sheets/props/stands/stand-tier1-front.png
    ui:
    - sprite-sheets/ui/customer-queue-card.png
audio_direction_per_beat:
- beat: 5
  cue: Cash-register ding hits the cup handoff; customer cheer starts on the sip and overlaps slightly into the next beat.
production_polish_targets:
- Show cup handoff, sip, and smile before any payout implication.
- Keep the customer chat bubble simple and secondary to the reaction.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-005-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-005-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Keep reward timing honest: cup handoff, customer sip, smile/reaction, then leave room for the next shot''s
  coin pop. The customer reaction should be readable at thumbnail size.

  Visible or spoken TWIN line: "Serve one cup. Wait for the smile."

  No reward before reaction, no generic mascot customer, no food-ad close-up.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.45
Shot 06

006 Shot Manifest

2 still iter · 1 motion

Coins pop, and the upgrade button glows.

Manifest YAML
shot_id: lst-006
phase: 8
scene_description: Coins pop over the stand, the coin counter ticks up, and Upgrade Stand starts glowing.
duration_s: 6.0
beat_position: 00:29-00:35
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 6
  beat_label: Earn coins and unlock upgrade
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-pose-cheer.png
  - sprite-sheets/characters/twin-a/twin-a-front-neutral.png
  props:
  - sprite-sheets/props/stands/stand-tier1-3q.png
  - sprite-sheets/vfx/coin-pop.png
  - sprite-sheets/vfx/sparkle-burst.png
  - sprite-sheets/ui/cash-counter-card.png
  - sprite-sheets/ui/tier-upgrade-card.png
roblox_fidelity_gates:
  art_world: Stand and coin VFX stay chunky, bright, and Roblox-stylized.
  avatars: Customer/hero may be partial but must keep Roblox proportions if visible.
  hud_chrome: Coin counter and Upgrade Stand button are the shot focus.
  gameplay_loop: Shows earn coin leading directly to upgrade affordance.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-pose-cheer.png
    - sprite-sheets/characters/twin-a/twin-a-front-neutral.png
    props:
    - sprite-sheets/props/stands/stand-tier1-3q.png
    - sprite-sheets/vfx/coin-pop.png
    - sprite-sheets/vfx/sparkle-burst.png
    ui:
    - sprite-sheets/ui/cash-counter-card.png
    - sprite-sheets/ui/tier-upgrade-card.png
audio_direction_per_beat:
- beat: 6
  cue: Coin-burst punches at the first pop frame; counter ticks follow quickly, and music lifts into the upgrade beat.
production_polish_targets:
- Keep the plus-50 float tied to the customer reward moment.
- Hold Twin A as a brief background cameo, never center frame.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-006-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-006-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Make the cause and effect clear: coins burst, counter rises, then Upgrade Stand glows. This is a game-feedback
  shot, not a money-pile beauty shot.

  Visible or spoken TWIN line: "Coins pop, and the upgrade button glows."

  No Robux as reward, no pile of cash, no hidden button.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.1
Shot 07

007 Shot Manifest

2 still iter · 1 motion

Our tiny stand turns into a real cart.

Manifest YAML
shot_id: lst-007
phase: 8
scene_description: The player buys the first upgrade. The crate table transforms into a Tier 4 mega lemonade stand with a bigger sign,
  larger counter, and premium kiosk silhouette.
duration_s: 7.0
beat_position: 00:35-00:42
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel-od026-amendment.md
  baseline_kernel: site/video/bts-lst/assets/_bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 7
  beat_label: First stand upgrade
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-3q-left-neutral.png
  - sprite-sheets/characters/dad/dad-pose-thumbsup.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
  props:
  - sprite-sheets/props/stands/stand-tier1-3q.png
  - sprite-sheets/props/stands/stand-tier4-mega-sheet.png
  - sprite-sheets/vfx/sparkle-burst.png
  - sprite-sheets/ui/tier-upgrade-card.png
roblox_fidelity_gates:
  art_world: Stand silhouette changes visibly at phone-screen size.
  avatars: Hero avatar stays Roblox R15/R6 while triggering upgrade.
  hud_chrome: Upgrade Stand button remains visible through the transformation.
  gameplay_loop: Shows upgrade stand after earning coins.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-167 OD-026 pass-05 gpt-image-2 still regenerates from sprite-sheet references and swaps the upgrade target to Tier 4.
    Use as candidate motion source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-3q-left-neutral.png
    - sprite-sheets/characters/dad/dad-pose-thumbsup.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-morning.png
    props:
    - sprite-sheets/props/stands/stand-tier1-3q.png
    - sprite-sheets/props/stands/stand-tier4-mega-sheet.png
    - sprite-sheets/vfx/sparkle-burst.png
    ui:
    - sprite-sheets/ui/tier-upgrade-card.png
audio_direction_per_beat:
- beat: 7
  cue: Ui-tap hits Upgrade Stand; upgrade whoosh carries through the morph, with sparkle tail resolving into the next beat.
production_polish_targets:
- Make the crate-table to Tier 4 mega stand transformation visible at phone size.
- Keep Dad as a quick helper cameo while the stand upgrade remains focal.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-05/gpt-scene/lst-007-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-05/gpt-scene/lst-007-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-05/gpt-scene/lst-001-010-od026-pass05-gpt-scene-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-05/gpt-scene/lst-001-010-od026-pass05-gpt-scene-receipts.json
  motion_handoff: Use this pass-05 still as the candidate motion source only after CodeReviewer accepts ROB-167 OD-026 Phase C stills.
prompt_or_brief: 'Frame the before/after clearly: crate table becomes a Tier 4 mega lemonade stand for ad-drama optic licence.
  The upgrade should feel earned and visible, with no camera move hiding the transformation.

  Visible or spoken TWIN line: "Our tiny stand turns into a real cart."

  No vague sparkle-only upgrade, no tier-2-only painted cart target, no generic storefront jump, no pet-salon leftovers.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  status: pending_code_review
budget_estimate_usd: 1.5
Shot 08

008 Shot Manifest

2 still iter · 1 motion

Hot day. More thirsty people come to our stand.

Manifest YAML
shot_id: lst-008
phase: 8
scene_description: The weather widget flips to heatwave. Sun glint and heat shimmer appear while two customer types approach
  faster.
duration_s: 6.0
beat_position: 00:42-00:48
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 8
  beat_label: Heatwave weather event
references:
  characters:
  - sprite-sheets/characters/customers/adult-customer.png
  - sprite-sheets/characters/customers/dog-walker.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-afternoon.png
  props:
  - sprite-sheets/props/stands/stand-tier2-front.png
  - sprite-sheets/vfx/heat-shimmer.png
  - sprite-sheets/vfx/sun-flare.png
  - sprite-sheets/ui/customer-queue-card.png
roblox_fidelity_gates:
  art_world: Weather affects both game interface and sunny Roblox world.
  avatars: Parent and dog-walker customers read as Roblox R15/R6 NPCs.
  hud_chrome: Day/weather widget is prominent and flips to heatwave.
  gameplay_loop: Shows weather event creating a new customer-demand beat.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/customers/adult-customer.png
    - sprite-sheets/characters/customers/dog-walker.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-afternoon.png
    props:
    - sprite-sheets/props/stands/stand-tier2-front.png
    - sprite-sheets/vfx/heat-shimmer.png
    - sprite-sheets/vfx/sun-flare.png
    ui:
    - sprite-sheets/ui/customer-queue-card.png
audio_direction_per_beat:
- beat: 8
  cue: Weather-pop heat punches on the widget flip; customer-spawn pops layer under the faster multi-player approach.
production_polish_targets:
- Show the weather widget changing before world and customer pacing respond.
- Keep the heatwave busy and sunny, never dangerous or scary.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-008-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-008-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Show the weather widget changing first, then the world and customer pace responding. Heatwave should read
  as busy and sunny, not dangerous or scary.

  Visible or spoken TWIN line: "Hot day. More thirsty people are coming."

  No horror heat, no photoreal mirage, no weather hidden only in text.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.35
Shot 09

009 Shot Manifest

2 still iter · 1 motion

We sell more cups, and everything grows.

Manifest YAML
shot_id: lst-009
phase: 8
scene_description: 'Repeat-bigger montage: hanging lemon sign, tier-3 kiosk, customer queue,
  and game counters all visible.'
duration_s: 7.0
beat_position: 00:48-00:55
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 9
  beat_label: Repeat bigger montage
references:
  characters:
  - sprite-sheets/characters/customers/kid-customer.png
  - sprite-sheets/characters/customers/adult-customer.png
  - sprite-sheets/characters/customers/skateboarder.png
  - sprite-sheets/characters/twin-b/twin-b-pose-callout.png
  environment:
  - sprite-sheets/backgrounds/park-festival.png
  props:
  - sprite-sheets/props/stands/stand-tier3-iso.png
  - sprite-sheets/props/signage/hanging-lemon-sign.png
roblox_fidelity_gates:
  art_world: Kiosk, hanging sign, and park path read as one Roblox tycoon world.
  avatars: Queue customers remain Roblox R15/R6, not generic crowd art.
  hud_chrome: Counters, weather, and mobile frame visible.
  gameplay_loop: Shows the loop repeating bigger after upgrade and weather.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/customers/kid-customer.png
    - sprite-sheets/characters/customers/adult-customer.png
    - sprite-sheets/characters/customers/skateboarder.png
    - sprite-sheets/characters/twin-b/twin-b-pose-callout.png
    environment:
    - sprite-sheets/backgrounds/park-festival.png
    props:
    - sprite-sheets/props/stands/stand-tier3-iso.png
    - sprite-sheets/props/signage/hanging-lemon-sign.png
    ui: []
audio_direction_per_beat:
- beat: 9
  cue: Music reaches the biggest swell; quick ui-tap, coin-chime, customer-spawn-pop, and sparkle ticks stay under narration.
production_polish_targets:
- Make the montage read as the same gameplay loop growing larger.
- Keep Twin B as a quick low-contrast cameo for repeat watches.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-009-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-009-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Build a fast but readable montage frame: customers, bigger kiosk, hanging lemon sign, and counters. It
  should feel like the same game loop has grown, not a new unrelated game.

  Visible or spoken TWIN line: "We sell more cups, and our stand grows."

  No paid-random crate read, no rebirth-grind visuals, no disconnected ad collage.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.55
Shot 10

010 Shot Manifest

2 still iter · 1 motion

We sold one cup. Now our stand got bigger.

Manifest YAML
shot_id: lst-010
phase: 8
scene_description: 'Final screenshot moment: painted stand, customer holding cup, coin pop, glowing Upgrade
  Stand, and title card Lemonade Stand Tycoon.'
duration_s: 5.0
beat_position: 00:55-01:00
style_pack: lst-tycoon-sunny-v1
storyboard_mapping:
  source_issue: ROB-38
  storyboard_kernel: _bmad-output/video-artifacts/lst-promo-storyboard-kernel.md
  beats:
  - 10
  beat_label: Shareable payoff
references:
  characters:
  - sprite-sheets/characters/hero-kid/hero-kid-pose-cheer.png
  - sprite-sheets/characters/customers/kid-customer.png
  environment:
  - sprite-sheets/backgrounds/sidewalk-suburban-afternoon.png
  props:
  - sprite-sheets/props/stands/stand-tier2-3q.png
  - sprite-sheets/props/serving/cup-lemonade.png
  - sprite-sheets/vfx/coin-pop.png
  - sprite-sheets/ui/title-card-lemonade-stand-tycoon.png
  - props/ui-cards/title-card-lst-logo.png
  - props/vfx/stand-star-sparkle.png
roblox_fidelity_gates:
  art_world: Painted stand and sunny map remain clearly Roblox-stylized.
  avatars: Customer holding cup and hero/player context preserve Roblox proportions.
  hud_chrome: Coin pop and Upgrade Stand button are in-frame.
  gameplay_loop: Payoff proves the first sale upgraded the stand.
reference_lock_status: reference_locked
render_readiness: gpt_scene_clean_ready_for_code_review
locked_reference_contract:
  renderable: true
  note: ROB-101 pass-04 gpt-image-2 clean replacement still generated from sprite-sheet references. Use as candidate motion
    source only after CodeReviewer accepts this pass.
  planned_paths:
    characters:
    - sprite-sheets/characters/hero-kid/hero-kid-pose-cheer.png
    - sprite-sheets/characters/customers/kid-customer.png
    environment:
    - sprite-sheets/backgrounds/sidewalk-suburban-afternoon.png
    props:
    - sprite-sheets/props/stands/stand-tier2-3q.png
    - sprite-sheets/props/serving/cup-lemonade.png
    - sprite-sheets/vfx/coin-pop.png
    ui:
    - sprite-sheets/ui/title-card-lemonade-stand-tycoon.png
audio_direction_per_beat:
- beat: 10
  cue: Title-card stinger lands on the first frame; coin chime and sparkle tail resolve under the final line.
od026_phase_e_title_card_animation:
  selected_animation: centre_drop_light_bounce_with_sparkle_settle
  producer_choice: Drop the final title card into centre frame with a light bounce, 12 percent scale overshoot, and
    a quick stand-star-sparkle pop on settle for brand continuity.
  timing:
    first_card_frame_s: 55.0
    stinger_sync: First visible card frame lands exactly on the locked title-card stinger.
    drop_duration_s: 0.52
    centre_rest_window_s: 55.6-55.8
    hold_after_rest_s: 4.2
  compositor_contract:
    final_text_rendering: compositor_rendered
    title_block_source: props/ui-cards/title-card-lst-logo.png
    runways_text_frames: Treat Runway-generated title lettering as background-only; final readable title and tag are
      rebuilt by the compositor.
    card_content: Lemonade Stand Tycoon title block with the existing plain text Free Roblox tag; no platform logo,
      release claim, or endorsement styling.
    url_chyron: none
  motion_treatment:
    entry: Start just above centre at 55.0s, drop to centre with ease-out.
    bounce: Overshoot to 112 percent scale, settle to 100 percent over 60-80 ms.
    settle_vfx: Trigger a small stand-star-sparkle pop behind the card at centre-rest, then fade particles within
      280 ms so the title remains readable.
    final_frame: Optional 3 percent logo bump in the last 0.35s only if it does not soften the title text.
  review_notes:
  - No URL chyron is approved for OD-026 Phase E.
  - Keep the card centred and readable inside the 16:9 title-safe area through the final frame.
  - Do not extend lst-010 beyond the locked 5.0s target unless final-composite timing proves the stinger tail needs it.
production_polish_targets:
- Leave the final half-second clean for the logo and title card.
- Keep the final frame shareable without platform-logo or release-claim drift.
generator:
  status: gpt_scene_clean_ready_for_code_review
  stills: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-010-gpt-scene.png
  motion: Do not run motion generation until CodeReviewer accepts the clean Pipeline A still.
pipeline_a_clean_scene_compose:
  provider: OpenAI Images edits
  model: gpt-image-2
  still: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-010-gpt-scene.png
  report: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-report.md
  receipts: _bmad-output/video-artifacts/renders/pass-04/gpt-scene/lst-002-010-gpt-scene-clean-receipts.json
  motion_handoff: Use this pass-04 still as the candidate motion source only after CodeReviewer accepts ROB-101 clean scene
    compose.
prompt_or_brief: 'Compose the PRD screenshot moment: painted lemonade stand, customer holding cup, coin pop,
  and glowing Upgrade Stand button. End with a clean readable Lemonade Stand Tycoon title card inside the same Roblox-stylized
  world.

  Visible or spoken TWIN line: "We sold one cup. Our stand got bigger."

  No public URL, no platform logo, no unsupported release claim.

  '
neg_prompt: style-packs/lst-tycoon-sunny-v1/neg-prompt-template.txt
reviewer_signature:
  required: true
  approved_by: c07cec94-3428-44a1-a8e1-c54a13973077
  approved_at: 2026-05-18 17:51:33+00:00
budget_estimate_usd: 1.2

04

Audio Tracks

Voice lines, SFX bank, music bed.

10 voice · 30 SFX · 2 music
Voice Lines (10)

001 Single Narrator Tiny Stand

lst-001-single-narrator-tiny-stand.wav · 513.8 KB

002 Single Narrator Buy Lemons

lst-002-single-narrator-buy-lemons.wav · 548.7 KB

003 Single Narrator Pitcher Fill

lst-003-single-narrator-pitcher-fill.wav · 505.1 KB

004 Single Narrator Price Customer

lst-004-single-narrator-price-customer.wav · 452.9 KB

005 Single Narrator Serve Smile

lst-005-single-narrator-serve-smile.wav · 574.8 KB

006 Single Narrator Coins Glow

lst-006-single-narrator-coins-glow.wav · 513.8 KB

007 Single Narrator Real Cart

lst-007-single-narrator-real-cart.wav · 470.3 KB

008 Single Narrator Hot Day

lst-008-single-narrator-hot-day.wav · 548.7 KB

009 Single Narrator Everything Grows

lst-009-single-narrator-everything-grows.wav · 418.0 KB

010 Single Narrator Bigger Stand

lst-010-single-narrator-bigger-stand.wav · 513.8 KB
SFX Bank (30)

Cash Register Ding.Take 1

cash-register-ding.take-1.wav · 165.1 KB

Cash Register Ding.Take 2

cash-register-ding.take-2.wav · 165.1 KB

Cash Register Ding

cash-register-ding.wav · 165.1 KB

Coin Burst.Take 1

coin-burst.take-1.wav · 202.6 KB

Coin Burst.Take 2

coin-burst.take-2.wav · 202.6 KB

Coin Burst

coin-burst.wav · 202.6 KB

Coin Chime.Take 1

coin-chime.take-1.wav · 127.6 KB

Coin Chime.Take 2

coin-chime.take-2.wav · 127.6 KB

Coin Chime

coin-chime.wav · 127.6 KB

Customer Cheer Yum.Take 1

customer-cheer-yum.take-1.wav · 225.1 KB

Customer Cheer Yum.Take 2

customer-cheer-yum.take-2.wav · 225.1 KB

Customer Cheer Yum

customer-cheer-yum.wav · 225.1 KB

Customer Spawn Pop.Take 1

customer-spawn-pop.take-1.wav · 165.1 KB

Customer Spawn Pop.Take 2

customer-spawn-pop.take-2.wav · 165.1 KB

Customer Spawn Pop

customer-spawn-pop.wav · 165.1 KB

Title Card Stinger.Take 1

title-card-stinger.take-1.wav · 375.1 KB

Title Card Stinger.Take 2

title-card-stinger.take-2.wav · 375.1 KB

Title Card Stinger

title-card-stinger.wav · 375.1 KB

Ui Tap.Take 1

ui-tap.take-1.wav · 90.1 KB

Ui Tap.Take 2

ui-tap.take-2.wav · 90.1 KB

Ui Tap

ui-tap.wav · 90.1 KB

Upgrade Sparkle Tail.Take 1

upgrade-sparkle-tail.take-1.wav · 300.1 KB

Upgrade Sparkle Tail.Take 2

upgrade-sparkle-tail.take-2.wav · 300.1 KB

Upgrade Sparkle Tail

upgrade-sparkle-tail.wav · 300.1 KB

Upgrade Whoosh.Take 1

upgrade-whoosh.take-1.wav · 330.1 KB

Upgrade Whoosh.Take 2

upgrade-whoosh.take-2.wav · 330.1 KB

Upgrade Whoosh

upgrade-whoosh.wav · 330.1 KB

Weather Pop Heat.Take 1

weather-pop-heat.take-1.wav · 202.6 KB

Weather Pop Heat.Take 2

weather-pop-heat.take-2.wav · 202.6 KB

Weather Pop Heat

weather-pop-heat.wav · 202.6 KB
Music Bed

Promo Music Bed V01 V4 5All

lst-promo-music-bed-v01-v4_5all.wav · 10.99 MB

Promo Music Bed V01

lst-promo-music-bed-v01.wav · 10.99 MB

05

Composite & Final

Hyperframes / ffmpeg final cut.

rendered

_bmad-output/video-artifacts/renders/final/lst-promo-final-od021-v01.mp4 · 28.05 MB

06

Budget & Spend

Running cost ledger under the OD-013 $200 cap.

tracking

Hard cap from OD-013: $200 USD for the entire video-chain. Provider stack per OD-016: Runway Gen-4.5 (motion) + ElevenLabs Creator (voice) + Suno Pro (music) + Cloudflare Workers (Hyperframes composite).

Render Budget Ledger (PST historical)

complete

_bmad-output/video-artifacts/renders/pass-01/render-budget-ledger.md · 788 B

Read

PST Promo Render Budget Ledger

Issue: ROB-18 Cap: $200.00 Signed-manifest projected cost: $16.15 Actual external spend in pass 01: $0.00

Ledger

ItemEstimateActualNotes
Local still-preview compositing$0.00$0.00PIL composition from seeded asset-library files.
External still generation$0.00$0.00Not invoked in this pass.
External motion generation$16.15 projected from signed manifests$0.00Deferred until CodeReviewer/cockpit approval.
Audio generation$0.00$0.00Out of scope for ROB-18 pass 01.

Escalation Check

No escalation is needed. Actual external spend remains $0.00; projected signed-manifest motion/still spend remains $16.15, below the $200.00 cap.

Audio Budget Ledger

complete

_bmad-output/video-artifacts/audio/audio-budget-ledger.md · 1.7 KB

Read

PST Promo Audio Budget Ledger

Issue: ROB-22 Scope: Phase 8 audio lock for 60-second PST promo Cap source: /srv/http/_hq/projects/project-roblox/OD-013-autonomous-execution.md §6

Budget Position

ItemAmountStatusNotes
Video-chain hard cap$200.00capOD-013 Phase 8 render budget.
Shot-manifest render estimate$16.15projectedFrom _bmad-output/video-artifacts/shot-manifests/budget-summary.md.
ROB-20 external motion spend$0.00actualLocal ffmpeg proxy pass only.
ROB-22 audio spend this heartbeat$0.00actualNo provider credentials available; no paid generation called.
ROB-23 local proxy audio spend$0.00actualLocal ffmpeg proxy stems and review mix only; no provider calls.
ROB-96 ElevenLabs narrator auditionsprovider credits onlyactualFour sample-line audition WAVs generated; character-cost headers total 88, cash conversion not exposed by API response.
ElevenLabs Creator month$25.00projectedFrom commercial-only voice manifest. Needed for final voice assets.
Suno / music bed$0.00projected incrementalExpected inside existing approved music/tooling path; no spend executed here.
Projected chain total after audio$41.15projected$16.15 + $25.00; under cap by $158.85.

Escalation Check

No budget-cap escalation is required. The projected chain remains below the $200.00 hard cap.

Current Spend Blocker

Final voice and music assets were not generated because the environment exposes no Suno or ElevenLabs credentials/tools. This is a capability blocker, not a budget blocker.

Unblock action: CEO/operator supplies approved Suno and ElevenLabs generation access for Phase 8 audio assembly.