Information Architecture Detail layer Structure

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.

TypeNodesDomain half (competitors)Craft half (Refero)
A. Public landing1.1available: Rocket Money, ReSubs, Bobbyavailable
B. Onboarding step1.2, 1.3, 1.4, 1.5missing behind signupavailable
C. List dashboard2.6second-hand Refero indexes in-product screens: Monarch Money, plus two category peers on iOSavailable
D. Object detail2.7second-hand Orbit's own detail sheet, plus Duolingo's cancel-side screenavailable
E. Activity feed3.8partly the category has no feed at all, only per-item remindersavailable, but in the wrong register
F. Task guide plus confirmation4.9, 4.10available: ReSubs publishes a full cancel guide library, opened liveavailable
G. Account and settings6.14, 6.15, 6.16second-hand connection and privacy screens from several productsavailable
H. Depth and chart5.12second-hand Copilot, Wise, Klarna, Roiavailable
I. Upgrade gate5.13available: a paywall is the one screen every product shows to a strangeravailable
J. Share card4.11missing in the category, available outside itavailable

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.

SourceBlockVerdictTraces toScopeWhere we are better and how
all sevenHeader: wordmark, one or two links, sign inTAKEGC1 App HeaderMVPCompetitors 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 sevenHero: H1, one-sentence promise, primary CTATAKEJ-MAIN; SEO block BMVPRocket Money's H1 is about the app ("The money app that works for you"); ours names the person's outcome, per principle 3
Cushion, VisitorsReassurance line under the CTA ("no credit card required")TAKE, DIFFERENTLYgrowth zone 1; J1; J5MVPOurs 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, CopperxProduct preview in or under the heroTAKE, DIFFERENTLYgrowth zone 2; H0MVPVivid 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 stripTAKEPhase 3 barrier; the 3-tap activation nodeMVPNames 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 yourselfTAKE, DIFFERENTLYD1, D2; J1; J5; growth zone 1MVPThe 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, ReSubsTrust block: what we access, what we never do, read-only, delete any timeTAKEJ1, J5, E3; principle 4; GC6MVPReSubs 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
ReSubsPreset gallery (461 presets, browse the full list)TAKE, DIFFERENTLYD2; Phase 3 barrier; J-MAINMVPReSubs 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, ReSubsPlan line: what is free, what is ProTAKE, DIFFERENTLYD3, D4; J1MVPRocket 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, CopperxFAQ accordionTAKEJ1, J5; growth zone 1; SEO block D (FAQPage)MVPReSubs 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 MoneyClosing CTA repeatTAKEthe page is long on mobile; J-MAINMVPThe same single action as the hero, not a second louder one. The category escalates at the bottom
all sevenMarketing footer: legal, privacy, contactTAKEnavigation.md; SEO block EMVPOurs puts the privacy policy first, not last, because privacy is the objection, not a formality
ReSubsStats strip: 18,000+ users, 50,000+ subscriptions, 20+ countriesSKIP FOR NOWnothing true to put in it at launch; a fabricated number breaks principle 4LATERReturns when the numbers are real
Rocket Money"$2.5 billion saved", "Join 10 million+ members", press logosSKIPtraces to nothing on our side; frames first contact as money pressure, which is growth zone 3outThe savings counter is the exact register an avoider retreats from
ReSubs, Rocket Money, Copperx, BobbyTestimonials and store ratingsSKIP FOR NOWno users at launch; a placeholder testimonial breaks principle 4LATERReturns with real quotes, and then it carries the emotional beat E2, not a star count
Visitors, CushionComparison table against a named competitorSKIP HEREno barrier asks for it at first contact; a head-to-head raises the anxiety registerLATERBelongs to the SEO engine as its own page, not to the front door
Rocket MoneyFeature blocks: spending, autopilot savings, credit score, bill negotiationSKIPout of product scope: Tendd is not a budgeting appoutThese are the blocks that turned Rocket Money and Emma into platforms and buried the subscription core
CushionSecondary CTA "Talk to a human"SKIPno support desk at MVP; the promise would be falseLATER 
CopperxAvatar carousel "chosen by thousands"SKIPsame as testimonials: nothing true yetLATER 
BobbyAnnouncement bar above the headerSKIPno message worth an interruption on the calmest screen of the product; principle 1out 

