Voice July 2026 Mirror since 2026-09-30 microcopy.md

Microcopy Inventory

Phase: Voices, Step 1. This is the full transcript of the interface text that already lives in the wireframes, plus the places where screens say the same thing in different words. Nothing here is rewritten yet. By the end of this phase this file becomes the source of truth: every product line on every screen is in this table, with a "was" and a "became" column, and no line ships that is not accounted for here.

Sources: all 41 pages in wireframes/*.html (read July 2026). The binding voice rules will live in voice/docs/voice.md (built in Steps 2 to 4).

Updated 2026-09-30: brought level with the product. microcopy.md is now the product's own file, copied byte for byte from the Tendd Product repository, and the product is its owner: a string changes there first, and this page is a mirror of it. The file grew from 1318 to 2064 lines. What arrived: twenty-one dated rounds in the rewrite log, from D-Gate (2026-09-02) to Help, About and Contact (2026-09-30), among them the locked list, the two public documents, the sign-in panel (P17), paying for Tendd Pro and the monthly price moving to $9.99; eight new screen sections, terms, privacy, help, about, contact, sign-in-mail, alert-mail with digest-mail, and renewal-mail; and changed rows across the existing screens. The whole body of this page was rebuilt from the file by script rather than patched, so every section and every table row of the file is on it, 62 tables and 1120 rows (it showed 814 rows before, and some rows the file had carried since 2026-08-20 had never reached it). The hand-written notes the page used to carry are gone with it, because each said something the file now says itself.

How to read this

Not listed, on purpose: the reviewer wireframe tree (nav.js), and deferred asset placeholders ([logo], [chart], [preview image]), which stand for a missing asset, not missing copy.

Rewrite log (was / became)

Two page names in this log no longer exist and are not rewritten: home-savefocus, retired 2026-08-21 with the Save tab, and the strings that moved with it. A rewrite log records what was decided on the day it was decided; renaming its subject afterwards would make the record say something that did not happen. The live inventory below is the one that is kept current.

The running record of every product line changed in Steps 5 to 7, screen by screen. Step 5 does the sample (the Home set); Steps 6 and 7 add the rest. Lines not listed for a rewritten screen were checked against voice.md and already conform.

Home set (Step 5 sample, done)

All five Home pages (home, home-empty, home-error, home-loading, home-savefocus) were checked line by line against voice.md. Home was the hand-built reference for the whole wireframe set, so it already embodies the voice: only two lines needed normalizing. Structure and markup were not touched, only text.

ScreenZoneWasBecameRule
homeadd-action+ Add subscriptionAdd a subscriptionDictionary D1: one label for the add-one affordance, matching home-empty; drops the decorative "+".
home-savefocussummary-strip... by cutting 2 you might not use.... by cutting 2 you might not be using.Consistency: the recurring cancel-candidates phrase is "you might not be using" (home base, guided-reveal).

Verified already-conformant on the Home set (no change needed), the anchors the rollout must preserve:

Step 6: rollout to the remaining 15 screens (done)

Every non-Home screen was rewritten by one subagent per screen, all writing to voice.md, then reconciled here. 37 lines changed across 11 screens; 4 screens (Alerts, Cancel Guide, Upgrade, Settings) were already fully in voice. Structure, markup, reviewer annotations, aria-labels, user content, and data fixtures were not touched (only visible product copy).

ScreenZoneWasBecameRule
welcomeheroRead-only, we can never move your money.Read-only, we cannot move your money.D7 (firm verb "cannot" in a "we" sentence)
welcomehow-it-works... by hand from 400+ presets.... by hand from 400+ services.D5/D6 (catalog term is "service")
welcometrust... but can never move, spend, or touch your money.... but cannot move, spend, or touch your money.D7
path-choicepath-optionFast and automatic. Read-only, we can never move your money.Fast and automatic. Read-only, we cannot move your money.D7
connect-banktrust-noteWe read your recurring charges, read-only. We can never move your money. Powered by Plaid.We read your recurring charges, read-only, through Plaid. We cannot move your money.D7 + D8 ("through Plaid", not "Powered by")
connect-bankprimary-actionChoose your bankConnect your bankD2
connect-bankprimary-actionAdd them yourself insteadAdd them yourselfD1 (drop "instead")
connect-bank-errorprimary-actionAdd them yourself insteadAdd them yourselfD1
add-subscriptioncustom-fallbackAdd it manuallyAdd it by handD1 (avoid "manually")
add-subscriptionprimary-actionSee my listSee your subscriptionsD3 (second person)
add-subscription-emptyprimary-actionAdd it manuallyAdd it by handD1
add-subscription-emptyprimary-actionSee my listSee your subscriptionsD3
add-subscription-errorprimary-actionTry the list againTry againD4
add-subscription-errorprimary-actionSee my listSee your subscriptionsD3
add-subscription-loadingstate-messageLoading services...Getting the list of services. This usually takes a moment.D10 (loader pattern)
guided-revealreveal-stepYou are subscribed to 14 things.You're paying for 14 subscriptions.D5 ("subscriptions", not "things"); matches Home summary
guided-revealprimary-actionSee my full listSee your subscriptionsD3
subscription-detail-errorstate-messageBack to HomeBack to your subscriptionsD3
cancel-winwin-summaryNice. You just cancelled Netflix and freed up $17.99 a month.You just cancelled Netflix and freed up $17.99 a month.D12 / Principle 5 (drop praise interjection)
cancel-winshareFeeling good about it? You can share a simple card. No bank details, ever.You can share a simple card. No bank details, ever.D12 (drop performative emotion prompt)
cancel-wincontinueDone, back to my listBack to your subscriptionsD3
share-snapshotcontinueDone, back to my listBack to your subscriptionsD3
share-snapshot-errorsecondary-actionDone, back to my listBack to your subscriptionsD3
share-snapshot-loadingheadingCreating your card...Making your cardD10 (no gerund-plus-ellipsis; matches its message line)
history-trendsheaderHow your recurring spend has moved over time.How your monthly total has moved over time.D9 (prefer "total" over "spend")
history-trends-emptystate-messageBack to HomeBack to your subscriptionsD3
connectionsconnection-rowBank connection via PlaidBank connection through PlaidD8
connections-reconnectconnection-rowBank connection via PlaidBank connection through PlaidD8
connectionsconnection-rowRead-only, cannot move moneyRead-only, cannot move your moneyD7 (keep "your")
connectionsconnection-rowAdd another by handAdd a subscriptionD1 (canonical add-one affordance)
connectionsadd-sourceConnect a bankConnect your bankD2
connectionsadd-sourceAdd manuallyAdd them yourselfD1 (manual method)
connections-emptyempty-inviteConnect a bankConnect your bankD2
connections-emptyempty-inviteAdd manuallyAdd them yourselfD1
connections-emptyempty-inviteConnect a bank to find your subscriptions...Connect your bank to find your subscriptions...D2 (same-screen prose consistency)
data-privacyprivacy-sectionWe can never move your money.We cannot move your money.D7
data-privacyprivacy-sectionRead-only transaction history via PlaidRead-only transaction history through PlaidD8

Fully conformant, no change (verified line by line): Alerts (and states), Cancel Guide (and states), Upgrade, Settings. Their in-voice anchors: the alert lines name the actor in active voice ("A payment to Amazon Prime did not go through"), Cancel Guide keeps the reversible-action framing ("you can always resubscribe later") and the non-judgmental "it is not your fault", Upgrade keeps the single dismissible Pro gate with "Maybe later", Settings keeps its plain notification copy.

Cross-screen consistency (checked after the rollout)

The canonical labels now read identically everywhere they appear: "Back to your subscriptions" (7 pages), "See your subscriptions" (4), "Connect your bank" (5), "Add them yourself" (6), "through Plaid" (6), and the read-only line "cannot ... your money" on every trust surface.

The manual-add family carries three distinct labels on purpose, one per action: "Add them yourself" (the method, paired against Connect your bank), "Add a subscription" (the affordance to add one, on Home, empty states, and Connections), and "Add it by hand" (the in-page toggle on Add Subscription that reveals the custom-entry fields when a preset is not found). These are three different actions, so they keep three labels; none uses the banned word "manually".

Finalization fixes (accessibility and reviewer notes)

Three references outside the visible copy still named retired labels; they were synced so nothing points at a string that no longer exists:

Step 7: verify and fix (done)

Four adversarial reviewers re-checked all 41 pages against voice.md. They found four real voice misses (fixed below), two consistency judgments (resolved with no change), and coverage gaps (now recorded). Screens and this log were fixed together.

ScreenZoneWasBecameRule
connect-bank-loadingstate-messageThis takes a few seconds. We are reading your recurring charges, read-only.We are reading your recurring charges, read-only. This usually takes a moment.D10 (single loader pattern, canonical closer)
history-trends-emptystate-message... the shape of your spending will be here.... the shape of your monthly total will be here.D9 / Principle 3 (no spending/exposure frame)
history-trendschart summaryyour monthly recurring total went from $172.90 in May ...your monthly total went from $172.90 in May ...D9 (canonical "monthly total"; matches the header)
data-privacyexportExporting your spend history as a CSV ...Exporting your history as a CSV ...D9 / Principle 3 (drop "spend")
home-cancelledsummary-strip + list-row(no lines existed)Four lines for the state after a person reports a cancellation2026-08-23, founder, closing N6. The big number counts what you are PAYING for and drops to 13 immediately, because that is the answer to the question the screen exists to answer; the cancelled one is named quietly on the line under it rather than folded into the count, because "14 (13 active)" makes a person do arithmetic to learn something calm. The row keeps its amount and its badge is the quiet grey chip the trial already uses - D-Concept, status is never red - and its when-line says the date the money actually stops, which is the one fact the person cannot see anywhere else
settingsappearance(no line existed)How Tendd looks + Dark mode (Easier on the eyes at night. Nothing else changes.)2026-08-23, founder: the theme becomes a product feature and not only a system capability. The heading names the place in plain dictionary words rather than instructing; the hint answers the only question a person asks of a dark mode in a money app, which is whether anything else moves
cancel-guide-no-guidedetail-head (data fix)$4.25 / month, you can always resubscribe later$17.00 / month, you can always resubscribe laterData fixture: The New York Times is $17.00/month in the canonical dataset.

Consistency judgments (resolved, no change):

Coverage additions (lines on screen but missing from the Step 1 inventory, now recorded so nothing ships outside this file):

Reviewer-note syncs (outside visible copy, aligned to current labels):

Wireframes rebuild, Home as the etalon (2026-08-05)

The wireframe stage was re-run against the upgraded IA, and Home was rebuilt as the etalon. No line was rewritten. What changed is which lines the screen carries and where they sit, and this file follows, because a line inventory that lists lines no screen shows is wrong in the same way a missing line is.

ScreenZoneChangeWhy
homeadd-actionInventory row corrected to "Add a subscription"The Step 5 log had already resolved D1 and the screen already said it. The inventory row still carried the pre-rewrite "+ Add subscription"
homesummary-strip to trust-line"Read-only. Tendd cannot move your money." moved zoneNode 2.6 gives the strip the count, the total and one line of context. Source and trust are block 7, GC6, whose content order states read-only in the same breath as the source. The line itself is untouched (D7 anchor)
hometrust-lineThree lines added: the source, the last successful check, and the way to the full answerNode 2.6 block 7 requires GC6, and GC6 requires the last successful check. Home showed a figure with no source and no freshness. "Data and privacy" is the existing name of node 6.15, not a new label
homelist-groupThe five subtotals recordedNode 2.6 block 4: each group carries its own subtotal. They are derived from the canonical dataset, not authored
homecancel-candidatesThree lines retired from the base screenThe nudge is not one of the eight blocks of node 2.6, and its own state is 2.6.4, whose trigger is "the person came here to cut". home-savefocus carries the same lines and keeps them. The Save tab is the door
homehistory-link"Pro" status badge retiredNode 5.12 requires a route from Home, and node 2.6 forbids an upsell on the calm view ("any upsell" is the load-bearing skip of the type). The route stays, the badge goes: the gate belongs to node 5.12, where GC7 shows a real preview
homedetail-paneFive lines retired with the pane itselfThe desktop right-hand pane was removed: one action must not have two destinations depending on the width of the window, and the pane duplicated node 2.7. The lines live on subscription-detail, which is where they were copied from. Ground: docs/decisions.md, 2026-08-05

Not a copy change, but recorded here because the screen reads differently: the next charge is rendered days first and the date second (conventions section 5, and node 2.6 block 5), against a fixed fixture date of 1 August. "in 2 days, Aug 3", and "tomorrow" at one day.

The four states of Home (2026-08-05, same rebuild)

Again no line was rewritten. Two stale inventory rows were corrected against the Step 5 log, which had already resolved both and whose decisions the screens have been rendering since July: home-savefocus summary-strip is "you might not be using", and the door label is "Add a subscription".

ScreenZoneChangeWhy
home-emptystate-messageThe two door support lines recordedNode 2.6.1 says both paths are offered "in the same words used at node 1.2", so the doors carry the path-choice support lines. They were on screen and missing from the inventory
home-errortrust-lineGC6 added, with the link pointing at connections rather than data-privacyNode 2.6.3 requires a way into node 6.14 from this state: the figures are stale, and the place to do something about that is the source
home-savefocustrust-lineGC6 addedEvery populated Home page shows where its figures came from. The state does not change the source

Two findings for Voice, left open rather than fixed here, because the words are not this stage's to change:

  1. home-empty carries two headings that say the same thing a hundred pixels apart: "Nothing to add up yet" in the summary strip and "Nothing here yet" over the two doors. Both are in the inventory, both are now visible on one screen with no zone boxes between them, and together they read as a stutter.
  2. The two home-savefocus candidate rows put the date first ("Trial ends: Aug 18", "Next: Aug 11") while every other row in the product now leads with the days (conventions section 5). These two lines pair the next charge with how long it has been unopened, so the fix is a rewrite and not a reformat.

The rest of the main flow (2026-08-05, same rebuild)

Nodes 1.1, 1.2, 1.3 with its four returns, 1.5 with its empty state, and 2.7 with its five states. Unlike the Home rebuild this one does add lines: three blocks of the landing and most of the detail screen had no copy at all, because the July screens did not have the blocks. Every new line is in the inventory below. What follows is what changed about lines that already existed.

ScreenZoneChangeWhy
welcomesocial-proofSeven lines retired with the blockNode 1.1 names the testimonial block as a SKIP row of the block bank: authored copy with no real quote behind it. It was carried from July and is now off the screen
welcomehow-it-works"from 400+ presets" to "from 400+ services", and "Securely connect your bank" to "Connect your bank read-only"The dictionary makes "service" the word for a catalog entry (D5), and "securely" is exactly the vague reassurance the trust block exists to replace with a fact
welcometrust"Bank-level connection" to "Bank connection through Plaid", and the body rewritten to lead with signing in on your own bank siteD8 fixes the preposition. A label whose content is the reassurance itself is the pattern this audience distrusts
welcomehero, trust"can never move your money" to "cannot move your money"D7 fixes the verb of the fixed trust line. The Step 6 log had already resolved it for path-choice, and three inventory rows still carried the old form
welcometop-nav"Pricing" lands on the page own pricing block instead of node 5.13Node 5.13 is reached only from a real gate. A public nav item pointing into the in-app upgrade screen is a gate with nothing behind it
path-choicepath-optionBoth support lines rewrittenNode 1.2 block 4 asks each door for one line of consequence ("read-only, about a minute" against "start with one, add more later"). The July lines described the doors instead ("Fast and automatic", "Private")
path-choicereassurance"What does each option access?" retiredThe two doors answer it themselves now, and node 1.2 block 6 asks for a legal line in that place
connect-bankprimary-action"Choose your bank" to "Connect your bank"D2, resolved at Step 6 of the Voice stage and never applied to the inventory row
connect-banktrust-noteOne sentence became three named factsNode 1.3 block 5 asks for three lines: what Tendd can see, what it can never do, what you can undo. The fixed trust line is the middle one, verbatim, directly above the button
guided-revealreveal-step"You are subscribed to 14 things." to "You're paying for 14 subscriptions"The Forbidden table names this exact line. The screen was fixed in July, the inventory row was not
guided-revealprimary-action"See my full list" to "See your subscriptions", and "Review these 2" retired with the save-focus lineD3 for the label. The second button left with it: one action at the emotional peak, and node 2.6.4 is one tap away the moment the tab bar appears
guided-revealreveal-step"That is $192.90 a month." became the summary strip form: the number, then the context lineGC3 has one rendering. The reveal and Home now show the total the same way, which is what makes it the same component
guided-revealreveal-step"Show me what they are" to "See what they are", same for the totalButtons are Tendd labels in the second person. "Show me" is the person speaking, which the address rule reserves for the share card alone
subscription-detailheader"Home" to "Your subscriptions" on the back controlD3: the tab keeps its nav label, the descriptive control says where you land
subscription-detailmaster-paneRetired with the pane itselfdocs/decisions.md, 2026-08-05
subscription-detailhistory-link"See price and payment history" and the "Pro" badge retiredThree months of charges are on the screen and free (D3, node 2.7 block 6). GC7 sits below them, states what Pro adds, and carries "Maybe later" beside it
subscription-detailalert-banner"The price went up by $2.50 on Jul 28, now $17.99 a month." to "Netflix went up by $2.50 on Jul 28. Your next charge is $17.99 instead of $15.49."Active voice names who did the thing (Principle 2), and the old price beside the new is what node 2.7.2 asks the state to show
subscription-detail-unrecognizedstate-message"Not a subscription" to "This is not a subscription"It is the same correction control as on the base screen, so it is the same label
subscription-detail-errorstate-message"We could not load this subscription" to "We could not load the rest of this subscription. This is usually temporary, and nothing about your money changed."The name and the amount survive from the list, so the old line overstated the loss. The money-screen reassurance is the error rule

Two fixtures corrected, which is data and not copy. The base detail page now renders Spotify Premium, because the screen exists for the decoder line and its default should be the case that shows one; Netflix moved to the price-change state, which is where the canonical alert case belongs. And the failed payment is Amazon Prime, not Peloton: alerts.html and this inventory both said Amazon Prime, and only wireframes/docs/conventions.md said Peloton. It has been corrected there. The failure was dated Jul 2 on the July screen, which its own billing cycle contradicts; the rebuilt Alerts dates it Jul 20, and that is now the only date in the set.

One finding for the map, not for Voice. Node 2.7 block 8 asks for "edit the details" and the map has no node to send it to: node 1.4 owns the only form in the product, and the grey screen borrows it. Recorded in ia/docs/nodes/2-7-subscription-detail.md.

The rest of the set (2026-08-05, same rebuild)

The nineteen MVP pages that were still on the July frame: node 1.4 with its three states, node 3.8 with its three, node 4.9 with its two, node 4.10, node 6.14 with its three, node 6.15 with its dialog, and node 6.16. Two of those state pages had never existed. The three LATER screens (4.11, 5.12, 5.13) are untouched and keep their rows above: round 2 brings them to the same contract.

ScreenZoneChangeWhy
add-subscriptionfieldThe Category select retiredNode 1.4 names category among the fields it does not ask for: it is derived from the service, and every extra field on this screen is a reason to close the tab. It was on the July form
add-subscriptionpresetsA "Most tracked" tile row added, with six servicesNode 1.4 block 3. The July screen went straight from the search field to its results, so the catalogue never appeared to a person who had not typed anything, which is the arrival case this block exists for
add-subscriptioncustom-fallback"Add it manually" to "Add it by hand"The reviewer-note sync of the Voice rollout had already resolved this; the inventory row still carried the old form
add-subscriptionprogressThe saved-as-you-go line became one sentenceIt is the anti-abandon block of Flow B and it was two fragments in a callout. One sentence says the same thing where a person actually reads it
add-subscription-emptyprimary-action"Add it by hand" to "Add subscription" on the form buttonThe dictionary gives the form submit one label. "By hand" is the method, and it is already said above the form
alertsgroupTwo groups added: "Needs you" and "Just so you know"Node 3.8 block 2 and block 3, and the invention the node is built on. The July screen was one feed sorted by date, which makes a person scan to find out whether anything is wrong. Sorting by whether it needs them answers that before they read
alertsalert-rowEvery meta line now carries the amount, the date and the sourceNode 3.8 block 4: an alert that cannot say where it came from is a rumour. The July lines named the type and the merchant and stopped
alertsalert-rowThe price-change alert shows the old price, the new price and the differenceNode 3.8 block 5, which exists in none of the sources. Every product shows the new number; the old one beside it turns a surprise into an explanation
alertsalert-rowThree items added: two upcoming charges and one newly detected subscriptionNode 3.8 block 3. Without them "Just so you know" would have had nothing in it, and the group is the half of the screen that is usually not empty
alertsalert-rowThe Amazon Prime failure is dated Jul 20, not Jul 2Its billing cycle is the 20th, so Jul 2 was impossible. Carried in from the conventions fixture list
alertsalert-rowOlder moved into a collapsed groupNode 3.8 block 6: the recent past is the job of this screen and the distant past is node 5.12
alertssettings-link"What Tendd tells you about" addedNode 3.8 block 7. One place that answers what will reach you, instead of a reminder toggle on every subscription
alerts-emptygroup"What shows up here" added, with the four thingsNode 3.8.1 asks the empty state to say what would appear if it did. An empty screen that does not say what it is for reads as broken rather than as calm
cancel-guidewhat-happensWhat happens when you cancel, with the real dateNode 4.9 block 3, missing from the July screen. The category can only promise this in general; we know the billing period, and the anxiety of an irreversible action is mostly the not knowing
cancel-guidestripThe meta strip: about five minutes, and where the steps came fromNode 4.9 block 4, missing from the July screen
cancel-guidefreshnessWhen we last checked these stepsNode 4.9 block 10, missing from the July screen. A guide that silently rots is worse than no guide
cancel-guidestepThe steps became the netflix.com path specificallyNode 4.9 block 5, the sharpest difference in the block bank. ReSubs publishes three channel sections because it does not know how you subscribed. The decoder line on node 2.7 says NETFLIX.COM, so we do
cancel-guideprimary-action"Open netflix.com/account" to "Open netflix.com and cancel"A button says the result, not the URL
cancel-guidepro-calloutThe Pro line now says the free steps stay free before it says what Pro addsD3 binds hardest on this screen: the basic instruction is always free and always first, and the Pro block is an addition below it
cancel-guide-blockedstate-messageThe not-your-fault sentence became the headingIt is the whole job of this state, and it was a callout under a heading that repeated the subscription name
cancel-winwin-summary"Nice." dropped, and the sentence split into a line and a numberThe Forbidden table bans praise interjections by name and the Voice log had already dropped this one. The number is the emotional payload, so it is the large thing rather than a clause in the middle of a sentence
cancel-winshareThe two share lines are off the screenNode 4.11 is LATER under D-Share, so an MVP screen cannot lead there. The lines stay in this inventory rather than being deleted and rewritten later
connectionsconnection-rowThe last successful check added to every sourceNode 6.14 block 4, and GC6 requires it. A silently stale connection makes the whole calm view quietly wrong and the person has no way to know
connectionsconnection-rowDisconnect now states the consequence in the same sentenceNode 6.14 block 6. Every product offers this control and none of them says what becomes of the data already collected
connectionsconnection-rowChase shows 11 subscriptions on both the default and the reconnect stateThey were 11 and 8: same source, same story, two numbers. A stale connection does not reduce the count
connectionsconnection-rowThe card digits are gone from the source nameNode 2.7 already banned card digits on the payment source line, and there is no reason for this screen to hold to a different rule
connectionsadd-sourceThe inline chooser became a real dialog pageNode 6.14.3, which had no page. It creates no new screen: it reopens node 1.3 and node 1.4 and returns here
data-privacydeleteThe delete confirmation became its own pageNode 6.15.1, which lived inside the page and had no page of its own
settingsaccountThe Name field retired, and a Currency row addedNode 6.16 block 2: an email and a currency, and nothing else. We have no reason to hold a name, and not holding it is easier to explain than protecting it
settingsnotificationsThe failed-payment example is Amazon Prime, not PelotonOne fixture for one event across the whole product

Every carried fix from the IA work is closed. The share block is off cancel-win, the Name field is off settings and the currency row is on it, cancel-guide has the three blocks the block bank found missing, and connections states the last check and the disconnect consequence on every source with one number for Chase instead of two.

Nothing was rewritten for style. Every change above is a block the node asks for and the screen did not have, a fixture that disagreed with itself, or a label the dictionary had already settled and the inventory had not caught up with.

The critique (2026-08-05, Step 9)

One line left the product, and it is the only copy change the critique produced.

ScreenZoneChangeWhy
guided-revealheader"Step 3 of 3" retired from the headerThe screen carries its own three steps, so two counters read "of 3" at once and meant different things: the header said step 3 of the chain while the first line under it said step 1 of the reveal. The chain ends when the reveal starts, so the counter that stays is the reveal's own. guided-reveal-empty keeps the header counter: it has no reveal to count, and there the chain genuinely ended

Everything else the critique found was structure or a document that had fallen behind the screens, and none of it touched a line. The log is wireframes/docs/critique.md.

Round 2: the three LATER screens (2026-08-05)

The last seven pages left the July frame and three states were drawn for the first time, so the inventories for node 4.11, node 5.12 and node 5.13 are rewritten above. Their compositions come from the second bank round (ia/docs/blocks.md, types H, I and J), which ran before the screens were drawn.

ScreenZoneChangeWhy
history-trendsheader"How your recurring spend has moved" to "How your monthly total has moved"The dictionary settled on "monthly total" at D5, and the node block says the same. The inventory was the last place still saying "recurring spend"
history-trendschart-areaThe summary sentence moved above the chart and lost the words "Text summary"Node 5.12 block 4 and the whole of bank type H: in every source the number lives inside the picture, and growth zone 3 says a picture is what makes this person close a finance app. The sentence is the fact; the chart illustrates it
history-trendstrend-listThe New York Times reads $17.00 a month, not $4.25One fixture for one subscription across the product. $4.25 was a July invention and it contradicted the canonical set on Home
history-trendsexportThe export line now names the free export beside the Pro oneD-Export: a plain copy of your own data is free and lives on node 6.15, and the screen that sells the analytical one is where that split has to be visible
history-trends-lockedwhole screenNew. The frame, the person's own category labels, what Pro adds, and the gateNode 5.12.4, numbered on 2026-08-05. Emma is on Free everywhere else in the product, so this is the only view of this screen she can have, and node 5.13 says she came to the upgrade screen "from Your trends"
home"See your trends" in the secondary rowretired 2026-08-18Trends became a tab bar destination the same day, so the secondary was a second door to a room that now has one on every screen. The row keeps "Add a subscription", the only item in it that is an action rather than a place. The label lives on as the tab's, shortened to "Trends"
history-trends-lockedan empty frame and five category wordsa real readout and two real months, 2026-08-18The founder, on the coloured screen: "оно как то виглядає типа пусто и не понятно что показіваем и зачем". Free now gets ONE comparison of its own - this month against last - and the frame draws those two months. The category labels went with the change: two of the person's own months carrying their own total is more theirs than five category words. The lock keeps everything it listed; one line of it gained "and so are these two months"
history-trendsrange viewsNew, 2026-08-19. The readout is written three times, one per range: "went from $172.90 in May to $192.90 in July, up about $20 across three months" / "from $166.90 in February ... up about $26 across six months" / "from $143.91 last August ... up about $49 across the year". The trend list gains Disney+ ("Up $6.00 since March, now $13.99 a month", Higher) in the six and twelve month views and Adobe Creative Cloud ("New since November, $22.99 a month", New) in the year, and the steady row is written once per range, because "no change since March" is not a true sentence inside a window that begins in MayThe founder made the range control real: "кнопки переключения очень большие и не работают". A control that switches the picture and leaves the sentences alone is a screen that lies in two of its three states. Every figure is derived in docs/bank-connection.md section 6 and nothing is invented here
every screen with a greetingapp-barThe plan chip joins the account link on all 15 of them, 2026-08-19: "Hi, Emma" gains Free on Home and its four states, Alerts and its three, Save, You and the Pro gate, and Pro on the four pages of the Pro trend view. Each link's accessible name states it: "Hi Emma, you are on the free plan, open your account"The founder: "Free должно быть везде а не только в трендс", overruling the narrower answer of an hour earlier. A person who does not know which plan they are on cannot reason about what they are seeing. It stays a statement and not a sell because the link goes to Settings, where a plan can be read and changed, and never to the upgrade screen
add-subscriptionfieldThe Amount placeholder gets a row, 2026-08-20. It reads 0.00 and it read $0.00 until the founder decided the field takes digits onlyWith the sign drawn beside the input, the old placeholder rendered $ $0.00. The string changed then and no row owned it either way, so neither the old nor the new one was ever a Voice decision. The hint beside it, "Enter an amount, like $9.99", keeps its dollar sign and is right to: that is a sentence about money, not a field that takes digits
add-subscriptionpresetsThe three result-count strings get a row, 2026-08-20: No match for "QUERY", 1 match for "QUERY", N matches for "QUERY"Written into behaviour.js when the tile filter was built on 2026-08-11 and never given an owner. Only two of the three are new: the zero case is the exact line add-subscription-empty already carries, which is why it was reused rather than a fourth string invented. All three follow the plain-language rule and the singular is spelled out rather than written "1 match(es)"
sign-insecondary-actionNew, 2026-09-08. "Continue with Google"The founder, after a sign-in link of his own opened localhost on his phone: "и почему нету авторизации через Google простой". Node 1.6 was drawn as an email and a link and nothing in the record ever weighed that against a provider button, so this is an absence being filled and not a decision being reversed. The wording is the one people have already read a thousand times and it promises nothing extra: not "Sign up", which is false for a returning person on a screen that serves both, and not "Sign in with Google", which claims the account is Google's. It is the secondary action and not the primary one, because the way in this product was designed around is still the link, and two primaries on one screen is the One Voice Rule failing. G41
path-choiceway-acrossNew, 2026-08-20. "Already have an account? Sign in"The landing offers both doors twice and sign-in leads back with "No account yet? Start here". This screen led back to neither: a person who tapped the wrong door had the browser's back button and nothing on the screen, and this is the audience that does not recover from a dead end
upgradeprimary-action"Start Tendd Pro - $69 a year" became "Start Pro - $69 a year", and the monthly the same wayThe label wrapped below a 913px window, measured: the three cards are narrower than the 282.78 it needed. Two words out fixes it, and fixes the same reading on a phone, where a layout change would not have
settingsnav-row"Sign out" lost its chevron, 2026-08-20. The word is unchangedNot a copy change but the mark beside it. A chevron means "there is more this way" everywhere else in this product; on the one control that ends the session it says the opposite of what the control does
home (+ error, savefocus)list-headNew, 2026-08-20. The list gains a head of its own, "Your subscriptions", with "Add a subscription" at the far end of itThe founder, on Home at 1440: "я бы перенес кнопку в правую часть а в левой поставил бы что то типа заголовка Subscription list". The row held one button and 1370px of nothing. The words are "Your subscriptions" and not "Subscription list": that string already belongs to this region as the back control of all twelve detail pages, and one owner per string means a place is not named twice in two ways. It is also the first name .groups has ever had for a screen reader
upgrade-processingconsequence"Your trends" became a link, 2026-08-20The sentence promised "you go straight back to Your trends, open" on a page that carried no outgoing link at all, so the only crossing from Free to Pro in the product dead ended at the moment it promised delivery. No word changed
history-trendsapp-bar"Your subscriptions" back control removed, and the account greeting "Hi, Emma" arrives in its place, carrying the plan chip inside it. Its accessible name grows to "Hi Emma, you are on Tendd Pro, open your account", and on the gate to "Hi Emma, you are on the free plan, open your account"The founder: "мне не нравится что у нас в трендс есть кнопка назад когда это стало отдельным пунктом". Trends became a tab destination on 2026-08-18 and kept the bar it was given as a detail screen. Every other destination greets by name and offers no way back, because the way out of a destination is the tab bar. The plan moved into the link because a plan is a fact about the account, and the accessible name is where a chip that has no words of its own gets them
history-trendsdata-sourceNew, 2026-08-19. "Every month here is your own history, from Chase and the 3 subscriptions you added yourself. / Read-only. Tendd cannot move your money. / Last checked today, 9:14 AM."The founder pointed at the empty right half of the summary strip. What went into it is not filler: 5.12 was the only screen in the product with figures on it and no statement of where they came from, which is design principle 4 unmet. Its own edition and not Home's: 2.6's block names the LIST ("From Chase, 11 subscriptions, and 3 you added yourself"), this one names the HISTORY, and one product line may not exist in two editions. The middle line is the read-only declaration, which is the same sentence everywhere by design
history-trendsexportThe line is split at a sentence it already had and wrapped around the button: "Your history as a spreadsheet, for reading it somewhere else. Part of Tendd Pro." above it, "A plain copy of everything we hold is free and lives in Data and privacy." below. Not a word changedThe founder: the button "смотрится как-то просто и странновато ... может их как-то объединить". A bare button on the canvas with a long line under it is two orphans, and they are one thing: D-Export's whole point is that this export is the Pro one and the plain copy is free, which is a sentence a button cannot say by itself. The order now reads offer, action, honest footnote
history-trendsby-category"By category. Streaming is up $6 since March. Everything else held steady." became five bars with their amounts, and one summary line per range under them: "Software is up $20.00 since May, when ChatGPT Plus arrived. Everything else held steady." / "Software is up $20.00 and Streaming $6.00 since February." / "Software is up $42.99 and Streaming $6.00 since last August."The founder: "должен быть график со столбиками по категориям, а его нет". The question found a second defect at the same time: the old line measured since March under a three-month view that begins in May, and it was counting Netflix's $2.50 twice, once as a price change and once inside the Streaming rise. The $6 is Disney+, in April, and it is now stated only in the ranges that contain it
history-trends-emptystate-message"We have less than three months so far" gained the date the first line appearsNode 5.12.1 is not the lock: this person has paid, so the screen owes them a date and never an offer
history-trends-errorwhole screenNew. Node 5.12.3It says what is unaffected in the same breath: the list, the total and the alerts are a different request
upgradeheader"Close" addedNode 5.13 block 1: close, not back. The screen interrupts something the person was doing
upgradefeature-list"One-tap links" to "with the direct link"The dictionary has no "tap" in it: the product is a responsive web app read on a desktop as often as a phone
upgrade-processingwhole screenNew. Node 5.13.1The payment provider owns its sheet; we own the wait around it. It says nothing is charged twice, which is the fear at that moment
upgrade-payment-failedwhole screenNew. Node 5.13.2A payment that did not go through is a fact with a next step, never a fault. It states that nothing was charged before it offers to try again
share-snapshotheader"Card preview" to "Share this win", with "nothing is shared until you tap Share"The old heading named the component. The new one names the moment, and the second line answers the only question a person has on this screen
share-snapshotprivacy-noteThe list of what is on the card is now specificBank type J: this exists in no source, and it is the one thing this screen adds to the category. "No account numbers" is a promise; naming the three things that are on it is proof
share-snapshotcontinue"Done, back to my list" to "Back to your subscriptions"The dictionary gives this destination one label, in second person. D3 in the discrepancy list settled it and this page had not caught up

Round 3: the auth model (2026-08-10)

Five pages and one field, from the decision that closed the last structural [?] in the map. This is the round that re-opened a stage marked Done, and the copy carries the reason rather than hiding it: on the bank path the email is asked with the trust argument attached, not as a signup.

ScreenZoneChangeWhy
sign-inwhole screenNew. Node 1.6, with 1.6.1 and 1.6.2The landing header already said "Sign in" and Settings already said "Sign out", so the product had a door in and a door out of an account nothing in it created
sign-in-expiredstate-messageWritten in the reconnect register, not the error registerNode 6.14.2 already settled the tone for a credential that expired by design: it is maintenance, and the screen says nothing was lost before it asks for anything
connect-bankaccountNew field, with the reason in the hint rather than in a tooltipNode 1.3 block 4. The category asks for an account before showing anything; this asks on the one screen where the reason is true and fits in a sentence. "cannot" and "delete" are spelled out, per the contraction rule for money and data
settings-no-accountwhole screenNew. Node 6.16.1, which stood as "logged out [?]" until the auth modelThe manual path creates no account, so this is a steady state and not an edge case. Its three lines say what an account changes in the person's terms, never in ours
upgrade-current-planwhole screenNew. Node 5.13.3Settings routed "manage plan" into the screen that sells Pro, and there was no way anywhere to cancel it. The cancel line carries no discount, no "are you sure", and no "tell us why"

Round 4: the copy latch after UI + Visual (2026-08-11)

Stage 07 compared every coloured page against this file and found thirteen divergences. None was a colouring error: the visible text of all 28 coloured pages is character-identical to its grey original, so every one of them was a gap between the frozen grey and this inventory, opened before colour existed. Voice reopens for exactly that, and closes them here.

WhereWasBecameWhy
upgrade AND the welcome landing, lifetime card"Not on sale yet. [? D4, the lifetime price, $99 to $139, is still being decided]""Not on sale yet. We are still working out the price."The worst of the thirteen, and it was on two screens rather than one. The project's own open-question notation was printed as product copy, and this file carried the bracket verbatim on both, so the inventory blessed the leak. Stage 07 only saw it on the paywall, because the landing is not in the coloured sample; the twin was found by grepping for the notation across all 55 grey pages before fixing the one that was reported. The question is not closed; it lives where a question belongs, in node 5.13's Status and in docs/decisions.md
upgrade, plan cardsone feature list inventoried, two renderedfeature-list-compact declared beside feature-listThe four lines appear three times inside the plan row and once, alone, on current-plan. Inside a card the label carries it; standing alone it earns its parenthetical. One list, two authored forms, and the form is now named instead of being a silent difference
upgrade, yearly card"That is $5.75 a month. Our calmest option, and it saves about $27 a year...""That is $5.75 a month, and it saves about $27 a year..."The screen had already dropped it. "Our calmest option" is an adjective about ourselves next to a figure that argues better than it does
upgradefour strings shipped and never inventoried"Everything in Tendd Pro", "Start Tendd Pro - $7.99 a month", "one payment", the rewritten lifetime sentenceA shipped line that is in no inventory is a line nobody owns
home-empty, second heading"Nothing here yet""Two ways to start"Two headings a hundred pixels apart doing one job. The first says what is true, the second says what to do. Logged at the wireframes critique and never closed
home-empty, body"Pick the way that feels right""Pick the one that feels right""Two ways to start" above it already said ways
home-empty, the two doorsthis file carried a retired trust line and a door blurb neither screen hasthe shipped linesHere the screen was right and the document was wrong. The inventory still held "we can never move your money", the exact form D7 retired. Shipping this file yesterday would have shipped a banned variant
home-savefocus, both candidate rows"Trial ends: Aug 18", "Next: Aug 11""trial ends in 17 days", "next in 10 days"Every other row in the product leads with the days, and the group list on the same screen says "trial ends in 17 days" for the same subscription. The date stays in the accessible name, where it is useful and costs no width
subscription-detail-errorbutton "Back to your subscriptions""Your subscriptions"One destination, two wordings, one screen apart. The documented exemption rested on the chevron saying "Home", which a later round changed
add-subscriptionone rendering inventoriedthe pattern, marked as a patternSix "Typically $X a month" strings are six renderings of one authored line. Low severity, and an inventory that lists one of six teaches the wrong thing about the other five
history-trends-lockedno "Maybe later"the rule narrowed, the screen unchangedvoice.md said "Maybe later" is always present on a Pro gate. On the full-screen gate the appbar chevron is the exit, and a second control one line under it going to the same place is chrome, not kindness. What "always" protects is that no gate is a dead end; a chevron protects that too. Recorded as a decision either way, and this is the way

What this round did not do. It did not touch the eleven ARIA and form-semantics findings from the same pass. Those are markup, not copy, and they belong to the stage that owns structure.

D-Gate: the locked list, and one promise that had to go (2026-09-02)

The first lines written in this repository rather than copied into it, and the first written after the design repository was frozen. Ground: docs/decisions.md, D-Gate. A free person now walks through the bank door once, the scan runs, and the reveal returns the count, the total and three names across three categories. The rest are on the list, counted in the total, and not named until Tendd Pro.

Everything below is checked against voice.md twice, because this is exactly the kind of copy its Forbidden table was written to stop. Two rules bind hardest here:

ScreenWasBecameWhy
path-choice"Either way you land on the same calm view, and you can add the other one later.""Adding them yourself is free and unlimited. The first bank scan is free too, and seeing every name it finds is Tendd Pro."The old line is now false, and it was the sentence the whole screen rested on. The two paths no longer land on the same view: one ends in a complete list and the other in three names and a gate. Saying so at the door is the alternative to a person finding out at the moment they were promised the opposite, which is where an avoider decides whether to trust us. D-Gate, and the same reason G25 exists
guided-reveal, step 2"Five categories, and the real names behind the charges.""Five categories. Three of the names are below, and the rest are part of Tendd Pro.""the real names behind the charges" is the promise step 2 exists to keep, and it is kept for three of them. The count of categories stays because it is true and it is the point of the step: the scan reached across a life, not into one corner of it
home, trust line"From Chase, 11 subscriptions, and 3 you added yourself."(unchanged, and joined by a second edition) "Found in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date."The bank edition assumes a live connection, and under D-Gate a free person's Item is removed once the scan is done. GC6 still requires the source and the freshness, so the source becomes a date and the freshness becomes the plain fact that nothing is reading. The second clause is bank-connection.md section 8 and the card on node 6.14, word for word

Two more, and they were nearly typed straight onto the screen. Node 5.13.3 lists what a Pro person has, each row a name and a short second half. D-Gate adds two things to Pro and the list had four rows, so building the screen produced two halves that no inventory owned. They are written here first, which is the whole point of the rule surviving the move: the friction that used to be another repository is now four keystrokes, and only these are legal.

ScreenWasBecameWhy
upgrade-current-plan, feature list(four rows; the bank was free under D-Free)+ "Every name in your bank scan (Nothing on your list is withheld)" and "A bank connection that keeps the list up to date (Read again when your bank reports a change)"The second halves say what the row means in the register the other four already use: a plain restatement, no selling, because this screen states and does not pitch. "Read again when your bank reports a change" is bank-connection.md section 7 in a person's words: the product does not poll and syncs on the provider's own update webhook

One more line, written 2026-09-02 when the upgrade screen was built. Node 5.13 draws two priced buttons, and Tendd cannot take a payment yet, so they are not drawn. The design already solved this exact problem once, on the lifetime card: it carries no button and says "Not on sale yet. We are still working out the price", on the stated ground that "a button that cannot state an amount is worse than no button". The two priced cards CAN state an amount and still cannot be pressed, which is a different absence and needs its own sentence rather than a borrowed one.

ScreenWasBecameWhy
upgrade, the two priced cards(no line; the design draws a working button)"Not open yet. Tendd cannot take a payment, so these have no button."It says what is true, names the actor, and explains the thing the person is actually looking at, which is a card with a price and nothing to press. A disabled button would be the alternative and it is worse: a control that cannot be used still invites the press, and the system already refuses that pattern on the inert range picker of history-trends-locked

What was written and then dropped. "You have 11 more subscriptions than we can show you" and "See what you are really paying for": the first is a count framed as a deficit and the second is "what you wasted" wearing a different coat. Both are the Forbidden table's exposure framing, on the one screen whose own line is "This is what you have signed up for, not what you wasted."

The two public documents, and the links that had been pointing at a locked door (2026-09-20)

Two screens joined the inventory whole rather than by rewrite, terms and privacy, and they are the first strings in this file written for a reader who is not signed in and may never be. The voice does not change for them. A privacy policy is exactly the place the Forbidden table was written for: "we take your privacy seriously" is the line Principle 4 exists to refuse, and every claim on these two pages is one a person could check.

Nothing on them was composed from what a policy usually says. The list of who else can see your data is the list of hostnames the running product talks to, read out of the code: Supabase, Plaid, Google when you press the Google button, Vercel, and Google Fonts, which is on the list because the typeface is fetched from Google on every page load and a reader deserves to be told so. "There is no advertising, no analytics and no tracking of any kind in Tendd" is a falsifiable sentence and it was verified before it was typed: there is no analytics SDK, no logging service and no console call anywhere in app/, lib/ or components/.

The three promises are not new strings. They are the three data-privacy already owns, printed again, because a promise that is worded differently in two places is two promises.

What changed is where six existing links point. The rule they now follow is one line: a public screen links to a public document, an in-app screen links to the in-app screen. P12.

ScreenWasBecameWhy
path-choice, legal"Terms and Privacy Policy" as one link to /data-privacytwo links, "Terms" to /terms and "Privacy Policy" to /privacyThe sentence is unchanged and was always correct; it named two documents and had one destination, which was a screen that asks a stranger to sign in. G38
welcome, footer Legal"Terms" pointed at #, "Privacy" and "Data and privacy" at /data-privacy"Terms" to /terms, both of the others to /privacyTwo footer labels for one destination is the design's own redundancy and it stays. On a page a stranger arrives at, both of them mean the public document. G38, G40
welcome, trust"Read what we access" to /data-privacyto /privacyThe whole job of that button is to answer the fear before there is an account, and it was answering it with a sign-in form
sign-in, trust line"What we read" to /data-privacyto /privacySame bounce, on the screen where it is least forgivable: the person is being asked for their email and the reassurance link asks them to sign in first
data-privacy, policy"The full privacy policy is at tendd.com/privacy.""Read the full privacy policy"The address was printed rather than linked because the page did not exist, which is what G30 recorded. It exists. A printed URL that a person has to retype was never the intent, it was the honest form of an absence

The five in-app links that say "Data and privacy" did not move. They belong to the screen with the switches and the download button, which is a control panel and not a document, and a person already signed in wants the controls.

The address on the two documents, and the entity that is still missing (2026-09-23)

The founder bought tendd.co on 2026-09-23, the product moved onto it, and privacy@tendd.co now forwards to a person. So the one section both documents were written without could be written: who runs Tendd, and where to write about your own data.

ScreenWasBecameWhy
terms, privacy(no section; the closing line went straight to the other document)"Who runs Tendd", plus "Tendd is run by one person and not by a company. There is no business registered behind it yet, and when there is, this page will name it."The honest half of G43. A policy that implies a company where there is none is the vague reassurance the Forbidden table bans, wearing a legal coat. The founder's own name is not printed, because publishing a private person's legal name is his decision and not a builder's
terms, privacy(no address anywhere)"Write to privacy@tendd.co about anything on this page: what Tendd holds about you, how to get a copy of it, how to remove it, or a sentence here that does not match what you see. One person reads that address."The last clause is the one that matters and it is an invitation to falsify: every claim on both pages was read out of the code, so the correct response to a reader who finds one untrue is to hear about it. "One person reads that address" is true today and is the plainest form of the same fact the section above states
terms, privacy"Last updated 20 September 2026.""Last updated 23 September 2026."Both documents promise that this date is the day they last changed, and this is the first time that promise had to be kept

The sign-in email, which nobody had written (2026-09-24)

G46. The letter was Supabase's default, "Magic Link" and "Follow this link to login", sent from Supabase's own address. It is now two letters in the product's voice, sent from signin@tendd.co, and the rows are under sign-in-mail below.

ScreenWasBecameWhy
sign-in-mail"Magic Link""Your sign-in link for Tendd"A subject names what is inside and who it is from. "Magic" is the capability pattern Principle 1 stands apart from, and the recipient has never heard the word from us
sign-in-mail"Follow this link to login:" and a bare linka heading, one sentence naming the address, a button, and the same link printed as textThe address is named because the commonest failure on this route is a typo, and the letter is the last place it can be seen. The link is printed twice because some clients strip buttons
sign-in-mail(nothing)"If you did not ask for this, you can ignore it. Nothing happens unless the link is opened."The one fear a sign-in letter raises in somebody who did not ask for it, answered with the fact rather than with "your account is secure"
sign-in-mail-first(the same default as a returning person)"There is no Tendd account under this address yet, so opening the link starts one." and the line after itThe screen may not say whether an address has an account; the letter may, because only the owner of the address reads it

The policy follows the mail (2026-09-24)

G46 moved the sign-in email off Supabase's shared sender and onto Resend, and the founder routed every address on tendd.co to one Gmail inbox kept for his projects. Both made a line of /privacy untrue on the day they happened, and "That is the whole list" with it. npm run check:mail now fails when the policy and the sender disagree.

ScreenWasBecameWhy
privacy, processorsSupabase: "holds the database, and sends your sign-in email"Supabase: "holds the database"It stopped sending on 2026-09-24
privacy, processors(no row)Resend: "sends your sign-in email, and our replies when you write to us, so it sees your address and what the email says"Named with what it sees and not only what it does, because the letter carries a working sign-in link and a reader deserves to know who handles that
privacy, processors(no row)Cloudflare: "only if you write to privacy@tendd.co, and then it passes your letter on to the Gmail inbox where it is read"The address the policy asks people to write to lands in a Gmail inbox, so a letter about your data is read on Google's servers. "Only if" is the same shape the Google row already uses for a processor you meet by your own choice
privacy"Last updated 23 September 2026.""Last updated 24 September 2026."The promise at the top of the page. Terms did not change and keep their date

Sign in becomes a panel, and most of its words leave (2026-09-27)

P17. The founder asked for a sign-in with the action in front and the explanation elsewhere: Google first and largest, email as a second button that leads to the field, in a dialog over the public page rather than on a page of its own, and the descriptions moved to the two public documents. They were already there, or in the letter: /privacy says what Tendd holds and why the address is kept, and the letter says the link works once. So nothing had to be written into either document, and every line below was cut or shortened rather than added, except three: the line under the heading, "Continue with email", and the line that points at the two documents.

ScreenWasBecameWhy
sign-in"Type the email you used, and we'll send you a link. There is no password to remember, and nothing to reset."choose: "New to Tendd? Either way starts your account." / email: "We'll email you a link. There is no password."The first step no longer has a field, so the old line described a control that is one step away. What a stranger needs to know at the door is that it is also the way to start, which "No account yet? Start here" used to say by sending them away to node 1.2. The password fact stays, on the step where the field is
sign-in"Continue with Google" as the secondary actionthe primary action, first and largestThe founder's call. The link was the way in this product was designed around, and Google is the way people actually expect; one primary on the screen still, so the One Voice Rule holds
sign-in(no row)"Continue with email"The second way in is now a button that opens the field. It is worded as Google's twin so the two read as one choice. Not "Sign in with email", for the reason the Google row gave on 2026-09-08: the same button starts an account
sign-in"The address your list is kept under." (hint)(cut)The label says it
sign-in"What arrives" and "How long it works", with their two sentences(cut)The letter says "The link works once", and the step above the field says there is no password
sign-in"No account yet? Start here"(cut)Both ways in start an account; the fork at node 1.2 is still where the landing's own action goes
sign-in"Tendd holds an email and a currency, and nothing else." / "What we read""By continuing you agree to our Terms and Privacy Policy."The founder's note: the description goes to the documents. The line that points at them is the same shape node 1.2 already uses ("By starting you agree to our Terms and Privacy Policy")
sign-in"‹ Back" in an app bar"Back" as the name of an arrow on the email step, and the lockup as the way home on the pageBack now means back to the two ways in, which is the step a person came from
sign-in(no row)"Close" as the name of the dialog's cornerThe word upgrade already uses for the same act
sign-in-sent"A link is on its way to emma@example.com. Tap it and you are back in your list.""A link is on its way to emma@example.com."The address is the point of the line, and the letter says what the link opens
sign-in-sent"If it has not arrived / Give it a minute, and look in your spam folder""Give it a minute, and look in your spam folder."The advice without its label
sign-in-sent"If the address is wrong / Go back and type it again. Nothing was sent anywhere else"(cut)"Use a different email" under it is that advice as a control
sign-in-expired"A sign-in link works once and then stops, which is what keeps an old email from being a way in. Nothing is wrong with your account and nothing was lost.""Nothing is wrong with your account and nothing was lost."The reassurance is the half that matters in this register; why a link expires is the letter's to say
sign-in-expired"Send a new link" / "Use a different email"the two ways in, "Continue with Google" and "Continue with email"An expired link is answered by going in again, by either door

The same day the founder asked for "Get started" to be treated the same way, and node 1.2 became two pictured doors in the same card, opened over the landing. Its words stayed; three went.

ScreenWasBecameWhy
path-choice"‹ Back" in an app bar(cut) in the dialog; the lockup on the pageA dialog closes, and the page goes home the way sign-in does
path-choice"Step 1 of 3" in the app barthe same words, as the eyebrow over the headingThere is no app bar to stand in
path-choice"By starting you agree to our Terms and Privacy Policy. Tendd asks for read-only access and never for permission to move money."(cut)Agreeing now happens one step later, where an account is actually made: "By continuing you agree to our Terms and Privacy Policy." The read-only fact is already the bank door's own line

The policy follows Turnstile (2026-09-27)

P18. The sign-in letter is now asked for behind Cloudflare Turnstile, which sees the browser and its address for the moment it checks. Cloudflare was already on the list for mail to privacy@tendd.co, so its row grew rather than a new one appearing, and "That is the whole list" stays true.

ScreenWasBecameWhy
privacy, processorsCloudflare: "only if you write to privacy@tendd.co, and then it passes your letter on to the Gmail inbox where it is read"Cloudflare: "checks that a person and not a script is asking for a sign-in link, so it sees your browser and your internet address for that moment; and if you write to privacy@tendd.co, it passes your letter on to the Gmail inbox where it is read"Named with what it sees, like every row on the list. "Only if" had stopped being true: everybody who asks for a link meets it
privacy"Last updated 24 September 2026.""Last updated 27 September 2026."The promise at the top of the page

The same day the founder asked for a minute between two letters. N5 had already set it and the provider already held to it, in silence.

ScreenWasBecameWhy
sign-in-sent"Send another link", ready at once, and a second letter inside the minute refused with nothing said"Send another link in 0:42", counting down, then "Send another link"N5: a second request inside sixty seconds is "answered and not silently dropped". The count is the answer, given before the press rather than after it
sign-in, sign-in-sent(nothing: a letter that did not go returned the form in silence, G1)"We could not send a link just now. Try again a little later."The founder pressed a ready-looking button more than once and saw nothing happen. Written to the error rule: who (we), what (could not send), what to do (try again), no apology and no red. When the provider says how many seconds are left, the resend button counts them down instead. It said "in a minute" for one hour: the refusal the founder met next was the project's hourly allowance, which a minute does not clear, so the line promises no time it cannot keep

The free scan runs once, and the second door says so (2026-09-28)

P20. D-Gate always said a free person's Item is removed once the scan is done, and the product never removed it. Now it does, and that makes two lines necessary: the trust line for a bank that read and stopped, which was owned on 2026-09-02 and never printed (G3), and one for the person who presses "Connect your bank" a second time. Every door keeps its words; the route behind them sends a used scan to node 5.13.

ScreenWasBecameWhy
home, trust linethe manual edition, "No bank is connected, so nothing is read from anywhere.", printed under rows a bank found"Found in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date."Owned since D-Gate and printed now that the state exists. The date is the day of the last read, which is the day the rows were found
home, the quiet line under the last group"...or connect your bank and Tendd finds the rest." for anyone with no live bank(not drawn when a bank has already read)"Tendd finds the rest" is what the scan they had already did. A line may not offer as free the thing the next screen sells
upgrade, context(no line for the bank door)"You came here from Connect your bank. The first scan is done, and a bank connection that keeps the list up to date is part of Tendd Pro."The same shape as the two contexts already owned: where you came from, then what is behind it, in the plan's own words. "A bank connection that keeps the list up to date" is the feature row on the same screen, word for word, so the gate and the list below it name one thing once. No "unlock", no "again for $7.99"

The screen before Plaid stops promising the wrong next screen (2026-09-28)

G25. Plaid shows its own returning-user screen before any bank: a phone number, a code by text, and "Continue as guest" under them. It is on for every customer and /link/token/create has no parameter to refuse it. The line before the button promised a bank picker, so the first thing an avoider met after trusting us was a request for a phone number nobody had mentioned.

ScreenWasBecameWhy
connect-bank, title body"Next you'll pick your bank and sign in on your bank's own site. Tendd never sees your password, and you choose which accounts to share.""Next, Plaid opens. It may first ask for your phone number, to remember you in other apps that use Plaid; you can skip that with Continue as guest. Then you pick your bank and sign in on your bank's own site. Tendd never sees your password, and you choose which accounts to share."Principle 4: name the thing a person is about to be asked for before they are asked. The actor is Plaid, named, and the way past it is Plaid's own label, so the words on the next screen match the words on this one. "To remember you in other apps that use Plaid" is what the phone number is for, said plainly, because an unexplained phone request at a bank step reads as a trap. The rest of the line is unchanged

One more, from the same cause. Every free scan now ends disconnected, and node 6.14 drew no card for a disconnected source, so a person whose list came from one scan read "No sources yet" over it (G52).

ScreenWasBecameWhy
connections, a bank that stopped(no card; "No sources yet" when nothing else was there)the bank card with the chip "Disconnected", its last check and its count, and under them "Found in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date.""Disconnected" is the plain opposite of the "Connected" tag already on the card, and it is true of a free scan and of a disconnect alike. The sentence is Home's third trust edition reused whole, because it is the same fact about the same source. No button: there is nothing to disconnect

The same round closed G39 on paper, where it had already closed on screen: since P17 the first step of sign-in says "New to Tendd? Either way starts your account.", and "Type the email you used" is gone. The duplicate of clusters A and B that P17 left behind (one copy with the new sign-in rows, one with the old rows and the letter) is one copy again: the new sign-in rows and the letter, each once.

Tendd Pro can be paid for, in test mode (2026-09-28)

P24. Stripe landed, so node 5.13's buttons and 5.13.3's facts have values. Every line below was owned already except three, and those three are the smallest forms of lines that were.

ScreenWasBecameWhy
upgrade, the two priced buttons"Not open yet. Tendd cannot take a payment, so these have no button.""Start Tendd Pro - $69 a year" / "Start Tendd Pro - $7.99 a month", where payments are on; the old line where they are notBoth buttons owned since the design. The old line stays true wherever it is printed, which is the live site until G54
upgrade-current-plan, facts(not printed, G35)"Your plan / Tendd Pro, yearly" or "Tendd Pro, monthly"; "Renews / 1 May 2027, at $69""monthly" is new and is the owned "yearly" with the other interval. The amount prints as the cards print it: $69, $7.99
upgrade-current-plan, facts after cancelling(no form)"Ends / 1 May 2027. It does not renew"Cancelling in the portal keeps Pro to the end of the paid period, and "Renews" would then be false. Said as the fact and the absence, no regret and no offer
upgrade-current-plan, the action"Cancel Tendd Pro" (link)"Cancel Tendd Pro" (button, to Stripe's portal); "Manage plan" once it is cancelled or has no date; "Update your payment method" while a renewal is being retriedA button because it can end a payment (P5). "Manage plan" is Settings' own label and "Update your payment method" is renewal-failed's, reused whole

Settings says when a cancelled Pro ends (2026-09-29)

The founder cancelled Tendd Pro on dev.tendd.co, went to Settings, and read a bare "Pro" with no date: nothing on the screen said the plan was ending. /upgrade said it ("Ends / 1 May 2027. It does not renew"), Settings did not.

ScreenWasBecameWhy
settings, plan-card status after cancelling"Pro""Pro until 1 May 2027"The founder's own form ("Pro up to 28 Oct 2026"), in the date form 5.13.3 prints. "until" is renewal-failed's "Still Tendd Pro until 8 May"
settings, plan-card body after cancelling(none)"Then Free. It does not renew, and nothing more is charged."What comes after, said first as the plan and then as the money, which is the question a person who just cancelled has. "It does not renew" is the owned half of "Ends"
settings, plan-card status while Pro renews"Pro""Pro, renews 1 May 2027"Asked for by the founder the same day, so the two states read as a pair. "Renews" and the date are 5.13.3's. Not printed while a renewal is being retried: that date has passed
settings, plan-card body while Pro renews(none)"At $69 a year. Cancel any time in Manage plan." (or "$7.99 a month")The amount as the priced buttons say it, and where the way out is, named by the button under it. No pressure either way

Your trends opens for Tendd Pro (2026-09-29)

P25, closing G18. The founder paid on dev.tendd.co, opened Trends and met the lock he had just paid to open, because the Pro view had never been built. It is built from node 5.12's owned lines; what is new is only what real data needs and a fixture never showed: a total that fell, a price that went down, a subscription that was cancelled inside the window, and a list where nothing moved.

ScreenWasBecameWhy
history-trends, readoutthree fixed sentences, one per rangethe same sentence composed from the person's own months; "down about" where the total fell; the locked view's "the same as it was in May" where it held; "across two months" when the history is shorter than threeThe sentence is the fact and the chart illustrates it. A fixture only ever went up
history-trends, readout, a month last year"from $143.91 last August" (owned)kept, and the rule behind it made general: a month in an earlier year is "last August", with no "in""in last August" is not English, and a bare "August" in September reads as the one to come
history-trends, trend listone Steady row per rangeonly the rows that moved, then "The other 11 held steady."With fourteen real rows the list was eleven Steady rows under three that moved, and the heading is "What moved". The count keeps the lock's promise "which held steady" true
history-trends, trend list, new kinds(none)"Down $2.00 since May, now $5.99 a month" / Lower; "Cancelled in June, was $7.99 a month" / CancelledThe mirror of "Up"/Higher, and the one way the total falls that is not a price. "Cancelled" is the chip Home already prints on that row (N6)
history-trends, trend list, empty(none)"Nothing moved. Every subscription is where it was in May."A calm window is a real result, said as a fact
history-trends, by categorythree fixed sentencescomposed: "Software is up $20.00 and Streaming $2.50 since May. Everything else held steady.", with "is down" where a category fell and "Every category held steady since May." where none movedThe owned form, with the direction said once and carried until it changes. The fixture's "when ChatGPT Plus arrived" clause is dropped: the list beside it already says which row arrived
history-trends, data sourceChase onlythe owned bank edition, and "Every month here is your own history, from the 14 subscriptions on your list." where no bank is readingGC6 on a list typed by hand, or found by a scan that is not reading now
history-trends, chart labela sentence per range describing the shape"Line chart of your monthly total from May to July. The figures are the sentence above"The shape is the sentence above it; a label that describes it would be a second, unowned reading of the same figures

A cancelled Tendd Pro can be kept (2026-09-29)

P27. The founder cancelled, then asked whether he could change his mind. He could, but only inside Stripe's portal ("Don't cancel subscription"), behind a button called "Manage plan", and no line on either screen said so.

ScreenWasBecameWhy
upgrade-current-plan and settings, after cancelling, the action"Manage plan" only"Keep Tendd Pro" (primary), then "Manage plan"The verb is what the person wants to do, and "Tendd Pro" is the product's own name for it. Not "Resume" (nothing is paused) and not "Undo" (it names our action, not their plan)
upgrade-current-plan and settings, after cancelling, over the action(none)"Keeping it means it renews on 1 May 2027, at $69. Nothing is charged before then."Voice's rule that the consequence stands above the action: keeping it is a charge on a date, said with the date and the amount in the form "Renews" already uses, and the second sentence answers the fear that pressing it charges now. No offer, no discount, no regret

The letters about your subscriptions (2026-09-29)

P29. Settings had four switches and nothing behind them: no letter was ever sent. Now two letters exist, and every word in them is below. They are cut from lib/letters.ts, which lib/letters.test.ts holds to these sentences. The item sentences are the alerts screen's own where one exists ("went up by", "did not go through", "charges ... in 2 days", "See what changed", "What to do", "See Netflix"), so a person reads the same fact in the same words in the inbox and on the screen.

ScreenWasBecameWhy
settings, notificationsfour switchesa fifth, "A charge is coming up (Two days before, with the amount. Part of Tendd Pro.)"P30 narrowed advanced alerts to the two that are real, and this is the second. Says when and what it carries, like the other four
privacy, processors, Resend"sends your sign-in email, and our replies when you write to us, ..."adds "the emails about your subscriptions that you choose in Settings"Resend now carries these too, and the list names what each processor sees. "that you choose" is true: two are on by default and every one can be turned off
alert-mail, subject with several items(none)"3 things about your subscriptions"A count, no adjective. One item is its own sentence instead
alert-mail, trial(none)"Your Peloton App trial ends in 2 days, and then it charges $12.99."Who (the trial), when, and the consequence with its amount, the order voice asks for
alert-mail, footer(none)"Tendd emails you about these because of your choices in Settings, and you can change them at any time." and the link "Change what Tendd emails you about"Says why the letter came and hands over the lever in the same line. No "unsubscribe" scare word, and no "you are receiving this because you signed up"
digest-mail(none)"Your week ahead", the count and the sum, one line per charge, "Open your list"The switch promised "A calm Sunday summary of what is coming up", so it is exactly that: what charges in the next seven days, soonest first

renewal-mail

P35. The notice the terms promise before a yearly plan renews. Behind no switch.

ScreenZoneLineType
renewal-mailsenderTendd, alerts@tendd.costatus
renewal-mailsubjectTendd Pro renews on 29 September 2027, at $69heading
renewal-mailpreviewNothing needs doing if you want to keep it.body
renewal-mailtitleYour yearly plan renews by itself on 29 September 2027, and $69 is charged then. Nothing needs doing if you want to keep it.body
renewal-mailtitleIf you would rather not, cancel before then in Settings, under Manage plan, and nothing more is charged.body
renewal-mailprimary-actionManage planbutton
renewal-mailfooterTendd sends this before every yearly renewal, so a charge a year apart is never a surprise.footer

alert-mail (+ digest-mail)

ScreenZoneLineType
alert-mailsenderTenddstatus
alert-mailsenderalerts@tendd.costatus
alert-mailsubjectNetflix went up by $2.50, now $17.99 a monthheading (one item: its sentence, without the full stop)
alert-mailsubject3 things about your subscriptionsheading (more than one)
alert-mailpreviewFrom your list in Tendd.body (one item)
alert-mailheaderTenddstatus
alert-mailitemNetflix went up by $2.50, now $17.99 a month.body
alert-mailitemA payment to Amazon Prime did not go through.body
alert-mailitemYour Peloton App trial ends in 2 days, and then it charges $12.99.body
alert-mailitemSpotify Premium charges $11.99 tomorrow.body
alert-mailitemSee what changed / What to do / See Netflixlink
alert-mailfooterTendd emails you about these because of your choices in Settings, and you can change them at any time.footer
alert-mailfooterChange what Tendd emails you aboutlink
alert-mailfooterTendd, tendd.cofooter
digest-mailsubjectYour week ahead: 3 charges, $45.97heading
digest-mailsubjectYour week ahead: 1 charge, $17.99heading
digest-mailsubjectYour week ahead: nothing chargesheading
digest-mailtitleYour week aheadheading
digest-mailtitle3 subscriptions charge this week, $45.97 in all.body
digest-mailtitle1 subscription charges this week, $17.99 in all.body
digest-mailtitleNothing on your list charges this week.body
digest-mailitemNetflix charges $17.99 in 2 dayslink
digest-mailprimary-actionOpen your listbutton

The when-words are the alerts screen's: "today", "tomorrow", "in 2 days". Where the charges are in more than one currency the sum is left out of both the subject and the line ("Your week ahead: 3 charges", "3 subscriptions charge this week."), because a sum across currencies is true of nothing. The digest footer is the alert letter's.

What Tendd Pro says it adds, made true (2026-09-29)

P30, G56. The founder asked that every line on the Pro list be true before a live key, without asking anybody for access to their accounts. Two promises were not: screenshots for each cancel step and a link that "skips the retention screens" (Tendd has neither, and no link can skip a service's own "please stay" screen), and "unusual" and "duplicate" charges among the advanced alerts (nothing detects either).

ScreenWasBecameWhy
cancel-guide, pro-callout"The steps above are free and always will be. Tendd Pro adds screenshots for each one and a direct link that skips the retention screens.""The steps above are free and always will be. Tendd Pro adds a direct link to the cancel page on netflix.com, so you start where the steps end." Drawn on Free only, and only where the service publishes a cancel pageThe first sentence stays word for word, because D3 binds hardest here. The second says what Pro actually adds and where it goes. "Skips the retention screens" was a promise no link can keep: Netflix's own cancel page still offers a pause, and the steps say so
cancel-guide, primary-action on Pro"Open netflix.com and cancel""Open the cancel page on netflix.com"Names the page and not the site, which is the whole difference Pro pays for. The domain is the one the link opens, read off the address
cancel-guide, under the Pro link(none)"We last checked this link on Sep 29."Node 4.9 block 10's rule for the steps, applied to the link: a link that rots quietly is worse than none
cancel-guide-blocked, next-move"Prefer a guided walk-through with a direct link that skips the retention screens?" / "See what Pro adds"Free: "Tendd Pro links straight to the cancel page on netflix.com." / "See what Pro adds". Pro: "Want to try again from the start?" / "Open the cancel page on netflix.com"Still one line at the foot and nothing above the actions. On Free it is a fact, not a question aimed at somebody who just hit a wall; on Pro it is the link itself
upgrade-current-plan, feature-list"Advanced alerts (Trial ending, unusual, duplicate)" / "Full cancel guides (Step by step, with the direct link)""Advanced alerts (A trial ending, and a charge coming up)" / "Full cancel guides (With a direct link to the cancel page)"The alerts are the two that are sent by email; the steps are free for everybody, so the Pro half of the guide is the link
alerts, alert-row"We noticed something about your Adobe Creative Cloud charge" / "Unusual charge · Adobe Creative Cloud · Jul 15 · Tendd Pro explains what we saw"(retired)Nothing detects an unusual charge, and the row was never built. It returns with the detection, if it is ever built

What a free scan does not name, said once (2026-09-29)

P31, G53. The founder: show a couple of names and one block with a lock, "you have XX more subscriptions, go Pro and see everything, or add them yourself", with a button to the plans. The same day a free scan stopped keeping the names it does not show, so nothing on these rows is hidden by the screen any more: there is nothing behind them to hide.

ScreenWasBecameWhy
home and guided-reveal, the withheld rowsa grey bar per row, "Shown with Tendd Pro", inside the categories(removed)A row with no name and no logo is a hole in a list whose promise is names. The rows are counted in one place instead, the block below, and every figure above still includes them
home, locked-list"11 of these came from your bank and are not named yet." and "See every name""You have 11 more subscriptions", "$138.93 a month, already counted in your total.", "Tendd found them in your bank. Tendd Pro shows every name, or you can add the ones you know yourself.", "Get Tendd Pro", "Add them yourself"The founder's own shape. The amount line keeps the total honest: the named groups plus this line are the figure at the top. "You have" and not "There are": they are the person's. Two ways on, and the free one is real, which is what keeps the offer from being a wall (voice, Pro gate). "Get Tendd Pro" leads to the plans and not to a payment, so it names the plan and not a price
guided-reveal, locked-list"The other 11 are here too" and its bodythe same block as Home, without the amount lineOne offer, said the same way in both places. No amount on the reveal: D1 puts the number third, and step 2 has none on purpose
home, the same block on Pro(none)"They came from your free bank scan, which keeps no names. Connect your bank again and Tendd names every one." and "Connect your bank"Someone who pays before reconnecting has nameless rows for a while; the block says why and the one thing that names them. "Connect your bank" is D2's word
history-trends and its export, a nameless row(none)"Not named yet"A nameless row still has months and figures, and on Pro the list prints it under a label rather than a blank until the bank is read again

A free scan is held for seven days, and paying names the rest (2026-09-29)

P32. The founder, on P31's consequence that paying no longer named anything until the bank was read again: "хотелось бы автоматически после оплаты делать скан". A free scan's connection is now kept for seven days without being read, paying reads it, and every line that described the old ending says the new one, with its date.

ScreenWasBecameWhy
home, trust line after a free scan"Found in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date.""Found in Chase on Aug 30. Tendd keeps the connection until Sep 6 without reading it, and then it ends by itself."The old line would be false for seven days: something IS kept. Said as what Tendd does, what it does not do, and when it stops, in that order. The old line returns once the hold ends
home and reveal, locked block(none)"Choose Tendd Pro before Sep 6 and Tendd names them straight away, without asking your bank again."The one reason the hold exists, said while it is true. A date and a consequence, not a countdown: no "only", no "hurry"
connections, a held bankchip "Disconnected", no controlchip "Kept until Sep 6", the sentence, and "Disconnect Chase"A held connection is a standing permission, so the card says so and hands over the control that ends it sooner
connect-bank, ?from=pro"Step 2 of 3" and the ordinary linesthe step marker dropped, and "Sign in to your bank once more and Tendd names every subscription your free scan found."Paying after the seven days lands here: one line of why, and no onboarding counter for a journey this person finished long ago
privacy, your rights(none)"A free bank scan reads once. Tendd then keeps the connection for seven days without reading it, ..."The policy names every standing permission Tendd holds; this is a new one

The locked block in the landing's language (2026-09-29)

P34. The founder turned down P33's redesign and asked for the public page's techniques. One string is new; the heading keeps its words and is set in three parts.

ScreenWasBecameWhy
home and reveal, locked-list(none)the eyebrow "Tendd Pro"Every landing section opens with a dotted eyebrow naming its subject; here the subject is the plan the block leads to. The product's own name, no adjective
home and reveal, locked-list heading"You have 3 more subscriptions", one linethe same words, with "3" set as the landing's figureThe count is the fact that sells, so it is the biggest thing in the block, as "14 subscriptions" is on the public page. Read aloud it is the same sentence

How paying works, written before anybody pays (2026-09-29)

P35, G54. The terms promised "these terms will say how paying works before you are ever asked for money", and now they do. Every line is one the code keeps; the refund window is the founder's.

ScreenWasBecameWhy
terms, plans"Adding subscriptions yourself is free and unlimited. Connecting a bank and seeing every name the first scan finds is Tendd Pro.""... and so is your first bank scan, which names three of what it finds. Every name, and a bank connection that keeps your list up to date, are Tendd Pro."The old line said connecting a bank was Pro; since D-Gate the first scan is free, and the terms must say what the product does
terms, plans"Tendd Pro is not on sale yet. There is no price, ..."a section, "Paying for Tendd Pro", with eight facts; the not-on-sale sentence stays at its head only where no payment can be takenPrice, who takes it, renewing, cancelling, refunds, a failed payment, the end, a price change: the eight questions a person has before paying, each answered by what the product does
privacy, holds and processors(none)"If you pay for Tendd Pro", "The emails Tendd sent you", and Stripe with what it seesA new processor and two new kinds of record: the policy names each with what it holds

Tendd Pro's monthly price moves to $9.99 (2026-09-30)

D4 amended by the founder after a pricing audit: $9.99 a month, $69 a year unchanged. Every line that prints the monthly price or the yearly saving was changed with it; the rows above that record earlier changes keep the price they were written at.

ScreenWasBecameWhy
upgrade, landing pricing, terms, FAQ"$7.99 a month""$9.99 a month"D4, amended
upgrade and landing, the yearly card"it saves about $27 a year versus paying monthly""it saves about $50 a year versus paying monthly"$9.99 x 12 = $119.88, less $69 is $50.88; "about" rounds down, never up

Help, About and Contact exist (2026-09-30)

P36, G32 and G40. The founder: "дальше делай сам страницы Help, About и Contact". No design ever drew them, so each is built from lines the product already says and keeps: the landing's FAQ, the terms, the privacy page, the footer. The new lines are only the ones that say where something is ("On Your sources, choose Reconnect") or what is absent ("There is no phone line and no chat"). The footer's "Careers" became "Help": there are no jobs, and a page saying so would be a link for the sake of a column.

help

ScreenZoneLineType
helpappbarBacklink
helptitleHelpheading
helptitleAnswers to what people ask most, and how to reach a person when these are not enough.body
helpgroupGetting your listheading
helpgroupYour bankheading
helpgroupCancelling a subscriptionheading
helpgroupTendd Proheading
helpgroupSigning inheading
helpgroupYour dataheading
helpanswerDo I have to connect my bank? / No. You can add your subscriptions yourself from 400+ services and get the same calm view. Connecting a bank is one of two ways in, not the price of entry.field-label / body
helpanswerA subscription is missing / Tendd finds what your bank reports as a repeating charge. Something paid another way, or too new to have repeated yet, will not appear. Add it yourself with Add a subscription, on your list.field-label / body
helpanswerA subscription is wrong / Open it and choose Edit the details.field-label / body
helpanswerIs connecting my bank safe? / You sign in on your bank's own site, through Plaid, so Tendd never sees your password. The connection is read-only. Tendd cannot move your money, and you can disconnect at any time.field-label / body
helpanswerMy bank says Reconnect needed / Banks ask for this now and then to keep the connection secure. On Your sources, choose Reconnect and sign in to your bank once more. Your list and its history stay as they are.field-label / body
helpanswerHow do I disconnect a bank? / On Your sources, choose Disconnect. Tendd stops reading, the key it held is deleted, and the subscriptions already found stay on your list.field-label / body
helpanswerCan Tendd cancel subscriptions for me? / Tendd shows you how to cancel, step by step, and that part is free. It does not cancel on your behalf, because that would mean asking for more than read-only access to your money.field-label / body
helpanswerThe service would not let me cancel / On the cancel guide, choose Couldn't cancel? for what to try next.field-label / body
helpanswerWhat does Tendd Pro add? / Every name in your bank scan, a bank connection that keeps your list up to date, history and trends, alerts for a trial ending and a charge coming up, a direct link to each cancel page, and your history as a spreadsheet.field-label / body
helpanswerHow do I cancel Tendd Pro? / In Settings, under Manage plan, in one step and with no questions. Tendd Pro stays open until the end of the period you paid for, and nothing more is charged.field-label / body
helpanswerI was charged by mistake / Write to privacy@tendd.co within 14 days of the charge and we refund it in full.field-label / body
helpanswerThe sign-in email did not arrive / Look in the spam folder, and check that the address on the sign-in page is the one you use. You can ask for a new link after a minute.field-label / body
helpanswerThe link says it has expired / A sign-in link works once. Ask for a new one on the sign-in page, and open the newest.field-label / body
helpanswerDownload or delete everything / Both are on Data and privacy, and both are free. Deleting removes your account and keeps no copy.field-label / body
helpcontactStill stuckheading
helpcontactWrite to hello@tendd.co. One person reads every letter and answers it.body
helpway-acrossEvery way to reach uslink

about

ScreenZoneLineType
aboutappbarBacklink
abouttitleAbout Tenddheading
abouttitleA calm way to see and control your recurring payments. Built for people who are not into finance.body (the footer's line)
aboutwhyWhy it existsheading
aboutwhySubscriptions are easy to start and easy to forget, and looking at all of them at once can feel like an audit. Tendd is the opposite of an audit: one list of what you have signed up for, with the monthly total as the biggest thing on the screen.body
aboutpromisesWhat it will not doheading
aboutpromisesIt can never move your money / The connection has no permission to, and we never ask for one.field-label / body
aboutpromisesIt does not sell your data / Not to advertisers, not to anyone, on any plan.field-label / body
aboutpromisesIt does not judge / No budgets to set up, no red warnings, no lectures. Just your numbers in plain language.field-label / body
aboutoperatorWho runs Tenddheading
aboutoperatorTendd is run by one person and not by a company. There is no business registered behind it yet, and when there is, this page will name it.body (the terms' line)
aboutway-acrossEvery way to reach uslink

contact

ScreenZoneLineType
contactappbarBacklink
contacttitleContactheading
contacttitleOne person reads every letter, and answers it.body
contactaddressesWhere to writeheading
contactaddressesAnything about Tendd / hello@tendd.cofield-label / link
contactaddressesYour data: a copy, a correction, or removing it / privacy@tendd.cofield-label / link
contactaddressesA charge you think was a mistake / privacy@tendd.co, within 14 days of it, and we refund it in fullfield-label / body
contactabsenceThere is no phone line and no chat. Tendd is one person, and email is how every letter gets a real answer.body
contactway-acrossAnswers to what people ask mostlink
welcomefooterAbout / Contact / Helplink (Help replaces Careers)

Canonical subscription dataset (product fixtures, not authored copy)

The 14-subscription sample that repeats across Home, its states, and the Subscription Detail master pane is product data, not voice copy, and is not rewritten. It is listed once here and referenced elsewhere as "the canonical list". Total: $192.90 / month.

CategorySubscriptionAmountNext / TrialStatus
StreamingNetflix$17.99 / monthNext: Aug 3Active
StreamingDisney+$13.99 / monthNext: Aug 12Active
StreamingAmazon Prime$14.99 / monthNext: Aug 20Active
StreamingHulu$7.99 / monthNext: Aug 25Active
SoftwareAdobe Creative Cloud$22.99 / monthNext: Aug 15Active
SoftwareChatGPT Plus$20.00 / monthNext: Aug 5Active
SoftwareiCloud+$2.99 / monthNext: Aug 2Active
SoftwareNotion$8.00 / monthNext: Aug 9Active
MusicSpotify Premium$11.99 / monthNext: Aug 7Active
MusicApple Music$10.99 / monthNext: Aug 14Active
FitnessPeloton App$12.99 / monthTrial ends: Aug 18Trial
FitnessStrava$11.99 / monthNext: Aug 22Active
NewsThe New York Times$17.00 / monthNext: Aug 11Active
NewsThe Economist$19.00 / monthNext: Aug 28Active

The line inventory

Every interface line, verbatim, grouped by cluster and then by screen. The columns are the ones How to read this defines.

Cluster A: Welcome landing and Path Choice

welcome (public marketing landing)

The story, added 2026-08-14 (D-Hero). The public page's second block is a stage that holds still while the reader scrolls through it: the canonical fourteen drift as a field, gather into a list, and three of them are cancelled one at a time. The same decision took the proof panel out of the hero, so the four lines that stood in it (the label, the count, the total and the caption) are now the head of the stage and are listed once, under story. The zone was called cut-list for one day. Four totals and four counts are real text in the page, one per state, because CSS cannot rewrite the words inside an element and a string rendered from a stylesheet would be a line of product copy this file cannot own. Cancelled is the one new word on the whole page, and it is spelled the way cancel-win already spells it ("You just cancelled Netflix"), not the American single-l. The three that are cancelled are the three the product itself names: Netflix, which cancel-win cancels, and Peloton App and The New York Times, the two the cancel nudge on home flags as not opened (it was home-savefocus until 2026-08-21). Their prices are the fixture prices, so $192.90 minus $47.98 is $144.92 and a reader can check it against the rows in front of them.

Light 2, added 2026-09-26 (P16). The page was rebuilt around the same argument and kept every line below; it adds no sentence. What it adds is five uses of lines it already owned, each listed in the last rows of this table: the swap button's second label, which is the bar's own "Sign in" uncovered under a pointer while the link keeps "Get started free" as its name; the three section labels, which are the bar's three links set again above the blocks they point at; four figures counted up on a panel, each standing over a sentence the page already says; the three step titles repeated large and grey as moving decoration; and the name, set huge and faint at the foot. The count and the total also appear once more, on two glass cards in the whirlpool, before the list forms.

ScreenZoneLineType
welcometop-navTenddnav
welcometop-navHow it worksnav
welcometop-navTrust and securitynav
welcometop-navPricingnav
welcometop-navSign inlink
welcometop-navGet started freebutton
welcomeheroFor people who are not into financebody
welcomeheroSee what you're paying for. Calmly.heading
welcomeheroTendd shows every subscription and recurring charge in one calm view, so you always know what is going out. No spreadsheets, no judgment, no surprises.body
welcomeheroGet started freebutton
welcomeheroSee how it worksbutton
welcomeheroNo bank connection needed to start. Read-only, we cannot move your money.body
welcomestoryExample, not your databody
welcomestory$192.90 / $174.91 / $161.92 / $144.92body
welcomestory14 subscriptions / 13 subscriptions / 12 subscriptions / 11 subscriptionsbody
welcomestorya month, for what you have signed up forbody
welcomestoryActivebadge
welcomestoryTrialbadge
welcomestoryCancelledbadge
welcomebenefit-cardCalm control of your recurring moneyheading
welcomebenefit-cardTendd is not a budgeting app. It is a simple, low-pressure way to see and control what you are subscribed to.body
welcomebenefit-cardEverything in one placeheading
welcomebenefit-cardEvery subscription and recurring charge, pulled together and grouped by category. One calm list instead of a dozen forgotten logins.body
welcomebenefit-cardClear, never judgedheading
welcomebenefit-cardNo budgets to set up, no red warnings, no lectures. Just your numbers in plain language, so you feel in control instead of anxious.body
welcomebenefit-cardNever caught off guardheading
welcomebenefit-cardTendd tells you in plain words when a price goes up, a free trial is about to end, or a payment does not go through.body
welcomehow-it-worksHow Tendd worksheading
welcomehow-it-worksThree steps, a few minutes. You are in control the whole way.body
welcomehow-it-worksConnect or addheading
welcomehow-it-worksConnect your bank read-only, or add your subscriptions yourself from 400+ services. Your choice, no pressure to link an account.body
welcomehow-it-worksSee it all, calmlyheading
welcomehow-it-worksTendd finds your recurring charges and shows them in one clear list, with your real monthly total as the biggest thing on screen.body
welcomehow-it-worksCancel and saveheading
welcomehow-it-worksSpot what you no longer use and cancel it with a step-by-step guide. Feel the small win when the number goes down.body
welcometwo-pathsTwo ways to startheading
welcometwo-pathsNeither one is the real way in. You pick when you start, and you can add the other later.body
welcometwo-pathsConnect your bankheading
welcometwo-pathsRead-only, through Plaid, and about a minute. Tendd finds the charges that repeat and names them for you.body
welcometwo-pathsAdd them yourselfheading
welcometwo-pathsPick from 400+ services and add what you already know about. No bank is involved, and nothing leaves your control.body
welcometrustTrusted with your moneyheading
welcometrustTrust is earned, not claimed. Here is exactly what Tendd can and cannot do.body
welcometrustRead-only, alwaysbody
welcometrustTendd can see your recurring charges but cannot move, spend, or touch your money.body
welcometrustBank connection through Plaidbody
welcometrustYou sign in on your bank's own site, through Plaid, the same service many major finance apps use. We never see your bank password.body
welcometrustYou are in controlbody
welcometrustDisconnect any account or delete all of your data at any time, in one tap. It is gone when you say so.body
welcometrustWe never sell your databody
welcometrustYour financial life is yours. Tendd does not sell or share it, full stop.body
welcometrustRead what we accesslink
welcomepricingSimple, honest pricingheading
welcomepricingThe whole calm view is free. Tendd Pro adds history, trends and advanced alerts.body
welcomeprice$69 a yearheading
welcomepriceThat is $5.75 a month, and it saves about $50 a year versus paying monthly.body
welcomepriceBest valuestatus
welcomeprice$9.99 a monthheading
welcomepriceMonth to month. Cancel any time, no lock-in.body
welcomepriceLifetimeheading
welcomepriceone paymentbody
welcomepriceTendd Pro stays open, for people who would rather never think about a renewal again.body
welcomepriceNot on sale yet. We are still working out the price.body
welcomeplan-cardEverything in Tendd Profield-label
welcomefeature-list-compactHistory and trends / Advanced alerts / Full cancel guides / Exportbody
welcomeprimary-actionStart Tendd Pro - $69 a yearbutton
welcomeprimary-actionStart Tendd Pro - $9.99 a monthbutton
welcomepricingThe whole calm view is free. Tendd Pro, $9.99 a month or $69 a year, adds history, trends, and advanced alerts.body
welcomepricingNo cap on subscriptions and no cap on banks in Free. Cancelling is free, always.body
welcomefaqQuestions people ask firstheading
welcomefaqDo I have to connect my bank?heading
welcomefaqNo. You can add your subscriptions yourself from 400+ services and get the same calm view. Connecting a bank is one of two ways in, not the price of entry.body
welcomefaqIs connecting my bank safe?heading
welcomefaqYou sign in on your bank's own site, through Plaid, so Tendd never sees your password. The connection is read-only. Tendd cannot move your money, and you can disconnect at any time.body
welcomefaqWhat does Tendd cost?heading
welcomefaqThe calm view is free, with no cap on how many subscriptions or banks you add. Tendd Pro is $9.99 a month or $69 a year, and it adds history, trends, and advanced alerts.body
welcomefaqCan Tendd cancel subscriptions for me?heading
welcomefaqTendd shows you how to cancel, step by step, and that part is free. It does not cancel on your behalf, because that would mean asking for more than read-only access to your money.body
welcomefinal-ctaSee what you're paying for. Calmly.heading
welcomefinal-ctaStart free. No bank connection needed, and nothing to cancel later if it is not for you.body
welcomefinal-ctaGet started freebutton
welcomefinal-ctaAlready using Tendd?body
welcomefinal-ctaSign inlink
welcomefooterA calm way to see and control your recurring payments. Built for people who are not into finance.footer
welcomefooterProduct / Company / Legal (How it works, Trust and security, Pricing, About, Contact, Careers, Privacy, Terms, Data and privacy)footer
welcomefooter-bar(c) 2026 Tenddfooter
welcomefooter-barRead-only. Tendd cannot move your money.footer
welcomefooter-barTendd is not affiliated with the services shown. Their names and logos belong to their owners.footer
welcomeswap-buttonSign inbutton (the label a pointer uncovers; the accessible name stays "Get started free")
welcomesection-labelHow it works / Trust and security / Pricinglabel
welcomestats$192.90 / 400+ / 3 / $5.75figure
welcomeghost-wordsConnect or add / See it all, calmly / Cancel and savedecoration (hidden from assistive technology)
welcomefooterTendddecoration (the watermark, hidden from assistive technology)

The bar at the foot arrived on 2026-08-16, on the founder's decision, and it added one string rather than two: its second line is the D7 trust line word for word, the sentence this product repeats on purpose, and reusing it is not a second edition of it. The year in the first line is the only literal the public page carries that nothing else owns.

The third line arrived on 2026-09-26, after the fourteen tiles became the services' own published marks. The page shows other companies' names and logos in its story and nowhere says whose they are, and a reader could take a logo on a marketing page for a partnership. It says who does not stand behind the page and whose the marks are, in two plain sentences, and it claims nothing about the law. Whether that is enough is a lawyer's question, G49.

path-choice

The doors of node 1.2 are a card since 2026-09-27 (P17), opened over the landing by "Get started free" and standing on /path-choice for everybody who arrives by address. Every line is the one the screen had, less the three the rewrite log above lists.

ScreenZoneLineType
path-choiceeyebrowStep 1 of 3status
path-choicetitleHow do you want to start?heading
path-choicetitleAdding them yourself is free and unlimited. The first bank scan is free too, and seeing every name it finds is Tendd Pro.body
path-choicepath-optionConnect your bankheading
path-choicepath-optionRead-only, through Plaid, and about a minute. Tendd cannot move your money.body
path-choicepath-optionChoose this pathbutton
path-choicepath-optionAdd them yourselfheading
path-choicepath-optionStart with one and add more later. No bank is involved, and nothing leaves your control.body
path-choicepath-optionChoose this pathbutton
path-choicelaterDo this laterlink
path-choiceway-acrossAlready have an account? Sign inbody

terms

The public document, added 2026-09-20. Node 1.2 promises "Terms and Privacy Policy" and the landing's footer promises "Terms", and until this page existed both pointed at a screen that asks a stranger to sign in. P12.

ScreenZoneLineType
termsappbar‹ Backlink
termstitleTermsheading
termstitleWhat Tendd does, what it does not do, and what we each agree to.body
termstitleLast updated 29 September 2026.body
termswhat-it-isWhat Tendd isheading
termswhat-it-isTendd keeps one list of what you pay for: what it costs, how often it repeats and when it is next due. The list is built from the recurring charges your bank reports, from what you type in yourself, or from both.body
termswhat-it-isTendd is read-onlyfield-label
termswhat-it-isIt cannot move your money. The bank connection has no permission to, and we never ask for one.body
termswhat-it-isTendd cannot cancel anything for youfield-label
termswhat-it-isCancelling happens at the service. Tendd shows you where to go and what to say.body
termswhat-it-isTendd is not financial advicefield-label
termswhat-it-isIt is a record of what you signed up for. The decisions stay yours.body
termsaccuracyWhat the list is worthheading
termsaccuracyTendd finds what your bank reports as a repeating charge. Something paid another way, or too new to have repeated yet, will not appear, and you can add it yourself.body
termsaccuracyYour bank's own record is the one that counts. Your list is a clear view of what you are paying for, and it is not a statement.body
termsaccountYour accountheading
termsaccountYour account is reached by your email address, so anyone who can open your email can open Tendd as you. Keep it safe.body
termsaccountEverything Tendd holds for you is yours to download or to remove, at any time, on Data and privacy.body
termsplansFree and Tendd Proheading
termsplansAdding subscriptions yourself is free and unlimited, and so is your first bank scan, which names three of what it finds. Every name, and a bank connection that keeps your list up to date, are Tendd Pro.body
termspayingPaying for Tendd Proheading
termspayingTendd Pro is not on sale yet, and nothing in Tendd charges you today. When it is on sale, this is how paying works.body (where no payment can be taken)
termspayingThe price / $9.99 a month or $69 a year, in US dollars. The payment page shows the total before you pay.field-label / body
termspayingWho takes the payment / Stripe, on its own page. Tendd never sees your card number: it learns which plan you chose and whether the payment went through.field-label / body
termspayingRenewing / Tendd Pro renews by itself at the end of each month or year, at the same price, until you cancel. Before a yearly plan renews, Tendd emails you a month ahead with the date and the amount.field-label / body
termspayingCancelling / In Settings, under Manage plan, in one step and with no questions. Tendd Pro stays open until the end of the period you paid for, nothing more is charged, and until that day you can keep it after all.field-label / body
termspayingRefunds / If a charge was a mistake, such as a renewal you meant to stop, write to privacy@tendd.co within 14 days of it and we refund it in full. After that we do not refund part of a period that has started, unless the law where you live says we must.field-label / body
termspayingA payment that does not go through / Stripe tries again over the following days, and Tendd Pro stays open while it does. If it still does not go through, your plan returns to Free.field-label / body
termspayingWhen Tendd Pro ends / Your list stays yours, with every name it had. The bank connection ends, as it does on Free, so the list stops updating by itself.field-label / body
termspayingIf the price changes / We email you at least 30 days before a new price applies to you, and you can cancel before then.field-label / body
termsbankThe bank connectionheading
termsbankBanks are connected through Plaid. You enter your bank details with Plaid and never with us, their terms cover that part, and you can disconnect a bank whenever you want, on Your sources.body
termsavailabilityWhen Tendd does not workheading
termsavailabilityTendd is young, and it will sometimes be down, late or wrong. We do not promise it is always available or always complete, and we cannot take on what a missed charge costs you. What we do promise is the read-only limit above, which is enforced in the code and not only written here.body
termsendingEnding itheading
termsendingYou can delete everything at any time, and nothing is kept back: no copy, no archive.body
termsendingWe can close an account that is being used to break the law or to damage Tendd for other people, and we will tell you why.body
termschangesWhen these terms changeheading
termschangesThe date at the top of this page is the day it last changed. If a change affects what you get or what you pay, we will tell you by email before it takes effect.body
termsoperatorWho runs Tenddheading
termsoperatorTendd is run by one person and not by a company. There is no business registered behind it yet, and when there is, this page will name it.body
termsoperatorWrite to privacy@tendd.co about anything on this page: what Tendd holds about you, how to get a copy of it, how to remove it, or a sentence here that does not match what you see. One person reads that address.body
termsway-acrossPrivacy is a separate pagelink

privacy

The public document, added 2026-09-20. Every claim on it was read out of the code before it was written down, the way data-privacy is: the three promises are the same three strings that screen owns, and the list of who else can see your data is the list of hostnames the running product actually talks to. P12.

ScreenZoneLineType
privacyappbar‹ Backlink
privacytitlePrivacyheading
privacytitleWhat Tendd holds about you, who else can see it, and how to take it all back.body
privacytitleLast updated 29 September 2026.body
privacypromisesWe read your recurring chargesbody
privacypromisesRead-only, and nothing else you do with your money.body
privacypromisesWe can never move your moneybody
privacypromisesThe connection has no permission to, and we never ask for one.body
privacypromisesWe do not sell your databody
privacypromisesNot to advertisers, not to anyone, on any plan.body
privacyholdsWhat Tendd holdsheading
privacyholdsYour email addressfield-label
privacyholdshow you sign in, and where a sign-in link is sentbody
privacyholdsYour subscriptionsfield-label
privacyholdsthe name, the amount, how often it repeats and when it is next duebody
privacyholdsWhere each one came fromfield-label
privacyholdsthe bank you connected, or the fact that you typed it inbody
privacyholdsThe line your bank printsfield-label
privacyholdsthe text as it appears on your statement, kept unchanged so the same charge is recognised next monthbody
privacyholdsYour settingsfield-label
privacyholdsyour currency, your plan, and which alerts you wantbody
privacyholdsIf you pay for Tendd Pro / the plan you chose, its price, when it renews or ends, and whether the last payment went through, as Stripe reports them. Never the cardfield-label / body
privacyholdsThe emails Tendd sent you / which alert went out and when, so that none is sent twicefield-label / body
privacyholdsTendd does not hold your name, your address, your card numbers or your bank login. It never sees them.body
privacyprocessorsWho else can see itheading
privacyprocessorsSupabasefield-label
privacyprocessorsholds the databasebody
privacyprocessorsResendfield-label
privacyprocessorssends your sign-in email, the emails about your subscriptions that you choose in Settings, and our replies when you write to us, so it sees your address and what the email saysbody
privacyprocessorsCloudflarefield-label
privacyprocessorschecks that a person and not a script is asking for a sign-in link, so it sees your browser and your internet address for that moment; and if you write to privacy@tendd.co, it passes your letter on to the Gmail inbox where it is readbody
privacyprocessorsPlaidfield-label
privacyprocessorsStripe / takes the payment for Tendd Pro, on its own page, so it sees your card, your email and the billing address it asks for. Tendd learns only the plan and whether the payment went throughfield-label / body
privacyprocessorsmakes the bank connection and reads recurring charges. We ask Plaid for transactions and for nothing elsebody
privacyprocessorsGooglefield-label
privacyprocessorsonly if you sign in with Google, and then it tells us your email address and nothing morebody
privacyprocessorsVercelfield-label
privacyprocessorsserves the pages, and keeps the ordinary record of requests that a web server keepsbody
privacyprocessorsGoogle Fontsfield-label
privacyprocessorsthe typeface is loaded from Google, so Google sees your address when a page opens. We plan to serve it ourselvesbody
privacyprocessorsThat is the whole list. There is no advertising, no analytics and no tracking of any kind in Tendd.body
privacybrowserWhat your browser keepsheading
privacybrowserOne cookie, and it is the one that keeps you signed in. Whether you chose light or dark is kept in your browser too, and that never reaches us.body
privacycontrolsWhat you can do about itheading
privacycontrolsDownload everything Tendd holds for you. It is free, it is yours, and it is on Data and privacy.body
privacycontrolsDisconnect a bank, on Your sources. The standing permission is withdrawn at Plaid and the key we held is deleted. The subscriptions already on your list stay there until you remove them.body
privacyyour-rightsA free bank scan reads once. Tendd then keeps the connection for seven days without reading it, so Tendd Pro can name what the scan found without asking your bank again, and after that it ends by itself. You can end it sooner on Your sources.body (P32)
privacycontrolsDelete everything, and your account goes with it. There is no archive and no copy kept back.body
privacyretentionHow long Tendd keeps itheading
privacyretentionUntil you delete it. Nothing here expires on its own, because a list you have kept for two years is the reason to keep a list.body
privacychangesWhen this page changesheading
privacychangesThe date at the top is the day it last changed. If Tendd ever holds something new, or hands your data to someone not named above, this page will say so.body
privacyoperatorWho runs Tenddheading
privacyoperatorTendd is run by one person and not by a company. There is no business registered behind it yet, and when there is, this page will name it.body
privacyoperatorWrite to privacy@tendd.co about anything on this page: what Tendd holds about you, how to get a copy of it, how to remove it, or a sentence here that does not match what you see. One person reads that address.body
privacyway-acrossTerms are a separate pagelink

Cluster B: Connect Bank, Add Subscription, Guided Reveal, Sign In

connect-bank (+ loading, error, empty, cancelled)

ScreenZoneLineType
connect-bankappbar‹ Backlink
connect-bankappbarStep 2 of 3status
connect-banktitleConnect your bankheading
connect-banktitleSign in to your bank once more and Tendd names every subscription your free scan found.body (?from=pro, P32)
connect-banktitleNext, Plaid opens. It may first ask for your phone number, to remember you in other apps that use Plaid; you can skip that with Continue as guest. Then you pick your bank and sign in on your bank's own site. Tendd never sees your password, and you choose which accounts to share.body
connect-bankfactsHow long it takes / About a minutefield-label
connect-bankfactsWhat you need / Your online banking login, entered on your bank's sitefield-label
connect-bankaccountYour emailfield-label
connect-bankaccountBank data needs somewhere that is yours: a place you can sign back into, and a place you can tell us to delete. We'll send a link to confirm it, and you can carry on now.hint
connect-banktrust-noteWhat Tendd can seebody
connect-banktrust-noteThe charges that repeat on your account, and nothing else you do with your money.body
connect-banktrust-noteWhat Tendd can never dobody
connect-banktrust-noteRead-only. Tendd cannot move your money.body
connect-banktrust-noteWhat you can undobody
connect-banktrust-noteDisconnect at any time, and your bank data goes with it.body
connect-bankprimary-actionConnect your bankbutton
connect-bankprimary-actionAdd them yourselfbutton
connect-bankregion-noteAvailable for US banks today. More regions soon.body
connect-bank-loadingstate-messageSyncing your bankheading
connect-bank-loadingstate-messageWe are reading your recurring charges, read-only. This usually takes a moment.state-message
connect-bank-errorstate-messageWe could not connect to your bankheading
connect-bank-errorstate-messageThis is usually temporary. You can try again, or add your subscriptions yourself and connect later.state-message
connect-bank-errorprimary-actionTry againbutton
connect-bank-errorprimary-actionAdd them yourselfbutton
connect-bank-errorlaterDo this laterlink
connect-bank-emptystate-messageConnected, but nothing recurring yetheading
connect-bank-emptystate-messageWe linked your bank but did not find recurring charges yet. Some show up only on the next billing cycle. You can add the ones you know about now.state-message
connect-bank-emptyprimary-actionAdd them yourselfbutton
connect-bank-emptyprimary-actionCheck againbutton
connect-bank-emptytrust-lineConnected to Chase, read-only. Tendd cannot move your money. Last checked today, 9:14 AM.body
connect-bank-emptytrust-lineYour sourceslink
connect-bank-cancelledstate-messageYou came back without connectingheading
connect-bank-cancelledstate-messageNothing was shared and nothing was lost. Both ways in are still open, and you can pick either one now.state-message
connect-bank-cancelledprimary-actionConnect your bankbutton
connect-bank-cancelledprimary-actionAdd them yourselfbutton
connect-bank-cancelledlaterDo this laterlink

add-subscription (+ loading, error, empty)

ScreenZoneLineType
add-subscriptionappbar‹ Backlink
add-subscriptionappbarStep 2 of 3status
add-subscriptiontitleAdd a subscriptionheading
add-subscriptionform-groupDetails of this subscriptionaccessible name
add-subscriptiontitlePick from 400+ services, or add your own. Nothing leaves your control.body
add-subscriptionfieldFind a servicefield-label
add-subscriptionfieldSearch 400+ serviceshint
add-subscriptionpresetsMost trackedheading
add-subscriptionpresetsNetflix / Spotify Premium / Disney+ / Amazon Prime / Adobe Creative Cloud / The New York Timesbody
add-subscriptionpresetsTypically $AMOUNT a monthbody (PATTERN, once per preset tile)
add-subscriptioncustom-fallbackCan't find it?body
add-subscriptioncustom-fallbackAdd it by handlink
add-subscriptioncustom-fallbackand fill the details yourself.body
add-subscriptionfieldName / Amount / Billing frequency / Next payment datefield-label
add-subscriptionfieldNetflix / $17.99 / Monthly / Aug 3, 2026field-label (USER)
add-subscriptionfieldMonthly / Every 4 weeks / Quarterly / Yearly / Custombody
add-subscriptionfieldFor example, Aug 3, 2026hint
add-subscriptionfield0.00placeholder (the sign is drawn beside the input, not typed into it)
add-subscriptionpresetsNo match for "QUERY" / 1 match for "QUERY" / N matches for "QUERY"status (PATTERN, live, one per keystroke)
add-subscriptionprimary-actionAdd subscriptionbutton
add-subscriptionprimary-actionAdd anotherbutton
add-subscriptionprogressSaved as you go: 3 added so far. Your list is saved, so you can stop and come back any time.body
add-subscriptionprimary-actionSee your subscriptionsbutton
add-subscription-loadingstate-messageGetting the list of services. This usually takes a moment.state-message
add-subscription-errorstate-messageWe could not load the service listheading
add-subscription-errorstate-messageYou can still add subscriptions by hand below, and the search will come back on its own.state-message
add-subscription-errorprimary-actionTry againbutton
add-subscription-errorfieldFor example, Spotify Premiumhint
add-subscription-errorfieldEnter an amount, like $9.99hint
add-subscription-emptyfieldCerebro Cloudfield-label (USER)
add-subscription-emptystate-messageNo match for "Cerebro Cloud"heading
add-subscription-emptystate-messageNot every service is in our list yet. You can add it by hand below, and it will sit alongside the rest.state-message
add-subscription-emptyprimary-actionSearch againbutton

guided-reveal (+ empty)

ScreenZoneLineType
guided-revealreveal-stepStep 1 of 3status
guided-revealreveal-stepYou're paying for 14 subscriptionsheading
guided-revealreveal-stepFound in your Chase account. No total yet, and no verdict.body
guided-revealreveal-stepSee what they arelink
guided-revealreveal-stepStep 2 of 3status
guided-revealreveal-stepHere they are, groupedheading
guided-revealreveal-stepFive categories. Three of the names are below, and the rest are part of Tendd Pro.body
guided-reveallistStreaming (4) / Software (4) / Music (2) / Fitness (2) / News (2), each with its merchant names and no amountsbody
guided-reveallocked-listYou have 11 more subscriptionsheading
guided-reveallocked-listYou have 1 more subscriptionheading
guided-reveallocked-listTendd Proeyebrow (P34)
guided-reveallocked-listTendd found them in your bank. Tendd Pro shows every name, or you can add the ones you know yourself.body
guided-reveallocked-listChoose Tendd Pro before Sep 6 and Tendd names them straight away, without asking your bank again.body (while the scan is held, P32)
guided-reveallocked-listGet Tendd Probutton
guided-reveallocked-listAdd them yourselfbutton
guided-revealreveal-stepSee the monthly totallink
guided-revealreveal-stepStep 3 of 3status
guided-revealreveal-stepAll togetherheading
guided-revealreveal-step$192.90body
guided-revealreveal-stepa month, for what you have signed up forbody
guided-revealtone-lineThis is what you have signed up for, not what you wasted.body
guided-revealprimary-actionSee your subscriptionsbutton
guided-reveal-emptystate-messageNothing to reveal yetheading
guided-reveal-emptystate-messageAdd at least one subscription and your list appears here. Even a partial list is saved, so you can come back any time.state-message
guided-reveal-emptyprimary-actionAdd a subscriptionbutton
guided-reveal-emptylaterDo this laterlink

sign-in (+ sent, expired)

Added 2026-08-10 with the auth model. Node 1.6 is the one screen in the onboarding family that returns a person rather than activating one, so it takes the shape and none of the persuasion.

One panel in three steps since 2026-09-27 (P17), and it stands in two places: a dialog over the public page and the page /sign-in. choose is the two ways in, email the field, sent the address stated back. With Google off the panel opens on email, and on the expired state the heading changes and the steps do not. The rewrite log above says what each line was.

ScreenZoneLineType
sign-indialogClosebutton (accessible name)
sign-intitleSign inheading
sign-intitleNew to Tendd? Either way starts your account.body (choose)
sign-inprimary-actionContinue with Googlebutton
sign-insecondary-actionContinue with emailbutton
sign-inemailBackbutton (accessible name)
sign-inemailWe'll email you a link. There is no password.body
sign-inemailEmailfield-label
sign-inemailSend a sign-in linkbutton
sign-inlegalBy continuing you agree to our Terms and Privacy Policy.body
sign-inlegalTerms / Privacy Policylink
sign-in-sentstate-messageCheck your emailheading
sign-in-sentstate-messageA link is on its way to emma@example.com.state-message
sign-in-sentnoteGive it a minute, and look in your spam folder.body
sign-in-sentsecondary-actionSend another linkbutton
sign-in-sentsecondary-actionSend another link in 0:42button (disabled, while the minute after a letter runs; the figure counts down)
sign-in, sign-in-sentfailureWe could not send a link just now. Try again a little later.state-message (G1)
sign-in-sentlaterUse a different emailbutton
sign-in-expiredstate-messageThat link has expiredheading
sign-in-expiredstate-messageNothing is wrong with your account and nothing was lost.state-message

Deliberately absent, and it is a line that must never be written here: "that email is not registered", or any wording that tells the reader whether an address has an account. Saying it to one person says it to anybody who asks. The screen behaves the same either way, and the mail that arrives is the one that fits.

sign-in-mail (+ first)

Added 2026-09-24 with G46. The letter node 1.6 promises, and until this day the one product surface whose words nobody here had written: Supabase's default said "Magic Link" and "Follow this link to login". Built from supabase/templates/sign-in.html, which npm run check:mail holds to these rows in both directions.

Two letters, because Supabase sends two. An address it has never seen gets sign-in-mail-first, and that is where the screen's promise above is kept: the screen says the same thing to everybody, and the letter, which only the owner of the address reads, is allowed to say which case this is. It says so because of the person the screen was built around, who typed an address from a month ago: the first letter tells them their list is under another one, instead of opening an empty Tendd.

{{ .Email }} is printed as it is written, because the template is the line.

ScreenZoneLineType
sign-in-mailsenderTenddstatus
sign-in-mailsendersignin@tendd.costatus
sign-in-mailsubjectYour sign-in link for Tenddheading
sign-in-mailpreviewThe link works once, and it opens your list.body
sign-in-mailheaderTenddstatus
sign-in-mailtitleSign in to Tenddheading
sign-in-mailtitleYou asked for a link to sign in as {{ .Email }}. Open it and you are back in your list.body
sign-in-mailprimary-actionSign in to Tenddbutton
sign-in-mailfactsThe link works once, and then it stops. You can ask for a new one on the sign-in page at any time.hint
sign-in-mailfactsIf you did not ask for this, you can ignore it. Nothing happens unless the link is opened.hint
sign-in-mailfallbackIf the button does not open, copy this address into your browser:hint
sign-in-mailfooterTendd, tendd.cofooter
sign-in-mail-firstpreviewThe link works once, and it starts your list.body
sign-in-mail-firsttitleYou asked for a link to sign in as {{ .Email }}. There is no Tendd account under this address yet, so opening the link starts one.body
sign-in-mail-firsttitleIf you already keep a list in Tendd, it is under a different address. Sign in with that one instead.body

sign-in-mail-first carries everything sign-in-mail does except its preview line and the title body line, which it replaces with its own three.

Deliberately absent: "tap". The screen above still says it, and the upgrade screen dropped it on the ground that the product is read on a desktop as often as a phone. A letter is opened on either, so it says "open".

Cluster C: Home and Subscription Detail

home (+ empty, one, few, error, loading)

ScreenZoneLineType
homeheaderHi, Emmabody
homesummary-stripYou're paying for 14 subscriptionsbody
home-cancelledsummary-stripYou're paying for 13 subscriptionsbody
home-cancelledsummary-stripOne more is cancelled and stops on 18 August.body
home-cancelledlist-rowCancelledstatus
home-cancelledlist-rowcancelled - stops Aug 18body
homesummary-stripa month, for what you have signed up forbody
homealert-bannerNetflix went up by $2.50, now $17.99 a month.body
homealert-bannerSee what changed →link
homelistStreaming (4) / Software (4) / Music (2) / Fitness (2) / News (2)heading
homelist-group$54.96 a month / $53.98 a month / $22.98 a month / $24.98 a month / $36.00 a monthbody
homelist-row(the canonical list, one GC4 row each)body
homelist-headYour subscriptionsheading
homeadd-actionAdd a subscriptionbutton
homehistory-linkSee your trendsbutton
homelocked-listYou have 11 more subscriptionsheading
homelocked-listYou have 1 more subscriptionheading
homelocked-list$138.93 a month, already counted in your total.body
homelocked-listTendd Proeyebrow (P34)
homelocked-listTendd found them in your bank. Tendd Pro shows every name, or you can add the ones you know yourself.body
homelocked-listChoose Tendd Pro before Sep 6 and Tendd names them straight away, without asking your bank again.body (while the scan is held, P32)
homelocked-listGet Tendd Probutton
homelocked-listAdd them yourselfbutton
home-pro-unnamedlocked-listThey came from your free bank scan, which keeps no names. Connect your bank again and Tendd names every one.body
home-pro-unnamedlocked-listConnect your bankbutton
history-trendstrend-listNot named yetbody (a row a free scan did not name, and its line in the export)
hometrust-lineFrom Chase, 11 subscriptions, and 3 you added yourself.body
hometrust-lineFound in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date.body
hometrust-lineFound in Chase on Aug 30. Tendd keeps the connection until Sep 6 without reading it, and then it ends by itself.body (a free scan, held, P32)
hometrust-lineRead-only. Tendd cannot move your money.body
hometrust-lineLast checked today, 9:14 AM.body
hometrust-lineData and privacylink
hometab-barHome / Alerts / Save / Younav
home-emptysummary-stripNothing to add up yetbody
home-emptysummary-stripConnect your bank or add a subscription, and your monthly total appears here as the biggest thing on screen.body
home-emptystate-messageTwo ways to startheading
home-emptystate-messageSee everything you pay for in one calm place. Pick the one that feels right; you can change it later.body
home-emptystate-messageConnect your bankbutton
home-emptystate-messageRead-only, through Plaid, and about a minute. Tendd cannot move your money.body
home-emptystate-messageAdd a subscriptionbutton
home-emptystate-messageStart with one and add more later. No bank is involved, and nothing leaves your control.body
home-errorstate-messageWe could not refresh just now. Showing your last update from today, 9:14 AM.state-message
home-errorstate-messageTry againbutton
home-errorsummary-stripa month, as of your last updatebody
home-errortrust-line(the GC6 lines as on home, with the link pointing at connections)body
home-errortrust-lineYour sourceslink
home-loadingsummary-stripGetting your subscriptions. This usually takes a moment.body
homecancel-nudgeTwo you have not opened in a while. No pressure, just a nudge. Cutting both would save you $29.99 a month.body
homecancel-nudgetrial ends in 17 days · not opened in 3 weeksbody
homecancel-nudgenext in 10 days · not opened in 6 weeksbody
homecancel-nudgeCancelbutton
home-onesummary-stripYou're paying for 1 subscriptionbody
home-onelist-rowSpotify Premium / in 6 days · Aug 7 / $11.99body
home-oneway-onThat is the whole list. Add more as you think of them, or connect your bank and Tendd finds the rest.body
home-oneway-onconnect your banklink
home-onetrust-line1 subscription, added by you.body
home-onetrust-lineNo bank is connected, so nothing is read from anywhere.body
home-onetrust-lineLast updated by you, today, 9:14 AM.body
home-fewsummary-stripYou're paying for 3 subscriptionsbody
home-fewlist-row(three GC4 rows, by the next charge date, soonest first)body
home-fewway-on(the home-one line, unchanged)body
home-fewtrust-line3 subscriptions, added by you.body
home-fewtrust-line(the other two lines as on home-one)body

subscription-detail (+ price-change, payment-failed, unrecognized, loading, error)

ScreenZoneLineType
subscription-detailappbar‹ Your subscriptionslink
subscription-detailheroSpotify Premiumheading
subscription-detailhero$11.99body
subscription-detailheroa monthbody
subscription-detailstatusActivestatus
subscription-detailfactsNext charge / Billing cycle / Charged to / Category / Paid so farfield-label
subscription-detailfactsin 6 days, Aug 7 / Monthly / Chase checking / Music / $143.88 since Aug 2025body
subscription-detaildecoderAppears on your statement asbody
subscription-detaildecoderSPOTIFYAB STOCKHOLMbody (USER)
subscription-detailchargesRecent chargesheading
subscription-detailgateThree months are free. Longer history and trends are part of Tendd Pro.body
subscription-detailgateSee what Pro addsbutton
subscription-detailgateMaybe laterbutton
subscription-detailcancel-actionCancel this subscriptionbutton
subscription-detailcorrectionEdit the detailsbutton
subscription-detailcorrectionThis is not a subscriptionbutton
subscription-detailremovalThis one came from Chase, so removing it hides the row rather than deleting it. If the charge appears again, Tendd will show it again.body
subscription-detailremovalRemove from your listlink
subscription-detailtrust-lineFrom Chase, read-only. Tendd cannot move your money.body
subscription-detailtrust-lineLast checked today, 9:14 AM.body
subscription-detailtrust-lineData and privacylink
subscription-detail-price-changeheroNetflix / $17.99 / a monthheading
subscription-detail-price-changestatusPrice changedstatus
subscription-detail-price-changealert-bannerNetflix went up by $2.50 on Jul 28. Your next charge is $17.99 instead of $15.49.body
subscription-detail-price-changechargesAug 3, next / $17.99 / was $15.49body
subscription-detail-payment-failedheroAmazon Prime / $14.99 / a monthheading
subscription-detail-payment-failedstatusPayment failedstatus
subscription-detail-payment-failedstate-messageA payment to Amazon Prime did not go through on Jul 20. Amazon usually tries again within a few days, and Tendd will tell you when it does. Nothing is wrong with your money.state-message
subscription-detail-payment-failedfactsNext attempt / expected in the next few daysfield-label
subscription-detail-payment-failedchargesJul 20 / $14.99 / did not go throughbody
subscription-detail-payment-failedcorrectionSee all your alertsbutton
subscription-detail-unrecognizedheroSQ *BLUEBOTTLE 8890heading (USER)
subscription-detail-unrecognizedhero$14.00, seen monthlybody
subscription-detail-unrecognizedstatusNot identifiedstatus
subscription-detail-unrecognizedstate-messageIt repeats like a subscription, but we could not match it to a service. Name it and pick a category so it reads clearly next time.state-message
subscription-detail-unrecognizedfactsSeen / Last charge / Charged to / Categoryfield-label
subscription-detail-unrecognizedfacts3 times, monthly since May / Jul 12 / Chase checking / not set yetbody
subscription-detail-unrecognizeddecoderAll we have is how it appears on your statementbody
subscription-detail-unrecognizedprimary-actionName this chargebutton
subscription-detail-loadingstate-messageGetting the details. This usually takes a moment.state-message
subscription-detail-errorstate-messageWe could not load the rest of this subscription. This is usually temporary, and nothing about your money changed.state-message
subscription-detail-errorprimary-actionTry againbutton
subscription-detail-errorsecondary-actionYour subscriptionsbutton
subscription-detail-errortrust-lineYour sourceslink

Cluster D: Alerts, Cancel Guide, Cancel Win, Share Snapshot

alerts (+ empty, loading, error)

ScreenZoneLineType
alertstitleAlertsheading
alertstitleThe few things worth knowing about. A quiet dot marks what is new since your last visit.body
alertsgroupNeeds youheading
alertsalert-rowNetflix went up by $2.50, now $17.99 a monthbody
alertsalert-rowPrice change · Netflix · Jul 28 · from Chasebody
alertsalert-rowWas $15.49 / Now $17.99 / Difference $2.50body
alertsalert-rowSee what changedlink
alertsalert-rowA payment to Amazon Prime did not go throughbody
alertsalert-rowPayment failed · Amazon Prime · $14.99 · Jul 20 · from Chasebody
alertsalert-rowWhat to dolink
alertsgroupJust so you knowheading
alertsalert-rowiCloud+ charges $2.99 tomorrowbody
alertsalert-rowComing up · iCloud+ · Aug 2 · from Chasebody
alertsalert-rowChatGPT Plus charges $20.00 in 4 daysbody
alertsalert-rowTendd found a new subscription, Strava, $11.99 a monthbody
alertsalert-rowNew subscription · Strava · found Jul 29 · from Chasebody
alertsalert-rowYour Peloton App trial ends soonbody
alertsalert-rowTrial ending · Peloton App · Aug 18 · Tendd Pro explains what happens nextbody
alertsalert-rowSee what Pro addslink
alertsalert-rowProstatus
alertsgroupOlderheading
alertsalert-rowWe could not take your Spotify Premium payment on Jun 28body
alertsalert-rowPayment failed · Spotify Premium · $11.99 · from Chase · this one has since gone throughbody
alertsalert-rowSee Spotify Premiumlink
alertssettings-linkWhat Tendd tells you aboutlink
alerts-emptystate-messageAll clearheading
alerts-emptystate-messageNothing needs your attention right now. If a price changes or a payment does not go through, you will see it here first, in plain language.state-message
alerts-emptygroupWhat shows up hereheading
alerts-emptygroupA price goes up (with the old price beside the new one) / A payment does not go through (and what usually happens next) / A charge is coming (in the next seven days) / Tendd finds a new subscription (on one of your sources)body
alerts-emptyprimary-actionBack to your subscriptionsbutton
alerts-loadingstate-messageChecking for anything worth knowing about. This usually takes a moment.state-message
alerts-errorstate-messageWe could not load your alertsheading
alerts-errorstate-messageNothing is wrong with your money, we just could not reach your alerts right now. Give it another try, or head back to your subscriptions.state-message
alerts-errorprimary-actionTry againbutton
alerts-errorsecondary-actionBack to your subscriptionsbutton
alerts-errortrust-lineYour sourceslink

cancel-guide (+ no-guide, blocked)

ScreenZoneLineType
cancel-guideappbar‹ Netflixlink
cancel-guidetitleCancel Netflixheading
cancel-guidetitle$17.99 a month. You can always resubscribe later.body
cancel-guidewhat-happensYou keep Netflix until / Aug 3, the end of the month you paid forfield-label
cancel-guidewhat-happensAfter that / no further charges, and $17.99 a month stops going outfield-label
cancel-guidewhat-happensIf you change your mind / resubscribing takes a minute and your profiles are keptfield-label
cancel-guidestripAbout five minutesbody
cancel-guidestripSteps for netflix.com, which is how you pay for this onebody
cancel-guidestepHow to cancel Netflixheading
cancel-guidestepGo to netflix.com and sign in. / Open Account, then Membership and Billing. / Choose Cancel Membership. / Netflix will offer to pause instead. Keep choosing Cancel, and watch for the confirmation email.body
cancel-guidefreshnessWe last checked these steps on Jul 24. If Netflix has changed them, tell us and we will fix the guide.body
cancel-guideprimary-actionOpen netflix.com and cancelbutton
cancel-guideprimary-actionOpen the cancel page on netflix.combutton (Tendd Pro, where the service publishes a cancel page)
cancel-guidefreshnessWe last checked this link on Sep 29.hint (Tendd Pro, under the link)
cancel-guidepro-calloutThe steps above are free and always will be. Tendd Pro adds a direct link to the cancel page on netflix.com, so you start where the steps end.body (Free, where the service publishes a cancel page)
cancel-guidepro-calloutSee what Pro addsbutton
cancel-guidepro-calloutMaybe laterbutton
cancel-guideconfirmManaged to cancel? Mark it here and we will show what you saved.body
cancel-guideconfirmI cancelled itbutton
cancel-guidehelp-pathRan into a wall or a "please stay" screen?body
cancel-guidehelp-pathCouldn't cancel?link
cancel-guide-no-guidetitleCancel The New York Timesheading
cancel-guide-no-guidestate-messageWe do not have step-by-step for this one yetheading
cancel-guide-no-guidestate-messageHere is the general way most subscriptions cancel. It works for The New York Times too.state-message
cancel-guide-no-guidestripThe general path, because we have no tailored steps for this service yetbody
cancel-guide-no-guidestepThe general wayheading
cancel-guide-no-guidestepOpen the service's website and sign in. / Go to Account or Subscription settings. / Look for Cancel or Manage plan. / Confirm, and watch for a confirmation email.body
cancel-guide-no-guidefreshnessThese general steps were last checked on Jul 24.body
cancel-guide-no-guiderequest-guideWant a tailored guide? Tell us and we will add one for The New York Times.body
cancel-guide-no-guiderequest-guideAsk us to add this guidebutton
cancel-guide-no-guideconfirmManaged to cancel with the general steps? Mark it here.body
cancel-guide-blockedstate-messageCancelling can be made deliberately hard, and it is not your faultheading
cancel-guide-blockedstate-messageNetflix is still active. Here is what else to try, and none of it costs you the progress you have made.state-message
cancel-guide-blockedstepSkip the "special offers" screen and keep choosing Cancel, not Pause. / Try cancelling from a web browser instead of the app. / If you are billed through Apple or Google, cancel in your device subscriptions instead. / Still stuck? Leave it and come back. Nothing is lost, and we will remind you before the next charge on Aug 3.body
cancel-guide-blockedprimary-actionI cancelled itbutton
cancel-guide-blockedsecondary-actionRemind me laterbutton
cancel-guide-blockednext-moveTendd Pro links straight to the cancel page on netflix.com.body (Free, where the service publishes a cancel page)
cancel-guide-blockednext-moveWant to try again from the start?body (Tendd Pro)
cancel-guide-blockednext-moveOpen the cancel page on netflix.comlink (Tendd Pro)
cancel-guide-blockednext-moveSee what Pro addslink

cancel-win

ScreenZoneLineType
cancel-winheaderA small winbody
cancel-winwin-summaryYou just cancelled Netflix and freed upheading
cancel-winwin-summary$17.99 a monthbody
cancel-winwin-summaryThat is $215.88 a year back in your pocket.body
cancel-winwin-summaryOn your word. You can always resubscribe if you miss it.body
cancel-winrunning-totalWith Tendd so far / $32.98 a month freed upfield-label
cancel-winrunning-totalOver a year / about $395, across the subscriptions you have cutfield-label
cancel-wincontinueBack to your subscriptionsbutton
cancel-winshareFeeling good about it? You can share a simple card. No bank details, ever.body, LATER
cancel-winshareShare this winbutton, LATER

The two share lines are authored and kept, and they are out of MVP: node 4.11 Share Snapshot is LATER, so an MVP screen cannot lead there (D-Share, founder, 2026-08-04, raised by ia/docs/blocks.md). In MVP the win screen ends on the continue line. The copy stays here rather than being deleted and rewritten later; the same applies to every share-snapshot line below.

share-snapshot (+ loading, error)

ScreenZoneLineType
share-snapshotheaderBacklink
share-snapshotheaderShare this winheading
share-snapshotheaderHere is the card, exactly as it will look. Nothing is shared until you tap Share.body
share-snapshotshare-previewOn Tendd, I am keeping an eye onbody
share-snapshotshare-preview13 subscriptionsbody
share-snapshotshare-preview$174.91body
share-snapshotshare-previewa month, all in one calm placebody
share-snapshotshare-previewJust cancelled Netflix and freed up $17.99 a month.body
share-snapshotprimary-actionSharebutton
share-snapshotsecondary-actionBack to your subscriptionsbutton
share-snapshotprivacy-noteWhat is on this cardheading
share-snapshotprivacy-noteThe number of subscriptions, the monthly total, and the one you just cancelled. No account numbers, no bank details, and no list of what you pay for.body
share-snapshot-loadingstate-messageMaking your card. This usually takes a moment.state-message
share-snapshot-loadingprivacy-noteNothing is shared while this is being made, and nothing is shared afterwards until you tap Share.body
share-snapshot-errorstate-messageWe could not create the cardheading
share-snapshot-errorstate-messageNothing is wrong with your account, and your cancel win is saved. This is only the picture.state-message
share-snapshot-errorprimary-actionTry againbutton
share-snapshot-errorsecondary-actionBack to your subscriptionsbutton
share-snapshot-errorprivacy-noteNothing was shared, and nothing was posted anywhere.body

Cluster E: History and Trends, Upgrade, Connections, Data and Privacy, Settings

history-trends (+ locked, empty, loading, error)

ScreenZoneLineType
history-trendsheaderYour subscriptionslink
history-trendsheaderYour trendsheading
history-trendsheaderProstatus
history-trendsheaderHow your monthly total has moved over time. Nothing to act on here, just the shape of it.body
history-trendstime-range3 months / 6 months / 12 monthsbutton
history-trendschart-areaYour monthly total went from $172.90 in May to $192.90 in July, up about $20 across three months.body
history-trendstrend-listWhat movedheading
history-trendstrend-listUp $2.50 since May, now $17.99 a monthbody
history-trendstrend-listNew since June, $20.00 a monthbody
history-trendstrend-listNo change since March, $17.00 a monthbody
history-trendstrend-listHigher / New / Steadystatus
history-trendstrend-listBy categorybody
history-trendstrend-listStreaming is up $6 since March. Everything else held steady.body
history-trendsexportExport as CSVbutton
history-trendschart-areaYour monthly total went from $166.90 in February to $192.90 in July, up about $26 across six months. / ... from $143.91 last August ... across the year. / ... across two months.body (per range)
history-trendschart-areaYour monthly total went from $192.90 in May to $172.90 in July, down about $20 across three months.body (the total fell)
history-trendschart-areaYour monthly total is $192.90 a month, the same as it was in May.body (the total held)
history-trendschart-areaLine chart of your monthly total from May to July. The figures are the sentence abovelabel
history-trendsdata-sourceEvery month here is your own history, from Chase and the 3 subscriptions you added yourself. / Read-only. Tendd cannot move your money. / Last checked today, 9:14 AM.body (bank connected)
history-trendsdata-sourceEvery month here is your own history, from the 14 subscriptions on your list.body (no bank reading)
history-trendstrend-listDown $2.00 since May, now $5.99 a monthbody
history-trendstrend-listCancelled in June, was $7.99 a monthbody
history-trendstrend-listLower / Cancelledstatus
history-trendstrend-listThe other 11 held steady. / The other one held steady.body
history-trendstrend-listNothing moved. Every subscription is where it was in May.body
history-trendsby-category$192.90 a monthstatus
history-trendsby-categorySoftware is up $20.00 and Streaming $2.50 since May. Everything else held steady. / Streaming is down $7.99 since May. / Every category held steady since May.body (composed)
history-trendsexportYour history as a spreadsheet, for reading it somewhere else. Part of Tendd Pro. A plain copy of everything we hold is free and lives in Data and privacy.body
history-trends-lockedheaderFreestatus
history-trends-lockedlockTrends are part of Tendd Proheading
tab bardestinationTrendslabel
history-trends-lockedreadoutYour monthly total is $192.90 a month, the same as it was in June.body
history-trends-lockedchartLine chart of your monthly total for June and July, the two months a free plan showslabel
history-trends-lockedlockYour list, your total and your alerts stay free and uncapped, and so are these two months. What Pro adds is the rest of the past:body
history-trends-lockedlockHow your monthly total moved, over 3, 6 or 12 monthsbody
history-trends-lockedlockWhich subscriptions went up, which are new, which held steadybody
history-trends-lockedlockYour history as a spreadsheetbody
history-trends-lockedprimary-actionSee what Pro addsbutton
history-trends-lockedexportA plain copy of everything we hold about you is free, and it is in Data and privacy. This is the analytical export, which is the Pro one.body
history-trends-emptystate-messageStill gathering your historyheading
history-trends-emptystate-messageTrends need a few months to be worth looking at, and we have less than three so far. Come back in a few weeks and the shape of your spending will be here.state-message
history-trends-emptychart-areaTwo months so far. Your first trend line appears once September closes.body
history-trends-emptyprimary-actionBack to your subscriptionsbutton
history-trends-emptyreassuranceNothing is missing and nothing failed. Your list, your total and your alerts are all working as usual.body
history-trends-loadingstate-messageAdding up your last few months. This usually takes a moment.state-message
history-trends-errorstate-messageWe could not load your trendsheading
history-trends-errorstate-messageSomething on our side did not answer. Your subscriptions, your total and your alerts are not affected: this is only the history view.state-message
history-trends-errorprimary-actionTry againbutton
history-trends-errorsecondary-actionBack to your subscriptionsbutton
history-trends-errorreassuranceNothing about your plan or your data changed. If it keeps happening, tell us and we will look at it.body

upgrade (+ processing, payment-failed, current-plan, renewal-failed)

ScreenZoneLineType
upgradeheaderCloselink
upgradeheaderTendd Proheading
upgradeheaderFreestatus
upgradeheaderPay less per month than most of the subscriptions you will cancel.body
upgradecontextYou came here from Your trends. History and trends are part of Tendd Pro.body
upgradecontextYou came here from your list. The names behind your bank scan are part of Tendd Pro.body
upgradecontextYou came here from Connect your bank. The first scan is done, and a bank connection that keeps the list up to date is part of Tendd Pro.body
upgradeplan-cardEverything in Tendd Profield-label
upgradefeature-list-compactEvery name in your bank scanbody
upgradefeature-list-compactA bank connection that keeps the list up to datebody
upgradefeature-list-compactHistory and trendsbody
upgradefeature-list-compactAdvanced alertsbody
upgradefeature-list-compactFull cancel guidesbody
upgradefeature-list-compactExportbody
upgradeprice$69 a yearheading
upgradepriceThat is $5.75 a month, and it saves about $50 a year versus paying monthly.body
upgradepriceBest valuestatus
upgradeprice$9.99 a monthheading
upgradepriceMonth to month. Cancel any time, no lock-in.body
upgradepriceLifetimeheading
upgradepriceone paymentbody
upgradepriceTendd Pro stays open, for people who would rather never think about a renewal again.body
upgradepriceNot on sale yet. We are still working out the price.body
upgradepriceNot open yet. Tendd cannot take a payment, so these have no button.body
upgradeprimary-actionStart Tendd Pro - $69 a yearbutton
upgradeprimary-actionStart Tendd Pro - $9.99 a monthbutton
upgradeprimary-actionMaybe laterbutton
upgradeprimary-actionPays for itself with the first subscription you cancel.body
upgrade-processingstate-messageSetting up your Pro planheading
upgrade-processingstate-messageThis takes a few seconds. Do not close this page, and nothing is charged twice if it takes a moment longer.state-message
upgrade-processingcontextWhen it is done you go straight back to Your trends, open.body
upgrade-payment-failedstate-messageThat payment did not go throughheading
upgrade-payment-failedstate-messageYour bank did not approve it, so nothing was charged. This happens most often with a card that has expired or a bank that wants to confirm a new payment.state-message
upgrade-payment-failedfactsWhat was charged: Nothing. There is no payment to reversebody
upgrade-payment-failedfactsYour plan: Still Free, and everything free is still workingbody
upgrade-payment-failedprimary-actionTry another payment methodbutton
upgrade-payment-failedsecondary-actionMaybe laterbutton
upgrade-payment-failedreassuranceYou can come back to this from any Pro feature. Nothing about your subscriptions or your data changed.body
upgrade-current-planappbar‹ Backlink
upgrade-current-planappbarProstatus
upgrade-current-plantitleYou are on Tendd Proheading
upgrade-current-plantitleEverything below is open to you. Nothing here needs doing unless you want to stop.body
upgrade-current-planfactsYour plan / Tendd Pro, yearlyfield-label
upgrade-current-planfactsRenews / 1 May 2027, at $69field-label
upgrade-current-planfactsYour plan / Tendd Pro, monthlyfield-label
upgrade-current-planfactsEnds / 1 May 2027. It does not renewfield-label
upgrade-current-planprimary-actionManage planbutton (after cancelling)
upgrade-current-planconsequenceKeeping it means it renews on 1 May 2027, at $69. Nothing is charged before then.body (after cancelling)
upgrade-current-planprimary-actionKeep Tendd Probutton (after cancelling)
upgrade-current-planprimary-actionUpdate your payment methodbutton (renewal being retried)
upgrade-current-planconsequenceCancelling keeps everything you can see without Pro. Your subscriptions, the monthly total and the basic alerts are Free and uncapped, and they stay. History, trends and the advanced alerts close at the end of the period you have already paid for, on 1 May 2027, and you can start Pro again any time.body
upgrade-current-planfeature-listEvery name in your bank scan (Nothing on your list is withheld)body
upgrade-current-planfeature-listA bank connection that keeps the list up to date (Read again when your bank reports a change)body
upgrade-current-planfeature-listHistory and trends (3, 6 and 12 month views)body
upgrade-current-planfeature-listAdvanced alerts (A trial ending, and a charge coming up)body
upgrade-current-planfeature-listFull cancel guides (With a direct link to the cancel page)body
upgrade-current-planfeature-listExport (Your history as a spreadsheet)body
upgrade-current-planprimary-actionCancel Tendd Probutton
upgrade-current-planlaterBack to your settingslink
upgrade-renewal-failedappbarCloselink
upgrade-renewal-failedappbarProstatus
upgrade-renewal-failedtitleTendd Pro did not renewheading
upgrade-renewal-failedtitleYour bank did not approve the payment on 1 May, so nothing was charged. This happens most often with a card that has expired, or with a bank that wants to confirm a repeat payment.body
upgrade-renewal-failedfactsWhat was charged / Nothing. There is no payment to reversefield-label
upgrade-renewal-failedfactsYour plan / Still Tendd Pro until 8 May, while the payment is tried againfield-label
upgrade-renewal-failedfactsYour subscriptions / All 14 are here, with the monthly total and your alertsfield-label
upgrade-renewal-failedprimary-actionUpdate your payment methodbutton
upgrade-renewal-failedsecondary-actionNot nowbutton
upgrade-renewal-failedconsequenceIf it has not gone through by 8 May, your plan goes back to Free. Nothing is deleted and nothing is capped: your subscriptions, your monthly total, your basic alerts and this month against last stay exactly as they are. The 3, 6 and 12 month views, the full cancel guides and the advanced alerts come back the moment a payment works.body

On the cancel nudge, 2026-08-21, and it is one line where there were two. The Save tab was retired and its block moved onto Home, which merged two strings into one: the summary strip's "a month. You could save up to $29.99 a month by cutting 2 you might not be using" and the block's own "Two you have not opened in a while. No pressure, just a nudge." The strip goes back to "a month, for what you have signed up for" on every state of Home, because a savings figure in the biggest thing on the screen makes the calm view a pitch, and this product's first principle is that the calm view sells nothing. The figure is a fact about two rows, so it is stated on them: "Cutting both would save you $29.99 a month." "Cutting both" and not "by cutting 2 you might not be using", which counted the same two things twice in one sentence.

On the renewal line, 2026-08-20, and why it is not the payment-failed line with a different date. upgrade-payment-failed can afford to be short because nothing is at stake: the person is on Free, nothing was charged, and the worst case is that they stay where they are. Here the plan is already theirs and the money is already flowing, so the sentence has to carry a date, a grace period and a downgrade - and it has to put what is NOT lost before what is. The order is deliberate and it is D-Free read out loud: nothing deleted, nothing capped, the list and the total and this month against last unchanged; then, and only then, the four things that pause. "Not now" and not "Maybe later", because "later" is what you say to an offer and this is not an offer.

On the cancel line, and the three things it does not say. No discount, no "are you sure you want to lose", no "tell us why". A product whose whole promise is that cancelling should be easy cannot make its own subscription the hard one, and every retention pattern the category uses here is the pattern node 4.9 exists to help people survive. The consequence is stated above the action rather than sprung after it, and what it says first is what the person is actually afraid of: the list stays.

connections (+ empty, reconnect, add-source)

ScreenZoneLineType
connectionsappbar‹ Youlink
connectionsheaderYour sourcesheading
connectionsheaderWhere Tendd gets the list of what you pay for. You are always in control of these. Read-only. Tendd cannot move your money.body
connectionsconnection-rowChaseheading
connectionsconnection-rowBank connection through Plaidbody
connectionsconnection-rowConnected / Private / Reconnect needed / Disconnectedstatus
connectionsconnection-rowLast checked / Accounts included / Tracking from here / Accessfield-label
connectionsconnection-rowtoday, 9:14 AM / Checking / 11 subscriptions / Read-only. Tendd cannot move your money.body
connectionsconnection-rowDisconnecting stops Tendd from reading new charges. The 11 subscriptions already found stay on your list and become yours to keep up to date.body
connectionsconnection-rowDisconnect Chasebutton
connectionsconnection-rowAdded by youheading
connectionsconnection-rowPrivate, entered by handbody
connectionsconnection-rowLast updated / Tracking here / Accessfield-label
connectionsconnection-rowby you, Jul 30 / 3 subscriptions / Only what you type. Nothing is read from anywhere.body
connectionsconnection-rowRemoving this source deletes the 3 subscriptions you typed. They exist nowhere else, so this one cannot be undone.body
connectionsconnection-rowAdd a subscriptionbutton
connectionsconnection-rowRemove this sourcebutton
connectionsadd-sourceAdd a sourcebutton
connectionsprovider-noteUS banks connect through Plaid. More regions soon.body
connectionsprovider-noteWhat we readlink
connections-emptystate-messageNo sources yetheading
connections-emptystate-messageAdd one and your subscriptions appear on your list. You can change this later, and you can have both.state-message
connections-emptystate-messageConnect your bank / Add a subscriptionbutton
connections-stoppedconnection-rowDisconnectedstatus
connections-stoppedconnection-rowFound in Chase on Aug 30. Nothing is being read now, and the list is yours to keep up to date.body (the Home trust line, reused)
connections-heldconnection-rowKept until Sep 6status
connections-heldconnection-rowTendd keeps this connection until Sep 6 without reading it, so Tendd Pro can name what the free scan found without asking your bank again. After that it ends by itself.body
connections-heldconnection-rowDisconnect Chasebutton (the connected card's own)
connections-reconnectstate-messageChase needs to reconnect. Banks ask for this now and then to keep your connection secure. Your last update is still below, and nothing about your money has changed.state-message
connections-reconnectconnection-rowUntil it reconnects, your list is the one from Jul 29. New charges and price changes will not appear.body
connections-reconnectconnection-rowJul 29, 8:02 AMbody
connections-reconnectprimary-actionReconnect Chasebutton
connections-add-sourcestate-messageAdd a sourceheading
connections-add-sourcestate-messageThe same two ways in, and you can have both. There is no limit on how many you add.state-message
connections-add-sourcepath-optionConnect your bankheading
connections-add-sourcepath-optionRead-only, through Plaid, and about a minute. Tendd cannot move your money.body
connections-add-sourcepath-optionAdd them yourselfheading
connections-add-sourcepath-optionStart with one and add more later. No bank is involved, and nothing leaves your control.body
connections-add-sourcepath-optionChoose this pathbutton
connections-add-sourcelaterNot nowlink

data-privacy (+ delete-confirm)

ScreenZoneLineType
data-privacyappbar‹ Youlink
data-privacyheaderData and privacyheading
data-privacyheaderExactly what Tendd reads, and how to remove it whenever you want.body
data-privacyprivacy-sectionWorried what an app does with your bank data? Here is exactly what we do.body
data-privacyprivacy-sectionWe read your recurring chargesbody
data-privacyprivacy-sectionRead-only, and nothing else you do with your money.body
data-privacyprivacy-sectionWe can never move your moneybody
data-privacyprivacy-sectionThe connection has no permission to, and we never ask for one.body
data-privacyprivacy-sectionWe do not sell your databody
data-privacyprivacy-sectionNot to advertisers, not to anyone, on any plan.body
data-privacyprivacy-sectionWhat each source can reachheading
data-privacyprivacy-sectionBank connection / read-only transaction history, through Plaidfield-label
data-privacyprivacy-sectionAdded by you / only what you typefield-label
data-privacyprivacy-sectionYour sourceslink
data-privacypermissionsControlsheading
data-privacypermissionsRefresh my bank data automaticallyfield-label
data-privacypermissionsRead-only. Keeps your list current without you asking.hint
data-privacypermissionsUse my activity to improve Tenddfield-label
data-privacypermissionsOff by default. We never sell your data either way.hint
data-privacyexportYour dataheading
data-privacyexportDownload everything Tendd holds for you. This is your right and it is free. Exporting your history as a spreadsheet is a separate Tendd Pro feature, on Your trends.body
data-privacyexportDownload your databutton
data-privacydeleteDeleting removes your subscriptions, your sources and your account. It cannot be undone.body
data-privacydeleteDelete everythingbutton
data-privacypolicyRead the full privacy policylink
data-privacy-delete-confirmstate-messageDelete everything Tendd holds for you?heading
data-privacy-delete-confirmstate-messageThis deletes your 14 subscriptions, both of your sources, and your account. It cannot be undone, and we keep no copy.state-message
data-privacy-delete-confirmconsequenceYour subscriptions / deleted, including the 3 you typedfield-label
data-privacy-delete-confirmconsequenceYour bank connection / disconnected at Chase, and the read access endsfield-label
data-privacy-delete-confirmconsequenceYour account / closed, and you are signed outfield-label
data-privacy-delete-confirmexportWant a copy first? Download your data is free and takes a moment.body
data-privacy-delete-confirmprimary-actionDelete everythingbutton
data-privacy-delete-confirmprimary-actionKeep my databutton

settings (+ no-account)

ScreenZoneLineType
settingsaccountYouheading
settingsaccountYour details, your plan, and the two screens that hold everything about your data.body
settingsaccountYour detailsheading
settingsaccountEmailfield-label
settingsaccountemma@example.combody (USER)
settingsaccountCurrencyfield-label
settingsaccountUS dollar ($) / Euro / British poundbody
settingsaccountEvery amount in Tendd is shown in this currency.hint
settingsplan-cardYour planheading
settingsplan-cardFree / Prostatus
settingsplan-cardPro until 1 May 2027status (after cancelling)
settingsplan-cardThen Free. It does not renew, and nothing more is charged.body (after cancelling)
settingsplan-cardPro, renews 1 May 2027status (renewing)
settingsplan-cardAt $69 a year. Cancel any time in Manage plan.body (renewing)
settingsplan-cardKeeping it means it renews on 1 May 2027, at $69. Nothing is charged before then.body (after cancelling)
settingsplan-cardKeep Tendd Probutton (after cancelling)
settingsplan-cardUnlimited subscriptions and unlimited bank connections. History, trends and advanced alerts are part of Tendd Pro.body
settingsplan-cardManage planbutton
settingsnotificationsWhat Tendd tells you aboutheading
settingsnotificationsAll in plain language, never alarming.body
settingsnotificationsA price goes up (Like "Netflix went up by $2.50".)field-label
settingsnotificationsA payment does not go through (Like "A payment to Amazon Prime did not go through".)field-label
settingsnotificationsA free trial is ending soon (Part of Tendd Pro.)field-label
settingsnotificationsA charge is coming up (Two days before, with the amount. Part of Tendd Pro.)field-label
settingsnotificationsWeekly email digest (A calm Sunday summary of what is coming up.)field-label
settingsappearanceHow Tendd looksheading
settingsappearanceDark mode (Easier on the eyes at night. Nothing else changes.)field-label
settingssettings-rowYour sources (Banks and manual entries you track)body
settingssettings-rowData and privacy (What we read, and delete everything)body
settingssettings-rowHelp and support (Guides and how to reach us)body
settingssettings-rowSign outbody
settings-no-accountaccountYouheading
settings-no-accountaccountYour plan, and the two screens that hold everything about your data.body
settings-no-accountaccountCreate an account to keep your listheading
settings-no-accountaccountYou have 3 subscriptions saved in this browser. An account is one email, and it is what lets them follow you.body
settings-no-accountaccountEmailfield-label
settings-no-accountprimary-actionSend a sign-in linkbutton
settings-no-accounttrust-noteYour list follows youbody
settings-no-accounttrust-noteRight now it lives in this browser only. Clear it, or open Tendd on your phone, and the list is not there.body
settings-no-accounttrust-noteWhat we tell you about can reach youbody
settings-no-accounttrust-noteA price change or a payment that did not go through can be sent to you, instead of waiting here until you look.body
settings-no-accounttrust-noteWhat we would holdbody
settings-no-accounttrust-noteAn email and a currency. Nothing is read from a bank, because you have not connected one.body
settings-no-accountsettings-rowYour sources (3 subscriptions you typed, and nothing connected)body
settings-no-accountsettings-rowAlready have an account? (Sign in and this list joins it)body

Two rows are missing from this state on purpose. There is no "What Tendd tells you about" block, because there is no address to send anything to, and a preference screen for messages that cannot arrive is theatre. That fact is not hidden: it is the second of the three lines above, written as what an account changes rather than as a lack. And there is no "Sign out", because there is nothing to sign out of.

Discrepancies flagged (Step 1, not yet resolved)

Nothing below is rewritten. These are the places where the product says the same thing in different words, or slips into a tone we said we would avoid. Step 3 (Dictionary and Forbidden) and Step 4 (Microcopy rules) decide each one.

D1. The manual-add action has 7 different labels

The single job "add a subscription by hand" is written as: Add them yourself (path-choice), Add them yourself instead (connect-bank, connect-bank-error), Add them yourself (connect-bank-empty), Add subscription (add-subscription, add-subscription-error), Add it manually (add-subscription custom link, add-subscription-empty), + Add subscription (home), Add a subscription (home-empty, guided-reveal-empty), Add manually (connections, connections-empty), Add another by hand (connections). Needs one canonical button label.

D2. The connect-bank action has 3 labels

Connect your bank (path-choice, connect-bank, home-empty) vs Choose your bank (connect-bank primary button) vs Connect a bank (connections, connections-empty).

D3. "Go back to Home" is the same destination under 4 names

Back to your subscriptions (alerts-empty, alerts-error), Back to Home (subscription-detail-error, history-trends-empty), Done, back to my list (cancel-win, share-snapshot, share-snapshot-error), See my list / See my full list (add-subscription, guided-reveal). All land on Home.

D4. The retry action has 4 labels

Try again (connect-bank-error, home-error, alerts-error, subscription-detail-error, share-snapshot-error) vs Check again (connect-bank-empty) vs Search again (add-subscription-empty) vs Try the list again (add-subscription-error).

D5. The tracked thing is named 5 ways

subscription (most screens), thing (guided-reveal: "subscribed to 14 things"), service (add-subscription: "Find a service", "400+ services", "Loading services"), recurring charge (welcome, connect-bank, data-privacy), what you pay for (connections, home-empty). The catalog of presets is presets on welcome but services everywhere else. Dictionary must fix one term per concept and say when "service" (the catalog entry) legitimately differs from "subscription" (the thing being tracked).

D6. The bank-or-manual origin is named 3 ways

source (connections: "Your sources", "Add a source"; settings; data-privacy), connection ("Bank connection via Plaid", "bank connections"), bank / account. One dictionary term needed, with "connection" reserved for the Plaid link specifically if we keep both.

D7. The read-only trust line drifts across 4 forms

Read-only, we can never move your money. (welcome, path-choice) / We can never move your money. (connect-bank, data-privacy) / Read-only. Tendd cannot move your money. (home, connections) / Read-only, cannot move money (connections access value). Two variables move independently: "we" vs "Tendd", and whether "Read-only" leads. This is Tendd's most important trust sentence and should be one fixed line.

D8. "Plaid" takes 3 prepositions

Powered by Plaid (connect-bank) / via Plaid (connections) / through Plaid (connections, welcome). Pick one.

D9. The monthly total concept is phrased 4 ways

monthly total (welcome, home-empty), recurring spend (history-trends header), monthly recurring total (history-trends summary), recurring money (welcome benefit card). Choose one label for the headline number.

D10. Loading screens are inconsistent

Most loaders use one calm sentence ending "This usually takes a moment." (home-loading, alerts-loading, history-trends-loading, share-snapshot-loading). But two use a terse gerund title with an ellipsis: Loading services... (add-subscription-loading) and Creating your card... (share-snapshot-loading). The ellipsis + "-ing..." pattern reads generic and is the one place loaders drift from the calm sentence. Microcopy rule (Step 4) should settle the loading pattern.

D11. Contractions are used inconsistently

Contracted in places: You're paying, Can't find it?, Couldn't cancel?, Let's try the card again. Spelled out elsewhere: We could not, cannot, did not, It is, That is. The clearest clash: You're paying for 14 subscriptions (home) vs You are subscribed to 14 things (guided-reveal), the same statement, one contracted and one not, with a different noun on top of it. Voice needs one rule on contractions.

D12. Celebratory / hype tone (candidates for the Forbidden list)

Nice. opener and A small win (cancel-win); Feeling good about it? (cancel-win share); It felt great. (welcome testimonial, quoted, so lower priority). Design principle 5 says the cancel moment is the one place a small win is allowed, so this is a deliberate-versus-drift call for Step 3, not an automatic delete.

User content, never rewritten

Values a user types or that stand in for their input: the add-subscription form values (net, Netflix, $17.99, Aug 3, 2026, Cerebro Cloud), the unrecognized raw descriptor SQ *BLUEBOTTLE 8890 (subscription-detail-unrecognized), the sample account Emma Carter / emma@example.com (settings), and the three quoted testimonials on welcome. Merchant names in the canonical dataset (Netflix, Spotify Premium, and so on) are product fixtures, not authored voice copy, and also stay.

Allowed placeholders (deferred assets, not copy)

[logo], [merchant logo], [chart], [preview image]. These stand for a Design-phase asset, not for missing text, and are out of scope for voice.

Each one was settled in Voice: Dictionary and Voice: Forbidden.