| status | open |
|---|---|
| summary | The install picker becomes a wizard with one job per screen (start, pick your tools, install); the catalog of tools under its category headings is the home every flow lands on, the selection is a drawer over it and never a destination, compact one-line rows are the default inside TouchDesigner, and Patreon is said once per screen. Sketched 2026-10-16; phases 1 to 4 landed 2026-10-17 with the set as a screen, which the owner rejected the same day; phase 5, the rework to the drawer, landed the same day; the rails rebuild and the clean-TD first-run runs remain, with the release. |
| since | 2026-10-16 |
| skill | fns-packaging |
A clickable prototype, built from the real v3.2.70 catalog at the installer's window size, is at https://claude.ai/artifact/TvpZNMbyW9Y3TNiaDiByP4 (private to the owner; installs simulated). It shows the revised shape below.
Revision 2026-10-17. The first sketch made the selection ("Your set") the home screen and hid the catalog behind an "Add tools" button. Built as phases 1 to 4 (see Landing plan), it failed the owner's first look: it does not encourage exploring tools, every flow ended on the set, and after an install, or in the console's Install and remove tab, the only way to see the catalog was Start over and Pick my own. The shape is now inverted: the catalog is the home, every flow lands on it with the picks ticked, and the set is a drawer over it.
The picker page (packaging/configurator/index.html) is one catalog page
with a guided-setup dialog laid over it. The wizard gives it a first screen
of its own, a proper install screen, and a selection you can see at any
time without leaving the tools. The install logic, the entitlement rail,
the plan parsing, the presets and the questionnaire stay as they are; what
changes is where each of them is rendered and what the reader meets first.
Measured on 2026-10-16 on the served first-run flavor (the flags the
installer injects, the real manifest) at the size of the bootstrap root's
webBrowser window, 1040 by 720. The owner's words: intimidating and busy.
| At 1040x720, served first run | |
|---|---|
| Top of the first tool card | 743 px, below the 720 px viewport |
| Hero (eyebrow, headline, three-line paragraph, meta line, step strip) | 337 px |
| Toolbar (search row, then six filter toggles) | 146 px |
| Interactive controls before the first checkbox | 21 |
| Words before the first checkbox | about 150 |
| Items in the sticky bottom bar | 5 |
| Times Patreon is mentioned on the first screen | 4 |
What the numbers mean:
- The first screen contains no tools. Everything above the fold is framing: the hero explains the mechanism (the container, verification, Pick Tools), the step strip repeats the hero's sentence, the meta line names the hash scheme and the TD build.
- Three navigation systems compete: the category rail, the six-toggle filter row and the search box all slice the same list, with Guided setup as a fourth door. Power-user toggles (Placeable, Compact, Selected) sit at the same weight as the primary ones.
- Patreon appears in the segmented filter, in a three-line note box, and three times in the sticky bar (Not signed in, Join on Patreon, Sign in with Patreon), before a single tool is picked. InstallSurfaceDesign.md asked for one understated line.
- The calm view exists and is hidden: Compact mode (title plus checkbox, three per row) shows two whole sections in the height where the card view shows seven tools. It is the sixth filter toggle, off by default.
- The 2026-09-10 density pass chose "everything open, the raw view" for the installer flavor and "everything collapsed" for the site. The raw view is the one that reads as intimidating.
Two decisions carry the rest.
The catalog is the home. Every flow lands on the list of tools under their category headings: a starting point ticks its tools and drops the reader on the list with a one-line toast ("16 tools ticked. Browse the rest; untick anything you do not want"); the questionnaire's "Use this selection" does the same; the done screen's primary action is "Browse more tools"; the console's Install and remove tab and Pick Tools on a project that has tools open the list with the installed tools ticked and their state on the rows. The owner's rule (2026-10-17): the flow must keep you exploring, at the end of every branch.
The set is a drawer, never a screen. "Your set · 16" in the footer opens a drawer over the list: what will land in the project, grouped by category, each row with remove and undo, the Patreon route for locked picks and the options row at its top. Close it and the list is where you left it. Nothing is reachable only through the drawer; it is a way to read and prune the selection, and Review install sits in the footer beside it, not inside it.
Everything else follows: one toolbar row, no hero, compact rows by default, Patreon said once per screen in the voice that screen needs (counts on Start, the route in the drawer, the chip on a row).
The step strip that exists today becomes the real navigation: three dots at the top (Start, Pick tools, Install), Back always available, one primary action bottom right. Budgets are for the 1040x720 window.
The welcome dialog, promoted to a screen; there is no catalog behind it to dismiss into.
- One line: "Welcome to FNSTools." One sentence under it: "Pick a starting point. Nothing installs until you review the plan."
- The starting points as cards, the same five plus curated bundles the dialog offers today: Set up like last time (served, bare root, record present; installs in one go, as now), Answer a few questions, Recommended, bundles, Everything, Pick my own.
- One line of counts, the
renderWelcomeAccess()sentence ("46 tools are free, 1 has a free trial, and 24 come with Patreon"), with the sign-in link only when the account cannot install something. - Footer, small: release, TD build, "sha256-verified" and the docs link. Nothing else from the hero survives.
- Budget: under 60 words before the cards, no toolbar, no rail.
- Every card lands on S2, the list: Pick my own with nothing ticked, the others with their tools ticked and the toast naming the count.
The questionnaire, as its own screen instead of a dialog state: one
question per view, "Question 2 of 5", Back and Next, the result view
with the ticked set and the reasons. Unchanged logic (quizScore,
quizSplit); "Use this selection" lands on S2 with the set ticked.
The home: the catalog, and the one place the reader spends the session.
- Title "Pick your tools" on a first run, "Your toolkit" on re-entry, one sentence under it. No hero, no meta line.
- Header row: the search box, a View menu (Cards with full descriptions, Free only, Patreon only, Placeable, New). No back button: there is nothing to go back to.
- The category rail on the left as today. The list is the tools under their category headings, every section open when served (owner, 2026-10-16: the categories stay, in the list), so the rail jumps and a section or all of them can still be folded; the presentation pass found the same (open sections plus a rail, since collapsed rows plus a rail list the categories twice). The site keeps collapsed by default, where the first screen is the overview. A search or a View filter opens what matches.
- Compact rows by default: checkbox, title, the Patreon chip (and the state chip on re-entry), the description on one line, the format of the questionnaire's result, which the owner singled out (2026-10-16: "this compactness is great"). The docs link and the surface list ride the tooltip; Cards with full descriptions in the View menu brings today's cards back for someone who wants to read.
- A ticked row is marked quietly (the checkmark and a slightly stronger border), never a full accent outline: sixteen outlined rows read loud.
- Re-entry shows the diff on the rows: "installed", "will install", "will be removed" with the row kept visible and undo. On a first run no state chips, since every row would say the same thing.
- The row's secondary action stays: "place in this project only" for placeable and family packages, and the Patreon prompt on ticking a locked tool (the modal stays; it is a decision with three answers).
- Section header: glyph, name, pitch, count. "Select section" and the section docs link move behind a small menu at the row's end.
- Banners, not modals, at the top of the list: "N new tools since you last looked" with a button that filters the list to them; "A newer release is in the store" with Reload. Both exist today as dialogs.
- Footer: the count and download size ("16 tools · 7.2 MB to download", or on re-entry "16 tools · 1 to add · 1 to remove") on the left, "Your set · N" (secondary, opens the drawer), and "Review install" (or "Apply changes" when a removal is in the set) as the primary. With nothing ticked the footer says so and the primary is absent.
- Core is not shown. It installs with any selection and S3 names it.
Opened from the footer, closed by its button, Escape or a click outside. Over the list, from the right, under the header.
- Head: "Your set" (or "Your setup" on re-entry), the same count line as the footer, Clear, Close.
- At the top, only when they apply: the
plusReality()sentence counted on this set ("2 of these need a Patreon sign-in") with the one action beside it (Sign in with Patreon, Check again, or Upgrade), and the options row ("Add FNS tab to OP Create" when a family member is in the set; the bind mode when the record carried one). Above the rows because a set of sixteen scrolls, and the route has to be seen before Review. - The set as compact rows grouped by category: title, chips, one-line description, remove; a removed row on re-entry stays visible, struck, with undo. A placed-only tool sits in its own group, "In this project only".
- Empty: one sentence and "Back to the tools", which closes the drawer.
- The drawer carries no install button; Review install stays in the list's footer so the drawer never becomes the place you have to be.
The plan dialog, the progress narration and the done report, promoted to
one screen with three states. The texts are the installer's own, parsed
as showPlan() and finished() parse them today.
- Plan: "Install 9 tools and 10 core packages, 14 MB, sha256-verified into /project1/FNSTools"; installs, removals and problems as chips; "Back to the tools" and the Install button. A refusal (locked source root, a gate refusal) keeps its sentence and its next step, per the funnel doctrine.
- Progress: the updater's stage line (authorising, fetching, verifying, installing) and the counter; Close stops the poll as it does today and returns to the list.
- Done: the count, the tool chips linked to their docs, removals and failures marked, the two lines of HINTS.done, and three buttons: Close (quiet), Open Settings, and "Browse more tools" as the primary, back to the list with the installed tools ticked. The end of an install is a door back to the tools, not an exit.
| Flavor | Lands on | Notes |
|---|---|---|
| Served, first run (bare root) | S0 | The bootstrap opens the page by itself, as today |
| Served, re-entry (Pick Tools) | S2 as "Your toolkit" | Installed tools ticked with their state on the rows; Start over in the header reopens S0 |
| Served, paste arrival with Plus picks | S2 | The auto-resume flow runs as today and narrates on S3 |
| Served, locked source root | S2 with a banner | No install; the list stays browsable |
| Served, store refreshing | S0 with the fetch state | The page reloads itself when the catalog lands, as today |
| Embedded in the console | S2 | The console carries identity and tabs; the Install and remove tab is the list, with the drawer |
| Site /get/ | S0 once per browser, then S2 | People come to the site to browse |
| Standalone file | As the site | Keeps the selection.json download beside the paste script on S3 |
On the site and the standalone file S3 has no install: it shows the paste script (with the Plus note the script dialog carries today) and, on the file, the selection.json download. The step strip's last label already changes per flavor; S3's title does the same.
The completeness check. Every element the page shows today, and its home in the wizard.
| Today | New home |
|---|---|
| Hero eyebrow, headline, three-line paragraph | S0 title and one sentence; S2 has a title and one sentence |
| Meta line (count, sha256, release, TD build) | S0 footer; the download size on S3 |
| Step strip | The header of every screen |
| Search box | S2 header |
| Guided setup button | "Start over" in the header |
| Theme toggle | Removed in the served flavor; the site header keeps its own |
| Docs link | S0 footer and the S2 section menu |
| Access filter (All, Free, Patreon) | S2 View menu |
| Selected toggle | Gone; the drawer is the selection |
| Placeable, New toggles | S2 View menu; New also as the S2 banner |
| Compact toggle | The default on S2; the cards view is the menu item |
| Category rail, Expand all, Collapse all | S2, with the sections open under their category headings |
| Plus rail note box | S0 counts line; the drawer's plusReality line; row chips |
| Select all, Clear | S2 section menu (Select section) and the drawer (Clear) |
| Card description, docs link, surfaces, chips | S2 rows carry title, chip and the description on one line; docs link and surfaces in the tooltip; the cards view in the View menu |
| Place in this project only | S2 row action; drawer group |
| Patreon prompt on a locked pick | Unchanged modal |
| Sticky bar count | S2 footer and the drawer head |
| Not signed in, Join on Patreon, Sign in with Patreon | The drawer's plusReality line, only when it applies; the header chip |
| Redeem Gumroad key, Check again | Behind the header chip |
| Add FNS tab to OP Create | The drawer's options row |
| Review install, Apply changes | S2 footer primary |
| "Add tools", "Done, N selected" (phase 1) | Gone; the list is always there |
| Copy install script, Download selection.json | S3 on the site and the file |
| Install plan dialog | S3 plan state |
| Progress and Installed dialogs | S3 progress and done states |
| New since you last looked dialog | S2 banner |
| Catalog reload offer | S2 banner |
| Single-download warning | Unchanged, site only |
| Community pointer line | Removed from the installer; CommunityHighlights.md already moved it to the console |
| Core footnote section | Removed; S3 names the core count |
| Locked source root note | S2 banner |
| Store refreshing note and refusal | S0 state |
One selection, as today: picked, placing, familyOn, wantBind.
Every screen derives from it; no screen keeps a copy. screen is
navigation state held in the page, carried in the URL hash so the
console frame and a reload land where the reader was (the console
already addresses the page by hash); the drawer is not in the hash, it
is a transient view of the list. Per browser, as now: the fold state,
the cards preference, the theme. Per visit: the welcomed flag. Nothing
new is persisted.
- The server routes and their payloads:
/selection,/install,/status,/auth/*,/settings,/open,/recommendations.json,/manifest.jsand the globals it injects. - The functions the tests lift from the source:
isPlus,entitled,installable,selection,installScript, the auto-resume guard,quizScore, the preset filter, the search ranking, the catalog check and the keep-alive.tests/test_picker_flavors.py,test_wizard_presets.py,test_wizard_quiz.py,test_picker_search.py,test_picker_catalog_check.pyandtest_picker_window_alive.pypin behavior, not layout. - The shared base: tokens and components come from
base.cssthroughsync_base.py; new screen styles join the page's own block. - The embedding seams: the page stays one self-contained file, served from the Text DAT and baked into /get/ by the site build; the console keeps framing it.
Each phase leaves the page shippable. Phases 1 to 4 built the first sketch, with the set as a screen; phase 5 is the rework to the shape above.
- Screens and the home. A
screenswitch over the existing DOM; the set built from the selection as a screen; the list with compact rows default and the toolbar folded into one row; the sticky bar became per-screen footers. Landed 2026-10-17 (uncommitted at the time of writing); the record is the section "Wizard phase 1 (2026-10-17)" inInstallSurfaceDesign.md. The new-tools and catalog-reload banners landed with it. - Start and the questionnaire as screens. S0 and S1 replaced the
welcome dialog; the dialog markup went. Landed 2026-10-17
(uncommitted at the time of writing); the record is the section
"Wizard phases 2 to 4 (2026-10-17)" in
InstallSurfaceDesign.md. - Install as a screen. The plan, progress and done dialog states became a screen. Landed 2026-10-17, same record.
- Flavors and landing. Entry points, the site and file install
screen, the embedded mode re-checked, tests updated where an element
moved,
sync_base.py --write,EnsureDevRails(). Landed 2026-10-17 up toEnsureDevRails(); the rails were rebuilt as 3.2.72 and shipped with release v3.2.72 the same day (after phase 5 below), so the wizard reaches users from that release on. The FirstRunTestPlan runs on a clean TD remain the one open item. - The set becomes a drawer; every flow lands on the list. Owner,
2026-10-17, on first use of the built flow: it does not encourage
exploring tools, every branch ended on the set, and after an install
(and in the console's Install and remove tab) the catalog was only
reachable through Start over and Pick my own. The rework: the "set"
screen's body becomes the drawer over the list (same rows, same
plusReality line and options row, head with count, Clear and Close);
the list's footer holds "Your set · N" and Review install; "Add
tools" and "Done, N selected" go; every preset, the questionnaire's
result and Pick my own land on the list (with the toast naming the
count); the done screen gains "Browse more tools" as its primary;
re-entry and the console frame land on the list with the installed
tools ticked; the ticked row loses its full accent outline for a
quiet mark. The hash keeps
catalogandinstall;setis no longer a destination (an old#setlink opens the list with the drawer). Landed 2026-10-17 (uncommitted at the time of writing); the record is the section "Wizard phase 5 (2026-10-17)" inInstallSurfaceDesign.md. Phases 1 to 4 had already been committed (842062da,ee247d31), so the set-as-home shape is in the history and this phase is the commit on top; no release carries it on its own, since the rails are rebuilt only at release time.
- Site entry. The table above lands /get/ on the list after a once-per-browser S0, because site visitors browse. The alternative is S0 on every visit, the same as the installer. Recommendation: list after one S0.
- Compact rows as the default inside TouchDesigner, with the cards as the opt-in. Decided 2026-10-16: yes; the site may keep the cards as its default since it has the width.
- Re-entry home. Decided 2026-10-17: the list, with the installed tools ticked and the diff on the rows; the set only as the drawer.
- The Patreon prompt on ticking a locked tool stays a modal, since it is a three-answer decision. The alternative is an inline row state. Recommendation: keep the modal.
- Where the family and bind options sit: the drawer's options row, or the S3 plan. Recommendation: the drawer, so the plan is a confirmation and never a form.