Our order for node 1.1, mobile-first

  1. Header. Wordmark, "How it works", Sign in
  2. Hero. H1, one-sentence promise, primary CTA, and the line "No bank connection needed to start"
  3. Product preview. The calm list with real merchant names and one total
  4. How it works. Three numbered steps, the length of the path stated up front
  5. Two paths. Connect a bank read-only, or add it yourself with presets
  6. Trust. What we access, what we never do, read-only, delete any time
  7. Plan line. The whole calm view is free, Pro is depth
  8. FAQ. Four objections, in our voice
  9. Closing CTA. The same single action
  10. 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.

NodeBlockVerdictTraces toScopeBarrier it works on
all fourStep chrome: back, a step marker, nothing elseTAKE, DIFFERENTLYthe three-tap ceiling; GC1MVPOurs 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 fourExactly one question per screen, one primary actionTAKEprinciple 2; growth zone 4MVPThe all-or-nothing shock is built out of screens that ask for several things at once
1.2Two option cards: connect a bank, or add it yourselfTAKED1, D2; J1; J5; growth zone 1MVPThis 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.2A recommendation badge on the faster option (Arcade's "Popular")SKIPnothing to trace it to; it turns an equal choice into a nudge toward the bankoutThe nudge is the wall in a softer form
1.2One line of consequence under each option labelTAKEJ1; growth zone 1MVPSays what happens next in plain words, so neither door is a leap in the dark
1.2Escape hatch as a secondary actionTAKE, DIFFERENTLYJ1; the retreat phase of the As-Is journeyMVPOurs 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 actionTAKEPhase 3 barrier; J1MVPThe category asks for bank credentials with no statement of duration or of what happens after. Two lines remove the biggest unknown
1.3Permission lines, read against write stated explicitlyTAKEJ1, J5, E3; GC6; principle 4MVPRead-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.3Institution search, credential entry, MFA, account selectionDO NOT DESIGNPlaid Link owns these screensMVPOur 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.3Return states: connected, cancelled, failed, no accounts foundTAKEnode states in the node map; J4MVPLink returns four outcomes and the category designs only the happy one. A cancelled connection must land somewhere calm, not on an error
1.3A read against write toggle the person operates (Rox)SKIPwe never request write access, so a toggle would imply we couldoutA control with only one legal position is theatre
1.4Search field plus a browsable grid of logo tilesTAKED2; Phase 3 barrier; growth zone 2MVPTurns "type in everything you pay for" into "recognize what you already know". The tedium of the manual path is why it fails today
1.4Manual form: name, price, billing cycle, first charge dateTAKE, DIFFERENTLYD2; J-MAINMVPOurs opens prefilled from the chosen preset, so the form is a confirmation, not data entry. A blank form is the version people abandon
1.4Category, image upload, SKU and other catalog fieldsSKIPnothing traces to them; category is derived, not askedoutEvery extra field is a reason to close the tab
1.4"Add another" as a quiet secondary action after savingTAKEJ-MAINMVPThe one-at-a-time loop has to be cheap, or the manual path stops at the first entry
1.5A result stated in one sentenceTAKE, DIFFERENTLYD1; growth zone 4; H0MVPThis 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.5Real merchant names and logos in the first list a person seesTAKEgrowth zone 2; J3MVPHalf the charges are unreadable bank codes today. This is where that gets fixed, or the whole promise fails
1.5Next steps offered at the endTAKE, DIFFERENTLYJ-MAIN; J2MVPOurs offers one: go to the calm view. A menu at the emotional peak is a second decision nobody asked for
1.5Loading state with an honest wait messageTAKEnode state 1.5.1; J1MVPA 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.5A celebratory total, "you are spending $X a month", firstSKIPgrowth zones 3 and 4; principle 1outThe 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.

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".

SourceBlockVerdictTraces toScopeWhere we are better and how
Orbit, Dime, CursorSummary strip: the count in plain language and the monthly totalTAKEGC3; J-MAIN; D1; principle 2MVPOrbit 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
SuboGrouping by category, each group with its own subtotalTAKE, DIFFERENTLYJ-MAIN; J3; principle 2MVPOurs 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, SuboList item: logo, real merchant name, amount, next chargeTAKEGC4; growth zone 2; J3MVPThe 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
MonarchNext due date with days remaining in parenthesesTAKE, DIFFERENTLYJ4; GC4MVPOurs 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"
MonarchPayment account columnSKIPnothing traces to it; our person does not reconcile accountsoutEvery column that is not load-bearing makes the list denser, and density is the overwhelm barrier
MonarchThree way split: Income, Expenses, Credit cardsSKIPout of product scope; accounting framingoutThe split is what turns a subscription tracker into a budgeting app, which our audience actively avoids
MonarchView switch: Today, List, CalendarSKIP FOR NOWprinciple 2; no barrier asks for a calendar at MVPLATERA calendar of charges is a legitimate Pro-side idea; on the calm view it is a second product
Monarch, Orbit, SuboFilter row, sort popover, search fieldSKIP FOR NOWa list of ten to twenty items does not need them, and offering them implies the list will be longLATERImplying a long list is itself anxiety. Returns if real lists turn out long
Monarch, OrbitUpsell inside the calm view: trial countdown, discount, Upgrade pillSKIPD3: the paywall sits at depth, never at basic visibilityoutThe 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 emptyTAKE, DIFFERENTLYD2; growth zone 1; J5MVPTheir 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 researchAttention row, shown only when true: a price change, a failed paymentTAKEJ4; GC4; D-Concept (amber, never red)MVPThe 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 researchData source and trust line under the listTAKEGC6; principle 4; J5MVPNo 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, OrbitA prominent add or manage button in the headerTAKE, DIFFERENTLYD2; J-MAINMVPOurs 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 flowCharts, donuts, spending graphsSKIPgrowth zone 3; the depth belongs to node 5.12LATERThe chart is the exact texture our person named as overwhelming, and putting it behind Pro is D3 working as designed
CursorStacked cards instead of one flat tableTAKE, DIFFERENTLYmobile-first; principle 2MVPA 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

  1. App header (GC1). The screen name and a quiet way into the account
  2. Summary strip (GC3). "You are paying for 14 subscriptions", the monthly total as the biggest thing on screen, one line of context under it
  3. Attention row. Only when it is true: a price change or a failed payment, amber, one line
  4. The list. Grouped by category, each group with its own subtotal
  5. The item (GC4). Logo, real name, amount, "in 6 days"
  6. Add a subscription. A quiet secondary
  7. Data source and trust line (GC6). Where these numbers come from and when they were last checked
  8. 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.

SourceBlockVerdictTraces toScopeWhere we are better and how
OrbitHero: logo, name, the amount as the largest thing, cycle beside itTAKEJ3; GC4; principle 2MVPOrbit 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 researchThe decoder line: "Appears on your statement as SPOTIFYAB STOCKHOLM"TAKEgrowth zone 2; J3MVPExists 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
OrbitLabel and value rows: billing cycle, next payment, categoryTAKEJ3, J4; GC4MVPOurs leads the next payment with "in 6 days" and keeps the date second, the same rule as on the list
Orbit"Total spent"TAKE, DIFFERENTLYJ2; E2MVPNeutral 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, OrbitPayment method, "Visa ending 4400"TAKE, DIFFERENTLYJ3; principle 4MVPWe 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, TwelveLabsCharge historyTAKE, DIFFERENTLYJ3, J4; D3MVPThe 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 researchPrice change marked inside the history, in amberTAKEJ4; D-ConceptMVPThe 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
OrbitPrimary action on the object ("Mark as Cancelled")TAKE, DIFFERENTLYJ2; D3 (never a paywall at the cancel moment)MVPOrbit'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
DuolingoBenefits list plus a REACTIVATE bannerSKIPretention framing; we are not the merchantoutKept 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
DuolingoPer-benefit "TURN OFF" toggleSKIPnot our object; we do not control the merchant's planout 
OrbitEdit pencil on the history cardSKIPediting past charges implies an editable ledger of factsoutHistory is evidence. If it is wrong, the fix is to report the source, not to overwrite the record
own researchCorrection action: "this is not a subscription"TAKEprinciple 4; detection is a guess and must be correctableMVPAutomatic detection is wrong sometimes, and every competitor makes that the person's problem. A visible correction is what makes the figures trustworthy
OrbitDelete subscription as a destructive text linkTAKE, DIFFERENTLYD-Concept (clay only for a genuine error)MVPFor 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
WealthsimpleTabs on the objectSKIPone object, one screen; principle 2out 
own researchData source and trust lineTAKEGC6; principle 4MVPWhere 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

  1. Back to the list (GC1).
  2. Hero. Logo, real merchant name, the amount, the cycle beside it
  3. Status. A quiet badge, amber only if the price changed or a payment failed
  4. The facts. Next charge "in 6 days, 11 March", billing cycle, charged to, category, paid so far
  5. The decoder line. How this charge appears on the statement
  6. Charge history. The last three months, the price change marked; deeper history is Pro
  7. Primary: help me cancel this. Into node 4.9
  8. Secondary. Edit the details, and "this is not a subscription"
  9. Remove from the list. Quiet, and honest about whether it can come back
  10. 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.

SourceBlockVerdictTraces toScopeWhere we are better and how
Missive, AirbnbA list of events, newest first, each one a plain sentenceTAKEJ4; GC5; principle 3MVPThe category has no such list at all. Ours is a sentence a person reads once, not a log line to decode
own researchTwo groups: "Needs you" and "Just so you know"TAKEJ4; principle 2; growth zone 3MVPExists 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
DropboxUnread counts, badges, red dotsSKIPD-Concept: a quiet gray badge, never red; growth zone 3outA 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
DropboxSearch, filter row, multi column audit tableSKIPthe enterprise register; a handful of events is not an audit trailoutThe craft half of this type is built for an admin proving what happened. Our person is deciding whether they need to worry
AirbnbDismiss on an itemTAKE, DIFFERENTLYJ4MVPOurs marks it read and never deletes the underlying fact. Dismissing a price change should not erase that the price changed
own researchPrice change shows the old price, the new price and the differenceTAKEJ4; growth zone 2; D-ConceptMVPExists in no source. Every product tells you the new number. The old one beside it is what turns a surprise into an explanation
own researchThe action lives inside the alert: see the charge, help me cancelTAKEJ2, J4; the flowsMVPAn alert with no action is a notification. An alert with the next step is the product doing the job
own researchAn empty state that is a good state: "Nothing needs you right now"TAKEE1; H0MVPIn 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
SuboReminder settings attached to each subscriptionTAKE, DIFFERENTLYJ4; principle 2MVPSubo 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
SuboNotes field on a subscriptionSKIPnothing traces to it; a tracker feature for people who enjoy trackersoutOur person is not a spreadsheet person, and that is in the audience definition
Subo, Rocket MoneyChannel configuration (push, email) on this screenSKIP HEREbelongs to node 6.16 SettingsMVPOne screen, one job. The feed shows what happened; the settings decide what arrives
own researchThe source named on each alert: which account it came fromTAKEGC6; principle 4MVPAn alert that cannot say where it came from is a rumour
own researchOlder events, collapsedTAKEprinciple 2MVPThe recent past is the job. The distant past is history, and history is node 5.12

Our order for node 3.8, mobile-first

  1. App header (GC1).
  2. "Needs you", usually empty. A failed payment in desaturated clay, a price change in amber
  3. "Just so you know". Charges due in the next seven days, a newly detected subscription
  4. The alert item (GC5). Icon, one plain sentence, the merchant and the amount, when, the source, and one inline action
  5. Older, collapsed.
  6. What we tell you about. A link into node 6.16
  7. 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.

SourceBlockVerdictTraces toScopeWhere we are better and how
ReSubsNumbered steps for the actual serviceTAKEJ2; already in the grey screen and in the microcopyMVPOurs is inside the product at the moment of the decision, instead of an article the person has to go and find
ReSubsThree channel sections: web, App Store, Google PlayTAKE, DIFFERENTLYJ2; growth zone 2; the decoder line at node 2.7MVPThe 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
ReSubsMeta strip: difficulty, time, and the source of the instructionsTAKEPhase 3 barrier; principle 4MVPMissing 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
ReSubsWhat happens when you cancel, with the real dateTAKEJ2; the anxiety of an irreversible actionMVPMissing 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
ReSubsDisclaimer, and when the guide was last checkedTAKE, DIFFERENTLYprinciple 4MVPMissing 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
ReSubsFAQ of six questionsSKIP FOR NOWon a task screen it is a second document; the two useful answers are already taken aboveLATERThe rest belongs to the SEO engine if it becomes a public guide library
ReSubs"Can I pause instead of cancelling?"TAKE, LATERJ2; regret avoidanceLATERNeeds per-service data we will not have at MVP. Named here so it is a decision rather than an omission
ReSubsRelated guides, keep reading, article footerSKIPin-product; nothing traces to itoutThat is an SEO surface, not a task screen
own research, in the grey"I cancelled it" and the "could not cancel" pathTAKEJ2; the microcopy inventoryMVPThe 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, FeedHiveA quiet result screen: one line, the number, one actionTAKEE2; principle 5; D-ConceptMVPAlready in voice, and this confirms the composition: the calm end of the pattern is the right one
LEGO, New YorkerConfetti, animation, an exclamationSKIPprinciple 1; growth zone 3outThe 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 voiceConfirmation on the person's word, stated as suchTAKEprinciple 4MVPWe 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 voiceRunning total across every cut so farTAKEE2; J2MVPThe 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 screenDECIDED: LATERnode 4.11 Share Snapshot is LATER, and an MVP screen was pointing at itLATERFound 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.

SourceBlockVerdictTraces toScopeWhere we are better and how
Linear, SquarespaceA list of connections, one card eachTAKEnode 6.14; J1MVP 
own researchLast successful check, on every connectionTAKEGC6; J1; principle 4MVPExists 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 researchReconnect, when a connection has expiredTAKEJ1; the sync-failed state on node 2.6MVPBank connections expire by design. The category treats that as an error; ours treats it as maintenance, in the same calm register
Linear, SquarespaceDisconnectTAKE, DIFFERENTLYJ5, E3; principle 4MVPEvery 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, PayPalBank search and pickerSKIPPlaid Link owns this screen, the same boundary as node 1.3out 
own research"Add another bank", with no counter and no limit anywhereTAKED-Free (no cap on connections); J1MVPA 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
CanvaPrivacy toggles with learn-more linksTAKE, DIFFERENTLYJ5, E3; principle 4MVPOurs 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
CanvaToggles for advertising, personalisation, profile enrichmentSKIPwe do none of these, and a toggle implies we couldoutThe same rule that dropped the read against write toggle at node 1.3: a control with only one legal position is theatre
Shop, Jace, FingerprintExport my data, delete my accountTAKEJ5, E3; legal dutyMVP 
own researchWhich export is free and which is ProDECIDEDD3; J5MVPA 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)
FingerprintDestructive confirmation: warning callout, "Keep account" against "Continue"TAKE, DIFFERENTLYD-Concept (clay only for a genuine error)MVPOurs keeps the two-door shape and drops the alarm colouring. The consequence carries the weight, not the palette
UberProfile rows: name, email, phoneTAKE, DIFFERENTLYnode 6.16MVPOurs 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, fableAvatar and photo uploadSKIPnothing traces to it; the product has no social surfaceout 
own researchNotification settings: what we tell you aboutTAKEJ4; the link from node 3.8MVPOne place that answers what will reach you, instead of a reminder toggle on every subscription the way the category does it
own researchThe plan row: what Free includes, what Pro addsTAKED3, D4MVPThe 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, LinearTwo-column settings with a category sidebarSKIPmobile-first; principle 2outA 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
UberSecurity separated from Privacy and DataTAKEnode 6.15 against node 6.16MVPConfirms 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.

