# Lemonade for Good — Game Design Doc
_A charity lemonade-stand game for kids, built with Lily (mascot) as the spokesperson_

**Status:** Concept / pre-production
**Owner:** [daughter's name] + Dad
**Last updated:** Aug 2, 2026

---

## 1. Concept

A mobile game where a kid runs a lemonade stand to raise real donations for
charity. The game has two loops that reinforce each other:

- **In-game loop:** make lemonade → open the stand → serve customers.
  Purely for fun, no real money involved.
- **Real-world loop:** invite friends & family to donate to a real charity.
  Confirmed donations unlock new stages, decorations, and content in the
  game. This is the core hook: **the game is unlocked by real kindness, not
  by purchases.**

Mascot: **Lily**, an 8-year-old girl with braided pigtails, striped apron,
the face of the app. Warm, cheerful, always smiling — she's the one who
"runs" the stand alongside the player.

**Catchphrase:** "Get your lemonade!" — Lily's signature shout, delivered
via speech bubble at key moments (game open, finishing a prep step,
serving customers). This is her brand line — use it consistently across
loading screens, app store screenshots, and marketing.

---

## 2. Core Gameplay Loop (from Lily's — the designer's — own handwritten notes)

This is the actual step-by-step design the game's target player (age 8)
wrote by hand. It splits naturally into two phases:

### Phase 1 — Make the Lemonade (prep mini-game)
Tap/drag interactions, one per step, each with its own little animation:

1. Squeeze lemons (tap/squeeze gesture, juice squirts into pitcher)
2. Add water (pour animation)
3. Add sugar ("shoger" — sprinkle/shake animation, sparkle effect)
4. Get ice from the fridge (drag ice cubes in, clink sound)
5. Pour into pitcher (swirl/mix animation, lemonade color settles)

### Phase 2 — Open the Stand (serving loop)
6. Get cups
7. Clean and ready (wipe down the stand — quick tidy-up animation)
8. Start the lemonade stand (stand "opens," awning unfurls)
9. Smile + make a sign (customize a hand-drawn sign — fun personalization
   moment)
10. Pour lemonade for customers (serve queue of cute customer characters —
    this is the main repeatable gameplay beat)

**Design note:** Phase 1 happens once per session/day as a short warm-up
ritual (30-60 sec). Phase 2 is the repeatable "gameplay" — customers show up,
you serve them, you earn in-game coins/points (cosmetic only, not
real-money-linked).

---

## 3. The Donation-Unlock Mechanic

- The player has a **goal**: e.g. "10 donations to unlock the Mega Stand."
- Player taps **Invite a Friend or Family Member**, which generates a
  shareable link/code tied to their profile.
- The invite points to an **external, verified donation platform**
  (see Compliance below) — NOT an in-app payment flow.
- When a donation is confirmed (via webhook from the donation platform),
  the app updates the player's progress bar and unlocks the next milestone.
- Milestones = new stand decorations, new customer characters, new sign
  designs, new backgrounds — all cosmetic, never pay-to-win.

### UI references (already sketched)
Three explored directions, saved at `~/lemonade-game-sketches/`:
- `001-cozy-storybook/` — warm, handmade, milestone icons (recommended for
  younger kids)
- `002-bold-arcade/` — neon "quest" framing, unlockable chips
- `003-soft-pastel/` — calm circular progress ring, most "trustworthy to
  donors" feel
- `004-squeeze-lemons-minigame/` — **built and verified working.** Full
  10-step Phase 1 + Phase 2 chain (squeeze lemons → add water → add sugar →
  add ice → pour → get cups → clean → open stand → make sign → serve
  customers), ending on a "stand is open" screen that links to the donation
  goal. Currently tap-to-advance; **being rebuilt as swipe-based** per
  design decision below.

Mascot Lily is embedded as a circular avatar badge in the header of all
three progress-screen mockups, and as an animated cheering character (with
speech bubble, catchphrase "Get your lemonade!") throughout the mini-game.

---

## 3.5 UI/UX Direction: Swipe-First (locked design decision)

Feedback from the target player: tap-to-advance buttons feel flat. The
game should feel **swipe-first**, closer to Stories/Tinder-style card
decks than a form with "Next" buttons.

- **Prep steps → horizontal swipe deck.** Each prep step (squeeze, add
  water, add sugar, add ice, pour) is a full-screen card; swipe left when
  a step is done instead of tapping a button. Cards should have spring/
  momentum physics, not an instant snap.
- **Serving customers → swipe right to serve, swipe left to skip.** Flick
  gesture per customer card instead of tap-to-serve.
- **Donation goal / supporters list → swipe up as a bottom sheet** from
  the main stand screen, instead of a separate page/button.
- **Charity picker (if multiple charities) → swipeable carousel** of
  charity cards.

This is a locked direction — build all future screens swipe-first by
default; only fall back to tap targets for the actual moment-of-decision
actions (confirm invite, confirm serve) where a swipe would be ambiguous.

---

## 4. Fundraising Mechanics, Onboarding & Virality

### Fundraising mechanics
- Each kid picks (or a parent assigns) **a charity + a goal** (e.g. "10
  donations" or a dollar target).
- Donations happen **off-app**, on an established donation platform
  (Classy, GoFundMe Charity, or the charity's own Stripe-hosted checkout).
  The app never touches payment data — see Compliance section.
- App receives a **webhook/confirmation** when a donation lands, ties it
  to the kid's campaign, updates progress in real time.
- **Break the big goal into micro-milestones** with fast payoff (1st
  donation unlocks a cup design, 3rd unlocks a sign, 5th unlocks a stand
  upgrade...) rather than one distant finish line — kids need frequent
  wins.
- Consider a **matching mechanic**: "the first 5 donations get doubled by
  [sponsor]" — proven real-world fundraising lever, gives donors urgency.

### Onboarding
- **Parent sets up the account first** — picks/verifies the charity, sets
  contact/sharing limits. Satisfies COPPA and keeps the legal setup clean.
- **The tutorial IS the first playable loop** — a kid's first session is
  the Phase 1 prep mini-game itself (squeeze lemons → open stand). No
  separate "how to play" screen to skip past.
- **First invite is scaffolded, not blank.** After the tutorial, suggest
  specific parent-approved contacts with a pre-written, editable message in
  Lily's voice ("Get your lemonade! Help me reach my goal!"). Removes the
  blank-page problem that kills most invite flows.

### Virality (kid-safe, not growth-hacky)
- **Shareable milestone cards** — every unlock auto-generates a cute
  graphic (Lily + stats: "Lily raised $40 for Riverside Animal Shelter!")
  for parents to post on their own social media. Best organic growth lever
  for charity campaigns — wholesome content people actually want to share.
- **Team/group challenges** — siblings, classrooms, scout troops running
  stands together toward a shared team goal. Mirrors how real-world
  lemonade-stand fundraisers already spread and pulls in multiple families
  at once.
- **Seasonal campaigns** — "Summer Lemonade Challenge," back-to-school
  charity week, etc. Gives a reason to return and re-share instead of a
  one-time novelty.
- **No public leaderboards with real identity.** If there's competition,
  keep it team-based or anonymized (first name + avatar, opt-in only).
  Public kid leaderboards are a safety risk and an easy store-review
  rejection.
- **Charity cross-promotion** — get the charity to promote the app to its
  own donor list. Existing trust/reach beats organic growth tricks; pitch
  it as "we bring you new donors, you help us get featured."
- **App Store storytelling** — a legitimately kid-run charity app is the
  kind of feel-good story Apple/Google editorial teams like to feature.
  Worth a short pitch for "New Apps We Love" / charity spotlight placement
  once live.

---

## 4. Compliance Notes (read before building payment flow)

This is the part that needs to be right from day one, not bolted on later:

- **No in-app payment collection for donations.** Route all actual money
  through an established donation platform (e.g. a nonprofit's own donation
  page, Classy, GoFundMe Charity, or Stripe Checkout hosted *outside* the
  app shell). The app only reads back a **confirmed donation status** via
  webhook/API — it never touches card data or processes the transaction
  itself.
- **COPPA:** a parent/guardian should set up the invite/sharing step, not
  the child unsupervised — e.g. parent taps "send" after reviewing who it
  goes to, or the invite flow requires a parent gate (simple math check or
  similar) before it opens native share sheets.
- **App Store / Play Store review risk:** apps that solicit money from a
  user's contacts get extra scrutiny, especially kid-facing ones. Being
  explicit in the app description and store listing that "100% of
  donations go directly to [named charity] via [named platform], the app
  itself charges nothing" reduces rejection risk.
- **Charity percentage claims must be accurate and auditable** — if you say
  "X% goes to charity," be able to show the math (e.g. show it live in the
  app from the charity's own confirmation, not a number you make up).

---

## 5. Proposed Tech Stack

- **Frontend/game:** Flutter (single codebase, iOS + Android) for UI-heavy
  parts; consider Godot if the serving mini-game needs more game-engine
  feel (physics, particle effects for juice/sparkles).
- **Backend:** Supabase or Firebase — handles player profiles, donation
  progress tracking, milestone state. Avoid rolling a custom server for a
  project this size.
- **Donations:** External platform (see Compliance) + webhook into
  Supabase/Firebase to flip "confirmed" status and trigger the unlock.
- **Art assets:** Mascot + stand/customer illustrations generated via
  image-gen (FLUX), refined with a human illustrator pass if going to app
  stores for real.

---

## 6. Open Questions / Next Steps

- [ ] Pick the real charity (or a rotating list) and the actual donation
      platform/link mechanism.
- [ ] Decide the parent-gate flow for sending invites (how much control
      does mom/dad have over who gets invited).
- [ ] Pick final UI direction (storybook / arcade / pastel) — recommend
      showing all three to [daughter] and letting her choose.
- [ ] Build the "Squeeze Lemons" mini-game prototype — **done**, see
      `~/lemonade-game-sketches/004-squeeze-lemons-minigame/`. Next: build
      the remaining Phase 1 steps (add water, add sugar, add ice, pour into
      pitcher) as the same tap-interaction pattern, then chain them into one
      flow.
- [ ] Decide engine: Flutter vs. Godot, based on how game-like Phase 2
      (serving customers) needs to feel.
