KatieHunt

← Back to Projects
Case Study

Digital Trading Playbook

I designed and built Digital Trading Playbook, a local-first application for discretionary traders who need a single, structured library for their strategy "plays" — rules, context, risk notes, and tags — without handing that data to a third-party SaaS. The product covers every surface from lock screen to play editor, from indicators to notes with file attachments, with two deliberate visual modes: a classic desk interface for daily workflow and a futuristic immersive dashboard for demos and brand presence.

Role Lead Product Designer & Front-End Engineer
Scope 12+ surfaces · React SPA · Electron desktop
Stack React 18 · IndexedDB · react-window · Electron · Recharts · Lucide
Output Shipped · Web + Windows desktop build
Digital Trading Playbook — Dashboard, the central strategy library

Dashboard — the primary daily surface: stats bar, search, filters, and the strategy play library.

What was shipped

Deliverables

Product UI

End-to-end flows for discovering, filtering, viewing, creating, editing, duplicating, and deleting plays. Auxiliary workflows for notes, indicators, todos, favorites, and settings — with confirmations, toasts, breadcrumbs, and keyboard shortcuts.

Visual & Interaction System

Multi-theme experience (Dark, Light, Neon accent modes). Two UI styles — classic desk mode and futuristic immersive mode. CSS-first animation, responsive breakpoints from desktop to stacked mobile layouts, and grid/list view toggles with persistent state.

Engineering

Modular React 18 codebase. Context for app, theme, UI style, typography, and layout. Service layer for persistence (debounced saves), PIN/auto-lock, tags, search, and domain modules. Lazy-loaded heavy routes. react-window virtualization for large libraries.

Desktop Parity

Electron desktop build (Windows) using electron-packager — chosen for reliable output on environments where electron-builder hits symlink/code-sign archive issues. Same React UI runs in both web and desktop contexts.

How I worked

Design Process

01 Frame Defined problem space (personal knowledge management for traders), constraints (no backend, offline-friendly, private), and success criteria (fast retrieval, trustworthy saves, credible visual craft).
02 Structure Mapped IA: plays as the core entity; notes, indicators, and todos as supporting workspaces; lock and settings as system shells.
03 Explore Iterated layout density, filter field grouping, and a second "mode" (futuristic) to stress-test brand and motion without disrupting the primary workflow.
04 Prototype in code Built hi-fi in React early to validate performance, persistence, and real interaction cost — not only static screens.
05 Validate Heuristic review and high-frequency dogfooding during development on the hardest flow: finding a play fast under a large library.
06 Ship Hardened IndexedDB storage, error boundaries, logging hooks, Electron packaging, and the production build pipeline.
Starting point

Foundation & Constraints

The brief was personal: replace scattered notes and spreadsheets with a single, credible, offline-first system for managing trading strategies — the kind of "institutional-grade" interface that makes the work feel as serious as the market discipline it supports.

Non-negotiable constraints: Data stays on device. PIN is experience-level gating, not bank-grade authentication. The Electron Windows build had to avoid toolchains that fail on symlink/code-sign archive extraction — which meant choosing electron-packager over electron-builder for reliable output on this machine.

Early structural priorities: One scannable library (search + sort + filters + grid/list), a single deep editor for the play record, and clear save feedback — because silent failure is unacceptable when you're documenting live trading rules.

Digital Trading Playbook — Lock screen, PIN entry

Lock screen — PIN entry with auto-lock; sets the "serious tool" tone from the first interaction.

Visual direction

Establishing Look & Feel: Dual Fidelity

Brand intent: Credible and institutional when traders are working — high contrast, predictable controls, badge-based metadata. But capable of a second read that feels futuristic and demo-ready, without replacing the CRM-like clarity of the primary library.

Desk Mode — Classic

Daily workflow surface

Density, legibility, stat chips in navigation, minimal distraction. Optimized for repeat use and long sessions — where traders spend hours reviewing and editing plays. Controls are predictable; nothing competes with content.

Deck Mode — Futuristic

Demo & brand surface

Atmospheric shell and ambient motion. Optimized for onboarding, screenshots, and presentations — while routing users back into the same underlying components. Same data, elevated staging.

The two modes share every data store, routing logic, and business component — the only fork is the shell wrapper and its CSS animation layer. This ensures mode switching never causes a data inconsistency and the futuristic experience never needs its own maintenance path.

Classic dashboard — stats, filters, play grid
Desk Mode (Classic)

Stats bar + filter band + play grid. Information-dense, optimized for scanning and daily use. Controls stay in the same place every session.

Futuristic immersive mode — ambient motion, atmospheric shell
Deck Mode (Futuristic)

Atmospheric background, ambient motion, ticker. Demo-ready and brand-forward — same underlying play data and components, different visual shell.

Feature drilled end-to-end

Mini Case Study: Finding the Right Play Fast