SourceBlockVerdictTraces toWhere we are better and how
Roi, Klarna, Gentler StreakA time range: 3, 6, 12 monthsTAKEnode 5.12 block 3Three ranges, not seven. Every extra range is a decision asked of someone who came here to read
Roi, Klarna, CopilotThe chart as the thing that carries the factTAKE, DIFFERENTLYgrowth zone 3; principle 3The 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
CopilotDonut of categories, spending against budgetSKIPwe are not a budgeting app; principle 1A budget bar turns every reading into a pass or a fail. Type C dropped the same texture from Home
Copilot, KlarnaColour that means good or badSKIPD-Concept; principle 1A colour that judges is the thing this audience closes the app over. Ours uses a word: Higher, New, Steady
RoiThe change beside the number, with an arrow and a percentageTAKE, DIFFERENTLYJ-MAIN over timeWe 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 researchA per-subscription trend list with a quiet status wordTAKEnode 5.12 block 6; J4Copilot lists recurring items; it does not say which of them moved. Ours does, in one word per row
WiseAn illustration where the chart would beTAKE, DIFFERENTLYnode 5.12.1Ours says how long it will take. An illustration alone leaves a paid person guessing whether the feature is broken
KlarnaA skeleton in the shape of the chartTAKEnode 5.12.2The shape of what is coming, never a spinner. The same rule as every other wait here
own researchThe Pro-locked frame with the person's own labelsTAKED3; principle 4Exists 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 researchThe analytical export, named against the free oneTAKED-Export; D3The plain export is free and lives on node 6.15. Naming both on the screen that sells one keeps the split honest
Copilot, WiseA month selector beside the rangeSKIPone control, not twoA second time control is the audit-table texture type E rejected
own research"Nothing to act on here, just the shape of it"TAKEE1; principle 1Exists 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.

