← Back to Work Shipped Features + AI-Assisted Overhaul Proposal
Jassby Travel & Schools (WorldStrides, Scholastica Travel) · B2B Dashboard · Internal Tools · AI-Assisted Design

Jassby Travel & Schools: B2B Partner Admin & AI-Assisted Redesign Proposal

Shipping high-volume card lot & allotment workflows (~100% YoY program growth) and authoring an AI-assisted, React-audited 11-flow overhaul proposal.

~100% YoY
Cards, Transactions & Spend Growth
6 Shipped
Production B2B Jira Workflows
11 Flows
AI-Assisted React Overhaul Proposal
My Role
Product Designer
Timeline
2025 – Present
Collaborators
CTO, Web & Backend Engineers, Partner Operations
Core Stack
Figma, Figma Design Agent, React (MUI DataGrid), Django Admin, Claude, HTML/CSS Prototyping

1. Making High-Volume Travel Card Operations Feel Calm

When a student travel coordinator is preparing hundreds of physical and virtual Visa or Mastercard stipends before a Friday departure, the last thing they need is a dashboard that slows them down. Jassby's Travel & Schools (Trip Card) portal powers group travel programs for partners like WorldStrides and Scholastica Travel—where operations teams order bulk card lots, split shrink-wrapped card batches across regional warehouses, assign cards to trips, and schedule automated meal and activity stipends.

As the program doubled year over year (~100% YoY growth in cards issued, transactions processed, and spending), those everyday workflows began showing strain: years of expired card lots slowed down table loads, trip assignment dropdowns grew unwieldy, and a single formatting mistake in a bulk CSV upload could block an entire roster without explaining which row failed.

Working closely with our CTO, web and backend engineers, and partner operations leads, I tackled the portal across two tracks:

  1. Unblocking Enterprise Operations in Production: Designing and shipping six targeted dashboard upgrades—from lifecycle tabs and PRN-based card lot splitting to row-level CSV validation—that immediately removed daily friction for our travel partners.
  2. Auditing the React Codebase, Prototyping a Full Overhaul & Validating via Directed Client Interviews: Using Claude Code and interactive React/HTML/CSS prototyping to inspect our production React components (FundingAccount.jsx, Inventory.jsx, Tour.jsx, Allotments.jsx, Activities.jsx), design a gradual, zero-disruption overhaul with a Classic view toggle, and lead directed client interviews to validate the new features with travel clients before pushing any changes to production (PROD).

2. Shipped Production Features: Unblocking Enterprise Operations

Working directly from partner feedback (WorldStrides Admin, Scholastica Travel) and internal support tickets, I designed and shipped six targeted B2B dashboard and internal tooling upgrades:

2.1 Three-Tab Order Lifecycle Table (Assigned, Inventory, Closed)

Previously, every card lot a partner had ever ordered rendered in a single table—slowing down load times and cluttering active operations with expired cards. I split Trip Card Orders into three lifecycle tabs (Assigned Trip Lots, Inventory Trip Lots, and Closed Trip Lots) with contextual action toolbars and a state-protection confirmation modal when switching tabs with active row selections.

Shipped Trip Card Orders 3-tab table showing Assigned Trip Lots, Inventory Trip Lots, and Closed Trip Lots
Fig 2.1 — Shipped 3-tab Trip Card Orders table (Assigned Trip Lots, Inventory Trip Lots, Closed Trip Lots) isolating expired card lots to speed up table rendering.
Switch Tabs confirmation modal warning that selected card lots will be cleared
Fig 2.2 — Guardrail confirmation modal preventing accidental loss of multi-row lot selections when switching lifecycle tabs.

2.2 Standard vs. Advanced Card Lot Splitting (by Last 4 & PRN)

Enterprise partners frequently order bulk inventory lots of 50–100+ physical cards to headquarters and split them across smaller school trips. When physical cards are already shrink-wrapped in batches, operators need to split a lot by exact starting card (Last 4 Digits) and PRN (Payment Reference Number) rather than an arbitrary card count. I designed a dual-mode Manage Card Lot modal supporting both Standard Split (by card quantity) and Advanced Split (selecting exact starting cards by Last 4 and PRN across up to 11+ subgroups).

