InkydoopStories to read, hear, and wonder about.
Lina lunges for Theo's lost blue name button on a glass-bottom boat while Theo watches.
Storylost-and-found mysteryinclusion

Theo's Button

On a rocking glass-bottom boat, Lina must solve a slippery mystery before the shy new boy loses his name for the whole trip.

4 min read · tap a highlighted word for its meaning

Story narration

Listen to Theo's Button

0:00 / 0:00
Speed

Lina finds only the bent pin back under the sticky snack bench as Theo watches.

Theo guides Lina as she hooks his blue name button through the drain grate.

Story notes

How this story was made

Story generation model
openai/gpt-5.5
Words and questions model
deepseek/deepseek-v4-flash
Image model
google/gemini-2.5-flash-image
Speech model
x-ai/grok-voice-tts-1.0
Narration voice
leo
Finer details: prompts used

Story planning and generation

Attempt 1 · openai/gpt-5.5

System prompt

You design clear, compelling short-story plans for independent grade 3 readers. The premise must be easy to follow, but the experience should feel lively, emotionally meaningful, and worth turning the page for.

PLAN RULES
- Start with an emotionally recognizable situation, then choose the setting that best serves the genre and premise. The setting may be everyday, historical, adventurous, unusual, or imaginative; do not default to a standard child-centered location merely because it is familiar.
- Orient the reader quickly. Reveal where the character is and the one fact needed to understand that place through concrete action or sensory detail, without pausing for background explanation.
- Give the main character one concrete goal and one clear obstacle. Every step must follow from the step before it and move toward that same goal.
- Open with action, an intriguing discovery, an urgent need, or a funny problem. Give the goal personal stakes: explain what the character hopes for or worries will happen.
- Make each attempt change the situation. Include one surprising but logical turn that grows from the existing characters, setting, or obstacle rather than introducing new lore.
- Build toward a choice that reveals character, then deliver a satisfying payoff that feels earned and specific.
- Keep names, objects, locations, and background facts to the minimum needed for the plot.
- Do not use magic, futuristic technology, talking objects, invented events, or invented places unless the selected genre requires one. If required, include only one unusual element and explain its complete rule in one plain sentence.
- Make the outcome directly resolve the opening problem through the main character's action or choice.
- The theme should be visible in what happens, but the plot must still make literal sense without interpreting a symbol or metaphor.
- Keep every field compact. mainCharacter and each supportingCharacters item must contain a name only, with no biography or description. Write premise, setting, goal, obstacle, each step, choice, outcome, and unusualElement as one plain sentence of no more than 25 words.

TIER LIMITS
Use one main character and one helper, one concrete goal, one main obstacle, two escalating attempts, and no subplot. The setting may be distinctive or imaginative when its one essential fact is immediately clear. Build engagement through humor, suspense, sensory detail, an emotionally important stake, and one logical surprise rather than through lore. Establish the goal and obstacle within the first 2-3 sentences and resolve them clearly.

Return only JSON with this shape:
{
  "premise": string,
  "mainCharacter": string,
  "supportingCharacters": string[],
  "setting": string,
  "goal": string,
  "obstacle": string,
  "steps": [string, string, string?],
  "choice": string,
  "outcome": string,
  "unusualElement": string|null
}

User prompt

Genre: lost-and-found mystery
Theme: inclusion
Build a clear, compelling story that fits this pair. Choose a distinctive setting that creates strong story possibilities, and orient the reader through action rather than background explanation. Keep any speculative element simple enough to understand immediately.
Use the theme as an emotional lens for the character's goal, choice, and outcome. Do not invent a second plot, institution, ceremony, or world rule just to explain the theme.

Attempt 1 · openai/gpt-5.5

System prompt

You write clear, engaging children's fiction for independent Early readers (grade 3, Lexile 450–650). Turn the supplied approved plan into ONE complete short story, then plan its illustrations.

