Onboarding condition selection
Search docks wherever you are: at the top by default, and again at the bottom once you've scrolled past the 24 without finding yours. Either one opens the same bottom sheet, already showing the full list. Whatever you pick there lands right after the 24, wherever you already are.
Search top or bottom, opens a bottom sheet
9:41
?
What should we focus on?
Search for a condition, or choose from the list below.
Search 3,000+ conditions
Don't see yours?
Search 3,000+ conditions
Continue
Find your condition
Dev notes, core state logic
Data model

Two condition sets. A fixed set of 24 supported conditions, content already live for these. A much larger taxonomy, thousands of conditions, no content yet. Every condition anywhere in the UI carries one flag: supported or not. That single flag is the only thing deciding whether a "Coming soon" tag shows next to it.

Search matching is a plain case-insensitive substring match against the condition name. No fuzzy matching, no synonyms, no ranking beyond whatever order the underlying list is in. Same matching logic is reused everywhere search happens in this prototype, there's only one matcher.

Main list

The main screen always shows the 24 supported conditions, in a fixed order, and never filters based on search activity. This list only ever changes in one scenario: something gets added after it (see "Picking from the sheet" below).

Selection is single choice, radio style. Tapping a condition selects it, tapping the same one again deselects it, tapping a different one moves the selection. Continue only ever enables when something is selected. Nothing else affects that button's state.

Two search entry points, one sheet

There are two tappable search bars, one sitting above the 24, one sitting right after the last of them. Neither one is a real search box you can type into directly, both are pure triggers, tapping either opens the same modal sheet. There's no live filtering happening on the main screen itself.

They exist twice on purpose. Whichever one is currently on screen is the one someone will tap. The bottom one only becomes visible once someone has scrolled past all 24 without finding their condition, which is exactly the moment they'd want a way to search without scrolling back up.

The sheet

Opens with the search field already focused, and shows every condition, supported and taxonomy both, before anyone types a single character. Nothing is hidden behind a "type to search" empty state. Typing filters live, same substring match as everywhere else, and unsupported matches get the "Coming soon" tag.

Picking from the sheet

What happens next depends on whether the pick is already one of the 24:

  • If it's already in the 24, nothing moves. That existing row just becomes the selection, and the view scrolls to wherever that row already sits.
  • If it's not one of the 24, it gets appended as a 25th row at the very end of the list, selected. It's never inserted at the top, and it never creates a duplicate row if it happens to match something already visible.

Either way, the result always scrolls into view automatically once the sheet closes, regardless of which of the two triggers opened it or how far down the list the result ends up.

Header shrinks on scroll

Worth calling out on its own since it affects layout, not just polish. As someone scrolls down past a small threshold, the header title shrinks and the subtitle line disappears entirely, freeing up vertical space for the list. Scrolling back up near the top reverses it completely, full title size and subtitle both return.

This behavior is deliberately suspended for the entire time the sheet is open. Any incidental scroll change that happens while the sheet is up should not cause the header behind it to shrink or expand, that would read as the screen resetting itself for no reason.

Search below the list, archived Preferred runner up
The 24 supported conditions stay fixed as a browse list. Right below them, a plain search field lives inline in the same scroll, no sheet, no modal. Typing filters the full taxonomy and drops matches directly underneath the input, tagged coming soon, with no duplicate rows for anything already visible above.
Runner up: search results land right below the initial suggestions instead of hiding behind a sheet. Set aside mainly because the "Search 3,000+ conditions" placeholder loses its impact once the field is pushed down instead of sitting at the top where people see it first.
Search below, results appear inline
9:41
?
What should we focus on?
Search for a condition, or choose from the list below.
Don't see yours? Search below for more.
Continue
Direction 2, archived
Search up top only covers the 24 supported conditions. A fixed "Other" row at the bottom of the list opens a full screen bottom sheet with its own search field scoped to the full taxonomy. Picking something there closes the sheet and shows the pick as a removable pill above the main search.
Retired: two separate search surfaces made the main list feel like a dead end the moment a term wasn't in the initial 24.
Other opens a bottom sheet
9:41
?
What should we focus on?
This helps us understand what matters to you.
Continue
Find your condition
Direction 3, archived
List starts with search collapsed behind a tap target to keep the rest state clean. "Other" lives as the last row in the list itself, and tapping it morphs the row in place into a text input, with live suggestions from the full taxonomy appearing directly underneath as you type. No second screen.
Retired for the same reason as Direction 2: the inline expand was still a second search scope layered under the first one.
Other expands inline
9:41
?
What should we focus on?
This helps us understand what matters to you.
Search conditions
Other, not listed above
Continue