Manage Card Lot modal showing Advanced Split by Last 4 digits and Payment Reference Number (PRN)
Fig 2.3 — Shipped Advanced Split modal allowing warehouse ops to split physical card lots by exact starting card (Last 4 + PRN) across 11+ subgroups.
Assign Trip Cards modal with Trip ID + Trip Name typeahead search
Fig 2.4 — Shipped Trip ID | Trip Name typeahead search and sorted dropdown in Assign Trip Cards, resolving WorldStrides' unindexed dropdown bottleneck.

2.3 Bulk CSV Cardholder Label Validation & 5-State Card Controls

When tour leaders assign physical cards to students and chaperones via CSV upload, a single invalid character or mismatched PRN previously caused silent or generic upload failures. I designed inline row-level CSV validation feedback (Row 1: PRN is Invalid, Row 1: Label fields cannot contain symbols) alongside a 5-state card lifecycle status selector (LIVE, LIVE_NO_ALLOT to skip future stipends without deactivating the card, SPARE, LOST, and CLOSED to immediately sweep remaining funds back to the partner's Funding Account).

Upload Cardholder Labels CSV modal showing row-level PRN and symbol validation errors
Fig 2.5 — Row-level CSV validation errors (Row 1: PRN is Invalid, Label fields cannot contain symbols).
Upload Cardholder Labels CSV modal showing validated green confirmation
Fig 2.6 — Validated CSV upload confirmation prior to applying cardholder labels.
Change Card Status modal showing 5 lifecycle states: LIVE, LIVE_NO_ALLOT, SPARE, LOST, CLOSED
Fig 2.7 — 5-state card lifecycle status controls (LIVE, LIVE_NO_ALLOT, SPARE, LOST, CLOSED).

2.4 Internal Support Portal (Django Admin) & Partner Bulletin CMS

Modeled after Arroweye's production bulletin workflow, I designed both sides of our Partner Bulletin system: the internal Jassby Support Portal (Django Admin) where staff upload PDF operational notices and target specific partner organizations, and the client-facing Bulletin dashboard with unread notification badges and an embedded PDF reader.

Internal Jassby Support Portal Django Admin interface for publishing partner bulletins
Fig 2.8 — Internal Support Portal (Django Admin): creating and targeting PDF operational bulletins to specific travel partners.
Partner-facing Bulletin dashboard with unread badge and embedded PDF modal
Fig 2.9 — Partner-facing Bulletin dashboard with unread navigation counter and embedded PDF viewer.

3. AI-Assisted Full-Portal Redesign Proposal (Claude CLI Design Mode + React Code Audit)

While shipping incremental fixes kept our fastest-growing partners moving, the underlying portal still carried early architectural debt: raw uppercase system codes (LIVE_NO_ALLOT), hover-only row actions, wide data grids that forced horizontal scrolling, no early warning when scheduled trip allotments exceeded a partner's available funding balance, and desktop tables squeezed onto 511px mobile viewports for tour leaders on the road.

To propose a cohesive long-term vision without pulling engineers off immediate roadmap work—and while reusing our existing MUI (Material UI) primitives—I used Claude CLI in Design mode to audit the actual production React components (FundingAccount.jsx, Summary.jsx, Details.jsx, Inventory.jsx, ManageLotButton.jsx, AssignCardsButton.jsx, Tour.jsx, Allotments.jsx, Activities.jsx) alongside 70+ DEV screenshots, generating an interactive HTML/CSS design artifact covering all 11 partner flows across desktop and mobile that I could iterate on directly from the terminal.

Internal Engineering & Design Workflow Note

“If there is no mockup, can you run this through Claude Design or at least a designer/UX agent to reuse the same MUI elements but deliver a robust and easy-to-use UI?

Claude tip: Turns out you can ask Claude inside CLI to call Design mode and provide you with a decent UI mockup. A prompt piece like this gave me an artifact I could iterate right from CLI…”

Four Guiding Principles of the Proposal

  1. Answers first: Every screen leads with its core operational question—what needs attention today, how many cards a trip still needs, and whether the funding account will run short.
  2. Nothing hidden: No hover-only row icons, secret double-clicks on "Posted" rows to unlock a disabled tab, or permanently greyed-out action bars.
  3. Plain language: System status codes (LIVE_NO_ALLOT, INVENTORY) become clear human labels with inline explanations.
  4. Gradual by design (P1–P4 Rollout + Classic view): Every flow is scoped into four incremental engineering releases (P1: Polish in place, P2: Context & control, P3: Richer rows & side panels, P4: Theme v2 + Mobile) with a persistent Classic view escape hatch so enterprise partners never experience a disruptive overnight redesign.

3.1 Funding Account Proposal: Answering "Will We Run Out of Money, and When?"

In our audit of FundingAccount.jsx, Summary.jsx, and Details.jsx, we documented 10 code and UX friction points: only the current balance was shown at the top with no total of scheduled allotments, yellow/red row backgrounds (getRowClass in theme.js) had no legend, and the DETAILS tab was disabled until a user knew to click a POSTED or PAID row.

In the proposed overhaul, the Funding Account header introduces a 3-card Cash-Shortfall Forecast (Current balance $10,525.32, Scheduled allotments -$11,220.00, and Balance after scheduled -$694.68 · Short from Oct 17: fund at least $694.68), flags the exact date and trip where funds run short in the ledger, and replaces the hidden Details tab with a card-level allotment drilldown side panel.

Before: Production DEV Funding Account screen showing unlabelled row colors and disabled Details tab
Fig 3.1 (Before — Current DEV Screen) — Only current balance shown in header; disabled DETAILS tab requires clicking a posted row; no cash-shortfall summary.
Proposed Funding Account overhaul with 3-card cash-shortfall forecast and inline shortfall warning
Fig 3.2 (Proposed Target) — 3-card balance forecast immediately surfaces the Oct 17 shortfall (-$694.68), paired with multi-select status chips and inline balance warnings.
Proposed Funding Account side panel drilldown showing card-by-card allotment loads
Fig 3.3 (Proposed Side Panel Drilldown) — Clicking any loaded allotment opens a right-hand drawer showing card-by-card load timestamps and last-4 digits without leaving the ledger.

3.2 Trip Card Orders & Assignment Drawer Proposal

Auditing Inventory.jsx, ManageLotButton.jsx, and AssignCardsButton.jsx, the proposal elevates carrier tracking (UPS / FedEx deep links), warehouse location filter chips (All locations 6, Apple Tours HQ 3, Newark Warehouse 3), and 90-day amber card expiration warnings directly into the Trip Card Orders table. Selecting lots reveals a contextual selection bar and opens a side panel (Assign cards to a trip) that ranks upcoming inventory-fulfilled trips by start date and displays live card coverage (Needs 18 more · 0 of 18 assigned vs. Fully covered).

Proposed Trip Card Orders screen with warehouse location filter chips, carrier tracking links, and amber expiration warnings
Fig 3.4 (Proposed Inventory Lots) — Warehouse filter chips, inline UPS/FedEx tracking links, and amber 3-month expiration callouts.
Proposed Assign Cards to a Trip side panel showing trip card coverage counts
Fig 3.5 (Proposed Assign Drawer) — Shows exactly how many cards each upcoming trip still needs (Needs 18 more · 0 of 18 assigned) before confirming assignment.

3.3 Trips List, Trip Detail & Mobile Tour Leader Experience

Auditing Tour.jsx, Allotments.jsx, and AllotmentDialog.jsx, the proposal replaces raw grids with a status-first Trips List (In progress · day 7 of 7, Classic view toggle in the header), a persistent Trip Detail context header across all four tabs (Allotments, Tour leaders, Cards, Transactions), an Add Allotment drawer that previews Allotment total ($1,320.00) against Available funding ($8,420.00) before saving, and a dedicated Mobile layout with bottom navigation, card rows, and 44px+ touch targets for tour leaders in the field.

Before: Current DEV Trips list showing raw grid and hidden hover actions
Fig 3.6 (Before — Current DEV Trips List) — Raw data grid with empty action cells until row hover and hidden status dropdowns.
Proposed Trips List with status filter chips, relative trip timing, allotment setup badges, and Classic view toggle
Fig 3.7 (Proposed Trips List) — Status chips with counts, relative timing (In progress · day 7 of 7), allotment readiness (None yet warning), and a Classic view toggle.
Proposed Trip Detail screen with persistent trip header and Allotments tab
Fig 3.8 (Proposed Trip Detail) — Persistent trip summary header across all tabs, distinguishing Loaded vs. Scheduled (In 2 hours) allotments.
Proposed Add Allotment side panel showing Standard vs Targeted scope and live funding balance preview
Fig 3.9 (Proposed Add Allotment Drawer) — Previews Allotment total ($1,320.00) vs. Available funding ($8,420.00) and remaining balance ($7,100.00 · Enough funds) before saving.
Proposed Mobile Trips view with bottom navigation, filter chips, and card rows
Fig 3.10 — Proposed Phase 4 Mobile view: thumb-zone bottom bar (Trips, Cards, Funding, More) and card-based rows.

Progressive Delivery Architecture

Why a 4-Phase Rollout Matters for Enterprise B2B

Enterprise travel coordinators use the Partner Admin portal daily during peak student travel seasons. Rather than proposing a risky "big-bang" rewrite, the AI-assisted proposal maps every React component change into four self-contained releases:

  • P1 · Polish in place: Readable status labels, visible row actions, and column widths that fit without horizontal scroll—zero layout shifts.
  • P2 · Context & control: Shared page headers, cash-shortfall balance forecast cards, status filter chips, and multi-row selection bars.
  • P3 · Richer rows & panels: Relative trip timing, inline carrier tracking links, and non-destructive right-hand side panels replacing modal dialogs.
  • P4 · Theme v2 + Mobile: Public Sans typography, refined surface hierarchy, and dedicated mobile card & bottom-sheet layouts for tour leaders.

4. Physical Card Art & Print Marketing: Jassby Travel Banner Poster (SYTA)

Beyond the B2B admin portal, I owned the physical Jassby Trip Card 3D product render and redesigned our conference and school-tour print collateral (Jassby Travel Banner Poster) for SYTA (Student & Youth Travel Association) partner events:

  • Replacing stock-photo clutter with the physical product (Current → Proposed → Latest): Our legacy print poster (Fig 4.1a) relied on a busy three-photo stock collage and buried the actual debit card and mobile wallet capabilities.
  • Putting the matte-black Trip Card & mobile wallets front and center: I created a high-resolution 3D matte-black leather-textured render of the Jassby Trip Card (Fig 4.0) and restructured the print poster (Fig 4.1b & Fig 4.1c) around an immediate visual hierarchy: bold Travel DEBIT CARD typography, official Apple Pay and Google Wallet badges, a color-coded 3-column value breakdown (Easy · Flexible · Secure), and a high-contrast QR acquisition footer for tour operators.
3D Matte-Black Jassby Trip Card Debit Mastercard Product Render
Fig 4.0 — 3D matte-black Jassby Trip Card Debit Mastercard product render created for print banners and partner marketing collateral.
Before: Legacy Jassby Travel Debit Card stock-photo collage poster
Fig 4.1a (Before — Legacy Poster) — Stock-photo collage with no physical card preview or digital wallet callouts.
Proposed Jassby Travel Banner Poster with 3D Trip Card render and Easy/Flexible/Secure pillars
Fig 4.1b (Initial Redesign Proposal) — Introduces the 3D matte-black Trip Card hero and structured Easy / Flexible / Secure columns.
Final Shipped & Printed SYTA Strategic Partner Retractable Conference Banner produced with Manus
Fig 4.1c (Shipped & Printed SYTA Conference Banner) — Produced using Manus; physical retractable conference banner featuring the 3D Trip Card render, Apple Pay & Google Wallet lockups, and SYTA Strategic Partner footer.