STORY CRAFT
- Preserve the supplied plan's characters, central goal, obstacle, choice, and outcome. You may enrich each scene with expressive dialogue, sensory detail, humor, character reactions, and small surprises, but do not add new lore, side missions, or plot machinery.
- Open on an active, intriguing moment within the first two sentences. Create a real curiosity gap: the reader should immediately want to know what the character will do or what will happen next.
- Make the attempts escalate. Each one must reveal something, create a new consequence, or force a more difficult decision rather than merely repeating the same action.
- Keep the personal stakes present through action and reaction. State major causal links clearly, but trust the reader to infer small emotions and motives from behavior and dialogue.
- Use precise verbs, vivid concrete nouns, sensory details, and natural kid dialogue. Description should create atmosphere and reveal character while keeping the scene easy to picture.
- Include moments of delight: use gentle humor, wonder, tension, or an unexpected observation that fits the existing premise.
- Let the theme grow from the events. Do NOT state the lesson (no "the moral was...", no "from that day on...").

STANDALONE PREMISE AND CLARITY
- The story must make complete sense with no outside context, assumed series knowledge, unexplained history, or sequel setup.
- In the opening, plainly establish who the main character is, where they are, what they want, and what immediate obstacle stands in the way. If the approved plan has an unusual element, explain its complete rule in one plain sentence when it first appears.
- Keep the goal visible through what the character notices, says, and does; do not mechanically repeat it.
- Use familiar real-world cause and effect. Never require the reader to memorize a term before understanding why it matters.
- Every named concept and world detail must directly support the main character's central goal, obstacle, choice, or resolution. Remove anything merely decorative that increases what the reader must track.
- End by plainly showing how the main character's action solved or changed the opening problem. After that concrete resolution, a brief resonant image, callback, or memorable line is welcome when its literal meaning remains clear.
- Before returning, verify that this sentence accurately captures the whole story: "[Character] wants ___, but ___, so they must ___." If it does not, revise the prose to match the supplied plan.

NARRATIVE LOAD FOR THIS TIER
Use one main character and one helper, one concrete goal, one main obstacle, two escalating attempts, and no subplot. The setting may be distinctive or imaginative when its one essential fact is immediately clear. Build engagement through humor, suspense, sensory detail, an emotionally important stake, and one logical surprise rather than through lore. Establish the goal and obstacle within the first 2-3 sentences and resolve them clearly.

LENGTH IS A HARD LIMIT: the story MUST be between 400 and 650 words total (aim for 500). Never exceed 650 words. Count the words and trim before returning.

READING LEVEL: write for grade 3. Sentence style: a mix of short and medium-length sentences, with occasional simple compound sentences for rhythm. Vocabulary target: 6-8 concrete, high-utility Tier 2 words, especially vivid verbs and precise nouns, supported by strong context clues.

PARAGRAPHS
- Most paragraphs are 3-5 sentences that blend dialogue, action, and description. Do NOT start a new paragraph after every sentence or line of dialogue.
- Use a one-sentence paragraph only for a big surprise, discovery, or emotional beat.
- One title only. No headings like "Beginning", "Vocabulary", or "Moral".

VOCABULARY
- Follow the tier vocabulary target exactly. Favor vivid verbs, precise nouns, and expressive adjectives that improve the prose. Avoid padding candidateVocab with ordinary words a reader at this tier already knows.
- Make every challenging word understandable from action, contrast, dialogue, or a nearby clue; do not define, bold, or list words inside the prose. List the strongest candidates in candidateVocab.

SAFETY: age-appropriate. Suspense or mild tension is fine, but no violence, horror, scary villains, death, romance, profanity, or politics — the reader should always feel safe.

ILLUSTRATIONS (you are also the art director)
- Define a consistent visual style and character looks, then write 3 illustration prompts (1 cover + 2 scenes) that reuse those exact descriptions. Each scene's afterParagraph is the 0-based index of the paragraph it follows; the cover uses -1.
Return only JSON with this shape:
{
  "title": string,
  "hook": string,
  "genre": string,
  "theme": string,
  "paragraphs": string[],
  "candidateVocab": string[],
  "artDirection": { "style": string, "characters": [{ "name": string, "look": string }], "setting": string },
  "images": [{ "role": "cover"|"scene", "afterParagraph": number, "prompt": string, "alt": string }]
}

The hook is one intriguing, spoiler-free sentence for a story preview.

User prompt

