Today, only the Delivery and Assignments tabs have controls. The main working tabs — Active, Available, Unconfirmed, In Progress, Issues, Relisting, Rejected — are fixed lists in both Tickets and Parking modes. These ten clickable prototypes explore distinct ways to fix that, each fully functional on identical sample data and styled to match the current portal.
Watching how the portal is used, the same questions come up on every tab: “What’s about to burn?” “What’s unclaimed?” “What’s mine?” “What’s the big-money order?” “Show me one marketplace / one venue run.” Right now the only answer is scrolling. Delivery’s control bar already proved the pattern works — the question is which shape of it belongs on the main-pass tabs.
Each explores one primary idea, deliberately pushed far enough to feel its trade-offs. Open them full-screen, switch tabs and modes, and actually use the controls — everything works.
The Delivery-tab bar, promoted to every tab: search + event window + marketplace + agent + min-value + sort, always visible, with per-tab memory.
Best for: shipping fast — the team already knows this pattern. Cost: permanent chrome height. Open prototype →The table is the control surface: click headers to sort, shift-click for numbered multi-sort, Excel-style funnels with value checklists on text columns.
Best for: zero extra chrome; sorting discoverability. Cost: funnels hide filters from view. Open prototype →Linear-style “+ Filter” → field → value (with live counts). Filters become removable, click-to-edit chips; sort is a chip too. Reads like a sentence.
Best for: modern feel; visible state; one line of chrome. Cost: two clicks per filter. Open prototype →An e-commerce facet rail: checkboxes for marketplace, venue, value band, agent, date bucket — every value showing a live match count given the other facets.
Best for: seeing where the work is before clicking. Cost: ~250px of width. Open prototype →One omnibox: free text plus typed tokens (mkt: date:48h cost:>300 agent:none sort:cost-desc) with autocomplete and “/” to focus.
Curated one-tap answers to “what needs me right now?”: 🔥 Next 48h, Unclaimed, 💰 ≥$300, ⚠️ TM sold out… combinable, with live counts, per tab and mode. Plus segmented sort and row density.
Best for: lowest friction for the 90% case. Cost: can’t express arbitrary queries. Open prototype →Notion/Airtable-style: two buttons with badge counts open a rule builder — multi-rule filters with Match all/any logic, ordered multi-level sort — plus a plain-English summary of the active view.
Best for: max expressiveness with a clean resting state. Cost: filters hidden until opened. Open prototype →Turn the flat list into collapsible sections by event, venue, event day, marketplace, or agent — sticky headers with order counts and cost subtotals, sortable within groups.
Best for: batch workflows and workload views. Cost: grouping ≠ filtering; pairs best with another pattern. Open prototype →Time-to-event as the primary control: a two-week day strip with counts and volume heat bars. Click days or use presets (Today · 48h · Weekend · Past due); countdown chips color every row.
Best for: urgency triage; seeing workload shape at a glance. Cost: only solves the date axis. Open prototype →The destination pattern: named views bundling mode + filters + sort + visible columns into persistent chips (“🔥 Urgent unclaimed”, “🅿️ Parking next 48h”), with a slide-over editor, starring, and localStorage persistence.
Best for: repeat workflows and team-standard views. Cost: needs an underlying filter editor anyway. Open prototype →| Prototype | Utility | Learnability | Chrome cost | Power ceiling | One-line verdict |
|---|---|---|---|---|---|
| P1 · Control Bar | ●●●●● | ●●●●● | Medium | Medium | The safe, proven default — ship this first. |
| P2 · Spreadsheet | ●●●●● | ●●●●● | None | High | Sorting belongs in the headers regardless of what else wins. |
| P3 · Filter Chips | ●●●●● | ●●●●● | Low | High | Best visible-state-per-pixel ratio of the flexible options. |
| P4 · Faceted Sidebar | ●●●●● | ●●●●● | High (width) | Medium | Counts-before-clicks is superb; width is the price. |
| P5 · Command Bar | ●●●●● | ●●●●● | Low | Very high | A power-user layer, not the primary UI. |
| P6 · Preset Pills | ●●●●● | ●●●●● | Low | Low | Highest utility-per-click for daily triage. |
| P7 · Popover Rules | ●●●●● | ●●●●● | Minimal | Very high | The right home for advanced logic (and/or, multi-sort). |
| P8 · Group By | ●●●●● | ●●●●● | Low | Medium | Uniquely good for batch buying and workload balance. |
| P9 · Date Lens | ●●●●● | ●●●●● | Medium | Low | The most fulfillment-native idea here; date is king. |
| P10 · Saved Views | ●●●●● | ●●●●● | Low | Very high | Where this should end up once filters exist. |
These patterns compose. The strongest end-state combines four of them in layers, each shippable independently:
Implementation note: all of this is frontend-only state over the already-loaded listings array (the portal filters client-side today), so each layer is a contained change to fulfillment/public/ with per-tab state persisted in localStorage and mirrored to the URL for shareability.
Built as a design exploration for the XHP fulfillment portal · All data is synthetic · Session 325cf6b0