{
 "name": "Yui library",
 "version": 2,
 "about": "Every screen preset, saved flow and ready-made screen an agent can send to the Yui app. Send the yl lines as your reply; the app draws them. A flow's source is its Mermaid. A flow with a base is a variant: its yl names the base and says only what changes. A screen is a whole reply built from presets. An item with app \"coming\" plays in the playground, but the app does not draw it yet, so do not send it to a phone. Search by name, intent, purpose or tags, or ask the search endpoint.",
 "search": "https://www.yuigui.com/api/library?q=",
 "spec": "https://www.yuigui.com/yl",
 "page": "https://www.yuigui.com/developers/library",
 "items": [
  {
   "name": "timer",
   "kind": "preset",
   "purpose": "An interval timer with rounds, a ring and beeps. Opens full screen.",
   "intents": [
    "time a workout",
    "run an interval timer",
    "count down rest"
   ],
   "tags": [
    "workout",
    "rest",
    "countdown",
    "stopwatch",
    "tabata",
    "pomodoro"
   ],
   "yl": "timer 40/20x8 Tabata +inline",
   "docs": "https://www.yuigui.com/yl#timer",
   "playground": "https://www.yuigui.com/playground?yl=timer%2040%2F20x8%20Tabata%20%2Binline"
  },
  {
   "name": "ask",
   "kind": "preset",
   "purpose": "Yes or no, or two to four big buttons. The fastest way to get a decision.",
   "intents": [
    "ask a yes or no question",
    "confirm before acting",
    "get a quick decision"
   ],
   "tags": [
    "confirm",
    "yes no",
    "buttons",
    "decision",
    "approve"
   ],
   "yl": "say \"Set 3 done. 225 x 5, bar speed looked good.\"\nask \"Log this set?\" \"Log it\"|\"Redo it\"",
   "docs": "https://www.yuigui.com/yl#ask",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Set%203%20done.%20225%20x%205%2C%20bar%20speed%20looked%20good.%22%0Aask%20%22Log%20this%20set%3F%22%20%22Log%20it%22%7C%22Redo%20it%22"
  },
  {
   "name": "choose",
   "kind": "preset",
   "purpose": "Pick exactly one. Add +other for a typed answer.",
   "intents": [
    "ask them to pick one option",
    "run a poll",
    "offer a menu"
   ],
   "tags": [
    "single choice",
    "options",
    "radio",
    "poll",
    "menu"
   ],
   "yl": "choose \"What are we training today?\" Push|Pull|Legs +other",
   "docs": "https://www.yuigui.com/yl#choose",
   "playground": "https://www.yuigui.com/playground?yl=choose%20%22What%20are%20we%20training%20today%3F%22%20Push%7CPull%7CLegs%20%2Bother"
  },
  {
   "name": "pick",
   "kind": "preset",
   "purpose": "Pick any number, then send. Picks stay open to change.",
   "intents": [
    "let them choose several",
    "collect preferences",
    "multi select from a list"
   ],
   "tags": [
    "multi select",
    "checkboxes",
    "options",
    "tags",
    "filters"
   ],
   "yl": "pick \"What gear do you have?\" Dumbbells|Bench|Bands|\"Pull-up bar\"|Kettlebell +other",
   "docs": "https://www.yuigui.com/yl#pick",
   "playground": "https://www.yuigui.com/playground?yl=pick%20%22What%20gear%20do%20you%20have%3F%22%20Dumbbells%7CBench%7CBands%7C%22Pull-up%20bar%22%7CKettlebell%20%2Bother"
  },
  {
   "name": "slide",
   "kind": "preset",
   "purpose": "A slider for a number in a range, with words on both ends.",
   "intents": [
    "ask for a number",
    "rate something on a scale",
    "ask how much"
   ],
   "tags": [
    "number",
    "rating",
    "scale",
    "range",
    "budget",
    "how much"
   ],
   "yl": "slide \"How much do you know about AI?\" 1-5 \"Brand new\"|\"I run agents\"",
   "docs": "https://www.yuigui.com/yl#slide",
   "playground": "https://www.yuigui.com/playground?yl=slide%20%22How%20much%20do%20you%20know%20about%20AI%3F%22%201-5%20%22Brand%20new%22%7C%22I%20run%20agents%22"
  },
  {
   "name": "form",
   "kind": "preset",
   "purpose": "Several typed fields with one submit: text, email, date, voice, photo and more.",
   "intents": [
    "collect details",
    "sign someone up",
    "ask several questions at once"
   ],
   "tags": [
    "fields",
    "input",
    "signup",
    "intake",
    "contact",
    "details"
   ],
   "yl": "say \"Nice to meet you. A couple of quick ones.\"\nform name:text! email:email goal:voice submit=\"Next\"",
   "docs": "https://www.yuigui.com/yl#form",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Nice%20to%20meet%20you.%20A%20couple%20of%20quick%20ones.%22%0Aform%20name%3Atext!%20email%3Aemail%20goal%3Avoice%20submit%3D%22Next%22"
  },
  {
   "name": "list",
   "kind": "preset",
   "purpose": "A titled list. With +check every item gets a checkbox.",
   "intents": [
    "show a checklist",
    "give a to-do list",
    "list steps or items"
   ],
   "tags": [
    "checklist",
    "todo",
    "items",
    "shopping",
    "steps"
   ],
   "yl": "list Today \"Back squat 5x5\" \"Bench 5x5\" \"Barbell row 3x10\" \"Plank 3x60s\" +check",
   "docs": "https://www.yuigui.com/yl#list",
   "playground": "https://www.yuigui.com/playground?yl=list%20Today%20%22Back%20squat%205x5%22%20%22Bench%205x5%22%20%22Barbell%20row%203x10%22%20%22Plank%203x60s%22%20%2Bcheck"
  },
  {
   "name": "table",
   "kind": "preset",
   "purpose": "Rows and columns, with units and tap-to-sort.",
   "intents": [
    "show rows and columns",
    "compare options side by side",
    "show a log"
   ],
   "tags": [
    "grid",
    "rows",
    "spreadsheet",
    "compare",
    "log",
    "sort"
   ],
   "yl": "table Macros Food|Cal|Protein \"Eggs|140|12\" \"Oats|300|10\" \"Chicken|280|53\" \"Greek yogurt|150|20\" units=||g +sort",
   "docs": "https://www.yuigui.com/yl#table",
   "playground": "https://www.yuigui.com/playground?yl=table%20Macros%20Food%7CCal%7CProtein%20%22Eggs%7C140%7C12%22%20%22Oats%7C300%7C10%22%20%22Chicken%7C280%7C53%22%20%22Greek%20yogurt%7C150%7C20%22%20units%3D%7C%7Cg%20%2Bsort"
  },
  {
   "name": "card",
   "kind": "preset",
   "purpose": "A card with a picture, a line of text and one button that does something.",
   "intents": [
    "show a result with one button",
    "preview a link",
    "summarize one thing"
   ],
   "tags": [
    "summary",
    "preview",
    "link",
    "cta",
    "button",
    "result"
   ],
   "yl": "card \"Leg day\" \"Squat, RDL, walking lunges. About 45 minutes.\" sub=\"Thursday\" img=/yl/legday.svg cta=\"Start workout\"",
   "docs": "https://www.yuigui.com/yl#card",
   "playground": "https://www.yuigui.com/playground?yl=card%20%22Leg%20day%22%20%22Squat%2C%20RDL%2C%20walking%20lunges.%20About%2045%20minutes.%22%20sub%3D%22Thursday%22%20img%3D%2Fyl%2Flegday.svg%20cta%3D%22Start%20workout%22"
  },
  {
   "name": "image",
   "kind": "preset",
   "purpose": "One picture. With +edit the person circles what to change.",
   "intents": [
    "show a picture",
    "ask them to mark up a photo",
    "show a generated image"
   ],
   "tags": [
    "photo",
    "picture",
    "markup",
    "annotate",
    "edit",
    "generate"
   ],
   "yl": "image /demo/before_room.jpg +edit \"Circle or box what to change\"",
   "docs": "https://www.yuigui.com/yl#image",
   "playground": "https://www.yuigui.com/playground?yl=image%20%2Fdemo%2Fbefore_room.jpg%20%2Bedit%20%22Circle%20or%20box%20what%20to%20change%22"
  },
  {
   "name": "camera",
   "kind": "preset",
   "purpose": "Opens the camera for one photo that goes back to the agent. +scan for documents.",
   "intents": [
    "ask for a photo",
    "scan a receipt or document",
    "take a picture"
   ],
   "tags": [
    "photo",
    "capture",
    "scan",
    "receipt",
    "document",
    "upload"
   ],
   "yl": "camera \"Snap your plate\"",
   "docs": "https://www.yuigui.com/yl#camera",
   "playground": "https://www.yuigui.com/playground?yl=camera%20%22Snap%20your%20plate%22"
  },
  {
   "name": "mic",
   "kind": "preset",
   "purpose": "A big talk button. Speech comes back as text.",
   "intents": [
    "let them talk instead of type",
    "take a voice note",
    "dictate an answer"
   ],
   "tags": [
    "voice",
    "speech",
    "dictate",
    "talk",
    "transcript",
    "notes"
   ],
   "yl": "mic \"What did you eat today?\"",
   "docs": "https://www.yuigui.com/yl#mic",
   "playground": "https://www.yuigui.com/playground?yl=mic%20%22What%20did%20you%20eat%20today%3F%22"
  },
  {
   "name": "gallery",
   "kind": "preset",
   "purpose": "Photos and videos in a row, a grid, a feed or a coverflow. +pick to choose favorites.",
   "intents": [
    "show several photos",
    "let them pick favorite images",
    "show a portfolio"
   ],
   "tags": [
    "photos",
    "carousel",
    "grid",
    "album",
    "choose images",
    "portfolio"
   ],
   "yl": "say \"Six shots from the studio. Pick up to three.\"\ngallery /demo/g1.jpg /demo/g2.jpg /demo/g3.jpg /demo/g4.jpg /demo/g5.jpg /demo/g6.jpg layout=grid +pick max=3 submit=\"Use these\"",
   "docs": "https://www.yuigui.com/yl#gallery",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Six%20shots%20from%20the%20studio.%20Pick%20up%20to%20three.%22%0Agallery%20%2Fdemo%2Fg1.jpg%20%2Fdemo%2Fg2.jpg%20%2Fdemo%2Fg3.jpg%20%2Fdemo%2Fg4.jpg%20%2Fdemo%2Fg5.jpg%20%2Fdemo%2Fg6.jpg%20layout%3Dgrid%20%2Bpick%20max%3D3%20submit%3D%22Use%20these%22"
  },
  {
   "name": "video",
   "kind": "preset",
   "purpose": "One video with controls. With no URL it is a placeholder for one to generate.",
   "intents": [
    "play a video",
    "review a clip",
    "share a reel"
   ],
   "tags": [
    "clip",
    "reel",
    "movie",
    "review",
    "playback"
   ],
   "yl": "video /demo/reel.mp4 \"Launch reel, first cut\" poster=/demo/reel-poster.jpg\nask \"Ship this cut?\" Ship|\"One more pass\"",
   "docs": "https://www.yuigui.com/yl#video",
   "playground": "https://www.yuigui.com/playground?yl=video%20%2Fdemo%2Freel.mp4%20%22Launch%20reel%2C%20first%20cut%22%20poster%3D%2Fdemo%2Freel-poster.jpg%0Aask%20%22Ship%20this%20cut%3F%22%20Ship%7C%22One%20more%20pass%22"
  },
  {
   "name": "compare",
   "kind": "preset",
   "purpose": "Before and after: a drag slider, side by side or tap to toggle, with highlights.",
   "intents": [
    "show before and after",
    "compare two versions",
    "show an edit result"
   ],
   "tags": [
    "before after",
    "diff",
    "a/b",
    "slider",
    "redesign",
    "edit result"
   ],
   "yl": "compare /demo/before_mug.jpg /demo/after_mug.jpg \"Background swap\" notes=\"Same mug, new scene\"",
   "docs": "https://www.yuigui.com/yl#compare",
   "playground": "https://www.yuigui.com/playground?yl=compare%20%2Fdemo%2Fbefore_mug.jpg%20%2Fdemo%2Fafter_mug.jpg%20%22Background%20swap%22%20notes%3D%22Same%20mug%2C%20new%20scene%22"
  },
  {
   "name": "storyboard",
   "kind": "preset",
   "purpose": "Frames in order, with captions. +reorder lets the person drag them.",
   "intents": [
    "plan a video shot by shot",
    "show frames in order",
    "let them reorder scenes"
   ],
   "tags": [
    "frames",
    "script",
    "shot list",
    "video plan",
    "reorder",
    "social post"
   ],
   "yl": "storyboard \"Launch reel\" /demo/s1.jpg|\"Quiet morning\" /demo/s2.jpg|\"The old chipped mug\" /demo/s3.jpg|\"Unwrap the new one\" /demo/s4.jpg|\"First sip, logo\" +reorder",
   "docs": "https://www.yuigui.com/yl#storyboard",
   "playground": "https://www.yuigui.com/playground?yl=storyboard%20%22Launch%20reel%22%20%2Fdemo%2Fs1.jpg%7C%22Quiet%20morning%22%20%2Fdemo%2Fs2.jpg%7C%22The%20old%20chipped%20mug%22%20%2Fdemo%2Fs3.jpg%7C%22Unwrap%20the%20new%20one%22%20%2Fdemo%2Fs4.jpg%7C%22First%20sip%2C%20logo%22%20%2Breorder"
  },
  {
   "name": "chart",
   "kind": "preset",
   "purpose": "Line, bar, area, scatter, pie or donut, with error bars and series.",
   "intents": [
    "graph a trend",
    "plot numbers",
    "show a pie or bar chart"
   ],
   "tags": [
    "graph",
    "plot",
    "trend",
    "analytics",
    "pie",
    "bar"
   ],
   "yl": "chart line \"Weight this week\" x=Mon|Tue|Wed|Thu|Fri|Sat|Sun y=181.2|180.6|180.9|179.8|179.4|179.6|178.9 unit=lb",
   "docs": "https://www.yuigui.com/yl#chart",
   "playground": "https://www.yuigui.com/playground?yl=chart%20line%20%22Weight%20this%20week%22%20x%3DMon%7CTue%7CWed%7CThu%7CFri%7CSat%7CSun%20y%3D181.2%7C180.6%7C180.9%7C179.8%7C179.4%7C179.6%7C178.9%20unit%3Dlb"
  },
  {
   "name": "stat",
   "kind": "preset",
   "purpose": "One big number with its change and a sparkline.",
   "intents": [
    "show one key number",
    "report a metric and its change",
    "show a dashboard number"
   ],
   "tags": [
    "kpi",
    "metric",
    "number",
    "dashboard",
    "delta",
    "sparkline"
   ],
   "yl": "stat 178.9lb Weight delta=-2.3 spark=181.2|180.6|180.9|179.8|179.4|179.6|178.9 good=down sub=\"this week\"\nstat 7.4h Sleep delta=+0.6 spark=6.5|6.9|7.1|6.8|7.3|7.6|7.4",
   "docs": "https://www.yuigui.com/yl#stat",
   "playground": "https://www.yuigui.com/playground?yl=stat%20178.9lb%20Weight%20delta%3D-2.3%20spark%3D181.2%7C180.6%7C180.9%7C179.8%7C179.4%7C179.6%7C178.9%20good%3Ddown%20sub%3D%22this%20week%22%0Astat%207.4h%20Sleep%20delta%3D%2B0.6%20spark%3D6.5%7C6.9%7C7.1%7C6.8%7C7.3%7C7.6%7C7.4"
  },
  {
   "name": "math",
   "kind": "preset",
   "purpose": "An equation, typeset. The rest of the line is TeX.",
   "intents": [
    "typeset an equation",
    "show a formula",
    "explain math"
   ],
   "tags": [
    "equation",
    "tex",
    "latex",
    "formula",
    "homework"
   ],
   "yl": "math size=lg x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}",
   "docs": "https://www.yuigui.com/yl#math",
   "playground": "https://www.yuigui.com/playground?yl=math%20size%3Dlg%20x%20%3D%20%5Cfrac%7B-b%20%5Cpm%20%5Csqrt%7Bb%5E2%20-%204ac%7D%7D%7B2a%7D"
  },
  {
   "name": "step",
   "kind": "preset",
   "purpose": "Steps one at a time, with math or a timer. Lines in a row make one stepper.",
   "intents": [
    "walk through steps one at a time",
    "teach a procedure",
    "show a recipe"
   ],
   "tags": [
    "derivation",
    "protocol",
    "recipe",
    "how to",
    "walkthrough",
    "instructions"
   ],
   "yl": "step title=\"Gram stain\" \"Heat-fix the smear. Flood with crystal violet.\" time=1m\nstep \"Rinse gently with water. Flood with iodine.\" time=1m\nstep \"Rinse. Counterstain with safranin.\" time=45s",
   "docs": "https://www.yuigui.com/yl#step",
   "playground": "https://www.yuigui.com/playground?yl=step%20title%3D%22Gram%20stain%22%20%22Heat-fix%20the%20smear.%20Flood%20with%20crystal%20violet.%22%20time%3D1m%0Astep%20%22Rinse%20gently%20with%20water.%20Flood%20with%20iodine.%22%20time%3D1m%0Astep%20%22Rinse.%20Counterstain%20with%20safranin.%22%20time%3D45s"
  },
  {
   "name": "calc",
   "kind": "preset",
   "purpose": "A live formula: sliders for the inputs, the answer and a chart update as they move.",
   "intents": [
    "let them play with a formula",
    "estimate with sliders",
    "what if calculator"
   ],
   "tags": [
    "calculator",
    "formula",
    "sliders",
    "physics",
    "what if",
    "estimate"
   ],
   "yl": "calc \"How far does it fly?\" f=\"R = v^2*sin(2*a)/g\" v=5-40@20m/s a=0-90@30deg g=9.81m/s^2 plot=a unit=m",
   "docs": "https://www.yuigui.com/yl#calc",
   "playground": "https://www.yuigui.com/playground?yl=calc%20%22How%20far%20does%20it%20fly%3F%22%20f%3D%22R%20%3D%20v%5E2*sin(2*a)%2Fg%22%20v%3D5-40%4020m%2Fs%20a%3D0-90%4030deg%20g%3D9.81m%2Fs%5E2%20plot%3Da%20unit%3Dm"
  },
  {
   "name": "deck",
   "kind": "preset",
   "purpose": "Swipeable pages, with quiz questions mixed in.",
   "intents": [
    "present slides",
    "teach a short lesson with a quiz",
    "explain in pages"
   ],
   "tags": [
    "slides",
    "lesson",
    "presentation",
    "onboarding",
    "quiz",
    "story"
   ],
   "yl": "deck \"Writing a first draft\"\npage \"Get it down, then get it right\" body=\"A first draft is for you. Nobody else reads it.\"\npage \"Three rules\" points=\"Write fast, fix later|Leave gaps and keep going|Stop mid-sentence\"\nchoose \"What comes first?\" \"Write it\"|\"Fix it\" answer=\"Write it\"",
   "docs": "https://www.yuigui.com/yl#deck",
   "playground": "https://www.yuigui.com/playground?yl=deck%20%22Writing%20a%20first%20draft%22%0Apage%20%22Get%20it%20down%2C%20then%20get%20it%20right%22%20body%3D%22A%20first%20draft%20is%20for%20you.%20Nobody%20else%20reads%20it.%22%0Apage%20%22Three%20rules%22%20points%3D%22Write%20fast%2C%20fix%20later%7CLeave%20gaps%20and%20keep%20going%7CStop%20mid-sentence%22%0Achoose%20%22What%20comes%20first%3F%22%20%22Write%20it%22%7C%22Fix%20it%22%20answer%3D%22Write%20it%22"
  },
  {
   "name": "page",
   "kind": "preset",
   "purpose": "One page of a deck or a plan: a title, a body, points, a picture.",
   "intents": [
    "add a page to a deck",
    "explain findings",
    "show a section"
   ],
   "tags": [
    "slide",
    "section",
    "findings",
    "explain",
    "read"
   ],
   "yl": "deck \"Build review\"\npage \"What broke\" body=\"Two buttons only took taps on their icon.\" points=\"Gallery X: full 44pt target|Done pill: never covered\"",
   "docs": "https://www.yuigui.com/yl#page",
   "playground": "https://www.yuigui.com/playground?yl=deck%20%22Build%20review%22%0Apage%20%22What%20broke%22%20body%3D%22Two%20buttons%20only%20took%20taps%20on%20their%20icon.%22%20points%3D%22Gallery%20X%3A%20full%2044pt%20target%7CDone%20pill%3A%20never%20covered%22"
  },
  {
   "name": "plan",
   "kind": "preset",
   "purpose": "Pages first, questions after, one Send at the end. Opens full screen.",
   "intents": [
    "run a multi step questionnaire",
    "onboard someone",
    "survey with one submit"
   ],
   "tags": [
    "wizard",
    "intake",
    "questionnaire",
    "multi step",
    "onboarding",
    "survey"
   ],
   "yl": "plan@month \"Your first month\" submit=\"Build my plan\" +inline\nchoose@goal \"What's the goal?\" \"Get stronger\"|\"Lose fat\"|\"Run a 5k\" +other\nslide@days \"Days a week you can train\" 2-6 value=3\npick@gear \"What do you have?\" Dumbbells|Barbell|Bands|\"Just me\"",
   "docs": "https://www.yuigui.com/yl#plan",
   "playground": "https://www.yuigui.com/playground?yl=plan%40month%20%22Your%20first%20month%22%20submit%3D%22Build%20my%20plan%22%20%2Binline%0Achoose%40goal%20%22What's%20the%20goal%3F%22%20%22Get%20stronger%22%7C%22Lose%20fat%22%7C%22Run%20a%205k%22%20%2Bother%0Aslide%40days%20%22Days%20a%20week%20you%20can%20train%22%202-6%20value%3D3%0Apick%40gear%20%22What%20do%20you%20have%3F%22%20Dumbbells%7CBarbell%7CBands%7C%22Just%20me%22"
  },
  {
   "name": "project",
   "kind": "preset",
   "purpose": "A project card: status, progress, facts, next steps, and a button that reopens its plan.",
   "intents": [
    "show project status",
    "track progress",
    "reopen a plan"
   ],
   "tags": [
    "status",
    "progress",
    "tracker",
    "summary",
    "resume"
   ],
   "yl": "project \"Kiln & Co. website\" status=Planning progress=40 img=/demo/site_after_hero.jpg body=\"A small site for a pottery studio.\" facts=\"Kind: Local business|Pages: Home, Classes, Visit\" next=\"Pick a template|Write the class copy\"",
   "docs": "https://www.yuigui.com/yl#project",
   "playground": "https://www.yuigui.com/playground?yl=project%20%22Kiln%20%26%20Co.%20website%22%20status%3DPlanning%20progress%3D40%20img%3D%2Fdemo%2Fsite_after_hero.jpg%20body%3D%22A%20small%20site%20for%20a%20pottery%20studio.%22%20facts%3D%22Kind%3A%20Local%20business%7CPages%3A%20Home%2C%20Classes%2C%20Visit%22%20next%3D%22Pick%20a%20template%7CWrite%20the%20class%20copy%22"
  },
  {
   "name": "narrate",
   "kind": "preset",
   "purpose": "The agent reads a set of pages aloud and turns them as it goes.",
   "intents": [
    "read pages aloud",
    "give a spoken tour",
    "walk through changes by voice"
   ],
   "tags": [
    "voice over",
    "walkthrough",
    "read aloud",
    "tour",
    "presentation"
   ],
   "yl": "narrate \"What changed on the site\" voice=agent\ncompare /demo/site_before_hero.jpg /demo/site_after_hero.jpg \"The hero\" notes=\"Headline says what you get\" say=\"First, the hero. The new headline says what you will make.\"\ncompare /demo/site_before_classes.jpg /demo/site_after_classes.jpg \"Classes\" notes=\"Three cards with a photo and a price\" say=\"Next, classes. A wall of text became three cards.\"",
   "docs": "https://www.yuigui.com/yl#narrate",
   "playground": "https://www.yuigui.com/playground?yl=narrate%20%22What%20changed%20on%20the%20site%22%20voice%3Dagent%0Acompare%20%2Fdemo%2Fsite_before_hero.jpg%20%2Fdemo%2Fsite_after_hero.jpg%20%22The%20hero%22%20notes%3D%22Headline%20says%20what%20you%20get%22%20say%3D%22First%2C%20the%20hero.%20The%20new%20headline%20says%20what%20you%20will%20make.%22%0Acompare%20%2Fdemo%2Fsite_before_classes.jpg%20%2Fdemo%2Fsite_after_classes.jpg%20%22Classes%22%20notes%3D%22Three%20cards%20with%20a%20photo%20and%20a%20price%22%20say%3D%22Next%2C%20classes.%20A%20wall%20of%20text%20became%20three%20cards.%22"
  },
  {
   "name": "timeline",
   "kind": "preset",
   "purpose": "What is done, what is happening now, what comes next.",
   "intents": [
    "show what is done and what is next",
    "show a roadmap",
    "plan an itinerary"
   ],
   "tags": [
    "history",
    "roadmap",
    "itinerary",
    "status",
    "schedule",
    "changelog"
   ],
   "yl": "timeline \"Lisbon, 4 days\" mark=\"Right now\"\ndone \"Tram 28 and the castle\" at=Fri\nnow \"Time Out Market for lunch\" at=12:30 sub=\"10 min walk\"\nnext \"Sunset at Miradouro da Graca\" at=19:40",
   "docs": "https://www.yuigui.com/yl#timeline",
   "playground": "https://www.yuigui.com/playground?yl=timeline%20%22Lisbon%2C%204%20days%22%20mark%3D%22Right%20now%22%0Adone%20%22Tram%2028%20and%20the%20castle%22%20at%3DFri%0Anow%20%22Time%20Out%20Market%20for%20lunch%22%20at%3D12%3A30%20sub%3D%2210%20min%20walk%22%0Anext%20%22Sunset%20at%20Miradouro%20da%20Graca%22%20at%3D19%3A40"
  },
  {
   "name": "done",
   "kind": "preset",
   "purpose": "A finished item in a timeline.",
   "intents": [
    "mark an item finished in a timeline"
   ],
   "tags": [
    "timeline",
    "shipped",
    "complete",
    "history"
   ],
   "yl": "timeline \"This week\"\ndone \"Saved screens\" at=\"Sep 24\"\ndone \"Links open Safari\" at=\"Sep 25\"",
   "docs": "https://www.yuigui.com/yl#done-now-next",
   "playground": "https://www.yuigui.com/playground?yl=timeline%20%22This%20week%22%0Adone%20%22Saved%20screens%22%20at%3D%22Sep%2024%22%0Adone%20%22Links%20open%20Safari%22%20at%3D%22Sep%2025%22"
  },
  {
   "name": "now",
   "kind": "preset",
   "purpose": "The item happening right now in a timeline.",
   "intents": [
    "show what is happening now in a timeline"
   ],
   "tags": [
    "timeline",
    "current",
    "in progress",
    "live"
   ],
   "yl": "timeline \"Today\"\ndone \"Warm-up\" at=9:00\nnow \"Main lift\" at=9:15 sub=\"Back squat 5x5\"",
   "docs": "https://www.yuigui.com/yl#done-now-next",
   "playground": "https://www.yuigui.com/playground?yl=timeline%20%22Today%22%0Adone%20%22Warm-up%22%20at%3D9%3A00%0Anow%20%22Main%20lift%22%20at%3D9%3A15%20sub%3D%22Back%20squat%205x5%22"
  },
  {
   "name": "next",
   "kind": "preset",
   "purpose": "A coming item in a timeline.",
   "intents": [
    "show what comes next in a timeline"
   ],
   "tags": [
    "timeline",
    "upcoming",
    "planned",
    "queue"
   ],
   "yl": "timeline \"Up next\"\nnow \"Reply to a message\"\nnext \"Each agent's home\"\nnext \"Agent controls in the drawer\"",
   "docs": "https://www.yuigui.com/yl#done-now-next",
   "playground": "https://www.yuigui.com/playground?yl=timeline%20%22Up%20next%22%0Anow%20%22Reply%20to%20a%20message%22%0Anext%20%22Each%20agent's%20home%22%0Anext%20%22Agent%20controls%20in%20the%20drawer%22"
  },
  {
   "name": "sketch",
   "kind": "preset",
   "purpose": "A quick drawing of a screen: strike what goes, highlight what stays.",
   "intents": [
    "mock up a screen",
    "wireframe a layout",
    "mark what to cut and keep"
   ],
   "tags": [
    "wireframe",
    "mockup",
    "before after",
    "feedback",
    "layout",
    "redline"
   ],
   "yl": "sketch \"Build ready\" frame=phone\nrow \"Build 97 is ready\" +hi note=\"the headline\"\nrow \"Got it\" +button +x note=\"does nothing, cut it\"\nrow \"Install\" +button +hi note=\"does the thing\"",
   "docs": "https://www.yuigui.com/yl#sketch",
   "playground": "https://www.yuigui.com/playground?yl=sketch%20%22Build%20ready%22%20frame%3Dphone%0Arow%20%22Build%2097%20is%20ready%22%20%2Bhi%20note%3D%22the%20headline%22%0Arow%20%22Got%20it%22%20%2Bbutton%20%2Bx%20note%3D%22does%20nothing%2C%20cut%20it%22%0Arow%20%22Install%22%20%2Bbutton%20%2Bhi%20note%3D%22does%20the%20thing%22"
  },
  {
   "name": "row",
   "kind": "preset",
   "purpose": "One line of a sketch: text, a button, struck out or highlighted.",
   "intents": [
    "add a line to a sketch",
    "strike or highlight part of a mockup"
   ],
   "tags": [
    "sketch",
    "line",
    "wireframe",
    "markup"
   ],
   "yl": "sketch \"Home\" frame=window\nrow \"Wheel-thrown mugs, made in Asheville\" +hi note=\"keep\"\nrow \"Welcome to our website!\" +x note=\"says nothing\"\nrow \"Book a class\" +button +hi",
   "docs": "https://www.yuigui.com/yl#row-after",
   "playground": "https://www.yuigui.com/playground?yl=sketch%20%22Home%22%20frame%3Dwindow%0Arow%20%22Wheel-thrown%20mugs%2C%20made%20in%20Asheville%22%20%2Bhi%20note%3D%22keep%22%0Arow%20%22Welcome%20to%20our%20website!%22%20%2Bx%20note%3D%22says%20nothing%22%0Arow%20%22Book%20a%20class%22%20%2Bbutton%20%2Bhi"
  },
  {
   "name": "after",
   "kind": "preset",
   "purpose": "Splits a sketch into before and after.",
   "intents": [
    "show a sketch before and after"
   ],
   "tags": [
    "sketch",
    "before after",
    "diff",
    "redesign"
   ],
   "yl": "sketch \"Where it landed\" frame=bubble before=\"Before\"\nrow \"Parked YUI-83 in the backlog\" +x note=\"an id means nothing\"\nafter \"Now\"\nrow \"Parked the drawing card in the backlog\" +hi note=\"plain words\"",
   "docs": "https://www.yuigui.com/yl#row-after",
   "playground": "https://www.yuigui.com/playground?yl=sketch%20%22Where%20it%20landed%22%20frame%3Dbubble%20before%3D%22Before%22%0Arow%20%22Parked%20YUI-83%20in%20the%20backlog%22%20%2Bx%20note%3D%22an%20id%20means%20nothing%22%0Aafter%20%22Now%22%0Arow%20%22Parked%20the%20drawing%20card%20in%20the%20backlog%22%20%2Bhi%20note%3D%22plain%20words%22"
  },
  {
   "name": "shapes",
   "kind": "preset",
   "purpose": "A small moving diagram: circles, boxes and arrows that come on one by one, with a caption.",
   "intents": [
    "draw a diagram of an idea",
    "explain how parts connect",
    "animate a concept"
   ],
   "tags": [
    "diagram",
    "explain",
    "idea",
    "flowchart",
    "animation",
    "concept"
   ],
   "yl": "shapes \"How an ask reaches the app\" caption=\"You ask, it lands on the board, a lane builds it, and it ships.\"\nshape circle You +grow\nshape arrow\nshape box Board +fill\nshape arrow\nshape pill Lane +pulse\nshape arrow label=ships\nshape circle Phone tone=mint",
   "docs": "https://www.yuigui.com/yl#shapes",
   "playground": "https://www.yuigui.com/playground?yl=shapes%20%22How%20an%20ask%20reaches%20the%20app%22%20caption%3D%22You%20ask%2C%20it%20lands%20on%20the%20board%2C%20a%20lane%20builds%20it%2C%20and%20it%20ships.%22%0Ashape%20circle%20You%20%2Bgrow%0Ashape%20arrow%0Ashape%20box%20Board%20%2Bfill%0Ashape%20arrow%0Ashape%20pill%20Lane%20%2Bpulse%0Ashape%20arrow%20label%3Dships%0Ashape%20circle%20Phone%20tone%3Dmint"
  },
  {
   "name": "shape",
   "kind": "preset",
   "purpose": "One part of a diagram: a circle, box, pill, dot, blob, text, line, arrow or path.",
   "intents": [
    "add a part to a diagram",
    "draw an arrow between two things"
   ],
   "tags": [
    "diagram",
    "circle",
    "box",
    "arrow",
    "label",
    "part"
   ],
   "yl": "shapes \"Where the time goes\" w=10 h=5 caption=\"Most of a reply is the model thinking.\"\nshape@think blob Thinking at=3,2.5 size=4,3 tone=lavender +fill +grow\nshape@draw dot at=8,2.5 tone=mint\nshape text \"drawing\" at=8,3.4\nshape arrow from=think to=draw +dash",
   "docs": "https://www.yuigui.com/yl#shape",
   "playground": "https://www.yuigui.com/playground?yl=shapes%20%22Where%20the%20time%20goes%22%20w%3D10%20h%3D5%20caption%3D%22Most%20of%20a%20reply%20is%20the%20model%20thinking.%22%0Ashape%40think%20blob%20Thinking%20at%3D3%2C2.5%20size%3D4%2C3%20tone%3Dlavender%20%2Bfill%20%2Bgrow%0Ashape%40draw%20dot%20at%3D8%2C2.5%20tone%3Dmint%0Ashape%20text%20%22drawing%22%20at%3D8%2C3.4%0Ashape%20arrow%20from%3Dthink%20to%3Ddraw%20%2Bdash"
  },
  {
   "name": "game",
   "kind": "preset",
   "purpose": "A small game on the phone: tic-tac-toe, snake or memory. The result comes back.",
   "intents": [
    "play a game",
    "take a break with tic tac toe",
    "entertain a kid"
   ],
   "tags": [
    "play",
    "fun",
    "tic tac toe",
    "snake",
    "memory",
    "kids",
    "break"
   ],
   "yl": "say Your move. You are X.\ngame tictactoe \"Beat me\"",
   "docs": "https://www.yuigui.com/yl#game",
   "playground": "https://www.yuigui.com/playground?yl=say%20Your%20move.%20You%20are%20X.%0Agame%20tictactoe%20%22Beat%20me%22"
  },
  {
   "name": "flow",
   "kind": "preset",
   "purpose": "A saved series of screens that branches on answers, written in Mermaid.",
   "intents": [
    "run a saved flow by name",
    "branching questions",
    "reuse a conversation"
   ],
   "tags": [
    "branching",
    "wizard",
    "intake",
    "script",
    "mermaid",
    "saved"
   ],
   "yl": "flow workout-checkin",
   "docs": "https://www.yuigui.com/yl#flow",
   "playground": "https://www.yuigui.com/playground?yl=flow%20workout-checkin"
  },
  {
   "name": "query",
   "kind": "preset",
   "purpose": "A live view of an agent table: rows, a list, a chart or one number. Redraws when a row lands.",
   "intents": [
    "track something over time",
    "show totals from a table",
    "keep a log and chart it"
   ],
   "tags": [
    "table",
    "log",
    "tracker",
    "totals",
    "macros",
    "crm",
    "database"
   ],
   "yl": "table create meals Day:date Food:text Cal:number\nput meals Day=today Food=Oats Cal=300\nput meals Day=today Food=Eggs Cal=140\nquery meals where=Day=today sum=Cal as stat y=Cal label=\"Today\"",
   "docs": "https://www.yuigui.com/yl#agent-tables-table-create-put-query",
   "playground": "https://www.yuigui.com/playground?yl=table%20create%20meals%20Day%3Adate%20Food%3Atext%20Cal%3Anumber%0Aput%20meals%20Day%3Dtoday%20Food%3DOats%20Cal%3D300%0Aput%20meals%20Day%3Dtoday%20Food%3DEggs%20Cal%3D140%0Aquery%20meals%20where%3DDay%3Dtoday%20sum%3DCal%20as%20stat%20y%3DCal%20label%3D%22Today%22"
  },
  {
   "name": "website-intake",
   "kind": "flow",
   "title": "Client website intake",
   "purpose": "Sit with a client and get everything out of them. Shops and redesigns get their own questions.",
   "intents": [
    "client intake",
    "get a client's website brief",
    "plan a website with a client",
    "scope a site redesign or shop"
   ],
   "tags": [
    "flow",
    "client",
    "website",
    "intake"
   ],
   "yl": "flow website-intake",
   "source": "flowchart TD\n  %% hi: page \"Let's plan your site\" body=\"About ten questions. Your answers become the brief, so guess when you are not sure.\"\n  hi([Start]) --> biz\n  %% biz: form \"Your business\" \"Business name\":text! \"What you do\":long \"Who it is for\":text\n  biz[Your business] --> kind\n  %% kind: choose \"What are we building?\" \"New site\"|Redesign|Shop|\"Landing page\"\n  kind{What are we building?}\n  kind -->|Redesign| today\n  kind -->|Shop| products\n  kind --> goal\n  %% today: form \"The site today\" \"Current site\":url! \"What works\":long \"What you hate\":long\n  today[The site today] --> goal\n  %% products: slide \"How many products?\" 1-500\n  products[How many products?] --> pay\n  %% pay: pick \"How do you take payment?\" Stripe|Shopify|Square|\"Not sure yet\"\n  pay[Payments] --> goal\n  %% goal: choose \"What should a visitor do first?\" Call|Book|Buy|\"Sign up\"|Read\n  goal[First action]\n  goal -->|kind=Landing page| brand\n  goal --> pages\n  %% pages: pick \"Which pages?\" Home|About|Services|Pricing|Blog|Contact +other\n  pages[Pages] --> brand\n  %% brand: form \"Your brand\" logo:yes colors:text \"A site you like\":url\n  brand[Brand] --> budget\n  %% budget: slide \"Budget, in thousands\" 2-50 \"$2k\"|\"$50k\"\n  budget[Budget]\n  budget -->|budget>=15| meet\n  budget --> done\n  %% meet: ask \"Want a call to walk through it?\" \"Yes, book it\"|\"Email is fine\"\n  meet[Call?] --> done((Brief))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-website-intake"
  },
  {
   "name": "restaurant-intake",
   "kind": "flow",
   "title": "Restaurant intake",
   "purpose": "The website intake, made over for a restaurant: the menu and online orders instead of pages and products.",
   "intents": [
    "restaurant website intake",
    "plan a site for a restaurant or cafe",
    "menu and online orders",
    "make a variant of a flow"
   ],
   "tags": [
    "flow",
    "variant",
    "restaurant",
    "intake"
   ],
   "yl": "flow website-intake as=restaurant-intake\n%% kind: choose \"What kind of place?\" \"Dine in\"|Takeout|Both\n%% goal: choose \"What should a visitor do first?\" \"See the menu\"|\"Book a table\"|\"Order online\"|Call\ndrop today products pay pages\nadd menu after goal: pick \"What goes on the menu page?\" Breakfast|Lunch|Dinner|Drinks +other\nadd orders after menu: choose \"Take orders online?\" Yes|\"Not yet\"|No\nend",
   "base": "website-intake",
   "docs": "https://www.yuigui.com/developers/flows#9-variants",
   "playground": "https://www.yuigui.com/playground?demo=flow-variant"
  },
  {
   "name": "self-scope",
   "kind": "flow",
   "title": "Scope a project yourself",
   "purpose": "Turn an idea into a scope: what done looks like, how big it is, who does it. Big ones get cut down first.",
   "intents": [
    "scope a project",
    "turn an idea into a plan",
    "size up work"
   ],
   "tags": [
    "flow",
    "scope",
    "a",
    "project",
    "yourself"
   ],
   "yl": "flow self-scope",
   "source": "flowchart TD\n  %% hi: page \"Scope it yourself\" body=\"Answer what you know and guess the rest. At the end you get a one-page scope.\"\n  hi([Start]) --> what\n  %% what: form \"The project\" \"Project name\":text! \"What done looks like\":long!\n  what[The project] --> kind\n  %% kind: choose \"What kind of work is it?\" Software|Content|Event|\"Something else\"\n  kind{Kind of work}\n  kind -->|Software| runs\n  kind --> size\n  %% runs: pick \"Where does it run?\" Web|iPhone|Android|\"Internal tool\"\n  runs[Platforms] --> size\n  %% size: choose \"How big does it feel?\" \"A weekend\"|\"A few weeks\"|\"A few months\"|\"No idea\"\n  size{How big?}\n  size -->|A few months or No idea| cut\n  size --> who\n  %% cut: page \"Let's cut it down\" body=\"Big projects slip. Name the smallest version someone would use or pay for, and ship that first.\" points=\"One user|One job|One screen if you can\"\n  cut[Cut it down] --> mvp\n  %% mvp: form \"The smallest version\" \"What ships first\":long!\n  mvp[Smallest version] --> who\n  %% who: choose \"Who does the work?\" \"Just me\"|\"Me and a team\"|\"I'll hire it out\"\n  who{Who does it?}\n  who -->|I'll hire it out| budget\n  who --> dates\n  %% budget: slide \"Budget, in thousands\" 1-100 \"$1k\"|\"$100k\"\n  budget[Budget] --> dates\n  %% dates: form \"Timing\" start:date deadline:date\n  dates[Timing] --> worry\n  %% worry: mic \"What worries you most about it?\"\n  worry[Biggest worry] --> done((Scope))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-self-scope"
  },
  {
   "name": "workout-checkin",
   "kind": "flow",
   "title": "Workout check-in",
   "purpose": "Before a session: sleep, energy, anything sore. A bad night or a real hurt changes the plan.",
   "intents": [
    "check in before a workout",
    "ask about sleep and soreness",
    "adjust a training plan"
   ],
   "tags": [
    "flow",
    "workout",
    "check",
    "in"
   ],
   "yl": "flow workout-checkin",
   "source": "flowchart TD\n  %% sleep: slide \"How did you sleep?\" 1-10 Awful|Great\n  sleep[Sleep] --> energy\n  %% energy: choose \"Energy right now?\" Low|OK|High\n  energy[Energy] --> check{Rough day?}\n  check -->|sleep<5 or energy=Low| easy\n  check --> sore\n  %% easy: page \"Take it easy today\" body=\"Short sleep or low energy means a lighter session still counts. Your coach will see why.\"\n  easy[Easy day] --> sore\n  %% sore: pick \"Anything sore?\" Legs|Back|Shoulders|Arms|Nothing\n  sore[Sore spots]\n  sore -->|sore=Nothing| today\n  sore --> hurt\n  %% hurt: choose \"Sore, or does it hurt?\" \"Just sore\"|\"It hurts\"\n  hurt{Sore or hurt?}\n  hurt -->|It hurts| rest\n  hurt --> today\n  %% rest: page \"Skip that area today\" body=\"Sharp or joint pain means rest it. Your coach will swap those lifts.\"\n  rest[Rest it] --> today\n  %% today: choose \"Today's session?\" \"Full session\"|\"Lighter version\"|\"Mobility only\"|\"Rest day\"\n  today{Session}\n  today -->|Rest day| note\n  today --> time\n  %% time: slide \"Minutes you have\" 15-90\n  time[Time] --> note\n  %% note: mic \"Anything your coach should know?\"\n  note[Note] --> done((Coach))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-workout-checkin"
  },
  {
   "name": "onboarding",
   "kind": "flow",
   "title": "Meet Yui",
   "purpose": "The first run: your name, how much you know about AI, what you want help with. Ends with two starter agents picked for you.",
   "intents": [
    "onboard a new user",
    "first run welcome",
    "learn about someone and suggest agents"
   ],
   "tags": [
    "flow",
    "meet",
    "yui"
   ],
   "yl": "flow onboarding",
   "source": "flowchart TD\n  %% hi: page \"Hi, I'm Yui\" body=\"Three quick questions, then I suggest your first agents. You can change any answer before you send.\"\n  hi([Start]) --> you\n  %% you: form \"What should I call you?\" name:text!\n  you[Your name] --> know\n  %% know: slide \"How much do you know about AI?\" 1-5 \"Brand new\"|\"I run agents\"\n  know{AI so far}\n  know -->|know<=2| basics\n  know -->|know>=4| runs\n  know --> want\n  %% basics: page \"An agent, in one line\" body=\"An AI helper with one job, like a trainer or a planner. It remembers you, and in Yui it answers with screens, not walls of text.\" points=\"You talk or tap|It answers with a screen|You stay in charge\"\n  basics[What is an agent?] --> want\n  %% runs: choose \"Do you run an agent already?\" Hermes|OpenClaw|\"Something else\"|\"Not yet\"\n  runs[Your agent] --> want\n  %% want: pick \"What do you want help with?\" \"Get fit\"|\"Eat better\"|\"Get organized\"|\"Learn something\" +other\n  want[What you want] --> words\n  %% words: mic \"Tell me more, in your own words\"\n  words[In your words] --> suggest{Suggest}\n  suggest -->|want=Get fit and want=Eat better| duo\n  suggest -->|want=Get fit| fit\n  suggest -->|want=Eat better| food\n  suggest -->|want=Learn something| learn\n  suggest --> organized\n  %% duo: page \"Coach and Basil\" body=\"A trainer and a nutritionist. They see the same week, so meals follow the training.\" points=\"Coach plans your workouts and runs the timer. Look: coach|Basil turns a photo of a meal into macros. Look: matcha\"\n  duo[Coach and Basil] --> team\n  %% fit: page \"Coach and Penny\" body=\"A trainer, and an assistant who keeps the week clear for it.\" points=\"Coach plans your workouts and runs the timer. Look: coach|Penny keeps your lists, reminders and plans. Look: studio\"\n  fit[Coach and Penny] --> team\n  %% food: page \"Basil and Coach\" body=\"A nutritionist first. A trainer is there when you want to move more.\" points=\"Basil turns a photo of a meal into macros. Look: matcha|Coach plans your workouts and runs the timer. Look: coach\"\n  food[Basil and Coach] --> team\n  %% learn: page \"Quill and Penny\" body=\"A study buddy, and an assistant who makes the time for it.\" points=\"Quill quizzes you with cards and slides. Look: wizard|Penny keeps your lists, reminders and plans. Look: studio\"\n  learn[Quill and Penny] --> team\n  %% organized: page \"Penny and Quill\" body=\"A personal assistant first. A study buddy for anything new you pick up.\" points=\"Penny keeps your lists, reminders and plans. Look: studio|Quill quizzes you with cards and slides. Look: wizard\"\n  organized[Penny and Quill] --> team\n  %% team: pick \"Which ones do you want?\" Coach|Basil|Penny|Quill\n  team[Your agents] --> connect{Connect}\n  connect -->|runs=Hermes or runs=OpenClaw| plug\n  connect --> bring\n  %% plug: page \"Plug in the agent you run\" body=\"Install the Yui plugin and pair with a code. Each agent you picked becomes a profile on it, with its own look. The steps are at yuigui.com/start.\"\n  plug[Plug in] --> done((Agents))\n  %% bring: page \"Yui brings the screens, you bring the agent\" body=\"Yui has no built-in agent yet. Set up Hermes once, free, on your own computer, and each agent you picked becomes a profile on it. The steps are at yuigui.com/start.\"\n  bring[Bring an agent] --> done",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-onboarding"
  },
  {
   "name": "connect",
   "kind": "flow",
   "title": "Connect your tools",
   "purpose": "Pick the tools your agent may use, read what each one allows in plain words, allow or skip each. Sign-in buttons come next.",
   "intents": [
    "connect tools",
    "ask permission to use apps",
    "set up integrations"
   ],
   "tags": [
    "flow",
    "connect",
    "your",
    "tools"
   ],
   "yl": "flow connect",
   "source": "flowchart TD\n  %% hi: page \"Connect your tools\" body=\"Sign in once and your agent can use them for you. You pick the tools and see what each one allows before anything happens.\" points=\"You sign in on Google or HubSpot, never in Yui|Yui never sees your password|Switch any tool off later, from the drawer\"\n  hi([Start]) --> tools\n  %% tools: pick \"Which tools should your agent use?\" \"Google Calendar\"|Gmail|HubSpot\n  tools[Your tools] --> has_cal{Calendar?}\n  has_cal -->|tools=Google Calendar| cal\n  has_cal --> has_mail\n  %% cal: choose \"Let your agent use it?\" Allow|\"Not now\" tag=Calendar title=\"Google Calendar\" body=\"It can see your calendars and events and find a time that works. Adding or moving an event is a separate ask, the first time you want one. It never shares your calendar.\"\n  cal[Calendar] --> has_mail{Gmail?}\n  has_mail -->|tools=Gmail| mail\n  has_mail --> has_crm\n  %% mail: choose \"Let your agent use it?\" Allow|\"Not now\" tag=Mail title=\"Gmail\" body=\"It can search and read your mail, add labels and write drafts. It has no send button: every draft waits in Gmail for you.\"\n  mail[Gmail] --> has_crm{HubSpot?}\n  has_crm -->|tools=HubSpot| crm\n  has_crm --> sees\n  %% crm: choose \"Let your agent use it?\" Allow|\"Not now\" tag=CRM title=\"HubSpot\" body=\"It can look up contacts, companies and deals, add notes and tasks, and update a record when you ask. It sees only what your own HubSpot login can see.\"\n  crm[HubSpot] --> sees\n  %% sees: page \"What your agent sees\" body=\"Only what a tool sends back when the agent asks it something. Your sign-in stays with your agent, never in the Yui app and never in a Yui database.\" points=\"Anything it changes shows up here first|Switch a tool off from the drawer|Or remove it on Google or HubSpot\"\n  sees[What it sees] --> ready{Any allowed?}\n  ready -->|cal=Allow or mail=Allow or crm=Allow| signin\n  ready --> skip\n  %% signin: page \"Next: one sign-in each\" body=\"Send this and your agent answers with a sign-in button for each tool you allowed. Then you can ask it things like:\" points=\"Find me an hour with Dana this week|What came in today that needs me?|Who is my next call, and what did we say last time?\"\n  signin[Sign in next] --> fin((Connected))\n  %% skip: page \"Nothing connected, and that's fine\" body=\"Your agent works without them. Connect a tool any time from the drawer.\"\n  skip[Nothing yet] --> fin",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-connect"
  },
  {
   "name": "trainer-session",
   "kind": "flow",
   "title": "Today's session",
   "purpose": "The trainer's check-in: sleep, anything sore, minutes free, your gear. The answers pick the session, then the interval timer runs it.",
   "intents": [
    "build a workout from a check-in",
    "a workout for the time and gear I have",
    "start an interval timer after a check-in"
   ],
   "tags": [
    "flow",
    "today",
    "s",
    "session"
   ],
   "yl": "flow trainer-session",
   "source": "flowchart TD\n  %% hi: page \"Let's build today's session\" body=\"Four quick questions. Your answers pick the moves and the intervals, then the timer runs it.\" points=\"How you slept|Anything sore|Minutes free|Your gear\"\n  hi([Start]) --> sleep\n  %% sleep: slide \"How did you sleep?\" 1-10 Awful|Great\n  sleep[Sleep] --> sore\n  %% sore: pick \"Anything sore?\" Legs|Back|Shoulders|Arms|Nothing\n  sore[Sore spots]\n  sore -->|sore=Nothing| minutes\n  sore --> hurt\n  %% hurt: choose \"Sore, or does it hurt?\" \"Just sore\"|\"It hurts\"\n  hurt{Sore or hurt?}\n  hurt -->|It hurts| rest\n  hurt --> minutes\n  %% rest: page \"We work around it\" body=\"Sharp or joint pain means rest that spot. Today's moves skip it. If it keeps hurting, see a doctor.\"\n  rest[Work around it] --> minutes\n  %% minutes: slide \"Minutes free?\" 10-45 step=5 value=20 unit=min\n  minutes[Minutes] --> gear\n  %% gear: choose \"What do you have?\" \"Just me\"|Dumbbells|Kettlebell|Bands\n  gear[Gear] --> build{Build it}\n  build -->|sleep<5| easy\n  build -->|minutes<=15| quick\n  build -->|gear=Just me| body\n  build --> loaded\n  %% easy: page \"Easy session\" body=\"Short sleep, so we keep it light. Long rests, no grinding. It still counts.\" points=\"30s on, 30s off|Squat to a chair|Wall push-up|Glute bridge|Dead bug\"\n  easy[Easy] --> warm\n  %% quick: page \"Quick hit\" body=\"Short on time, so short and hard. All out for 20, rest 10.\" points=\"20s on, 10s off|Squat|Push-up|Mountain climber|Jumping jack\"\n  quick[Quick] --> warm\n  %% body: page \"Bodyweight circuit\" body=\"No gear, no problem. You are the weight.\" points=\"40s on, 20s off|Squat|Push-up|Reverse lunge|Plank\"\n  body[Bodyweight] --> warm\n  %% loaded: page \"Strength circuit\" body=\"You have gear, so we load the big moves. Dumbbell, kettlebell or band, same four.\" points=\"45s on, 15s off|Goblet squat|Row|Overhead press|Romanian deadlift\"\n  loaded[Strength] --> warm\n  %% warm: choose \"Warm up first?\" \"Yes, 3 minutes\"|\"I'm warm\"\n  warm{Warm up?}\n  warm -->|Yes, 3 minutes| warmup\n  warm --> go\n  %% warmup: page \"Warm-up, 3 minutes\" body=\"Do these now, easy pace. Then start the timer.\" points=\"Arm circles, 30s|Hip circles, 30s|Squats, 1 min|March in place, 1 min\"\n  warmup[Warm-up] --> go((Timer))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-trainer-session"
  },
  {
   "name": "nutritionist-plate",
   "kind": "flow",
   "title": "A plate to macros",
   "purpose": "The nutritionist's photo read: pick a plate, see his guess and how sure he is, fix the portion. It goes in your meals and today's totals update.",
   "intents": [
    "log a meal from a photo",
    "estimate the macros on a plate",
    "fix a portion and save it to my meals",
    "today's calories and macros"
   ],
   "tags": [
    "flow",
    "a",
    "plate",
    "to",
    "macros"
   ],
   "yl": "flow nutritionist-plate",
   "source": "flowchart TD\n  %% hi: page \"Snap a plate, get the macros\" body=\"Pick a plate. I guess what's on it and say how sure I am. You fix what I got wrong, and it goes in your log.\" points=\"Pick a photo|My guess, and how sure|Fix the portion|Today's totals\"\n  hi([Start]) --> photo\n  %% photo: choose \"Which plate is yours?\" Pancakes|Salmon|\"Poke bowl\"\n  photo{Plate}\n  photo -->|photo=Pancakes| stack\n  photo -->|photo=Salmon| fish\n  photo --> bowl\n  %% stack: page \"Pancakes with berries\" /demo/meal-pancakes.jpg body=\"About 520 kcal. Fairly sure on the stack. The syrup is a guess: I can see the pool, not how much soaked in.\" points=\"How sure: fairly|Protein 12 g|Carbs 88 g|Fat 14 g\"\n  stack[Pancakes] --> syrup\n  %% syrup: choose \"How much syrup?\" None|\"A drizzle\"|\"A lot\"\n  syrup[Syrup] --> portion\n  %% fish: page \"Grilled salmon\" /demo/meal-salmon.jpg body=\"About 560 kcal. Sure on the salmon, and it's most of the plate, so no questions.\" points=\"How sure: very|Protein 42 g|Carbs 12 g|Fat 38 g\"\n  fish[Salmon] --> portion\n  %% bowl: page \"Salmon poke bowl\" /demo/meal-poke.jpg body=\"About 650 kcal. A rough guess: the rice is under the toppings, so its size is the big unknown.\" points=\"How sure: a rough guess|Protein 32 g|Carbs 78 g|Fat 22 g\"\n  bowl[Poke bowl] --> rice\n  %% rice: choose \"How much rice was under it?\" \"A small scoop\"|\"A regular bowl\"|\"A big bowl\"\n  rice[Rice] --> portion\n  %% portion: choose \"How much did you eat?\" Half|\"All of it\"|\"A bit more\"|Double\n  portion[Portion] --> meal\n  %% meal: choose \"Which meal was it?\" Breakfast|Lunch|Dinner|Snack\n  meal[Meal] --> logged((Saved))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-nutritionist-plate"
  },
  {
   "name": "musician-jam",
   "kind": "flow",
   "title": "A vibe to a beat",
   "purpose": "The musician's jam: pick a vibe and a tempo, change one row, pick the chords under it. Then the loop plays and it's kept in your sessions.",
   "intents": [
    "make a beat from a vibe",
    "a drum loop at the tempo I want",
    "chords under a beat",
    "jam and save the loop"
   ],
   "tags": [
    "flow",
    "a",
    "vibe",
    "to",
    "a",
    "beat"
   ],
   "yl": "flow musician-jam",
   "source": "flowchart TD\n  %% hi: page \"From a vibe to a beat\" body=\"Pick a vibe and I build the beat, kick and snare first. You set the tempo, change a row and pick the chords. Then it plays.\" points=\"Pick a vibe|Set the tempo|Change one row|Chords under it\"\n  hi([Start]) --> vibe\n  %% vibe: choose \"What's the vibe?\" Lo-fi|\"Boom bap\"|House|Rock\n  vibe{Vibe}\n  vibe -->|vibe=Lo-fi| lofi\n  vibe -->|vibe=Boom bap| bap\n  vibe -->|vibe=House| house\n  vibe --> rock\n  %% lofi: page \"Lazy Sunday\" body=\"Lo-fi, laid back, with a little swing. Soft hats and a rim to nod along to.\" points=\"Kick  ● · · · ● · · ·|Snare  · · ● · · · ● ·|Hat  ● · ● · ● · ● ·|Rim  · · · · · ● · ·\"\n  lofi[Lo-fi] --> lofibpm\n  %% lofibpm: slide \"How fast?\" 70-94 step=2 value=84 unit=bpm\n  lofibpm[Tempo] --> row\n  %% bap: page \"Boom bap\" body=\"Head-nod hip hop. The kick skips ahead before the second snare.\" points=\"Kick  ● · · · ● · ● ·|Snare  · · ● · · · ● ·|Hat  ● · ● · ● · ● ·|Open hat  · · · · · · · ●\"\n  bap[Boom bap] --> bapbpm\n  %% bapbpm: slide \"How fast?\" 84-98 step=2 value=90 unit=bpm\n  bapbpm[Tempo] --> row\n  %% house: page \"Four on the floor\" body=\"A kick on every beat, the clap on 2 and 4, hats between the kicks.\" points=\"Kick  ● · ● · ● · ● ·|Clap  · · ● · · · ● ·|Hat  · ● · ● · ● · ●|Open hat  · · · · · · · ●\"\n  house[House] --> housebpm\n  %% housebpm: slide \"How fast?\" 118-130 step=2 value=124 unit=bpm\n  housebpm[Tempo] --> row\n  %% rock: page \"Rock backbeat\" body=\"Straight and loud. A crash on the one to start every bar.\" points=\"Kick  ● · · · ● · · ·|Snare  · · ● · · · ● ·|Hat  ● · ● · ● · ● ·|Crash  ● · · · · · · ·\"\n  rock[Rock] --> rockbpm\n  %% rockbpm: slide \"How fast?\" 100-140 step=4 value=116 unit=bpm\n  rockbpm[Tempo] --> row\n  %% row: choose \"Change one row?\" \"Busier hats\"|\"Extra kick\"|\"Add a shaker\"|\"Leave it\"\n  row[Change a row] --> chords\n  %% chords: choose \"What goes under it?\" Warm|Moody|Jazzy|\"Just drums\" body=\"Warm is the pop four. Moody is minor. Jazzy has sevenths.\"\n  chords{Chords}\n  chords -->|Just drums| kept\n  chords -->|Moody| minor\n  chords --> major\n  %% major: choose \"Which key?\" C|G|D|F\n  major[Key] --> kept\n  %% minor: choose \"Which key?\" \"A minor\"|\"E minor\"|\"D minor\"\n  minor[Minor key] --> kept((Kept))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-musician-jam"
  },
  {
   "name": "planner-week",
   "kind": "flow",
   "title": "A busy week to a plan",
   "purpose": "The planner's week: what's on it, what matters most, when you get things done. Then your week on a timeline by day and a checklist to keep.",
   "intents": [
    "plan my week",
    "sort a busy week by what matters most",
    "a timeline of my week",
    "a checklist for the week",
    "reminders for timed things"
   ],
   "tags": [
    "flow",
    "a",
    "busy",
    "week",
    "to",
    "a",
    "plan"
   ],
   "yl": "flow planner-week",
   "source": "flowchart TD\n  %% hi: page \"From a busy week to a plan\" body=\"Tell me what's on it and what matters most. I lay it out by day and hand you a checklist to keep.\" points=\"What's on this week|What matters most|Your week, day by day|A checklist to keep\"\n  hi([Start]) --> on\n  %% on: pick \"What's on this week?\" \"A work deadline\"|Appointments|Errands|Bills|\"Family time\"|Workouts\n  on[What's on]\n  on -->|on>3| full\n  on --> top\n  %% full: page \"That's a full week\" body=\"So one thing goes first and the rest spreads out, never more a day than you pick. No day gets buried.\"\n  full[Full week] --> top\n  %% top: choose \"What matters most?\" \"A work deadline\"|Appointments|Errands|Bills|\"Family time\"|Workouts body=\"It goes first, on the timeline and on your checklist.\"\n  top{Matters most}\n  top -->|on=A work deadline or top=A work deadline| due\n  top --> when\n  %% due: choose \"When is the deadline?\" Tomorrow|\"In a few days\"|\"End of the week\"\n  due[Deadline] --> when\n  %% when: choose \"When do you get things done?\" Mornings|\"After work\"|\"Whenever it fits\"\n  when[When] --> pace\n  %% pace: choose \"How many things a day?\" \"2 or 3\"|\"3 to 5\"\n  pace[Pace] --> timed{Anything timed?}\n  timed -->|on=Appointments or top=Appointments or on=Family time or top=Family time or on=Workouts and when!=Whenever it fits or top=Workouts and when!=Whenever it fits| remind\n  timed --> planned\n  %% remind: choose \"Remind you of timed things?\" \"10 minutes before\"|\"At the time\"|\"No reminders\"\n  remind[Reminders] --> planned((Planned))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-planner-week"
  },
  {
   "name": "study-quiz",
   "kind": "flow",
   "title": "A topic to a quiz",
   "purpose": "The study buddy's lesson: pick a topic, a short deck with a picture a page, one quiz question. Then a calculator to play with, and the cards go in your review.",
   "intents": [
    "learn a topic with pictures",
    "a short lesson then a quiz",
    "quiz me on what I learned",
    "a calculator to play with after a lesson",
    "flash cards for my review"
   ],
   "tags": [
    "flow",
    "a",
    "topic",
    "to",
    "a",
    "quiz"
   ],
   "yl": "flow study-quiz",
   "source": "flowchart TD\n  %% hi: page \"Five minutes, then a quiz\" body=\"Pick a topic. I teach it one idea a page, with a picture each, then ask you one question. What you learn becomes cards you review later.\" points=\"Pick a topic|A short lesson|One question|A calculator to play with\"\n  hi([Start]) --> topic\n  %% topic: choose \"What do you want to learn?\" \"How vaccines work\"|\"How a ball flies\"|\"How money grows\"\n  topic[Topic] --> know\n  %% know: choose \"How much do you know already?\" \"Brand new\"|\"A little\"|\"I know the basics\" body=\"Know the basics? I skip the first page.\"\n  know[What you know] --> lesson{Which lesson?}\n  lesson -->|topic=How vaccines work and know=I know the basics| v2\n  lesson -->|topic=How vaccines work| v1\n  lesson -->|topic=How a ball flies and know=I know the basics| b2\n  lesson -->|topic=How a ball flies| b1\n  lesson -->|know=I know the basics| m2\n  lesson --> m1\n  %% v1: page \"Instructions in a bubble\" /demo/mrna1.jpg body=\"An mRNA vaccine is a recipe for one protein, wrapped in a tiny bubble of fat. The shot goes into your arm and the bubble slips into nearby cells.\"\n  v1[Vaccines 1] --> v2\n  %% v2: page \"Your cells read the recipe\" /demo/mrna3.jpg body=\"Ribosomes out in the cytoplasm read the mRNA and build the spike protein, the same shape that sits on the virus. It never goes near your DNA.\"\n  v2[Vaccines 2] --> v3\n  %% v3: page \"Your body learns, the recipe fades\" /demo/mrna4.jpg body=\"Your immune system sees the spike and makes antibodies that fit it. The mRNA breaks down in days. The memory cells stay.\" points=\"Antibodies fit the spike|mRNA gone in days|Memory cells stay\"\n  v3[Vaccines 3] --> vq\n  %% vq: choose \"Where is the mRNA read?\" Nucleus|Cytoplasm|\"The blood\"\n  vq{Quiz}\n  vq -->|vq!=Cytoplasm| vwhy\n  vq --> again\n  %% vwhy: page \"In the cytoplasm\" /demo/mrna3.jpg body=\"Ribosomes in the cytoplasm, the jelly around the nucleus, read it like a recipe. It never reaches the nucleus, where your DNA is kept.\"\n  vwhy[Why] --> again\n  %% b1: page \"A throw is two motions\" /demo/study-ball1.jpg body=\"Forward at a steady speed, and up then down. Put the two together and you get the arc.\" points=\"Forward: steady|Up and down: gravity|Together: an arc\"\n  b1[Ball 1] --> b2\n  %% b2: page \"Gravity only pulls down\" /demo/study-ball2.jpg body=\"Leave the air out and nothing slows the forward part. Gravity takes 9.8 m/s off the climb every second, then pulls it back down.\"\n  b2[Ball 2] --> b3\n  %% b3: page \"Speed and angle set the distance\" /demo/study-ball3.jpg body=\"Throw twice as fast and it goes four times as far. Too steep and it spends its speed climbing; too flat and it lands early.\"\n  b3[Ball 3] --> bq\n  %% bq: choose \"Which angle throws farthest?\" \"30 degrees\"|\"45 degrees\"|\"60 degrees\"\n  bq{Quiz}\n  bq -->|bq!=45 degrees| bwhy\n  bq --> again\n  %% bwhy: page \"45 degrees goes farthest\" /demo/study-ball3.jpg body=\"Halfway between flat and straight up splits the speed evenly between climbing and going forward. 30 and 60 land on the same spot, short of it.\"\n  bwhy[Why] --> again\n  %% m1: page \"Interest is rent on money\" /demo/study-money1.jpg body=\"Put $100 in at 5% a year and the bank pays you $5 for using it. That $5 is the interest.\"\n  m1[Money 1] --> m2\n  %% m2: page \"Interest earns interest\" /demo/study-money2.jpg body=\"Leave the $5 in. Next year you earn 5% of $105, not $100. Each year the new coins are a little bigger. That is compounding.\"\n  m2[Money 2] --> m3\n  %% m3: page \"Time does the heavy lifting\" /demo/study-money3.jpg body=\"At 7% a year money doubles about every 10 years. The rule of 72: divide 72 by the rate to get the years to double.\" points=\"7%: double in 10 years|Twice more: x4 in 20|40 years: x16\"\n  m3[Money 3] --> mq\n  %% mq: choose \"$100 at 10% a year, compounded. After 2 years?\" \"$110\"|\"$120\"|\"$121\"\n  mq{Quiz}\n  mq -->|mq!=$121| mwhy\n  mq --> again\n  %% mwhy: page \"$121\" /demo/study-money2.jpg body=\"Year one pays 10% of $100, $10. Year two pays 10% of $110, $11. The extra dollar is interest on interest.\"\n  mwhy[Why] --> again\n  %% again: choose \"When should I quiz you again?\" Tomorrow|\"In 3 days\"|\"Next week\" body=\"Three cards from this lesson go in your review for then.\"\n  again[Again] --> saved((Cards))",
   "docs": "https://www.yuigui.com/developers/flows",
   "playground": "https://www.yuigui.com/playground?demo=flow-study-quiz"
  },
  {
   "name": "practice-session",
   "kind": "screen",
   "title": "Practice session",
   "purpose": "Ten minutes of practice in one reply: tune up, a click to warm up to, then a loop to play over.",
   "intents": [
    "run a music practice session",
    "tune a guitar and practice",
    "warm up on an instrument"
   ],
   "tags": [
    "music",
    "practice",
    "guitar",
    "tuner",
    "metronome",
    "loop",
    "routine",
    "warm up"
   ],
   "yl": "say \"Ten minutes. Tune first, then two minutes on the click, then play over the loop.\"\ntuner guitar +inline\nmetronome 80 beats=4\nloop 80 \"Play over this\" p=x...x...|....x...|..x...x.|x.x.x.x. +inline",
   "docs": "https://www.yuigui.com/developers/music",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Ten%20minutes.%20Tune%20first%2C%20then%20two%20minutes%20on%20the%20click%2C%20then%20play%20over%20the%20loop.%22%0Atuner%20guitar%20%2Binline%0Ametronome%2080%20beats%3D4%0Aloop%2080%20%22Play%20over%20this%22%20p%3Dx...x...%7C....x...%7C..x...x.%7Cx.x.x.x.%20%2Binline"
  },
  {
   "name": "chord-chart",
   "kind": "screen",
   "title": "Chord chart for a song",
   "purpose": "The chords of a song as big buttons to strum along. Send tells the agent what they played, and one patch moves it to a new key.",
   "intents": [
    "show the chords of a song",
    "strum along to a song",
    "change the key of a song"
   ],
   "tags": [
    "music",
    "chords",
    "song",
    "guitar",
    "ukulele",
    "strum",
    "progression",
    "key change"
   ],
   "yl": "say \"Four chords, most of pop. Strum along. Too high to sing? Tell me and I'll move it.\"\nchords G I-V-vi-IV \"Four chord song\" +send",
   "docs": "https://www.yuigui.com/developers/music",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Four%20chords%2C%20most%20of%20pop.%20Strum%20along.%20Too%20high%20to%20sing%3F%20Tell%20me%20and%20I'll%20move%20it.%22%0Achords%20G%20I-V-vi-IV%20%22Four%20chord%20song%22%20%2Bsend"
  },
  {
   "name": "jam-beat",
   "kind": "screen",
   "title": "A beat to jam over",
   "purpose": "A drum loop that starts playing. They fix the groove while it runs and Send returns their version.",
   "intents": [
    "give them a beat to jam over",
    "make a drum loop",
    "a backing track to play along"
   ],
   "tags": [
    "music",
    "beat",
    "drums",
    "jam",
    "groove",
    "backing track",
    "loop"
   ],
   "yl": "say \"Here's a slow groove. Play over it, and fix the drums if they feel off.\"\nloop 92 \"Jam beat\" swing=20 p=x.....x.|....x...|........|x.x.x.x. +play",
   "docs": "https://www.yuigui.com/developers/music",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Here's%20a%20slow%20groove.%20Play%20over%20it%2C%20and%20fix%20the%20drums%20if%20they%20feel%20off.%22%0Aloop%2092%20%22Jam%20beat%22%20swing%3D20%20p%3Dx.....x.%7C....x...%7C........%7Cx.x.x.x.%20%2Bplay"
  },
  {
   "name": "songwriting-checkin",
   "kind": "screen",
   "title": "Songwriting check-in",
   "purpose": "How today's writing went, the chorus so far on chord buttons, and a voice note of the melody.",
   "intents": [
    "check in on a song they are writing",
    "capture a melody idea",
    "songwriting session"
   ],
   "tags": [
    "music",
    "songwriting",
    "check-in",
    "chorus",
    "melody",
    "chords",
    "writing"
   ],
   "yl": "say \"Songwriting check-in. Show me where the chorus is.\"\nslide \"How did today's session feel?\" 1-5 Stuck|Flowing\nchords C|G|Am|F \"Your chorus so far\" +send +inline\nmic \"Hum the melody\"",
   "docs": "https://www.yuigui.com/developers/music",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Songwriting%20check-in.%20Show%20me%20where%20the%20chorus%20is.%22%0Aslide%20%22How%20did%20today's%20session%20feel%3F%22%201-5%20Stuck%7CFlowing%0Achords%20C%7CG%7CAm%7CF%20%22Your%20chorus%20so%20far%22%20%2Bsend%20%2Binline%0Amic%20%22Hum%20the%20melody%22"
  },
  {
   "name": "scale-warm-up",
   "kind": "screen",
   "title": "Scale warm-up",
   "purpose": "A slow click and a keyboard locked to one scale, so every note fits. Send returns what they played.",
   "intents": [
    "practice scales",
    "warm up on piano",
    "teach a scale"
   ],
   "tags": [
    "music",
    "piano",
    "keys",
    "scale",
    "warm up",
    "practice",
    "metronome"
   ],
   "yl": "say \"Up and down C major with the click. Slow is fine.\"\nmetronome 60 beats=4\nkeys C major \"Warm up\" +send +inline",
   "docs": "https://www.yuigui.com/developers/music",
   "playground": "https://www.yuigui.com/playground?yl=say%20%22Up%20and%20down%20C%20major%20with%20the%20click.%20Slow%20is%20fine.%22%0Ametronome%2060%20beats%3D4%0Akeys%20C%20major%20%22Warm%20up%22%20%2Bsend%20%2Binline"
  }
 ]
}