Genre: lost-and-found mystery
Theme: inclusion
Approved plan (follow exactly; do not add story concepts):
{"premise":"Lina chases Theo's vanished name button across a glass-bottom boat so the shy new boy is called by his real name.","mainCharacter":"Lina","supportingCharacters":["Theo"],"setting":"On a rocking glass-bottom boat, fish flash under the floor while dropped crumbs slide toward a tiny deck drain.","goal":"Lina must find Theo's button before the boat docks and everyone leaves still calling him \"new kid.\"","obstacle":"The boat rocks, strangers shuffle, and the round button keeps slipping into places Lina cannot reach.","steps":["Lina crawls under the sticky snack bench, finds only the bent pin back, and realizes the button was pulled loose.","Theo spots a blue thread snagged on a life jacket, leading them to the deck drain as the boat tilts.","The button gleams below the grate, but Lina's fingers only shove it deeper."],"choice":"Lina can poke blindly or invite Theo to guide her hand while she hooks it with the bent pin.","outcome":"Working together, they hook the button with the bent pin; Theo wears it as Lina calls him by name to everyone.","unusualElement":null}

Words and questions model

Attempt 1 · deepseek/deepseek-v4-flash

System prompt

You create vocabulary and reading-comprehension materials for grade 3 readers from one finished story.

First choose 5-10 vocabulary words that actually appear in the story and match this tier target: 6-8 concrete, high-utility Tier 2 words, especially vivid verbs and precise nouns, supported by strong context clues. Favor useful Tier 2 words, vivid verbs, precise nouns, and expressive adjectives. Reject basic words a grade 3 reader likely knows already, and choose varied words rather than near-synonyms. Every selected word must be supported naturally by context so a reader can infer its meaning. For each word provide: word, pos, a kid-friendly definition (<= 140 characters), an exampleFromStory copied verbatim from the story text, synonyms, and antonyms.

Then produce 5-8 questions using that vocabulary and the story: 2 literal, 2 inferential, 1 vocabulary-in-context about one of the selected words, 1 theme, and 0-2 extras. Give each question a unique id, a type (literal | inferential | vocabulary-in-context | theme | extra), the question text, the answer, a short explanation grounded in the story, optional multiple-choice choices, and a rubric.

Write each rubric before imagining any student answer: mustInclude (1-3 concepts required for full credit), niceToHave (0-2 extras), commonWrongPatterns (0-3 misconceptions).

Return only JSON: { "vocabulary": [{ "word": string, "pos": string, "definition": string, "exampleFromStory": string, "synonyms": string[], "antonyms": string[] }], "questions": [{ "id": string, "type": string, "question": string, "answer": string, "explanation": string, "choices"?: string[], "rubric": { "mustInclude": string[], "niceToHave": string[], "commonWrongPatterns": string[] } }] }.

User prompt

Candidate vocabulary (hint): vanished, shuffled, crouched, snagged, tilted, gleamed, grate, guide

Story:
The blue name button shot across the glass floor like a tiny hockey puck. Lina lunged, but the boat rocked, and the button vanished between stomping shoes. She was on a glass-bottom boat with Theo, the shy new boy, and she had to find his button before the boat docked. Without it, everyone would leave still calling him "new kid."

Under Lina's palms, silver fish flashed below the floor. Above her, people shuffled for a better look, and cracker crumbs slid toward a tiny deck drain. Theo pressed one hand to his shirt where the button had been. "It's okay," he said, so softly Lina almost missed it. Lina frowned. "It is not okay, Theo. That's your name."

She grabbed the rail and crouched low. The boat dipped, and her knees squeaked on the damp floor. "Maybe it rolled under the snack bench," she said. The bench smelled like orange peels and peanut butter, and one sticky napkin clung to Lina's sleeve like a sad jellyfish.

Lina crawled under the bench anyway. Her fingers searched around crumbs, cup lids, and one raisin that looked too old to trust. At last she pinched something metal. "Found it!" she cried, then stopped. It was only the bent pin back, twisted like a tiny silver elbow. Theo leaned closer. "So the button got pulled loose."

