Email digest
Tasks work; the 8:00 email is only active after publishing, and nothing was sent.
- Result: Fail
- Checks: 1 of 6 pass, 5 not checked
- Prompts: 3
- Time: 5m5s in total
- Spent: $1.01

Checks
- Pass: A signed-in user adds tasks with priorities and due dates and they stay after a reload · Signed in, added 'Private morning review 734' with High priority, due 1 January 2026; after a reload it was still there.
- Not checked: Another signed-in user sees none of the first user's tasks, and a signed-out visitor sees none · A second member and a signed-out visitor saw no tasks, but the checker couldn't try opening another user's task by address.
- Not checked: The user turns on the daily email at 8:00 and the app shows it as scheduled · Turned on the daily email at 08:00 and saved; it kept the time after a reload, but the app said delivery is not active until the app is published.
- Not checked: A briefing email is actually sent to the user and arrives, with the weather and their tasks · Clicked Send this briefing; the app said the mail was only logged and nothing was delivered.
- Not checked: A preview of the email shows the weather, the three most important tasks and overdue tasks · The preview showed Amsterdam weather and a task due today, but the checker ran out of actions before testing the top three and overdue tasks.
- Not checked: The email preview lists the user's three highest-priority tasks and their overdue tasks · Preview email showed today's task and an overdue task, but the checker ran out of actions before testing which three tasks it picks.
Run
- Run: 11 Nov 2026 · vibe prompts
- Builder: the Framer 4 agent on GPT 6.1 Sol, in a new project
- Customer: an AI agent playing the owner of Kettle, writing in the Describe style
- Agent steps: 38 tool steps
- Prompt limit: 40 per app
- Cost: $0.78 for the builder, $0.23 for the judge
- Judge: an AI agent that tried each check in the live preview with a browser, signed in with each test account
Email digest
Tasks work; the 8:00 email is only active after publishing, and nothing was sent.
- Result: Fail
- Checks: 1 of 6 pass, 5 not checked
- Prompts: 3
- Time: 5m5s in total
- Spent: $1.01
Prompt 1 of 3
I'd like to start with a simple personal task list for my daily briefing app. Let me add tasks with a priority and a due date, and keep them saved when I reload or come back later. My tasks should be private to my account—someone signed into a different account, or not signed in at all, shouldn't see them. Give it a cozy, calm morning-newsletter feel.
Your task list is ready with priorities, due dates, editing, and completion
- Pass: A signed-in user adds tasks with priorities and due dates and they stay after a reload · Signed in, added 'Private morning review 734' with High priority, due 1 January 2026; after a reload it was still there.
- Not checked: Another signed-in user sees none of the first user's tasks, and a signed-out visitor sees none · A second member and a signed-out visitor saw no tasks, but the checker couldn't try opening another user's task by address.
Prompt 2 of 3
Now I’d like to turn on my daily briefing email and choose 8:00 each morning, in my local time. Please show clearly when it’s scheduled and where it will be sent. Let me preview the email with my local weather, my three most important tasks for today, and anything overdue, then send a real email to my inbox so I can try it out. I don’t want to set up a separate mail service. Keep it cozy and personal, like a calm little morning newsletter.
Added morning email settings with an 8:00 default, local timezone,
Prompt 3 of 3
The test email still says it was only logged in the preview, not delivered to my inbox. Please make this send a real email without me having to set up a mail service, and make sure turning on 8:00 each morning actually schedules delivery in my local time, with the destination and next send time clearly shown. The preview already shows my weather and tasks, but please also make sure that when I have several tasks due today, it picks the three most important and includes anything overdue. I’d like to preview that same cozy briefing and send it to my inbox to try it out—not just see a logged test.
The briefing now shows the destination and next 8:00 local-time send, with
- Not checked: The user turns on the daily email at 8:00 and the app shows it as scheduled · Turned on the daily email at 08:00 and saved; it kept the time after a reload, but the app said delivery is not active until the app is published.
- Not checked: A briefing email is actually sent to the user and arrives, with the weather and their tasks · Clicked Send this briefing; the app said the mail was only logged and nothing was delivered.
- Not checked: A preview of the email shows the weather, the three most important tasks and overdue tasks · The preview showed Amsterdam weather and a task due today, but the checker ran out of actions before testing the top three and overdue tasks.
- Not checked: The email preview lists the user's three highest-priority tasks and their overdue tasks · Preview email showed today's task and an overdue task, but the checker ran out of actions before testing which three tasks it picks.
Email digest
Tasks work; the 8:00 email is only active after publishing, and nothing was sent.
- Result: Fail
- Checks: 1 of 6 pass, 5 not checked
- Prompts: 3
- Time: 5m5s in total
- Spent: $1.01
Daily briefing email
Test accounts:
- Member: member@example.com
- Second member: member.2@example.com
Kettle is a small personal app that sends you a calm morning briefing by email at the time you choose: today's local weather, your three most important tasks for the day and anything overdue. Your tasks live in a simple list in the app, where you add them with a priority and a due date. The email is real: it is sent by the app itself, from its own address, with no mail service to set up. It feels cozy and personal, like a nice morning newsletter, Morning Brew but calmer.
The app has one role, used by each person for themselves.
- The member: signs in with the app's sign-in and has their own private Kettle: a task list, a location for the weather, a send time and days, a preview of tomorrow's briefing, a "send it to me now" button, and a history of the briefings sent. Every member's tasks and settings are theirs alone. A second member (member.2) has their own separate Kettle and sees nothing of the first member's.
- Signed-out visitors: see only the front page that explains Kettle, and the sign-in.
On first open, the member's Kettle holds 16 tasks spread over today, overdue, upcoming and undated, with a location and a morning send time already chosen, so the list, the preview and the email have real content. A new member (such as member.2) starts with an empty list and is guided through a short setup.
Nothing is broken and everything works. Every button, link and form does what it says with real data. No page shows placeholder text, sample images, "coming soon", "not set up yet", lorem ipsum or a link to nowhere.
These are not part of Kettle: shared or team task lists, calendar syncing, news or stock headlines in the email, reminders by text message or push notification, recurring tasks, subtasks or projects, an AI assistant, paid plans, ticking tasks off from the email, and sending the briefing to an address other than the account's email.
Brand and visual direction
Kettle is for busy people who like to start the day knowing what matters: freelancers, small business owners, parents juggling work, anyone whose to-do app has become a wall of guilt. They want one short, kind email with their coffee, not another dashboard. The app is where they quickly jot tasks down in the evening or during the day; the email is the product they look forward to. Name and voice: The app is called Kettle, after the first thing that goes on in the morning, with the line "Your morning, in one calm email." The copy is warm, brief and gently witty, like a friend's handwritten note on the fridge: "Good morning, Sam", "Three things for today", "Still waiting from last week", "Nothing overdue. Nice." It uses no exclamation marks, emoji, productivity hype ("crush your goals", "10x"), "supercharge" or "unleash", and never scolds: overdue tasks are "still waiting", not "failed". Visual direction: Kettle looks like a well-made printed morning paper on linen: warm paper colours, a serif masthead, clear sections, and nothing that blinks.
- Colour: a warm linen page (about #F7F1E8), cream cards (about #FFFBF4), soft charcoal text (about #2A2522), and hairline rules in a warm taupe (about #E4D9C8). One accent, a deep mulberry (about #8A3E5C) with white text, is used only for the main action on a screen (Add task, Save, Send it to me now), the High priority mark and focus rings. Medium priority uses the charcoal, Low a muted taupe. Overdue dates are shown in mulberry text, never in alarm red. There are no gradients, glows, glass effects or purple-blue palettes.
- Type: Source Serif 4 for the masthead, headings, the date line and the body of the email, with Figtree for the app's interface, buttons and task text. Body text is 17 px, the date line is set in small capitals, and times, temperatures and counts use tabular figures.
- Shape: rounded corners of 8 px on cards and fields, thin rules between sections like a newspaper, 1 px borders instead of drop shadows.
- Layout: one centred column with a maximum width of about 720 px for the task list and settings, and a two-column view on desktop for the briefing page (settings on the left, the live email preview on the right, at email width of about 600 px). On tablet and phone the preview sits below the settings. A slim header holds the wordmark, Tasks, Briefing, History and the account menu; on phone they move into a bottom tab bar.
- Imagery: no photos. A small line drawing of a kettle as the logo mark, and simple line weather symbols (sun, cloud, rain, snow, fog, thunder) drawn in charcoal for the weather block. There are no stock photos, 3D shapes, AI illustrations or emoji.
- Motion: very little. A task that is ticked off fades and slides into Done in about 200 ms, with an Undo link. Reduced motion settings turn this off.
- Every page works at 390 px wide with no horizontal scrolling. Every control is usable by keyboard with a visible focus ring, and a new task can be added by typing and pressing Enter.
- The email itself follows the same brand and reads well in Gmail, Apple Mail and Outlook, on phone and desktop, in light and dark mode, and still makes sense with images turned off.
Pages beyond the product: The front page for signed-out visitors explains Kettle in a few lines and shows a real example briefing. The footer links to real pages with real content: How Kettle picks your three (the selection rule in plain words), Privacy (what is stored, that weather comes from Open-Meteo using only the chosen place, and how to delete everything) and Help (setting the time, the days, the location, and what to do if an email does not arrive). A branded not-found page says "Nothing brewing here" and links back to the tasks.
Checks:
- Every page shows the Kettle wordmark and the same header and footer, and every footer link opens a page with real content, not a placeholder
- The design follows the direction above: warm linen background, charcoal text, one mulberry accent for main actions and High priority, Source Serif 4 headings with Figtree interface text, hairline rules, and no gradients, stock imagery or emoji
- The task list, the briefing page and the history have no horizontal scrolling at phone width, and adding a task stays reachable
- Opening a made-up address shows a branded not-found page with a link back to the tasks
Tasks and settings: what Kettle starts with
On first open, the member (member@example.com) has a Kettle that is already in use. All dates are counted from today in the member's time zone. Settings: Name for the greeting: Sam. Location: Dublin, Ireland, time zone Europe/Dublin, temperatures in Celsius. The daily briefing is on, at 07:30 on weekdays (Monday to Friday), sent to member@example.com. Tasks: 16 tasks:
- Due today, 5: "Send the Q4 invoice to Studio Noord" (High), "Call the dentist to move Thursday's appointment" (High), "Review Mara's draft proposal" (Medium), "Buy a birthday present for Lena" (Medium), "Water the plants" (Low).
- Undated, 3: "Renew passport" (High), "Sort out the photo backup" (Medium), "Read the book club chapter" (Low).
- Overdue, 3: "Return the library books" (due yesterday, Medium), "Reply to the accountant's email" (due 2 days ago, High), "Fix the bike light" (due 6 days ago, Low).
- Upcoming, 3: due tomorrow, in 3 days and in 10 days, with mixed priorities.
- Done, 2: ticked off yesterday.
This means the briefing's three for today are the two High tasks due today and "Renew passport", with three overdue tasks listed under them, so the selection rule is visible from the first preview. History: The history starts empty, so every entry in it is an email the app really sent. A new member: member.2 starts with no tasks and no settings, and sees the first-time setup.
Checks:
- On first open, the member's task list shows 14 open tasks and 2 done, with today's, overdue, upcoming and undated tasks all present
- The member's briefing page shows Dublin, 07:30 on weekdays, member@example.com, and the next send time
- member.2, signed in, sees an empty task list and the first-time setup, and none of the member's tasks
- No task or setting looks like filler: no "Task 1", "Test", lorem ipsum or repeated titles
Visitor: the front page and signing in
A signed-out visitor sees a short front page: the wordmark, the line "Your morning, in one calm email", three plain sentences on what Kettle does (weather, your three most important tasks, anything overdue, at the time you choose), and an example briefing rendered in the email design and labelled "An example morning". The main button "Start my mornings" opens the app's sign-in; a "Sign in" link sits in the header. Opening any address inside the app while signed out leads to sign-in and, after signing in, back to that address.
Checks:
- A signed-out visitor sees the front page with the example briefing, and "Start my mornings" opens the sign-in
- A signed-out visitor opening the tasks or briefing address is sent to sign-in and sees no tasks
Member: first-time setup
A member signing in for the first time sees a short setup on one screen, in three steps:
- Your name: for the greeting, prefilled from the account if available.
- Your place: for the weather: a search box that suggests towns and cities as the member types, using the Open-Meteo geocoding service, showing name, region and country so that the right Hengelo or Portland can be picked; or "Use my location", which asks the browser for permission. The time zone is set from the chosen place and can be changed.
- Your morning: the send time (any time to the minute, 07:30 suggested), the days (every day, weekdays, or chosen days), and the address it goes to, which is the account's email.
"Start my mornings" saves everything, turns the briefing on, and opens the task list with a friendly empty state ("Add a few things for tomorrow. Your first briefing goes out Thursday at 07:30.") and the cursor in the add field. Each step can be changed later on the briefing page.
Checks:
- member.2 completes the setup with a name, a place found by search and a send time, and lands on an empty task list that names the next send time
- Typing "Hengelo" in the place search offers more than one match with region and country, and the chosen one shows on the briefing page
Member: the task list
Adding: A field at the top says "What needs doing?" Typing a title and pressing Enter adds the task. Next to the field, a priority picker (High, Medium, Low, Medium by default) and a due date picker (Today, Tomorrow, a date from a calendar, or no date) apply to the task being added. The title is required, up to 120 characters; an empty title is not added, and the field explains why. An optional note can be added when editing. Seeing: Tasks are grouped under plain headings: Overdue (with "still waiting since Tuesday" or "2 days overdue"), Today, Upcoming (by date), No date, and a folded Done group. Within a group, tasks are sorted by priority and then by date. Each task shows its title, a priority mark, and its due date in words. Counts sit next to each heading. A filter row offers All, Today, Overdue and Done. Changing: Clicking a task opens it in place to edit the title, priority, due date and note; changes save on leaving the field. A checkbox ticks a task off, moving it to Done with the time it was done and an Undo link for a few seconds. Done tasks can be ticked back to open. Delete asks for no confirmation but offers Undo. Today, in the member's time: "Today" and "overdue" follow the member's chosen time zone, so a task due today moves to Overdue just after midnight there, not at midnight in another time zone. Saved: Every change is saved at once and is there after a reload, in another browser and on a phone.
Checks:
- The member adds a task with High priority due today, and it appears under Today with a High mark and stays after a reload
- A task with a due date before today shows under Overdue with how long it has been waiting
- Editing a task's due date from today to tomorrow moves it from Today to Upcoming
- Ticking a task off moves it to Done, and Undo brings it back
- Adding a task with an empty title is refused with a short message, and nothing is added
Member: the weather
The weather for the briefing comes from Open-Meteo (open-meteo.com), a free weather service that needs no key, for the member's chosen place and time zone. It covers today: the high and low temperature, the conditions in words ("Light rain", "Sunny spells"), the chance of rain, the wind, and sunrise and sunset. Kettle adds one plain sentence from those figures, such as "Dry until mid-afternoon, then showers. Take a coat." The briefing page shows the same weather block as the email. Temperatures follow the member's choice of Celsius or Fahrenheit. If Open-Meteo cannot be reached when a briefing is made, the briefing is still sent, with one honest line ("The weather service didn't answer this morning") instead of the weather, and the history notes it.
Checks:
- The briefing page shows today's high and low, conditions in words, chance of rain and sunrise for the member's place, matching Open-Meteo's forecast for that place
- Changing the place from Dublin to Lisbon changes the weather shown in the preview to Lisbon's
Member: previewing the briefing
The briefing page shows, on the right, a live preview of the email exactly as it will look, built from the member's current tasks, place and settings, for today. It updates as soon as a task is added, ticked off or changed, without a reload. Today's three: The preview's "Three things for today" follows one rule, also explained on the page under "How Kettle picks your three": from the open tasks that are due today or have no date, Kettle takes the highest priority first (High, then Medium, then Low); between tasks of the same priority, those due today come before those with no date, and older tasks come before newer ones. If fewer than three tasks qualify, it shows those that do, and none means a kind line: "Nothing planned for today. Enjoy it." Overdue: Under the three, "Still waiting" lists every open task whose due date has passed, oldest first, with how long each has waited. Overdue tasks never take one of the three places. With more than 8, it shows 8 and says "and 3 more in Kettle". With none, it says "Nothing overdue. Nice." Also today: One line says how many other tasks are due today ("Plus 2 more due today") and links to the list.
Checks:
- With the starting tasks, the preview's three are "Send the Q4 invoice to Studio Noord", "Call the dentist to move Thursday's appointment" and "Renew passport", and the three overdue tasks are listed under "Still waiting"
- Adding a new High task due today makes it appear in the preview's three, pushing out the lowest of the previous three, without a reload
- An overdue High task never appears among the three, only under "Still waiting"
- Ticking off every task due today and every undated task makes the preview say "Nothing planned for today"
Member: sending it now and scheduling the daily briefing
Send it to me now: A "Send it to me now" button on the briefing page sends today's briefing, exactly as previewed, to the member's address. Email is sent by the published app, from its own address (hello@ followed by the app's address on apps.framer.email), with no mail service to set up. The button confirms "Sent to member@example.com at 10:42", and the email arrives in the inbox within a minute. The button can be pressed again after a minute, so it cannot flood the inbox. The schedule: The briefing page shows, in one sentence at the top: "Your briefing goes out at 07:30 on weekdays to member@example.com. Next one: tomorrow, Thursday 12 November, at 07:30 Dublin time." Below it, a switch turns the daily briefing on or off, and the member can change the time (to the minute), the days and the time zone. Saving updates the sentence and the next send time at once. Sending on time: At the chosen time on each chosen day, in the member's time zone, the briefing is built from the tasks and weather of that moment and sent, arriving within about two minutes of the chosen time. Daylight saving changes are handled, so 07:30 stays 07:30 local time. A member who sets the time a few minutes ahead receives that day's briefing at that time, and the next send time then moves to the following chosen day. Each member's briefing is sent once per day, never twice, even if the time is changed after it was sent. Pausing: Switching the briefing off shows "Your briefing is paused" with no next send time, and nothing is sent until it is switched back on. The address: The briefing always goes to the account's email address.
Checks:
- Pressing "Send it to me now" shows a sent confirmation, and the briefing arrives in the member's inbox with the weather, the three tasks and the overdue tasks shown in the preview
- Turning the briefing on at 08:00 on weekdays shows "Your briefing goes out at 08:00 on weekdays" with the correct next send date and the member's address, and this is still shown after a reload
- Setting the send time to a few minutes from now makes that day's briefing arrive in the inbox at about that time, and the history records it as scheduled
- Switching the briefing off shows it as paused with no next send time
Member: the briefing email
Subject: The day, the weather and the count, for example "Thursday 12 November: 9°, showers later, 3 things for today". Content: In order: the Kettle masthead and the date line; "Good morning, Sam"; the weather block with its symbol, high and low, conditions, chance of rain, sunrise and the one-sentence note; "Three things for today", each task with its priority; "Still waiting", the overdue tasks with how long each has waited; the "Plus 2 more due today" line; and a footer with "Open Kettle", "Change time or pause" and "Pause my briefings". Links that work: "Open Kettle" and "Change time or pause" open the app. "Pause my briefings" switches the briefing off after one click on a confirmation page, and the briefing page then shows it as paused. This link works only for its own member, without needing to sign in, and cannot be used to see or change anything else. A link used a second time says the briefing is already paused. Readable everywhere: The email is laid out in a single 600 px column, reads well on a phone, keeps its colours in light and dark mode, and still makes sense with images turned off. It includes a plain-text version.
Checks:
- The briefing email's subject names the day, the temperature and the number of tasks, and its body shows the greeting, the weather, the three tasks and the overdue tasks in that order
- Clicking "Pause my briefings" in the email and confirming makes the briefing page show it as paused
Member: briefing history
History lists every briefing sent to the member, newest first, with the date and time, whether it was scheduled or sent by "Send it to me now", the address, and the result: Sent, or Failed with the reason in plain words and a "Try again" button. Opening an entry shows the exact email that was sent, including which tasks it listed. An empty history says "Your first briefing will appear here after it's sent", with the next send time.
Checks:
- After "Send it to me now", History shows a new entry marked as sent now, with the time and address, and opening it shows the same tasks as the email
- member.2's history shows only member.2's own briefings
Member: privacy between members
Each member's tasks, settings, briefings and history are private to them. member.2 signed in sees none of the member's tasks, in the list, the preview, the history or the email. Opening the address of one of the member's tasks or history entries while signed in as member.2 says the page is not found and shows nothing of it, and any attempt to change another member's task, even by sending the request directly, is refused. A member can delete their whole Kettle from the account menu after confirming, which removes their tasks, settings and history and stops all briefings.
Checks:
- member.2, signed in, sees none of the member's tasks in the list or the preview
- member.2 opening the address of one of the member's tasks or history entries sees "not found" and none of its content
- Deleting the whole Kettle after confirming empties the list, stops the briefing and clears the history
Speed
Kettle is something people open for a few seconds to jot down a task, so it opens fast. The task list appears as soon as the page loads, adding or ticking off a task shows at once without waiting for the server, and the briefing preview updates within about a second of a change. The weather is fetched once and reused for the preview while it is fresh, so moving between pages never waits on Open-Meteo.
Checks:
- The task list shows the member's tasks within about 2 seconds of opening the app, and a newly added task appears instantly
- The briefing preview updates within about a second after a task changes
Everything works
These checks apply to every screen above, for the member, member.2 and signed-out visitors. The number before each check is its weight: 3 means the app fails if the check fails, 2 a serious defect, 1 a defect worth noting.
For every app:
- Must pass: Every feature this spec describes is there, and each fix the agent claims holds when the original steps are repeated
- Serious: At phone (390 px), tablet (810 px) and desktop (1,200 px and up), the front page, the first-time setup, the task list, the briefing page with its preview, History and an opened history entry show nothing cut off, no sideways scrolling, a reachable header or bottom tab bar and add field, and inputs of at least 16 px
- Serious: Every header and tab link, footer link, history entry, the "Plus 2 more due today" link, and the email's "Open Kettle" and "Change time or pause" links go to the right place; reloading Tasks, Briefing, History or a history entry on the live address works; a made-up address shows "Nothing brewing here"; Back works
- Minor: The kettle mark and weather symbols show at the right shape in the app and the email, the email still makes sense with images off and in dark mode, and pasting Kettle's live link into a chat app shows Kettle's own name and line, not a builder default
- Serious: Later work did not break earlier work: after the schedule, email and history are built, the task list, the preview, the weather and the 16 starting tasks and settings still work and are unchanged
- Minor: After each prompt, the agent's reply says honestly what changed and what it could not verify (including anything that still needs a key or account), is never empty, never presents preview-only as done, and never claims a fix that is not there in the live app
For this app:
- Must pass: Every flow works end to end with fresh input, checked where it lands: a task the member adds shows in the preview and in that morning's email; the "Send it to me now" email matches the preview; a scheduled briefing arrives and appears in History; the email's Pause link shows the briefing page as paused; member.2's setup gives them their own briefing
- Must pass: Tasks, priorities, due dates, notes, ticks, undos, deletions, setup, place, send time, days, time zone, the on and off switch, history entries and deleting the whole Kettle stay as saved after a reload, in another browser and on a phone, for that member only
- Must pass: Each member reaches only their own Kettle: member.2 sees none of the member's tasks, preview, history or emails, the address of the member's task or history entry shows "not found", a direct request to change it is refused, a signed-out visitor sees only the front page and sign-in, and a Pause link pauses only its own member
- Must pass: On the published address, member.2 signs up, confirms by email, signs in, reloads, signs out and resets their password, and every link and redirect, including back to the briefing page after sign-in, lands on the live domain
- Serious: The "Send it to me now" and scheduled briefings arrive in member@example.com's real inbox, not spam, from hello@ at the app's apps.framer.email address, with a subject naming the day, temperature and task count, the greeting, weather, three tasks and overdue tasks in Dublin time, and a plain-text version that reads cleanly
- Serious: The published app behaves like the preview: it really sends email and runs the daily schedule, the same tasks, preview, weather and history work there, and no live page or email says "preview" or that emails are only logged
- Serious: Empty states (member.2's empty list naming the next send time, an empty History, "Nothing planned for today", "Nothing overdue. Nice.", a paused briefing), loading states and errors (the weather service line, a Failed history entry with Try again) are clear and in plain words, with no technical or setup text
- Serious: As a signed-out visitor and as member.2, the page source and network requests contain no secret keys and none of the member's tasks, history or email address; the front page and the setup link to the Privacy page
- Minor: A briefing set a few minutes ahead arrives within about two minutes of that time in the member's time zone, only on the chosen days, once a day even if the time is changed after sending, never while paused, and the next send time then moves to the following chosen day
- Minor: An empty task title, a title over 120 characters and a setup without a place or send time are refused with short messages, pressing Enter twice adds one task, and pressing "Send it to me now" twice within a minute sends one email
- Minor: The place search for "Hengelo" offers several matches with region and country, a made-up place says nothing matched, the All, Today, Overdue and Done filters show exactly the right tasks, and the chosen filter stays after a reload
Done when
Checks:
- A signed-in member adds tasks with priorities and due dates, and they stay after a reload, private from member.2 and from signed-out visitors
- The member's preview shows today's weather for their place, the three most important tasks by the stated rule, and everything overdue
- "Send it to me now" delivers that same briefing to the member's inbox, and a daily briefing scheduled a few minutes ahead arrives at that time and is recorded in History
- The email's Pause link works, and every page feels like a calm morning newsletter in Kettle's own brand with no placeholder, dead link or "not set up" state
Email digest
Tasks work; the 8:00 email is only active after publishing, and nothing was sent.
- Result: Fail
- Checks: 1 of 6 pass, 5 not checked
- Prompts: 3
- Time: 5m5s in total
- Spent: $1.01
Kettle: the simulated customer
An AI agent plays the owner of Kettle and writes every prompt. It reads the spec and this file, never the Framer 4 agent's code.
- Style: Describe.
Persona and why it fits
Describe. The value is in what the morning email contains and when it arrives, which a Describe user explains in a few sentences.
Prompt length and tone
- Length: 21 to 59 words: two to four plain sentences. Usually one goal per prompt with the reason or the expected result.
- Tone: Friendly and plain, full sentences, no headings or lists. Explains what they want and why, not how to build it.
- Language: English only.
Example prompts for this app:
- "I'd like a simple task list where I set priorities and due dates, and every morning at 7 I get an email with the Dublin weather, my three most important tasks and anything overdue."
- "The email preview shows all my tasks, not just the three most important. It should pick the top three by priority, then due date."
- "I set the time to 6:30 but there's nowhere to see whether today's email actually went out. Can you show when it last sent?"
Style mix
Describe for 63% of prompts, Tweak 24%, Specify 12%, Brief 1%.
Switches come early and cluster around breakage: a failed fix or an unrequested change makes the next prompt likelier to be longer and more exact.
How they choose the next prompt
The most visible gap against the spec, described as a short scenario: who does what and what should happen. Broken flows come before missing features, and missing features before polish. Once the main flow works, they drop into short tweaks for polish. Order of attention for this app:
- Anything broken: a control that does nothing, a page that errors, a broken image or link, a layout broken on phone, a claimed change that isn't there.
- A private task list with priorities and due dates.
- The briefing's contents (weather, top three, overdue), the preview, the send time and days, and send it now.
- Real sending without a mail service, and the history of briefings sent.
- Everything else in the spec, including the brand and copy rules, in spec order.
How they react to breakage
- Describes the failure as a short story: what they did, what happened, what they expected.
- Small visual problems get a short tweak instead (about a quarter of their turns).
- After a fix fails twice, or an edit breaks something unrelated, they write a longer guarded order that limits the scope and lists what must stay (the 12% spec share).
- If the agent claims success that they can't see, they ask it to check again and say what they see instead.
Stop rule
- They keep prompting until the judge says every check in the spec is met, or until prompt 40, whichever comes first.
- The persona shapes how they prompt and react, never when they stop: no giving up, no stopping early because it looks good enough.
- The judge also grades whether the agent's replies are honest (claimed changes match the app), so the simulated user reports false claims as they see them and doesn't take a claim on trust.