SourceBlockVerdictTraces toWhere we are better and how
Comet, Medium, IvoryClose at the top, and a real dismissalTAKEnode 5.13 blocks 1 and 8Close, not back: this interrupts something. Ours puts the dismissal at the same legibility as the primary, which none of the sources do
StepsThe person's own numbers as the argumentTAKE, DIFFERENTLYnode 5.13 block 3; principle 4Steps 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
CometFree against Pro comparison tableSKIPD3; D-FreeThe 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, MediumYearly first, with the saving statedTAKED4; block 5Yearly first with the monthly equivalent. The anchoring order stays a test, not a decision
Medium, IvoryA free trial as the primary offerSKIPD3; the product's own frameA 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
CometA buy button anchored to the scrollSKIPprinciple 1A control that cannot be scrolled away from is pressure
own researchThe amount on the buttonTAKED4; principle 4Exists 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, MediumCountdown, expiring offer, "most popular", a preselected expensive planSKIPprinciple 1Named 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, BearThe current plan stated firstTAKE, DIFFERENTLYGC7Ours is the plan chip in the header: here the plan is context and the price is the subject
BearA success screen after payingSKIPnode 5.13; principle 5On 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.

SourceBlockVerdictTraces toWhere we are better and how
TIDALThe card previewed at full size before anything is sharedTAKEnode 4.11 block 2; E3Nothing is posted that the person has not seen
TIDALShare to the system sheetTAKEblock 3The system sheet only. A direct Instagram button assumes a network and an audience, and S1 is a hypothesis
TIDALCard variants to swipe between, and a branded hashtagSKIPprinciple 1Variants are a styling choice for a screen whose job is not proven, and the card carries the person's win, not our marketing
own researchWhat is on this card, listed in full, above the share actionTAKEE3; principle 4Exists 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 researchThe card built from two numbers, so bank data cannot reach itTAKEJ5; E3Safe 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".

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 pageWhat it heldWhere it is now
navigation.htmlGC1, GC2, the persona x plan state matrix, the desktop rail delta, the no-footer noteGC1 and GC2 on the global elements page; the rail delta is stated once there and inherited by every screen
onboarding.htmlNodes 1.1 to 1.5, five screens in one fileFive node pages, one per screen
core.htmlNodes 2.6 and 2.7, plus GC3 and GC4Two node pages; GC3 and GC4 on globals
alerts.htmlNode 3.8, plus GC5One node page; GC5 on globals
cancel.htmlNodes 4.9 to 4.11Three node pages
pro.htmlNodes 5.12 and 5.13, plus GC7Two node pages; GC7 on globals
account.htmlNodes 6.14 to 6.16, plus GC6Three node pages; GC6 on globals
ia.htmlEntities, sitemap, navigation, flows, the coverage matrix, the critique, the site graph, the page-level libraryEntities 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.

ClassWhat was foundWhere it is closed
Dead endConnect Bank: declining both retry and the manual fallback left the person with no listNode 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 endAdd Subscription: a person abandons manual entry half-doneClosed 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 endCancel Guide: a blocked cancellation left the person stuckNode 4.9.2, the not-your-fault dialog, which exists because of the merchant's retention screen
Dead endSubscription Detail: a failed-payment alert ended at informedNode 2.7.3 states what usually happens next
Missing stateHome had no empty, loading or sync-error stateNodes 2.6.1, 2.6.2 and 2.6.3, the last keeping the figures visible and dated
Missing stateSubscription Detail had no state for a name that stays crypticNode 2.7.1, and the decoder line, which is the block this screen exists for
Missing stateHistory had no empty state for a paid person with under three monthsNode 5.12.1, and its page says in so many words that it is not the lock
Missing stateCancel Guide had no state for a service with no guideNode 4.9.1
Missing stateShare Snapshot had no loading or failure stateNodes 4.11.1 and 4.11.2
Excess depthNo violation, but first-session J-MAIN sits at exactly three taps, at the ceilingCarried as a watch item: no onboarding step may be added, or the main job moves to four taps
OrphanOne orphan screen, Upgrade / Tendd ProRetained 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.