The hardest daily task for a trader with a large library isn't creating a play — it's finding the right one quickly before or during a trade. This is the feature where friction has real cost.

Requirements

  • Narrow hundreds of plays to a shortlist without hunting — from one control surface.
  • Filtering must compose: text search + asset type + strategy type + sort (modified date, created date, name, win rate) all active simultaneously.
  • Switching grid vs list must preserve the current query — no disorienting reset.

First Exploration — What Broke

  • Too many equal-weight controls: Search, filters, and view toggles competed for attention; first-time users hesitated on order of operations.
  • Filter discoverability: Advanced constraints were easy to miss when collapsed or visually grouped near sort controls.
  • Scan cost in list mode: Without consistent metadata columns, list view didn't beat grid for comparison — so it felt like a worse grid, not a different tool.

Iteration — What Changed

  • Stabilized a single control band: Search + filter + sort as one horizontal system — visual hierarchy established left-to-right by use frequency.
  • Badges on cards: Asset, timeframe, strategy, and tags surfaced before opening — reduces unnecessary plays being opened just to check metadata.
  • Virtualized rendering: react-window for large libraries reduces paint cost when hundreds of cards exist; scroll stays smooth.
  • Debounced persistence for preferences: Sort/filter/view state is saved so the dashboard doesn't reset between sessions — eliminating "why did my filters disappear?" friction.
  • Keyboard shortcut access: Power users can trigger search, sort, and view mode without reaching for the mouse.
Keyboard shortcuts overlay — fast access to all primary actions

Keyboard shortcuts overlay — every primary action accessible without the mouse; discoverable but non-intrusive.

Heuristic Evaluation (Find & Filter Flow)

I evaluated the flow against three primary tasks using heuristic analysis and extended self-testing across a realistic play library. Each finding drove a direct design or implementation change.

Issue Severity Evidence Fix applied
Filter controls competed with search for first attention High Eyes tracked to filters before search on first visit Search anchored to far-left; filters follow in priority order
Strategy filter label unclear — "type" vs "strategy" Medium Hesitation on dropdown; mismatched mental model Label updated; tooltip added on hover
Sort default ("newest") not obvious from label alone Medium Users sorted manually to verify default Added active sort indicator chip; default labeled explicitly
List view felt redundant, not useful Medium Grid switched back to immediately in most sessions List view redesigned with consistent metadata columns for side-by-side comparison
View mode reset on navigation back to dashboard High Repeated frustration when returning from play detail View/sort/filter state persisted in context and saved to localStorage

Creating a New Play

The play editor needed to be structured enough to enforce consistency across entries, but flexible enough for different strategy types. The form is grouped into logical blocks: identity (name, asset, strategy), rules and logic, risk parameters, notes, and tags. Destructive actions (delete, archive) are gated behind confirmation dialogs.

All screens

High-Fidelity Gallery

All screens use synthetic / representative data only. Dark mode is default; Light and Neon themes available via Settings.

Component library

Design System

The implementation maps visual intent to theme variables and shared CSS, composed with Tailwind utilities. React context propagates theme, UI style (classic vs futuristic), and typography globally — so changing mode never requires a page reload or re-initialization.

Tokens / Themes
Dark mode Light mode Neon accent CSS variables Typography scale
Components
Play card (grid + list) Filter band Stat chips Modal / confirm Toast system Skeleton loaders Lucide icons Masked fields
Templates
Dashboard (classic + futuristic) Play editor Notes + file viewer Indicators Settings page Lock screen
Result

Outcome

Digital Trading Playbook shipped as a complete, interactive system — not a mock — with persistent storage (localStorage plus IndexedDB for larger datasets and file metadata), virtualized lists for scale, and a deliberate split between information-dense trading workflows and a show-floor visual mode for demos and brand presence.

The project demonstrates the design-to-delivery arc that defines my work: product thinking (what belongs in a personal knowledge management system for traders), UX decisions (filter architecture, session lifecycle, dual-mode design), visual craft (institutional density vs immersive brand), and front-end engineering (React context, IndexedDB, virtualization, Electron packaging).

Reflection — What I'd do next

Next priorities:

  • Optional encrypted backup with device-keyed encryption (beyond PIN-level gating).
  • Formal analytics on strategy performance — win rate, expectancy, drawdown — linked to play records.
  • Expanded export formats (PDF report, CSV, structured JSON) for trading journal integration.
  • Automated tests for storage migration logic — currently manual verification only.
  • Cross-device sync consideration if the use case evolves beyond single-device operation.

What I learned:

  • Designing two visual modes without forking business logic requires discipline in the component boundary — the shell and the data layer must be genuinely independent.
  • Offline-first storage (IndexedDB at scale) requires explicit error boundaries and migration hooks from the start — retrofitting them is painful.
  • Density vs delight is context-dependent: the same user wants institutional clarity during work and brand energy during a demo. Both are correct, just not simultaneously.