Structure
Every node of the product, as chips. Global elements frame every screen; pages are the screens themselves. A chip opens the specification of that node: its blocks, its states, its transitions and its SEO block.
The chips are rendered from one registry, ia/_nav.js: a node added there appears here the same moment, with no page to re-sync by hand. Until each node has its own page, a chip opens the node inside its cluster specification.
Nodes
Node number, name, type and scope. The tree view of the same material is on Sitemap; the data behind both is docs/sitemap.md. A chip opens the node: its own page where one exists, its cluster specification where it does not yet. The shape every node page follows is fixed on the etalon, node 1.1 Welcome.
Block bank by page type
Where the composition of a screen comes from. Every other artifact here has a rule of origin: a research fact carries a source, a CJM emotion carries a quote or a ?, a color comes off the brand plate, a line comes from the microcopy inventory. The list of blocks on a page had none, so it was invented on the spot, and an invention is always the median of everything seen before: hero, filter, cards, pagination. That median is what a thin wireframe looks like. Full data: docs/blocks.md.
Collected by page type, not by node: 16 screens collapse into 7 types, so the expensive step runs 7 times instead of 23. Two sources answer two different questions: competitors say what holds a person inside our category, Refero says how a page of this type is built in best-in-class products outside it.
Source availability, stated out loud
The rule about two sources says what is not enough, not what to do when one half is physically unavailable. For Tendd the domain half exists for two types only; the rest of the product is behind a competitor login, and we do not log in.
| Type | Nodes | Domain half (competitors) | Craft half (Refero) |
|---|---|---|---|
| A. Public landing | 1.1 | available: Rocket Money, ReSubs, Bobby | available |
| B. Onboarding step | 1.2, 1.3, 1.4, 1.5 | missing behind signup | available |
| C. List dashboard | 2.6 | second-hand Refero indexes in-product screens: Monarch Money, plus two category peers on iOS | available |
| D. Object detail | 2.7 | second-hand Orbit's own detail sheet, plus Duolingo's cancel-side screen | available |
| E. Activity feed | 3.8 | partly the category has no feed at all, only per-item reminders | available, but in the wrong register |
| F. Task guide plus confirmation | 4.9, 4.10 | available: ReSubs publishes a full cancel guide library, opened live | available |
| G. Account and settings | 6.14, 6.15, 6.16 | second-hand connection and privacy screens from several products | available |
| H. Depth and chart | 5.12 | second-hand Copilot, Wise, Klarna, Roi | available |
| I. Upgrade gate | 5.13 | available: a paywall is the one screen every product shows to a stranger | available |
| J. Share card | 4.11 | missing in the category, available outside it | available |
Corrected after type C ran. "Behind login" is true of Playwright and turned out to be untrue of the whole question: Refero indexes screens from inside logged in products, so the domain half can come back through the craft instrument. For type C it did, with Monarch Money's own recurring screens. Such a source is second-hand and dated - we did not open it, we cannot date it, it is one capture rather than a live walk - so it is marked as such wherever it is used and never carries a claim on its own. The table is corrected as each type runs.
For the types still missing the fallback is named and approved: the craft half stays with Refero, the domain half is replaced by our own research (barriers from CJM As-Is, jobs from JTBD), and the column "where we are better" holds the barrier the block works on instead. We do not imitate a domain source from a competitor marketing landing: that is a different page type and its blocks are about something else. Types whose nodes are all LATER (Share Snapshot, History and Trends, Upgrade) were out of the first round; they ran on 2026-08-05 as types H, I and J, before their screens were drawn, and they are at the bottom of this section.
Type A. Public landing (node 1.1 Welcome / Value Intro)
The front door, and the only indexed screen in the product. Its job is J1, activate without anxiety: carry an avoider to the first look without asking for a bank first, which is growth zone 1, the biggest gap named in the category.
- Domain, opened in session 2026-08-04: ReSubs (closest positioning, no bank access at all), Rocket Money (category leader), Bobby (the minimal end, four blocks total). Screenshots in
research/screens/blocks-*.png. - Craft, Refero: Visitors (a privacy-first alternative selling against an incumbent), Cushion (calm SaaS, reassurance under the CTA), Copperx (money product with a security section), Vivid Money (hero carries a real product view).
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| all seven | Header: wordmark, one or two links, sign in | TAKE | GC1 App Header | MVP | Competitors put "Sign up" as the loud action; ours is "See how it works", because the sign-up ask before value is growth zone 1 |
| all seven | Hero: H1, one-sentence promise, primary CTA | TAKE | J-MAIN; SEO block B | MVP | Rocket Money's H1 is about the app ("The money app that works for you"); ours names the person's outcome, per principle 3 |
| Cushion, Visitors | Reassurance line under the CTA ("no credit card required") | TAKE, DIFFERENTLY | growth zone 1; J1; J5 | MVP | Ours says the harder thing: "No bank connection needed to start". The category asks for the bank in step 1 to 2; this line is the promise the rest of the page has to keep |
| Vivid, Cushion, Copperx | Product preview in or under the hero | TAKE, DIFFERENTLY | growth zone 2; H0 | MVP | Vivid shows a donut chart, Copperx a phone in a hand. Ours shows the actual calm list with real merchant names and one total: we sell legibility, not a chart |
| Visitors | "Set up in minutes": a numbered three-step strip | TAKE | Phase 3 barrier; the 3-tap activation node | MVP | Names the length of the path before any commitment. The category shows features, never the length of the road, and length is what an avoider is bracing for |
| ReSubs (no bank at all), Rocket Money (bank only) | Two paths: connect a bank read-only, or add it yourself | TAKE, DIFFERENTLY | D1, D2; J1; J5; growth zone 1 | MVP | The category splits into two camps and each hides the other option. We show both as equals on the front door, which is the point of D2 |
| Copperx, ReSubs | Trust block: what we access, what we never do, read-only, delete any time | TAKE | J1, J5, E3; principle 4; GC6 | MVP | ReSubs states "100% privacy-first" as a badge inside a number strip. A badge is a claim; ours is a plain list of what happens with the data, in the same words used later at the connect step |
| ReSubs | Preset gallery (461 presets, browse the full list) | TAKE, DIFFERENTLY | D2; Phase 3 barrier; J-MAIN | MVP | ReSubs uses it as a feature boast. We use it as evidence that the manual path is not punishment: a short row of recognizable brands next to the manual path |
| Rocket Money, ReSubs | Plan line: what is free, what is Pro | TAKE, DIFFERENTLY | D3, D4; J1 | MVP | Rocket Money runs a full free-vs-Premium table on the landing, turning the front door into a sales page. Ours is one honest line plus a link |
| ReSubs, Visitors, Cushion, Copperx | FAQ accordion | TAKE | J1, J5; growth zone 1; SEO block D (FAQPage) | MVP | ReSubs proves the questions people arrive with ("Can ReSubs access my bank account?"). Ours answers the same four objections in our voice, and it is the only block allowed to say "bank" twice |
| ReSubs, Rocket Money | Closing CTA repeat | TAKE | the page is long on mobile; J-MAIN | MVP | The same single action as the hero, not a second louder one. The category escalates at the bottom |
| all seven | Marketing footer: legal, privacy, contact | TAKE | navigation.md; SEO block E | MVP | Ours puts the privacy policy first, not last, because privacy is the objection, not a formality |
| ReSubs | Stats strip: 18,000+ users, 50,000+ subscriptions, 20+ countries | SKIP FOR NOW | nothing true to put in it at launch; a fabricated number breaks principle 4 | LATER | Returns when the numbers are real |
| Rocket Money | "$2.5 billion saved", "Join 10 million+ members", press logos | SKIP | traces to nothing on our side; frames first contact as money pressure, which is growth zone 3 | out | The savings counter is the exact register an avoider retreats from |
| ReSubs, Rocket Money, Copperx, Bobby | Testimonials and store ratings | SKIP FOR NOW | no users at launch; a placeholder testimonial breaks principle 4 | LATER | Returns with real quotes, and then it carries the emotional beat E2, not a star count |
| Visitors, Cushion | Comparison table against a named competitor | SKIP HERE | no barrier asks for it at first contact; a head-to-head raises the anxiety register | LATER | Belongs to the SEO engine as its own page, not to the front door |
| Rocket Money | Feature blocks: spending, autopilot savings, credit score, bill negotiation | SKIP | out of product scope: Tendd is not a budgeting app | out | These are the blocks that turned Rocket Money and Emma into platforms and buried the subscription core |
| Cushion | Secondary CTA "Talk to a human" | SKIP | no support desk at MVP; the promise would be false | LATER | |
| Copperx | Avatar carousel "chosen by thousands" | SKIP | same as testimonials: nothing true yet | LATER | |
| Bobby | Announcement bar above the header | SKIP | no message worth an interruption on the calmest screen of the product; principle 1 | out |
Our order for node 1.1, mobile-first
- Header. Wordmark, "How it works", Sign in
- Hero. H1, one-sentence promise, primary CTA, and the line "No bank connection needed to start"
- Product preview. The calm list with real merchant names and one total
- How it works. Three numbered steps, the length of the path stated up front
- Two paths. Connect a bank read-only, or add it yourself with presets
- Trust. What we access, what we never do, read-only, delete any time
- Plan line. The whole calm view is free, Pro is depth
- FAQ. Four objections, in our voice
- Closing CTA. The same single action
- Marketing footer. Privacy first
Ten blocks from five sources, matching none of them: ReSubs has no product preview and no two-paths block, Rocket Money has no trust block and no honest plan line, Visitors and Cushion carry a comparison table we dropped, Vivid and Copperx have no FAQ answering a bank objection. The reassurance line, the how-it-works strip and the FAQ are craft borrowed from outside the category; the preset row is the one block taken from a direct competitor, and it is repurposed.
Type B. Onboarding step (nodes 1.2, 1.3, 1.4, 1.5)
Four screens, one type: each asks for exactly one thing and then gets out of the way. This is the chain the product is judged on, because it is where the avoider decides to stay or to close the tab, and where the riskiest assumption is won or lost.
The domain half is missing here. Every competitor puts these screens behind signup. Two real domain sources survive, and neither is a marketing page: Plaid Link, the component we actually embed under D5, whose flow is published at plaid.com/docs/link and is a hard constraint rather than an inspiration; and our own research, the growth zones and jobs that say what these screens must defuse.
- Plaid Link, opened 2026-08-04: Link opens, the person picks their bank, is handed off to the bank's own OAuth, signs in there, chooses which accounts to share, comes back linked. Credential entry, MFA, error handling and the confirmation email all live inside Link. We do not design those screens. Screenshot:
research/screens/blocks-plaid-link-flow.webp. - Craft, Refero: Arcade and Care.com (a screen that is only a question and option cards), Rarible (a line of consequence per option), Fernand (escape hatch), Rox (permission lines, read against write), Stripe (what is needed, how long it takes), IFTTT (search plus a grid of logo tiles), Square (the manual form), Quizlet and Product Hunt (a finished state that reports a result).
| Node | Block | Verdict | Traces to | Scope | Barrier it works on |
|---|---|---|---|---|---|
| all four | Step chrome: back, a step marker, nothing else | TAKE, DIFFERENTLY | the three-tap ceiling; GC1 | MVP | Ours shows the position without a progress bar. A bar on step 1 of 4 tells an avoider the road is long; "you can go back" is the reassurance that matters |
| all four | Exactly one question per screen, one primary action | TAKE | principle 2; growth zone 4 | MVP | The all-or-nothing shock is built out of screens that ask for several things at once |
| 1.2 | Two option cards: connect a bank, or add it yourself | TAKE | D1, D2; J1; J5; growth zone 1 | MVP | This screen exists only because of the bank wall. Both cards carry the same size and weight: the manual path is not the consolation prize |
| 1.2 | A recommendation badge on the faster option (Arcade's "Popular") | SKIP | nothing to trace it to; it turns an equal choice into a nudge toward the bank | out | The nudge is the wall in a softer form |
| 1.2 | One line of consequence under each option label | TAKE | J1; growth zone 1 | MVP | Says what happens next in plain words, so neither door is a leap in the dark |
| 1.2 | Escape hatch as a secondary action | TAKE, DIFFERENTLY | J1; the retreat phase of the As-Is journey | MVP | Ours is "I will do this later", and it lands on Home with an empty state. Retreat is the As-Is default; the product should survive it |
| 1.3 | "What is needed" and "how long it takes" before the action | TAKE | Phase 3 barrier; J1 | MVP | The category asks for bank credentials with no statement of duration or of what happens after. Two lines remove the biggest unknown |
| 1.3 | Permission lines, read against write stated explicitly | TAKE | J1, J5, E3; GC6; principle 4 | MVP | Read-only is our position, not a setting: what we can see, what we can never do, and that it can be disconnected at any time, stated before the handoff |
| 1.3 | Institution search, credential entry, MFA, account selection | DO NOT DESIGN | Plaid Link owns these screens | MVP | Our wireframe shows the handoff as one boundary block plus the states around it. Drawing a fake credential screen would be a lie about the product |
| 1.3 | Return states: connected, cancelled, failed, no accounts found | TAKE | node states in the node map; J4 | MVP | Link returns four outcomes and the category designs only the happy one. A cancelled connection must land somewhere calm, not on an error |
| 1.3 | A read against write toggle the person operates (Rox) | SKIP | we never request write access, so a toggle would imply we could | out | A control with only one legal position is theatre |
| 1.4 | Search field plus a browsable grid of logo tiles | TAKE | D2; Phase 3 barrier; growth zone 2 | MVP | Turns "type in everything you pay for" into "recognize what you already know". The tedium of the manual path is why it fails today |
| 1.4 | Manual form: name, price, billing cycle, first charge date | TAKE, DIFFERENTLY | D2; J-MAIN | MVP | Ours opens prefilled from the chosen preset, so the form is a confirmation, not data entry. A blank form is the version people abandon |
| 1.4 | Category, image upload, SKU and other catalog fields | SKIP | nothing traces to them; category is derived, not asked | out | Every extra field is a reason to close the tab |
| 1.4 | "Add another" as a quiet secondary action after saving | TAKE | J-MAIN | MVP | The one-at-a-time loop has to be cheap, or the manual path stops at the first entry |
| 1.5 | A result stated in one sentence | TAKE, DIFFERENTLY | D1; growth zone 4; H0 | MVP | This is the reveal, and D1 makes it gradual: the count, then the categories, then the total, each paired with an action. The category dumps a full dashboard in one frame |
| 1.5 | Real merchant names and logos in the first list a person sees | TAKE | growth zone 2; J3 | MVP | Half the charges are unreadable bank codes today. This is where that gets fixed, or the whole promise fails |
| 1.5 | Next steps offered at the end | TAKE, DIFFERENTLY | J-MAIN; J2 | MVP | Ours offers one: go to the calm view. A menu at the emotional peak is a second decision nobody asked for |
| 1.5 | Loading state with an honest wait message | TAKE | node state 1.5.1; J1 | MVP | A sync takes seconds and the screen is empty. That empty stretch is where the doubt lands, so it gets a line, not a spinner alone |
| 1.5 | A celebratory total, "you are spending $X a month", first | SKIP | growth zones 3 and 4; principle 1 | out | The number first is the shock. Under D1 it comes third, and paired with an action |
Our order per node, mobile-first
1.2 Path Choice
Back / one question as H1 / two equal option cards with a label, an icon and one line of consequence / "I will do this later" as a quiet secondary / a legal line under the fold.
1.3 Connect Bank
Back / H1 / one paragraph on what happens / what we can see and what we can never do / how long it takes / your email, with the reason beside it / hand off to Plaid Link / "add subscriptions myself instead" / the four return states as their own nodes.
1.4 Add Subscription
Back / search field / a row of the most tracked brands as tiles / a prefilled form when a preset is picked / save as primary / "add another" after saving / fully manual entry as the fallback.
1.5 Guided Reveal
The loading state with an honest line / step one: the count, paired with an action / step two: the categories / step three: the total / one primary action into the calm view.
1.6 Sign In
Brand mark / H1 and one line / one field, the email / what will arrive, said before it is asked for / "no account yet? start here" / the trust line: we hold an email and a currency.
Added 2026-08-10, after this bank round ran. It takes the type B shape and none of the persuasion, because it returns a person rather than activating one. The counts in this section describe the round as it happened, on sixteen screens, and are left as the record of it.
Four screens at the round, ten craft sources, one embedded component that dictates its own middle. Node 1.6 is the fifth card above and postdates the round, as its own card says. The composition matches none of the sources: Arcade and Care have no escape hatch, Stripe has no read-only statement, IFTTT has no prefilled form behind the tile, Quizlet reveals everything at once. The gradual reveal is ours by decision D1, and it is the one block in this type that no reference could have supplied.
Type C. List dashboard (node 2.6 Home)
The screen the whole product is. Everything before it is a path to it, everything after it is a detail of it. It carries J-MAIN in one frame: all recurring charges in one calm view.
Here the domain half came back. Refero has the exact screen we could not open: Monarch Money's own recurring list, in a filled and an empty state, plus two subscription trackers on iOS. Second-hand captures, marked as such in every row.
- Domain, second-hand through Refero: Monarch Money, recurring/all (a soft competitor in our own analysis) and the same screen empty; Subo and Orbit, category peers on iOS.
- Craft, outside the category: Cursor billing (summary cards above a plain list, no chart anywhere), Dime (mobile: summary on top, grouped list under it), Teal (a list with exactly one primary action).
What Monarch's screen is made of: a sidebar of ten product sections with Recurring as one of them / three tabs / a filter row with a "Manage recurring" button / a five column table (name, next due date with days remaining in parentheses, payment account, category emoji, amount) / a free trial countdown and a discount offer pinned in the sidebar. Its empty state offers exactly one way out: "Connect an account to get started".
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| Orbit, Dime, Cursor | Summary strip: the count in plain language and the monthly total | TAKE | GC3; J-MAIN; D1; principle 2 | MVP | Orbit puts the count and total in a header line next to an Upgrade pill. Ours is the largest thing on the screen with nothing selling next to it |
| Subo | Grouping by category, each group with its own subtotal | TAKE, DIFFERENTLY | J-MAIN; J3; principle 2 | MVP | Ours groups by default and offers no sort menu at MVP. A grouping you must choose is a decision handed to someone who came here to stop making decisions |
| Monarch, Subo | List item: logo, real merchant name, amount, next charge | TAKE | GC4; growth zone 2; J3 | MVP | The block the category treats as table stakes and nobody made a differentiator. Real names are the fix for the unreadable bank code, and the reason the first look is not futile |
| Monarch | Next due date with days remaining in parentheses | TAKE, DIFFERENTLY | J4; GC4 | MVP | Ours drops the raw date to second place and leads with "in 6 days": the question is never "what is the date", it is "is this about to happen" |
| Monarch | Payment account column | SKIP | nothing traces to it; our person does not reconcile accounts | out | Every column that is not load-bearing makes the list denser, and density is the overwhelm barrier |
| Monarch | Three way split: Income, Expenses, Credit cards | SKIP | out of product scope; accounting framing | out | The split is what turns a subscription tracker into a budgeting app, which our audience actively avoids |
| Monarch | View switch: Today, List, Calendar | SKIP FOR NOW | principle 2; no barrier asks for a calendar at MVP | LATER | A calendar of charges is a legitimate Pro-side idea; on the calm view it is a second product |
| Monarch, Orbit, Subo | Filter row, sort popover, search field | SKIP FOR NOW | a list of ten to twenty items does not need them, and offering them implies the list will be long | LATER | Implying a long list is itself anxiety. Returns if real lists turn out long |
| Monarch, Orbit | Upsell inside the calm view: trial countdown, discount, Upgrade pill | SKIP | D3: the paywall sits at depth, never at basic visibility | out | The most important skip of this type. Emma's own reviews name aggressive upsells as what spoils an otherwise strong app, and the calm view is exactly where an avoider must not be sold to |
| Monarch, empty state | "Connect an account to get started" as the only way out of empty | TAKE, DIFFERENTLY | D2; growth zone 1; J5 | MVP | Their empty state is the bank wall again, one screen later. Ours offers both paths in the same words used at Path Choice, so the manual route survives all the way to the empty list |
| own research | Attention row, shown only when true: a price change, a failed payment | TAKE | J4; GC4; D-Concept (amber, never red) | MVP | The category either says nothing or shouts in red. A quiet amber line that appears only when it is true is the version an anxious person can live with |
| own research | Data source and trust line under the list | TAKE | GC6; principle 4; J5 | MVP | No competitor says where the number came from. Ours names the source and the last sync: a number with no origin is a number to distrust |
| Monarch, Orbit | A prominent add or manage button in the header | TAKE, DIFFERENTLY | D2; J-MAIN | MVP | Ours is a quiet secondary. The job of this screen is to look, not to add; a plus button competing with the total sends the wrong instruction |
| Vivid, Monarch cash flow | Charts, donuts, spending graphs | SKIP | growth zone 3; the depth belongs to node 5.12 | LATER | The chart is the exact texture our person named as overwhelming, and putting it behind Pro is D3 working as designed |
| Cursor | Stacked cards instead of one flat table | TAKE, DIFFERENTLY | mobile-first; principle 2 | MVP | A five column table does not survive 360px. Ours is one card per subscription, and the card carries four things, not five |
Our order for node 2.6, mobile-first
- App header (GC1). The screen name and a quiet way into the account
- Summary strip (GC3). "You are paying for 14 subscriptions", the monthly total as the biggest thing on screen, one line of context under it
- Attention row. Only when it is true: a price change or a failed payment, amber, one line
- The list. Grouped by category, each group with its own subtotal
- The item (GC4). Logo, real name, amount, "in 6 days"
- Add a subscription. A quiet secondary
- Data source and trust line (GC6). Where these numbers come from and when they were last checked
- Tab bar (GC2).
States: empty with both paths, loading as a skeleton of the list rather than a spinner, sync failed with the last known figures still visible and dated, and the ordinary filled state. Eight blocks: Monarch has three of them and buries the screen under ten product sections plus a trial countdown; Subo has the grouping and no summary; Orbit has the summary and sells next to it; Cursor and Dime supplied the shape and know nothing about our people. The attention row and the trust line exist in none of the six.
Type D. Object detail (node 2.7 Subscription Detail)
One subscription, everything known about it. This is where J3 lives, the clarity job: "what IS this charge". It is also the doorway to J2, the cut job, because a person decides to cancel here and not on the list.
Second-hand again, and this time from both sides of the mirror. Orbit has the detail sheet. Duolingo has the screen our person meets at the other end, when they go to the merchant to cancel: that one is a retention screen, and knowing its shape is what makes the cancel guide honest later.
- Domain, second-hand through Refero: Orbit's subscription detail - hero with logo, name and price / five label and value rows (Billing, Next payment, Total spent, Subscribed, Category) / a Billing History card / a full width "Mark as Cancelled" / a "Delete subscription" link. Duolingo's Manage subscription - an expiry banner with REACTIVATE as the primary action / a benefits list that argues against leaving / plan, next payment, card ending / a per-benefit "TURN OFF".
- Craft: TwelveLabs billing (stacked cards including the history's empty state), Wealthsimple accounts (back link, title, stacked cards, no tabs on one object), Shop order history (a history block designed for being empty).
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| Orbit | Hero: logo, name, the amount as the largest thing, cycle beside it | TAKE | J3; GC4; principle 2 | MVP | Orbit sets the price at 34pt on a purple gradient. Ours is the same hierarchy in a calm register: the number is big because it is the answer, not because it is dramatic |
| own research | The decoder line: "Appears on your statement as SPOTIFYAB STOCKHOLM" | TAKE | growth zone 2; J3 | MVP | Exists in none of the sources. It is the whole reason this screen exists: the friendly name is what we show, the bank code is what she saw, and connecting the two is when the charge stops being frightening |
| Orbit | Label and value rows: billing cycle, next payment, category | TAKE | J3, J4; GC4 | MVP | Ours leads the next payment with "in 6 days" and keeps the date second, the same rule as on the list |
| Orbit | "Total spent" | TAKE, DIFFERENTLY | J2; E2 | MVP | Neutral label, no exclamation, and only once there is enough history for it to mean anything. The same number reads as a small win or as an accusation, and the label decides which |
| Duolingo, Orbit | Payment method, "Visa ending 4400" | TAKE, DIFFERENTLY | J3; principle 4 | MVP | We hold no card data, so we never print card digits. We name what we know from the source: "Charged to Chase checking". This is the column dropped from the list on purpose, and it belongs here one level deeper |
| Orbit, TwelveLabs | Charge history | TAKE, DIFFERENTLY | J3, J4; D3 | MVP | The last three months are free, because that is basic detail. Longer history and trends are Pro, node 5.12. D3 in one row: depth is paid, visibility is not |
| own research | Price change marked inside the history, in amber | TAKE | J4; D-Concept | MVP | The category tells you the new price and never shows the old one. Ours marks the row where it changed, so a rise is a fact with a date, not a suspicion |
| Orbit | Primary action on the object ("Mark as Cancelled") | TAKE, DIFFERENTLY | J2; D3 (never a paywall at the cancel moment) | MVP | Orbit's primary marks a status the person has to achieve elsewhere on their own. Ours opens the cancel guide and actually helps, and it is free |
| Duolingo | Benefits list plus a REACTIVATE banner | SKIP | retention framing; we are not the merchant | out | Kept as an input for node 4.9 instead: our cancel guide must warn that this is exactly what the merchant will show, so the pressure is expected rather than surprising |
| Duolingo | Per-benefit "TURN OFF" toggle | SKIP | not our object; we do not control the merchant's plan | out | |
| Orbit | Edit pencil on the history card | SKIP | editing past charges implies an editable ledger of facts | out | History is evidence. If it is wrong, the fix is to report the source, not to overwrite the record |
| own research | Correction action: "this is not a subscription" | TAKE | principle 4; detection is a guess and must be correctable | MVP | Automatic detection is wrong sometimes, and every competitor makes that the person's problem. A visible correction is what makes the figures trustworthy |
| Orbit | Delete subscription as a destructive text link | TAKE, DIFFERENTLY | D-Concept (clay only for a genuine error) | MVP | For a detected item ours hides it and says it can come back; only a manual entry is truly deleted. Deleting something the bank will re-detect tomorrow is a lie about what happened |
| Wealthsimple | Tabs on the object | SKIP | one object, one screen; principle 2 | out | |
| own research | Data source and trust line | TAKE | GC6; principle 4 | MVP | Where this figure came from and when it was last checked, on the screen where the person is deciding to act on it |
Our order for node 2.7, mobile-first
- Back to the list (GC1).
- Hero. Logo, real merchant name, the amount, the cycle beside it
- Status. A quiet badge, amber only if the price changed or a payment failed
- The facts. Next charge "in 6 days, 11 March", billing cycle, charged to, category, paid so far
- The decoder line. How this charge appears on the statement
- Charge history. The last three months, the price change marked; deeper history is Pro
- Primary: help me cancel this. Into node 4.9
- Secondary. Edit the details, and "this is not a subscription"
- Remove from the list. Quiet, and honest about whether it can come back
- Data source and trust line (GC6).
States: a manual entry (no bank source, no decoder line, editable), a detected entry (source named, correction offered), price changed, payment failed, and already cancelled. Ten blocks: Orbit has five and its primary action only marks a status; Duolingo has the shape of what our person is about to walk into and none of what she needs before she does; TwelveLabs and Wealthsimple supplied the stacking and the empty history. The decoder line and the correction action exist in no source, and they are the two blocks that make the screen worth opening.
Type E. Activity feed (node 3.8 Alerts)
The screen that closes J4, never be surprised by a price change or a failed payment. It is also the screen that decides whether the product is a source of calm or one more thing that buzzes at you.
Two findings before any block. On the domain side, the category has no such screen: Subo and Orbit configure reminders per subscription inside the add and edit flow and deliver them outside the app, so there is nowhere to go and see what happened. Rocket Money sells the promise on its public landing ("We'll notify you of important events that need your attention so you're never caught off guard") and exposes nothing behind it. On the craft side, the pattern exists everywhere, but the good examples are enterprise audit logs, whose register is the opposite of ours. Both findings push the same way: this screen has to be invented rather than adapted.
- Domain: Rocket Money opened 2026-08-04, the promise in marketing with no screen behind it; Subo's add and edit and its reminder step, second-hand: a renewal reminder toggle, reminder timing and a notes field, all per subscription.
- Craft: Dropbox admin activity log (search, filters, a multi column audit table), Airbnb notifications (one card: icon, message, dismiss), Missive (a feed inside a working surface).
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| Missive, Airbnb | A list of events, newest first, each one a plain sentence | TAKE | J4; GC5; principle 3 | MVP | The category has no such list at all. Ours is a sentence a person reads once, not a log line to decode |
| own research | Two groups: "Needs you" and "Just so you know" | TAKE | J4; principle 2; growth zone 3 | MVP | Exists in no source. A feed sorted by date makes the person scan to find out whether anything is wrong. Sorting by whether it needs them answers that before they start reading |
| Dropbox | Unread counts, badges, red dots | SKIP | D-Concept: a quiet gray badge, never red; growth zone 3 | out | A red badge on a money app is an anxiety machine, and our person already avoids opening it. The count is quiet or it is absent |
| Dropbox | Search, filter row, multi column audit table | SKIP | the enterprise register; a handful of events is not an audit trail | out | The craft half of this type is built for an admin proving what happened. Our person is deciding whether they need to worry |
| Airbnb | Dismiss on an item | TAKE, DIFFERENTLY | J4 | MVP | Ours marks it read and never deletes the underlying fact. Dismissing a price change should not erase that the price changed |
| own research | Price change shows the old price, the new price and the difference | TAKE | J4; growth zone 2; D-Concept | MVP | Exists in no source. Every product tells you the new number. The old one beside it is what turns a surprise into an explanation |
| own research | The action lives inside the alert: see the charge, help me cancel | TAKE | J2, J4; the flows | MVP | An alert with no action is a notification. An alert with the next step is the product doing the job |
| own research | An empty state that is a good state: "Nothing needs you right now" | TAKE | E1; H0 | MVP | In most products an empty feed reads as a dead end. Here it is the product working, and it is the most reassuring sentence in the app |
| Subo | Reminder settings attached to each subscription | TAKE, DIFFERENTLY | J4; principle 2 | MVP | Subo makes you set a reminder on every item one at a time, which means an avoider sets none. Ours has one place that says what we will tell you about |
| Subo | Notes field on a subscription | SKIP | nothing traces to it; a tracker feature for people who enjoy trackers | out | Our person is not a spreadsheet person, and that is in the audience definition |
| Subo, Rocket Money | Channel configuration (push, email) on this screen | SKIP HERE | belongs to node 6.16 Settings | MVP | One screen, one job. The feed shows what happened; the settings decide what arrives |
| own research | The source named on each alert: which account it came from | TAKE | GC6; principle 4 | MVP | An alert that cannot say where it came from is a rumour |
| own research | Older events, collapsed | TAKE | principle 2 | MVP | The recent past is the job. The distant past is history, and history is node 5.12 |
Our order for node 3.8, mobile-first
- App header (GC1).
- "Needs you", usually empty. A failed payment in desaturated clay, a price change in amber
- "Just so you know". Charges due in the next seven days, a newly detected subscription
- The alert item (GC5). Icon, one plain sentence, the merchant and the amount, when, the source, and one inline action
- Older, collapsed.
- What we tell you about. A link into node 6.16
- Tab bar (GC2).
States: nothing at all ("nothing needs you right now"), only the quiet group, something in "Needs you", and loading as a skeleton. Seven blocks, and the two that carry the screen came from neither half of the sources: the split into "needs you" and "just so you know", and the price change that shows the old number beside the new one. The craft half taught us mostly what not to do, which is a legitimate result and is written down here rather than quietly dropped.
Type F. Task guide plus confirmation (nodes 4.9 Cancel Guide, 4.10 Cancel Win)
The cut job, J2, and the emotional beat the product is built around. These two screens already exist in grey and already have their copy: the strings belong to the microcopy inventory and are not re-decided here. What this type decides is the composition, and it found three blocks missing and one contradiction.
The domain half is fully available here, for the first time since type A: ReSubs publishes an open library of about thirty cancel guides, and one was opened live in this session.
- Domain, opened 2026-08-04: ReSubs, how to cancel Spotify, from the guide library. Its shape: a title with a duration promise and a reassurance built in ("Cancel Spotify Premium in 60 Seconds (Keep Access Until Renewal)") / read time / a one line summary / a mini table of contents / a meta strip with difficulty "Easy", "~5 min", the source "Spotify Support" and a link that opens the cancellation page / three channel sections (spotify.com, App Store, Google Play), each numbered / refund policy / a six question FAQ / related guides / a disclaimer.
- Craft: Brilliant's reward screen (quiet: one icon, one sentence, an explain link, a continue), LEGO and The New Yorker (the loud end of the same pattern, taken as contrast), FeedHive (the plain success card).
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| ReSubs | Numbered steps for the actual service | TAKE | J2; already in the grey screen and in the microcopy | MVP | Ours is inside the product at the moment of the decision, instead of an article the person has to go and find |
| ReSubs | Three channel sections: web, App Store, Google Play | TAKE, DIFFERENTLY | J2; growth zone 2; the decoder line at node 2.7 | MVP | The sharpest difference in the whole bank. ReSubs must show all three because it does not know how you subscribed. We do: the charge came through a bank descriptor or an app store. So we show one path, the one that matches this person, and say why. The category's biggest article asset is a question we can answer |
| ReSubs | Meta strip: difficulty, time, and the source of the instructions | TAKE | Phase 3 barrier; principle 4 | MVP | Missing from our grey screen. "About 5 minutes, from Spotify's own help pages" removes the fear that this is a long fight, and names where the steps came from |
| ReSubs | What happens when you cancel, with the real date | TAKE | J2; the anxiety of an irreversible action | MVP | Missing from our grey screen. Ours says the actual date, "you keep it until 3 August", because we know the billing period. ReSubs can only promise it in general |
| ReSubs | Disclaimer, and when the guide was last checked | TAKE, DIFFERENTLY | principle 4 | MVP | Missing from our grey screen. Cancellation steps go stale, and a guide that silently rots is worse than no guide. One line: when we last checked these steps |
| ReSubs | FAQ of six questions | SKIP FOR NOW | on a task screen it is a second document; the two useful answers are already taken above | LATER | The rest belongs to the SEO engine if it becomes a public guide library |
| ReSubs | "Can I pause instead of cancelling?" | TAKE, LATER | J2; regret avoidance | LATER | Needs per-service data we will not have at MVP. Named here so it is a decision rather than an omission |
| ReSubs | Related guides, keep reading, article footer | SKIP | in-product; nothing traces to it | out | That is an SEO surface, not a task screen |
| own research, in the grey | "I cancelled it" and the "could not cancel" path | TAKE | J2; the microcopy inventory | MVP | The category ends at the instructions. Ours stays for the outcome, including the failure, and says out loud that being blocked is not the person's fault |
| Brilliant, FeedHive | A quiet result screen: one line, the number, one action | TAKE | E2; principle 5; D-Concept | MVP | Already in voice, and this confirms the composition: the calm end of the pattern is the right one |
| LEGO, New Yorker | Confetti, animation, an exclamation | SKIP | principle 1; growth zone 3 | out | The beat is carried by the number and the sentence, not by decoration. The praise interjection was already dropped once in voice under D12 |
| own research, in voice | Confirmation on the person's word, stated as such | TAKE | principle 4 | MVP | We cannot verify a cancellation with the merchant, and the line "On your word" says so. Category apps mark an item cancelled as if they had checked |
| own research, in voice | Running total across every cut so far | TAKE | E2; J2 | MVP | The single win is a moment; the running total is what makes the second cut feel worth doing |
| voice, cancel-win share lines | "Share this win" on the win screen | DECIDED: LATER | node 4.11 Share Snapshot is LATER, and an MVP screen was pointing at it | LATER | Found as a contradiction and answered the same day (D-Share, founder, 2026-08-04): the share block moves to LATER with its destination and the MVP win screen ends on "back to your subscriptions". Rejected: pulling 4.11 into the MVP to justify the button |
Our order for nodes 4.9 and 4.10, mobile-first
4.9 Cancel Guide
Back to the subscription / heading and the amount with "you can always resubscribe later" / what happens when you cancel, with the real date / the meta strip: about five minutes, and where the steps came from / the one channel path that matches how this person pays, numbered / the primary action that opens the cancellation page / "I cancelled it" / "could not cancel?" / when we last checked these steps.
4.10 Cancel Win
A quiet header / the result in one sentence with the monthly and the yearly number / "on your word, you can always resubscribe" / the running total across every cut / back to your subscriptions. The share block waits for node 4.11.
Nine blocks on the guide, five on the win. Three of them were missing from the grey screen and are the reason this type was worth running: the time and source strip, what happens when you cancel with the real date, and the freshness line. One contradiction was found and is carried to the founder rather than quietly fixed.
Type G. Account and settings (nodes 6.14, 6.15, 6.16)
Three screens that look like housekeeping and are not. For an audience skeptical about connecting a bank, this cluster is where the trust promise made on the landing either holds or turns out to be marketing. J5, the privacy job, and E3, feeling safe about the data, live here.
- Domain and adjacent, second-hand: Linear and Squarespace connected accounts, Klarna and PayPal bank pickers, Canva privacy preferences, Shop data and privacy, Jace and Fingerprint account deletion, Uber account info.
| Source | Block | Verdict | Traces to | Scope | Where we are better and how |
|---|---|---|---|---|---|
| Linear, Squarespace | A list of connections, one card each | TAKE | node 6.14; J1 | MVP | |
| own research | Last successful check, on every connection | TAKE | GC6; J1; principle 4 | MVP | Exists in none of the sources. A silently stale connection makes the whole calm view quietly wrong and the person has no way to know. The freshness line is the trust line from Home, one level deeper |
| own research | Reconnect, when a connection has expired | TAKE | J1; the sync-failed state on node 2.6 | MVP | Bank connections expire by design. The category treats that as an error; ours treats it as maintenance, in the same calm register |
| Linear, Squarespace | Disconnect | TAKE, DIFFERENTLY | J5, E3; principle 4 | MVP | Every source offers disconnect and none says what happens to the data already collected. Ours states it in the same sentence: what stays, what goes, and whether the subscriptions remain visible |
| Klarna, PayPal | Bank search and picker | SKIP | Plaid Link owns this screen, the same boundary as node 1.3 | out | |
| own research | "Add another bank", with no counter and no limit anywhere | TAKE | D-Free (no cap on connections); J1 | MVP | A count next to a connection list reads as a cap even when there is none. D-Free is a promise this screen can quietly break by design, so it is written down as a block decision |
| Canva | Privacy toggles with learn-more links | TAKE, DIFFERENTLY | J5, E3; principle 4 | MVP | Ours is first a plain statement of what we store and what we never do, and only then a control. Canva's list is controls without a statement, which reads as a menu of things being done to you |
| Canva | Toggles for advertising, personalisation, profile enrichment | SKIP | we do none of these, and a toggle implies we could | out | The same rule that dropped the read against write toggle at node 1.3: a control with only one legal position is theatre |
| Shop, Jace, Fingerprint | Export my data, delete my account | TAKE | J5, E3; legal duty | MVP | |
| own research | Which export is free and which is Pro | DECIDED | D3; J5 | MVP | A plain, complete export of what we hold about you is free, because it is a right and not a feature, and it lives here on node 6.15; the analytical export of history and trends is Pro and lives with node 5.12. Raised as an assumption and answered the same day (D-Export, founder, 2026-08-04) |
| Fingerprint | Destructive confirmation: warning callout, "Keep account" against "Continue" | TAKE, DIFFERENTLY | D-Concept (clay only for a genuine error) | MVP | Ours keeps the two-door shape and drops the alarm colouring. The consequence carries the weight, not the palette |
| Uber | Profile rows: name, email, phone | TAKE, DIFFERENTLY | node 6.16 | MVP | Ours is email and currency and nothing else. We have no reason to hold a name or a phone number, and not holding them is easier to explain than protecting them |
| Uber, fable | Avatar and photo upload | SKIP | nothing traces to it; the product has no social surface | out | |
| own research | Notification settings: what we tell you about | TAKE | J4; the link from node 3.8 | MVP | One place that answers what will reach you, instead of a reminder toggle on every subscription the way the category does it |
| own research | The plan row: what Free includes, what Pro adds | TAKE | D3, D4 | MVP | The right home for the plan, and the reason the calm view can stay clean. The upsell was dropped from node 2.6 precisely so it could live here, once, without pressure |
| Squarespace, Canva, Linear | Two-column settings with a category sidebar | SKIP | mobile-first; principle 2 | out | A sidebar of settings categories does not survive 360px. Ours is one list of rows that open their own screen, which is also why this cluster is three nodes and not one |
| Uber | Security separated from Privacy and Data | TAKE | node 6.15 against node 6.16 | MVP | Confirms the split the IA already made: the data question and the preferences question are different questions and different screens |
Our order for nodes 6.14 to 6.16, mobile-first
6.16 Settings, the entry
Plan row / notifications, what we tell you about / your details (email, currency) / a row into Connections / a row into Data and privacy / sign out.
6.14 Connections
Back / a card per bank: logo, institution, which accounts are included, last successful check, status / reconnect when expired / disconnect, with the consequence in the same sentence / add another bank, with no counter anywhere / the trust line.
6.15 Data and Privacy
Back / what we store, in plain words / what we never do (move money, sell data, write anything to your bank) / the controls that actually control something / export my data / delete my account, two doors, no alarm colouring / links to the policy and to the source of every figure.
The second round (2026-08-05): the three LATER screens
Each of the three LATER nodes carried the same line: their blocks did not come from this bank, and a bank round precedes the build. The wireframe stage reached them, so the round ran before a pixel was drawn. Three types, three screens, and they are the last three of the sixteen.
Type H. Depth and chart (node 5.12 History and Trends)
The paid half of D3, and the screen that inherits exactly the texture our person avoids: growth zone 3 names "too many numbers and graphs" as what makes an avoider close a finance app. So this type has one question above all others: what does a person who does not read charts leave with.
- Domain, second-hand through Refero: Copilot budget and categories (donut, spent against budget, a category list with bars, and its own "Recurrings" tab), Wise spending summary (month selector, two figures, an illustration where the chart would be), Klarna budget (a spending chart with a skeleton state), Roi net worth (the big number, the change beside it, time-range tabs).
- Craft, outside the category: Gentler Streak (range, one chart, four metric cards), Binge (a small chart with the same numbers in words below it).
| Source | Block | Verdict | Traces to | Where we are better and how |
|---|---|---|---|---|
| Roi, Klarna, Gentler Streak | A time range: 3, 6, 12 months | TAKE | node 5.12 block 3 | Three ranges, not seven. Every extra range is a decision asked of someone who came here to read |
| Roi, Klarna, Copilot | The chart as the thing that carries the fact | TAKE, DIFFERENTLY | growth zone 3; principle 3 | The whole type turns on this. In every source the number lives in the picture. Ours states it in a sentence above the chart, and the chart illustrates a fact the person already has |
| Copilot | Donut of categories, spending against budget | SKIP | we are not a budgeting app; principle 1 | A budget bar turns every reading into a pass or a fail. Type C dropped the same texture from Home |
| Copilot, Klarna | Colour that means good or bad | SKIP | D-Concept; principle 1 | A colour that judges is the thing this audience closes the app over. Ours uses a word: Higher, New, Steady |
| Roi | The change beside the number, with an arrow and a percentage | TAKE, DIFFERENTLY | J-MAIN over time | We keep the change and drop the arrow: "up about $20 across three months" is the same fact in the language of principle 3 |
| Copilot ("Recurrings"), own research | A per-subscription trend list with a quiet status word | TAKE | node 5.12 block 6; J4 | Copilot lists recurring items; it does not say which of them moved. Ours does, in one word per row |
| Wise | An illustration where the chart would be | TAKE, DIFFERENTLY | node 5.12.1 | Ours says how long it will take. An illustration alone leaves a paid person guessing whether the feature is broken |
| Klarna | A skeleton in the shape of the chart | TAKE | node 5.12.2 | The shape of what is coming, never a spinner. The same rule as every other wait here |
| own research | The Pro-locked frame with the person's own labels | TAKE | D3; principle 4 | Exists in no source. Every product blurs a fake chart. A blur is a lie about our own product, and an honest preview persuades better |
| own research | The analytical export, named against the free one | TAKE | D-Export; D3 | The plain export is free and lives on node 6.15. Naming both on the screen that sells one keeps the split honest |
| Copilot, Wise | A month selector beside the range | SKIP | one control, not two | A second time control is the audit-table texture type E rejected |
| own research | "Nothing to act on here, just the shape of it" | TAKE | E1; principle 1 | Exists in no source. A trends screen that implies a verdict is a judgement screen, and this audience reads a chart as an accusation unless told otherwise |
Our order: back and the Pro chip / the framing line / the range / the summary sentence / the chart / the trend list with one word of status per row / export as CSV, Pro. For a free person: the same frame with their own labels, then the gate.
Type I. Upgrade gate (node 5.13 Upgrade / Tendd Pro)
The one screen in the product that serves no user job. The domain half is fully available for the first time since type F, because a paywall is the one screen every product will show to a stranger. That makes this the type where the category is most confident and where we refuse the most.
- Domain and adjacent, second-hand through Refero: Comet (tier toggle, a Free-against-Pro table, two price cards, an anchored buy button), Medium (two plan cards, start free trial), Ivory (trial, yearly with the saving stated), Spotify (the current plan first), Steps (your own metrics as the argument), Bear PRO (what the paid state looks like afterwards), Chopra (the system payment sheet).
| Source | Block | Verdict | Traces to | Where we are better and how |
|---|---|---|---|---|
| Comet, Medium, Ivory | Close at the top, and a real dismissal | TAKE | node 5.13 blocks 1 and 8 | Close, not back: this interrupts something. Ours puts the dismissal at the same legibility as the primary, which none of the sources do |
| Steps | The person's own numbers as the argument | TAKE, DIFFERENTLY | node 5.13 block 3; principle 4 | Steps shows your metrics; we name the gate you just touched. The offer is honest only at the moment the person wanted the thing, and saying which moment it was is how that stays true |
| Comet | Free against Pro comparison table | SKIP | D3; D-Free | The table would have to list what Free lacks, and our Free lacks nothing visible. It would be empty or it would invent a lack |
| Comet, Ivory, Medium | Yearly first, with the saving stated | TAKE | D4; block 5 | Yearly first with the monthly equivalent. The anchoring order stays a test, not a decision |
| Medium, Ivory | A free trial as the primary offer | SKIP | D3; the product's own frame | A trial that converts silently is the pattern this audience has been burned by, and it is what Tendd exists to find. Selling with it would be the product contradicting itself |
| Comet | A buy button anchored to the scroll | SKIP | principle 1 | A control that cannot be scrolled away from is pressure |
| own research | The amount on the button | TAKE | D4; principle 4 | Exists in no source. Every source puts the price near the button and "Continue" on it. Nobody should learn what they are charged after the tap |
| Ivory, Medium | Countdown, expiring offer, "most popular", a preselected expensive plan | SKIP | principle 1 | Named as a group so the omission is a decision. The bank dropped Monarch's pinned countdown at type C; it does not come back through the screen allowed to sell |
| Spotify, Bear | The current plan stated first | TAKE, DIFFERENTLY | GC7 | Ours is the plan chip in the header: here the plan is context and the price is the subject |
| Bear | A success screen after paying | SKIP | node 5.13; principle 5 | On success the person returns to the gate with the thing they wanted open. The product's emotional beat belongs to node 4.10, where money was saved rather than spent |
Our order: close and the plan chip / "Tendd Pro" and one line / where you came from / what Pro unlocks / the price, yearly first / the lifetime option ? / the button with the amount on it / "Maybe later" at equal weight / "Pays for itself with the first subscription you cancel." Six of the thirteen decisions are refusals, and that ratio is the finding: on this screen the category is unanimous and almost every unanimous pattern is one we will not use.
Type J. Share card (node 4.11 Share Snapshot)
The social job S1, which is a hypothesis and not a finding, on a screen that must never leak a bank statement. The domain half is empty: no subscription tracker has a share surface at all. That is recorded as the finding rather than worked around.
- Craft, outside the category: TIDAL, share your top artists and its card variants - a preview card, then the system sheet and Instagram, with a branded hashtag.
| Source | Block | Verdict | Traces to | Where we are better and how |
|---|---|---|---|---|
| TIDAL | The card previewed at full size before anything is shared | TAKE | node 4.11 block 2; E3 | Nothing is posted that the person has not seen |
| TIDAL | Share to the system sheet | TAKE | block 3 | The system sheet only. A direct Instagram button assumes a network and an audience, and S1 is a hypothesis |
| TIDAL | Card variants to swipe between, and a branded hashtag | SKIP | principle 1 | Variants are a styling choice for a screen whose job is not proven, and the card carries the person's win, not our marketing |
| own research | What is on this card, listed in full, above the share action | TAKE | E3; principle 4 | Exists in no source. TIDAL's card is taste; ours is a person's money. The privacy promise belongs on the screen, not in a policy |
| own research | The card built from two numbers, so bank data cannot reach it | TAKE | J5; E3 | Safe by construction rather than by memory: there is no merchant list and no account number to leak, because the card is not made from them |
Our order: back / the card preview, count and total, and "just cancelled" when it comes from a win / share, to the system sheet / what is on this card, in full / choose what to show ?.
The bank, closed
Ten types, sixteen screens, and the composition of every one of them now has a source or a written reason. 114 block decisions in the first round (78 taken, 34 dropped with the reason written down, 2 carried to the founder) and 32 more in the second (20 taken, 12 dropped). The three LATER nodes no longer carry "a bank round precedes the build".
- The availability table was wrong when it was written and is now right. "Behind login" was true of Playwright and false of the question, so five of the seven types got a domain half after all, marked second-hand.
- Three types produced a live domain source: A (three competitor landings), B (Plaid Link, the component we embed), F (the ReSubs cancel guide library).
- One type has no domain source anywhere, and that is the finding: E, because the category has no activity feed at all, only per-item reminders delivered outside the app.
- The blocks that carry each screen are mostly the ones no source had: the decoder line at 2.7, the "needs you" split at 3.8, the price change that shows the old number, the last successful check at 6.14, the two paths in every empty state, and the trust line that appears on four screens.
- One contradiction surfaced between the scope table and the line inventory (share on the MVP win screen against node 4.11 being LATER) and one assumption was flagged: which export is free. Both went to the founder rather than being resolved quietly, and both were answered on 2026-08-04 as D-Share and D-Export.
- The second round found the category most confident where we refuse most: type I, the paywall, is the only type whose domain half was fully available, and six of its thirteen decisions are refusals of unanimous patterns. Type J found nothing to read at all, because no subscription tracker has a share surface.
What this is for: the composition of a screen is no longer invented at wireframe time. Node specifications take their block list from here, and a block that is not in the bank and traces to nothing does not get added silently.
The upgrade, and the critique it closed
The detail layer used to be nine cluster pages: one file per cluster, each holding several screens, its own copy of the global elements and its own accessibility section. It is now one page per node, one page for the seven global elements and one accessibility contract. This section is the record of where everything went, so a retired page is a decision rather than a gap.
| Retired page | What it held | Where it is now |
|---|---|---|
navigation.html | GC1, GC2, the persona x plan state matrix, the desktop rail delta, the no-footer note | GC1 and GC2 on the global elements page; the rail delta is stated once there and inherited by every screen |
onboarding.html | Nodes 1.1 to 1.5, five screens in one file | Five node pages, one per screen |
core.html | Nodes 2.6 and 2.7, plus GC3 and GC4 | Two node pages; GC3 and GC4 on globals |
alerts.html | Node 3.8, plus GC5 | One node page; GC5 on globals |
cancel.html | Nodes 4.9 to 4.11 | Three node pages |
pro.html | Nodes 5.12 and 5.13, plus GC7 | Two node pages; GC7 on globals |
account.html | Nodes 6.14 to 6.16, plus GC6 | Three node pages; GC6 on globals |
ia.html | Entities, sitemap, navigation, flows, the coverage matrix, the critique, the site graph, the page-level library | Entities and coverage on the concept map, flows on flows, the site graph and the node map on the sitemap, the library here as node pages, and the critique closed below |
The markdown files stay where they were, as the base-layer record they were written as: every node page names the section of them it supersedes. Two pages were not retired, because they still own their nodes: system.html (9.1 to 9.5) and seo.html (node 8). The nine accessibility sections became one contract, which is where the drift between them is described.
The IA critique, closed
Eleven findings across four defect classes, raised at the IA stage as proposals rather than fixes. All eleven are now specified. They are shown closed, with where each one landed, rather than as a list of open defects.
| Class | What was found | Where it is closed |
|---|---|---|
| Dead end | Connect Bank: declining both retry and the manual fallback left the person with no list | Node 1.3.1 keeps "add them yourself" on the error state, and 1.3.4 catches the fourth Plaid outcome the map did not have |
| Dead end | Add Subscription: a person abandons manual entry half-done | Closed by structure: node 1.4 saves one subscription at a time, so an abandoned session leaves a real partial list rather than lost work, and node 1.5 runs the reveal on it |
| Dead end | Cancel Guide: a blocked cancellation left the person stuck | Node 4.9.2, the not-your-fault dialog, which exists because of the merchant's retention screen |
| Dead end | Subscription Detail: a failed-payment alert ended at informed | Node 2.7.3 states what usually happens next |
| Missing state | Home had no empty, loading or sync-error state | Nodes 2.6.1, 2.6.2 and 2.6.3, the last keeping the figures visible and dated |
| Missing state | Subscription Detail had no state for a name that stays cryptic | Node 2.7.1, and the decoder line, which is the block this screen exists for |
| Missing state | History had no empty state for a paid person with under three months | Node 5.12.1, and its page says in so many words that it is not the lock |
| Missing state | Cancel Guide had no state for a service with no guide | Node 4.9.1 |
| Missing state | Share Snapshot had no loading or failure state | Nodes 4.11.1 and 4.11.2 |
| Excess depth | No violation, but first-session J-MAIN sits at exactly three taps, at the ceiling | Carried as a watch item: no onboarding step may be added, or the main job moves to four taps |
| Orphan | One orphan screen, Upgrade / Tendd Pro | Retained by design and specified as an orphan: it traces to D3 and D4 rather than to a job, and its page says so |
The one that is still open is not a defect but a ceiling. First-session J-MAIN is three taps and the budget is three. Any new onboarding step spends a tap the product does not have, and that is the check to run against every future addition to nodes 1.1 through 1.5.