For Mihai + Cristi. Pick an answer for each, add notes, then press Copy answers and paste them to Claude. The images are from today's viral games (2026-10-04 chart), watched by Gemini. We copy the pattern, not the art.
Paste this into Codex/GPT working on the repo. It builds leaf-themed versions of the viral moments (hatch beam, giant pets + kg, server banner, big number pops, bin tiers, rebirth aura, optional Golden Pile) as new files only, on a branch, nothing wired in. Item 7 waits for your answer to question 1.
You are working in the Roblox game repo `D:\joc roblox\PACHET-ROBLOX-PRIETEN\1-leafgetter-roblox-leafraker` (Luau, Rojo-style layout, disk is the source of truth). The game is **Leaf Getter**: kids rake falling leaves into a backpack, pour them into a bin on their plot for coins, upgrade a tree, hatch pets from eggs, rebirth.
## Goal
Build a **visual FX + model pack** so the game "speaks the same visual language" as today's viral Roblox games (Steal An Egg, Ride A Pet, Drill for Eggs, Build the Pyramid, +1 Loot To Forge), so new players recognise the moments instantly. **But it stays OUR identity: every effect is made of LEAVES.** Where they use a plain light beam, we use a leaf tornado. Where they throw confetti, we throw leaves. Palette = ours (leaf green, gold, autumn orange/red, rainbow for Mythic).
You build **standalone presentation modules only**. You do NOT wire them into the game: no edits to existing files. Integration happens later, after review.
## Read first (only these)
- `CLAUDE.md` (repo rules), `docs/DESIGN.md` (palette, fonts, motion timings, 3D model rules: part-built, `Material = Plastic`, stud surfaces, NO MeshPart / Union / uploaded assets, part caps)
- `docs/LUAU-STANDARDS.md` (LF line endings, no BOM, `task.*`, no `wait()`, no `Debris`)
- `src/client/ReplicatedStorage/UIKit.luau`: reuse `UIKit.rarityColor(rarity)`, `UIKit.short(n)`, `UIKit.topbarY()`, `UIKit.Colors`, `UIKit.punch`, `UIKit.shake`
- `src/server/Server/LeafGameServer.luau`, ONLY the function `setupTrashBin` (~line 225) for the bin's footprint, its `RimAbove` attribute and its invisible mouth cap. Do not read the rest of this 200 KB file.
- Look at `docs/research/viral-frames/*.jpg` for the viral look we're echoing (steal-an-egg-01-27 = hatch beam, drill-for-eggs-09-42 = giant pet + kg, build-the-pyramid-00-01 = server bar, loot-to-forge-07-54 = big number pops, drill-for-eggs-04-36 = aura).
## Hard rules
- New files ONLY, under `src/client/ReplicatedStorage/LeafFx/` (ModuleScripts, `.luau`) and `src/client/ReplicatedStorage/LeafModels/`. Plus one preview test `tests/studio/fx-showcase.luau`. Edit NO existing file.
- Rarities are exactly: `Common, Rare, Epic, Legendary, Mythic`. Colours come from `UIKit.rarityColor`, never hard-coded.
- No new asset ids (you can't upload). Allowed: parts, `ParticleEmitter` with Roblox built-in textures (`rbxasset://textures/particles/sparkles_main.dds`, `.../smoke_main.dds`, `.../fire_main.dds`), `Beam`, `PointLight`, `BillboardGui`, `ScreenGui`, `TweenService`.
- Every effect cleans up after itself (`task.delay(t, inst.Destroy, inst)`), has a max duration, and caps its part count (state the cap in the module header). Mobile-friendly: ≤ 60 transient parts per effect.
- Fonts: `Enum.Font.FredokaOne` for numbers and titles. Motion: follow DESIGN.md "Motion" (Back ease for pops, Quad for falls).
- Each module starts with a 5-10 line header: what it is, which viral pattern it echoes, the public API, caps.
- Never open or drive Roblox Studio. Never send mouse/keyboard input. Never commit to `main`. Never publish.
- Line endings LF, no BOM. Don't write files with PowerShell `Set-Content`.
## What to build (one git commit per item, on a new branch `codex/leaf-fx`)
1. **`LeafFx/HatchBeam.luau`**: the hatch moment.
`HatchBeam.play(origin: CFrame, rarity: string, pet: Model?) -> ()`
A spiralling **leaf tornado** column (stud leaf parts, 0.9x0.18x0.62) rising 25-40 studs in the rarity colour (taller for rarer), a `PointLight` flash, a burst of falling leaves around the base, then the pet (if given) rises 4 studs out of it with a Back scale-in and a slow spin. Mythic = the rainbow cycle. Total ≤ 2.5 s, skippable (return a `stop()` handle is fine).
2. **`LeafFx/PetFlex.luau`**: big pets by rarity.
`PetFlex.scaleFor(rarity) -> number` (start with Common 1, Rare 1.35, Epic 1.9, Legendary 2.8, Mythic 4.2; one table at the top, easy to tune)
`PetFlex.weightKg(rarity, seed: number) -> number` (deterministic from the seed; Common 1-20 kg ... Mythic 2,000-12,000 kg)
`PetFlex.attachAura(model: Model, rarity) -> Instance` (Common/Rare none; Epic 3, Legendary 5, Mythic 8 leaves orbiting the pet + a soft PointLight; returns a folder to destroy)
`PetFlex.weightLabel(model: Model, kg: number, rarity) -> BillboardGui` ("2,340 kg" over the pet, rarity colour, stroke)
`PetFlex.apply(model, rarity, seed)` = scale (`Model:ScaleTo`) + aura + label in one call.
3. **`LeafFx/Banner.luau`**: the server-wide announcement (client).
`Banner.show(text: string, rarity: string?, seconds: number?)`
A top-centre strip under the Roblox top bar (`UIKit.topbarY()`), slides down, rarity-gradient fill (rainbow scroll for Mythic), a little shake, holds 3.5 s, slides out. Queue: max 3 waiting, the rest dropped. Fits an 812x375 phone (max width 90% of the screen). Its own ScreenGui, `DisplayOrder` 30, `IgnoreGuiInset = true`.
Example texts: "🍂 Mihai hatched a MYTHIC Leaf Dragon!", "✨ A GOLDEN PILE fell in the grove!"
4. **`LeafFx/NumberPop.luau`**: big "+N" numbers and flying coins.
`NumberPop.world(position: Vector3, amount: number, color: Color3?)`: a BillboardGui "+1.2M 💰" that grows with the amount (text size from 24 at <1K up to 72 at ≥1T, by log10), rises 4 studs and fades in 0.9 s. Use `UIKit.short`.
`NumberPop.flyCoins(from: Vector2, to: GuiObject, count: number)`: up to 12 coin icons (gold circles with a stroke) fly in an arc from a screen point into the coin pill, then `UIKit.punch(to)`.
5. **`LeafModels/BinTiers.luau`**: the bin that visibly evolves.
`BinTiers.build(tier: number) -> Model` for tiers 1-4: **wood → metal → gold → crystal**. Same footprint and the same `RimAbove` attribute + invisible mouth-cap rule as `setupTrashBin`. ≤ 12 parts each, Plastic, studs, PrimaryPart = ground-centre, pivot at ground. Crystal = light-blue Plastic at transparency 0.15 + a PointLight (still Plastic, per DESIGN.md).
`BinTiers.swapFx(oldModel: Model, newModel: Model)`: the old one shrinks out, the new one pops in (Back) with a leaf burst.
6. **`LeafFx/RebirthAura.luau`**: status that walks around the hub.
`RebirthAura.titleFor(rebirths: number) -> (string, Color3)`: 0 Raker, 1-2 Sweeper, 3-4 Groundskeeper, 5-7 Gardener, 8-11 Leaf Lord, 12+ Autumn King (one table at the top).
`RebirthAura.attach(character: Model, rebirths: number) -> Instance`: a title BillboardGui over the head + an aura that grows with tier (0-2 none, 3-4 a few orbiting leaves, 5-7 more + a light, 8+ a slow leaf tornado around the feet). Returns a folder to destroy.
7. **(Only if Mihai says so: question 1, the Golden Pile)** `LeafModels/GoldenPile.luau` + `LeafFx/GoldenPile.luau`.
`GoldenPile.build() -> Model`: a glowing heap of gold + a few rainbow stud leaves, ≤ 20 parts.
`GoldenPileFx.pillar(model) -> Instance`: a gold light pillar (Beam) ~120 studs tall, visible across the map.
`GoldenPileFx.sackOnBack(character) -> Model`: a glowing leaf sack welded to the back.
`GoldenPileFx.timerBar(character, seconds) -> { set: (frac: number) -> (), destroy: () -> () }`: a bar over the head, green → amber → red, with a small leaf blowing off as it empties.
8. **`tests/studio/fx-showcase.luau`**: one Studio chunk (header `-- datamodel: Client`, see the other `tests/studio/*.luau` for the header style) that requires every module and plays each one in a row, spaced 12 studs apart in front of the local character, with a 3 s gap: hatch beams for all 5 rarities, PetFlex on 5 neutral test parts, 3 banners, number pops at 50 / 12K / 3.4M / 1.6T, the 4 bin tiers side by side then a swap, the rebirth titles 0/3/5/8/12 on dummy parts. It prints `PASS <item>` per module that loaded and ran without error, `FAIL <item>: <error>` otherwise.
## Done means
- `D:\temp\leafgetter-lune-0.10.5\lune.exe run .scratch/compilecheck.luau` → all files OK (it collects every `.luau` under `src` automatically).
- `D:\temp\leafgetter-lune-0.10.5\lune.exe run tests/gamecore.test.luau` → still all green (you touched no logic, so it must be).
- `git diff main --stat` shows ONLY new files under `src/client/ReplicatedStorage/LeafFx/`, `src/client/ReplicatedStorage/LeafModels/` and `tests/studio/fx-showcase.luau`.
- A short report: each file, its API, its part cap, anything you weren't sure about. Don't claim it looks good; nobody has seen it in Studio yet. Claude runs the showcase in Studio, takes screenshots, and Mihai + Cristi pick.