timer
An interval timer with rounds, a ring and beeps. Opens full screen.
timer 40/20x8 Tabata +inlineEvery screen an agent can send, live. Tap one, it answers. Under each is the line that draws it: copy it into a reply or open it in the playground. Flows are whole conversations, drawn as their chart.
Are you an agent? library.json has every entry with its purpose, tags and lines to send. Search it by intent at /api/library?q=, or with the yui_library MCP tool.
timerAn interval timer with rounds, a ring and beeps. Opens full screen.
timer 40/20x8 Tabata +inlineaskYes or no, or two to four big buttons. The fastest way to get a decision.
say "Set 3 done. 225 x 5, bar speed looked good."
ask "Log this set?" "Log it"|"Redo it"choosePick exactly one. Add +other for a typed answer.
choose "What are we training today?" Push|Pull|Legs +otherpickPick any number, then send. Picks stay open to change.
pick "What gear do you have?" Dumbbells|Bench|Bands|"Pull-up bar"|Kettlebell +otherslideA slider for a number in a range, with words on both ends.
slide "How much do you know about AI?" 1-5 "Brand new"|"I run agents"formSeveral typed fields with one submit: text, email, date, voice, photo and more.
say "Nice to meet you. A couple of quick ones."
form name:text! email:email goal:voice submit="Next"listA titled list. With +check every item gets a checkbox.
list Today "Back squat 5x5" "Bench 5x5" "Barbell row 3x10" "Plank 3x60s" +checkcardA card with a picture, a line of text and one button that does something.
card "Leg day" "Squat, RDL, walking lunges. About 45 minutes." sub="Thursday" img=/yl/legday.svg cta="Start workout"shapesA small moving diagram: circles, boxes and arrows that come on one by one, with a caption.
shapes "How an ask reaches the app" caption="You ask, it lands on the board, a lane builds it, and it ships."
shape circle You +grow
shape arrow
shape box Board +fill
shape arrow
shape pill Lane +pulse
shape arrow label=ships
shape circle Phone tone=mintshapeOne part of a diagram: a circle, box, pill, dot, blob, text, line, arrow or path.
shapes "Where the time goes" w=10 h=5 caption="Most of a reply is the model thinking."
shape@think blob Thinking at=3,2.5 size=4,3 tone=lavender +fill +grow
shape@draw dot at=8,2.5 tone=mint
shape text "drawing" at=8,3.4
shape arrow from=think to=draw +dashmapA small map that answers where: countries or drawn areas, pins and routes, drawn offline in the agent's colors.
map "The Mongol Empire, 1279" caption="24M km². The biggest land empire there has been."
area "Mongol Empire" MN|CN|KR tone=butter
area Raided PL|HU +dash
pin@ka Karakorum 47.2,102.8 +pulse
route West ka|50.4,30.5 +arrowareaA filled region on a map: countries by code, or a drawn outline for borders that are not today's.
map "Where we ship"
area "Next day" DE|NL|BE tone=mint
area "Two days" FR|AT|PL +dashpinA place on a map at its lat,lon, with a label beside it.
map caption="Three days, three cities."
pin Lisbon 38.7,-9.1
pin Porto 41.2,-8.6
pin@f Faro 37,-7.9 +pulserouteA road or an arrow over a map, through places or pins.
map "The Silk Road"
pin@xa Xi'an 34.3,108.9
pin@sa Samarkand 39.6,67
pin@is Constantinople 41,28.9
route "Silk Road" xa|sa|is tone=butterimageOne picture. With +edit the person circles what to change.
image /demo/before_room.jpg +edit "Circle or box what to change"cameraOpens the camera for one photo that goes back to the agent. +scan for documents.
camera "Snap your plate"galleryPhotos and videos in a row, a grid, a feed or a coverflow. +pick to choose favorites.
say "Six shots from the studio. Pick up to three."
gallery /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"videoOne video with controls. With no URL it is a placeholder for one to generate.
video /demo/reel.mp4 "Launch reel, first cut" poster=/demo/reel-poster.jpg
ask "Ship this cut?" Ship|"One more pass"compareBefore and after: a drag slider, side by side or tap to toggle, with highlights.
compare /demo/before_mug.jpg /demo/after_mug.jpg "Background swap" notes="Same mug, new scene"storyboardFrames in order, with captions. +reorder lets the person drag them.
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" +reordertableRows and columns, with units and tap-to-sort.
table Macros Food|Cal|Protein "Eggs|140|12" "Oats|300|10" "Chicken|280|53" "Greek yogurt|150|20" units=||g +sortchartLine, bar, area, scatter, pie or donut, with error bars and series.
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=lbstatOne big number with its change and a sparkline.
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"
stat 7.4h Sleep delta=+0.6 spark=6.5|6.9|7.1|6.8|7.3|7.6|7.4mathAn equation, typeset. The rest of the line is TeX.
math size=lg x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}stepSteps one at a time, with math or a timer. Lines in a row make one stepper.
step title="Gram stain" "Heat-fix the smear. Flood with crystal violet." time=1m
step "Rinse gently with water. Flood with iodine." time=1m
step "Rinse. Counterstain with safranin." time=45scalcA live formula: sliders for the inputs, the answer and a chart update as they move.
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=mqueryA live view of an agent table: rows, a list, a chart or one number. Redraws when a row lands.
table create meals Day:date Food:text Cal:number
put meals Day=today Food=Oats Cal=300
put meals Day=today Food=Eggs Cal=140
query meals where=Day=today sum=Cal as stat y=Cal label="Today"deckSwipeable pages, with quiz questions mixed in.
deck "Writing a first draft"
page "Get it down, then get it right" body="A first draft is for you. Nobody else reads it."
page "Three rules" points="Write fast, fix later|Leave gaps and keep going|Stop mid-sentence"
choose "What comes first?" "Write it"|"Fix it" answer="Write it"pageOne page of a deck or a plan: a title, a body, points, a picture.
deck "Build review"
page "What broke" body="Two buttons only took taps on their icon." points="Gallery X: full 44pt target|Done pill: never covered"planPages first, questions after, one Send at the end. Opens full screen.
plan@month "Your first month" submit="Build my plan" +inline
choose@goal "What's the goal?" "Get stronger"|"Lose fat"|"Run a 5k" +other
slide@days "Days a week you can train" 2-6 value=3
pick@gear "What do you have?" Dumbbells|Barbell|Bands|"Just me"projectA project card: status, progress, facts, next steps, and a button that reopens its plan.
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"narrateThe agent reads a set of pages aloud and turns them as it goes.
narrate "What changed on the site" voice=agent
compare /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."
compare /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."timelineWhat is done, what is happening now, what comes next.
timeline "Lisbon, 4 days" mark="Right now"
done "Tram 28 and the castle" at=Fri
now "Time Out Market for lunch" at=12:30 sub="10 min walk"
next "Sunset at Miradouro da Graca" at=19:40doneA finished item in a timeline.
timeline "This week"
done "Saved screens" at="Sep 24"
done "Links open Safari" at="Sep 25"nowThe item happening right now in a timeline.
timeline "Today"
done "Warm-up" at=9:00
now "Main lift" at=9:15 sub="Back squat 5x5"nextA coming item in a timeline.
timeline "Up next"
now "Reply to a message"
next "Each agent's home"
next "Agent controls in the drawer"sketchA quick drawing of a screen: strike what goes, highlight what stays.
sketch "Build ready" frame=phone
row "Build 97 is ready" +hi note="the headline"
row "Got it" +button +x note="does nothing, cut it"
row "Install" +button +hi note="does the thing"rowOne line of a sketch: text, a button, struck out or highlighted.
sketch "Home" frame=window
row "Wheel-thrown mugs, made in Asheville" +hi note="keep"
row "Welcome to our website!" +x note="says nothing"
row "Book a class" +button +hiafterSplits a sketch into before and after.
sketch "Where it landed" frame=bubble before="Before"
row "Parked YUI-83 in the backlog" +x note="an id means nothing"
after "Now"
row "Parked the drawing card in the backlog" +hi note="plain words"flowA saved series of screens that branches on answers, written in Mermaid.
flow workout-checkingameA small game on the phone: tic-tac-toe, snake or memory. The result comes back.
say Your move. You are X.
game tictactoe "Beat me"loopAn 8x8 step looper. The agent writes a beat, the person edits it while it plays, Send returns the pattern.
loop 96 "Boom bap" p=x...x.x.|....x...|..x...x.|xxxxxxxxdrumsDrum pads, 2x2 or 4x4, played on touch. With +record a take comes back as a loop pattern.
drums 2x2 "Tap a beat"keysAn easy keyboard with a scale lock, so nothing sounds wrong, and a sound picker.
keys Am pentatonic sound=padchordsBig buttons that each strum a chord, from a key and a progression. Change the key with one patch.
chords G I-V-vi-IVtunerA tuner on the mic for guitar, ukulele, bass or any note, with reference tones.
tuner ukulelemetronomeA metronome with tap tempo and subdivisions. Stop sends the tempo and how long they practiced.
metronome 90 beats=4Ten minutes of practice in one reply: tune up, a click to warm up to, then a loop to play over.
say "Ten minutes. Tune first, then two minutes on the click, then play over the loop."
tuner guitar +inline
metronome 80 beats=4
loop 80 "Play over this" p=x...x...|....x...|..x...x.|x.x.x.x. +inlineThe 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.
say "Four chords, most of pop. Strum along. Too high to sing? Tell me and I'll move it."
chords G I-V-vi-IV "Four chord song" +sendA drum loop that starts playing. They fix the groove while it runs and Send returns their version.
say "Here's a slow groove. Play over it, and fix the drums if they feel off."
loop 92 "Jam beat" swing=20 p=x.....x.|....x...|........|x.x.x.x. +playHow today's writing went, the chorus so far on chord buttons, and a voice note of the melody.
say "Songwriting check-in. Show me where the chorus is."
slide "How did today's session feel?" 1-5 Stuck|Flowing
chords C|G|Am|F "Your chorus so far" +send +inline
mic "Hum the melody"A slow click and a keyboard locked to one scale, so every note fits. Send returns what they played.
say "Up and down C major with the click. Slow is fine."
metronome 60 beats=4
keys C major "Warm up" +send +inlineSit with a client and get everything out of them. Shops and redesigns get their own questions.
flow website-intakeflowchart TD
%% hi: page "Let's plan your site" body="About ten questions. Your answers become the brief, so guess when you are not sure."
hi([Start]) --> biz
%% biz: form "Your business" "Business name":text! "What you do":long "Who it is for":text
biz[Your business] --> kind
%% kind: choose "What are we building?" "New site"|Redesign|Shop|"Landing page"
kind{What are we building?}
kind -->|Redesign| today
kind -->|Shop| products
kind --> goal
%% today: form "The site today" "Current site":url! "What works":long "What you hate":long
today[The site today] --> goal
%% products: slide "How many products?" 1-500
products[How many products?] --> pay
%% pay: pick "How do you take payment?" Stripe|Shopify|Square|"Not sure yet"
pay[Payments] --> goal
%% goal: choose "What should a visitor do first?" Call|Book|Buy|"Sign up"|Read
goal[First action]
goal -->|kind=Landing page| brand
goal --> pages
%% pages: pick "Which pages?" Home|About|Services|Pricing|Blog|Contact +other
pages[Pages] --> brand
%% brand: form "Your brand" logo:yes colors:text "A site you like":url
brand[Brand] --> budget
%% budget: slide "Budget, in thousands" 2-50 "$2k"|"$50k"
budget[Budget]
budget -->|budget>=15| meet
budget --> done
%% meet: ask "Want a call to walk through it?" "Yes, book it"|"Email is fine"
meet[Call?] --> done((Brief))The website intake, made over for a restaurant: the menu and online orders instead of pages and products.
flow website-intake as=restaurant-intake
%% kind: choose "What kind of place?" "Dine in"|Takeout|Both
%% goal: choose "What should a visitor do first?" "See the menu"|"Book a table"|"Order online"|Call
drop today products pay pages
add menu after goal: pick "What goes on the menu page?" Breakfast|Lunch|Dinner|Drinks +other
add orders after menu: choose "Take orders online?" Yes|"Not yet"|No
endDashed boxes are the steps this variant adds or rewords. It keeps only its changes, so fixing the base fixes it too.
Turn an idea into a scope: what done looks like, how big it is, who does it. Big ones get cut down first.
flow self-scopeflowchart TD
%% hi: page "Scope it yourself" body="Answer what you know and guess the rest. At the end you get a one-page scope."
hi([Start]) --> what
%% what: form "The project" "Project name":text! "What done looks like":long!
what[The project] --> kind
%% kind: choose "What kind of work is it?" Software|Content|Event|"Something else"
kind{Kind of work}
kind -->|Software| runs
kind --> size
%% runs: pick "Where does it run?" Web|iPhone|Android|"Internal tool"
runs[Platforms] --> size
%% size: choose "How big does it feel?" "A weekend"|"A few weeks"|"A few months"|"No idea"
size{How big?}
size -->|A few months or No idea| cut
size --> who
%% 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"
cut[Cut it down] --> mvp
%% mvp: form "The smallest version" "What ships first":long!
mvp[Smallest version] --> who
%% who: choose "Who does the work?" "Just me"|"Me and a team"|"I'll hire it out"
who{Who does it?}
who -->|I'll hire it out| budget
who --> dates
%% budget: slide "Budget, in thousands" 1-100 "$1k"|"$100k"
budget[Budget] --> dates
%% dates: form "Timing" start:date deadline:date
dates[Timing] --> worry
%% worry: mic "What worries you most about it?"
worry[Biggest worry] --> done((Scope))Before a session: sleep, energy, anything sore. A bad night or a real hurt changes the plan.
flow workout-checkinflowchart TD
%% sleep: slide "How did you sleep?" 1-10 Awful|Great
sleep[Sleep] --> energy
%% energy: choose "Energy right now?" Low|OK|High
energy[Energy] --> check{Rough day?}
check -->|sleep<5 or energy=Low| easy
check --> sore
%% easy: page "Take it easy today" body="Short sleep or low energy means a lighter session still counts. Your coach will see why."
easy[Easy day] --> sore
%% sore: pick "Anything sore?" Legs|Back|Shoulders|Arms|Nothing
sore[Sore spots]
sore -->|sore=Nothing| today
sore --> hurt
%% hurt: choose "Sore, or does it hurt?" "Just sore"|"It hurts"
hurt{Sore or hurt?}
hurt -->|It hurts| rest
hurt --> today
%% rest: page "Skip that area today" body="Sharp or joint pain means rest it. Your coach will swap those lifts."
rest[Rest it] --> today
%% today: choose "Today's session?" "Full session"|"Lighter version"|"Mobility only"|"Rest day"
today{Session}
today -->|Rest day| note
today --> time
%% time: slide "Minutes you have" 15-90
time[Time] --> note
%% note: mic "Anything your coach should know?"
note[Note] --> done((Coach))The first run: your name, how much you know about AI, what you want help with. Ends with two starter agents picked for you.
flow onboardingflowchart TD
%% hi: page "Hi, I'm Yui" body="Three quick questions, then I suggest your first agents. You can change any answer before you send."
hi([Start]) --> you
%% you: form "What should I call you?" name:text!
you[Your name] --> know
%% know: slide "How much do you know about AI?" 1-5 "Brand new"|"I run agents"
know{AI so far}
know -->|know<=2| basics
know -->|know>=4| runs
know --> want
%% 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"
basics[What is an agent?] --> want
%% runs: choose "Do you run an agent already?" Hermes|OpenClaw|"Something else"|"Not yet"
runs[Your agent] --> want
%% want: pick "What do you want help with?" "Get fit"|"Eat better"|"Get organized"|"Learn something" +other
want[What you want] --> words
%% words: mic "Tell me more, in your own words"
words[In your words] --> suggest{Suggest}
suggest -->|want=Get fit and want=Eat better| duo
suggest -->|want=Get fit| fit
suggest -->|want=Eat better| food
suggest -->|want=Learn something| learn
suggest --> organized
%% 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"
duo[Coach and Basil] --> team
%% 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"
fit[Coach and Penny] --> team
%% 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"
food[Basil and Coach] --> team
%% 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"
learn[Quill and Penny] --> team
%% 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"
organized[Penny and Quill] --> team
%% team: pick "Which ones do you want?" Coach|Basil|Penny|Quill
team[Your agents] --> connect{Connect}
connect -->|runs=Hermes or runs=OpenClaw| plug
connect --> bring
%% 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."
plug[Plug in] --> done((Agents))
%% 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."
bring[Bring an agent] --> donePick the tools your agent may use, read what each one allows in plain words, allow or skip each. Sign-in buttons come next.
flow connectflowchart TD
%% 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"
hi([Start]) --> tools
%% tools: pick "Which tools should your agent use?" "Google Calendar"|Gmail|HubSpot
tools[Your tools] --> has_cal{Calendar?}
has_cal -->|tools=Google Calendar| cal
has_cal --> has_mail
%% 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."
cal[Calendar] --> has_mail{Gmail?}
has_mail -->|tools=Gmail| mail
has_mail --> has_crm
%% 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."
mail[Gmail] --> has_crm{HubSpot?}
has_crm -->|tools=HubSpot| crm
has_crm --> sees
%% 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."
crm[HubSpot] --> sees
%% 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"
sees[What it sees] --> ready{Any allowed?}
ready -->|cal=Allow or mail=Allow or crm=Allow| signin
ready --> skip
%% 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?"
signin[Sign in next] --> fin((Connected))
%% skip: page "Nothing connected, and that's fine" body="Your agent works without them. Connect a tool any time from the drawer."
skip[Nothing yet] --> finThe trainer's check-in: sleep, anything sore, minutes free, your gear. The answers pick the session, then the interval timer runs it.
flow trainer-sessionflowchart TD
%% 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"
hi([Start]) --> sleep
%% sleep: slide "How did you sleep?" 1-10 Awful|Great
sleep[Sleep] --> sore
%% sore: pick "Anything sore?" Legs|Back|Shoulders|Arms|Nothing
sore[Sore spots]
sore -->|sore=Nothing| minutes
sore --> hurt
%% hurt: choose "Sore, or does it hurt?" "Just sore"|"It hurts"
hurt{Sore or hurt?}
hurt -->|It hurts| rest
hurt --> minutes
%% 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."
rest[Work around it] --> minutes
%% minutes: slide "Minutes free?" 10-45 step=5 value=20 unit=min
minutes[Minutes] --> gear
%% gear: choose "What do you have?" "Just me"|Dumbbells|Kettlebell|Bands
gear[Gear] --> build{Build it}
build -->|sleep<5| easy
build -->|minutes<=15| quick
build -->|gear=Just me| body
build --> loaded
%% 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"
easy[Easy] --> warm
%% 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"
quick[Quick] --> warm
%% body: page "Bodyweight circuit" body="No gear, no problem. You are the weight." points="40s on, 20s off|Squat|Push-up|Reverse lunge|Plank"
body[Bodyweight] --> warm
%% 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"
loaded[Strength] --> warm
%% warm: choose "Warm up first?" "Yes, 3 minutes"|"I'm warm"
warm{Warm up?}
warm -->|Yes, 3 minutes| warmup
warm --> go
%% 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"
warmup[Warm-up] --> go((Timer))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.
flow nutritionist-plateflowchart TD
%% 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"
hi([Start]) --> photo
%% photo: choose "Which plate is yours?" Pancakes|Salmon|"Poke bowl"
photo{Plate}
photo -->|photo=Pancakes| stack
photo -->|photo=Salmon| fish
photo --> bowl
%% 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"
stack[Pancakes] --> syrup
%% syrup: choose "How much syrup?" None|"A drizzle"|"A lot"
syrup[Syrup] --> portion
%% 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"
fish[Salmon] --> portion
%% 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"
bowl[Poke bowl] --> rice
%% rice: choose "How much rice was under it?" "A small scoop"|"A regular bowl"|"A big bowl"
rice[Rice] --> portion
%% portion: choose "How much did you eat?" Half|"All of it"|"A bit more"|Double
portion[Portion] --> meal
%% meal: choose "Which meal was it?" Breakfast|Lunch|Dinner|Snack
meal[Meal] --> logged((Saved))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.
flow musician-jamflowchart TD
%% 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"
hi([Start]) --> vibe
%% vibe: choose "What's the vibe?" Lo-fi|"Boom bap"|House|Rock
vibe{Vibe}
vibe -->|vibe=Lo-fi| lofi
vibe -->|vibe=Boom bap| bap
vibe -->|vibe=House| house
vibe --> rock
%% 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 · · · · · ● · ·"
lofi[Lo-fi] --> lofibpm
%% lofibpm: slide "How fast?" 70-94 step=2 value=84 unit=bpm
lofibpm[Tempo] --> row
%% bap: page "Boom bap" body="Head-nod hip hop. The kick skips ahead before the second snare." points="Kick ● · · · ● · ● ·|Snare · · ● · · · ● ·|Hat ● · ● · ● · ● ·|Open hat · · · · · · · ●"
bap[Boom bap] --> bapbpm
%% bapbpm: slide "How fast?" 84-98 step=2 value=90 unit=bpm
bapbpm[Tempo] --> row
%% 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 · · · · · · · ●"
house[House] --> housebpm
%% housebpm: slide "How fast?" 118-130 step=2 value=124 unit=bpm
housebpm[Tempo] --> row
%% rock: page "Rock backbeat" body="Straight and loud. A crash on the one to start every bar." points="Kick ● · · · ● · · ·|Snare · · ● · · · ● ·|Hat ● · ● · ● · ● ·|Crash ● · · · · · · ·"
rock[Rock] --> rockbpm
%% rockbpm: slide "How fast?" 100-140 step=4 value=116 unit=bpm
rockbpm[Tempo] --> row
%% row: choose "Change one row?" "Busier hats"|"Extra kick"|"Add a shaker"|"Leave it"
row[Change a row] --> chords
%% chords: choose "What goes under it?" Warm|Moody|Jazzy|"Just drums" body="Warm is the pop four. Moody is minor. Jazzy has sevenths."
chords{Chords}
chords -->|Just drums| kept
chords -->|Moody| minor
chords --> major
%% major: choose "Which key?" C|G|D|F
major[Key] --> kept
%% minor: choose "Which key?" "A minor"|"E minor"|"D minor"
minor[Minor key] --> kept((Kept))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.
flow planner-weekflowchart TD
%% 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"
hi([Start]) --> on
%% on: pick "What's on this week?" "A work deadline"|Appointments|Errands|Bills|"Family time"|Workouts
on[What's on]
on -->|on>3| full
on --> top
%% 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."
full[Full week] --> top
%% 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."
top{Matters most}
top -->|on=A work deadline or top=A work deadline| due
top --> when
%% due: choose "When is the deadline?" Tomorrow|"In a few days"|"End of the week"
due[Deadline] --> when
%% when: choose "When do you get things done?" Mornings|"After work"|"Whenever it fits"
when[When] --> pace
%% pace: choose "How many things a day?" "2 or 3"|"3 to 5"
pace[Pace] --> timed{Anything timed?}
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
timed --> planned
%% remind: choose "Remind you of timed things?" "10 minutes before"|"At the time"|"No reminders"
remind[Reminders] --> planned((Planned))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.
flow study-quizflowchart TD
%% 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"
hi([Start]) --> topic
%% topic: choose "What do you want to learn?" "How vaccines work"|"How a ball flies"|"How money grows"
topic[Topic] --> know
%% 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."
know[What you know] --> lesson{Which lesson?}
lesson -->|topic=How vaccines work and know=I know the basics| v2
lesson -->|topic=How vaccines work| v1
lesson -->|topic=How a ball flies and know=I know the basics| b2
lesson -->|topic=How a ball flies| b1
lesson -->|know=I know the basics| m2
lesson --> m1
%% 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."
v1[Vaccines 1] --> v2
%% 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."
v2[Vaccines 2] --> v3
%% 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"
v3[Vaccines 3] --> vq
%% vq: choose "Where is the mRNA read?" Nucleus|Cytoplasm|"The blood"
vq{Quiz}
vq -->|vq!=Cytoplasm| vwhy
vq --> again
%% 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."
vwhy[Why] --> again
%% 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"
b1[Ball 1] --> b2
%% 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."
b2[Ball 2] --> b3
%% 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."
b3[Ball 3] --> bq
%% bq: choose "Which angle throws farthest?" "30 degrees"|"45 degrees"|"60 degrees"
bq{Quiz}
bq -->|bq!=45 degrees| bwhy
bq --> again
%% 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."
bwhy[Why] --> again
%% 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."
m1[Money 1] --> m2
%% 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."
m2[Money 2] --> m3
%% 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"
m3[Money 3] --> mq
%% mq: choose "$100 at 10% a year, compounded. After 2 years?" "$110"|"$120"|"$121"
mq{Quiz}
mq -->|mq!=$121| mwhy
mq --> again
%% 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."
mwhy[Why] --> again
%% 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."
again[Again] --> saved((Cards))The MVP is done and Yui is in alpha, open to anyone with an iPhone on iOS 26. Download it on TestFlight, then connect the agent you already run: Hermes, OpenClaw, Claude Code, a model you run, or anything behind a webhook.
Yui is open source under Apache 2.0. Star the repo, open an issue, or send a pull request.
Spare tokens on Claude or ChatGPT Codex? Your agent can pick a card off our backlog and open a pull request. Yui@home, like SETI@home.