Just then the boat tilted, and a blue thread fluttered from a red life jacket near the aisle. Theo pointed. "That matches my button." Lina followed the thread with her eyes. It was snagged on the life jacket strap, then stretched toward the deck drain where crumbs were gathering in a nervous pile. The button had not just rolled away. It had been dragged by the thread.

They hurried to the drain as the boat rocked again. Lina lay flat and peered through the grate. There, below the little squares of metal, the button gleamed blue in a dark puddle. "I can reach it," Lina said. She slid two fingers through the grate, but the button slipped sideways. Her fingertip shoved it deeper with a soft plink.

Theo sucked in a breath. The dock bell clanged outside, close and loud. Lina held up the bent pin back. She could poke blindly and maybe push the button out of sight forever. Or she could ask Theo, who was already looking through the grate from the best angle. "Can you guide my hand?" Lina asked.

Theo blinked, then nodded. "Left a little. Stop. Now down." Lina moved the bent pin slowly, letting his quiet voice steer her. The boat rocked, and a crumb bounced onto her nose, but she did not laugh until Theo whispered, "Hook it now." The pin caught the button's edge. Together they lifted until the blue circle popped against the grate.

Lina pinched it free and wiped it on her shorts. The letters still showed: THEO. The boat bumped the dock just as she fixed the bent pin enough to fasten the button to his shirt. People began to stand, bags thumping and shoes squeaking. Lina raised her voice so the nearest rows could hear. "This is Theo. He found the clue that saved his button." Theo touched the blue circle and smiled at the fish flashing under his feet.

Image model

Cover · google/gemini-2.5-flash-image

Prompt

Warm watercolor and soft ink children's book style, bright natural light, gentle humor, clear expressions, rounded shapes, and easy-to-read details. Setting: A rocking glass-bottom boat with clear floor panels showing silver fish below, a sticky snack bench, red life jackets, scattered cracker crumbs, a tiny deck drain, metal railings, and a dock nearby.. Characters — Lina: Lina is an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers.; Theo: Theo is a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, gray sneakers, and a blue name button that says THEO when found.. Scene: Cover art in warm watercolor and soft ink children's book style. Show Lina, an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers, lunging across the clear glass floor of a rocking boat. Beside her is Theo, a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, and gray sneakers, touching the empty spot on his shirt. Silver fish flash below the glass floor, cracker crumbs slide toward a tiny deck drain, and a small blue name button is just out of reach. Gentle humor, bright light, clear expressions. Compose as a wide 16:9 landscape scene. Keep important characters and story details comfortably inside the frame, away from the extreme edges. Style: richly detailed, soft painterly watercolor children's-book illustration with warm lighting, expressive faces, depth, and a cozy, magical feel — polished, publication-quality. Cheerful and friendly for ages 8-10. Safe and age-appropriate. No text, words, or letters in the image.

Scene 1 · google/gemini-2.5-flash-image

Prompt

Warm watercolor and soft ink children's book style, bright natural light, gentle humor, clear expressions, rounded shapes, and easy-to-read details. Setting: A rocking glass-bottom boat with clear floor panels showing silver fish below, a sticky snack bench, red life jackets, scattered cracker crumbs, a tiny deck drain, metal railings, and a dock nearby.. Characters — Lina: Lina is an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers.; Theo: Theo is a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, gray sneakers, and a blue name button that says THEO when found.. Scene: Scene art in warm watercolor and soft ink children's book style. Under a sticky snack bench on the glass-bottom boat, Lina, an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers, reaches through crumbs and cup lids to pick up a bent silver pin back. Theo, a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, and gray sneakers, kneels nearby and watches with worried hope. Fish shimmer below the glass floor; a napkin sticks to Lina's sleeve like a jellyfish. Compose as a wide 16:9 landscape scene. Keep important characters and story details comfortably inside the frame, away from the extreme edges. Style: richly detailed, soft painterly watercolor children's-book illustration with warm lighting, expressive faces, depth, and a cozy, magical feel — polished, publication-quality. Cheerful and friendly for ages 8-10. Safe and age-appropriate. No text, words, or letters in the image.

Scene 2 · google/gemini-2.5-flash-image

Prompt

Warm watercolor and soft ink children's book style, bright natural light, gentle humor, clear expressions, rounded shapes, and easy-to-read details. Setting: A rocking glass-bottom boat with clear floor panels showing silver fish below, a sticky snack bench, red life jackets, scattered cracker crumbs, a tiny deck drain, metal railings, and a dock nearby.. Characters — Lina: Lina is an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers.; Theo: Theo is a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, gray sneakers, and a blue name button that says THEO when found.. Scene: Scene art in warm watercolor and soft ink children's book style. Near the tiny deck drain on the rocking glass-bottom boat, Lina, an energetic 8-year-old girl with warm brown skin, dark curly hair in two puff ponytails, a yellow rain jacket, teal shorts, and red sneakers, carefully hooks the blue THEO name button with a bent pin through the metal grate. Theo, a shy 8-year-old boy with light tan skin, straight black hair, round glasses, a green hoodie, navy shorts, and gray sneakers, lies beside her and guides her hand. Red life jackets hang nearby, crumbs gather at the drain, and silver fish flash under the floor. Compose as a wide 16:9 landscape scene. Keep important characters and story details comfortably inside the frame, away from the extreme edges. Style: richly detailed, soft painterly watercolor children's-book illustration with warm lighting, expressive faces, depth, and a cozy, magical feel — polished, publication-quality. Cheerful and friendly for ages 8-10. Safe and age-appropriate. No text, words, or letters in the image.

Speech model

Story narration · x-ai/grok-voice-tts-1.0

Prompt

Theo's Button

The blue name button shot across the glass floor like a tiny hockey puck. Lina lunged, but the boat rocked, and the button vanished between stomping shoes. She was on a glass-bottom boat with Theo, the shy new boy, and she had to find his button before the boat docked. Without it, everyone would leave still calling him "new kid."

Under Lina's palms, silver fish flashed below the floor. Above her, people shuffled for a better look, and cracker crumbs slid toward a tiny deck drain. Theo pressed one hand to his shirt where the button had been. "It's okay," he said, so softly Lina almost missed it. Lina frowned. "It is not okay, Theo. That's your name."

She grabbed the rail and crouched low. The boat dipped, and her knees squeaked on the damp floor. "Maybe it rolled under the snack bench," she said. The bench smelled like orange peels and peanut butter, and one sticky napkin clung to Lina's sleeve like a sad jellyfish.

Lina crawled under the bench anyway. Her fingers searched around crumbs, cup lids, and one raisin that looked too old to trust. At last she pinched something metal. "Found it!" she cried, then stopped. It was only the bent pin back, twisted like a tiny silver elbow. Theo leaned closer. "So the button got pulled loose."

Just then the boat tilted, and a blue thread fluttered from a red life jacket near the aisle. Theo pointed. "That matches my button." Lina followed the thread with her eyes. It was snagged on the life jacket strap, then stretched toward the deck drain where crumbs were gathering in a nervous pile. The button had not just rolled away. It had been dragged by the thread.

They hurried to the drain as the boat rocked again. Lina lay flat and peered through the grate. There, below the little squares of metal, the button gleamed blue in a dark puddle. "I can reach it," Lina said. She slid two fingers through the grate, but the button slipped sideways. Her fingertip shoved it deeper with a soft plink.

Theo sucked in a breath. The dock bell clanged outside, close and loud. Lina held up the bent pin back. She could poke blindly and maybe push the button out of sight forever. Or she could ask Theo, who was already looking through the grate from the best angle. "Can you guide my hand?" Lina asked.

Theo blinked, then nodded. "Left a little. Stop. Now down." Lina moved the bent pin slowly, letting his quiet voice steer her. The boat rocked, and a crumb bounced onto her nose, but she did not laugh until Theo whispered, "Hook it now." The pin caught the button's edge. Together they lifted until the blue circle popped against the grate.

Lina pinched it free and wiped it on her shorts. The letters still showed: THEO. The boat bumped the dock just as she fixed the bent pin enough to fasten the button to his shirt. People began to stand, bags thumping and shoes squeaking. Lina raised her voice so the nearest rows could hear. "This is Theo. He found the clue that saved his button." Theo touched the blue circle and smiled at the fish flashing under his feet.
Discover the wordsExplore the vivid words inside this story.Let's go →