design-protocol 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/agents/dp-researcher.md +239 -0
- package/agents/dp-verifier.md +207 -0
- package/bin/install.js +464 -0
- package/commands/dp-back.md +221 -0
- package/commands/dp-discuss.md +257 -0
- package/commands/dp-execute.md +513 -0
- package/commands/dp-journey.md +85 -0
- package/commands/dp-progress.md +178 -0
- package/commands/dp-roadmap.md +83 -0
- package/commands/dp-skip.md +186 -0
- package/commands/dp-start.md +510 -0
- package/commands/dp-storytell.md +94 -0
- package/commands/dp-verify.md +207 -0
- package/package.json +59 -0
- package/skills/dp-color/SKILL.md +214 -0
- package/skills/dp-color/export_tokens.py +297 -0
- package/skills/dp-color/references/apca-contrast.md +87 -0
- package/skills/dp-color/references/hue-emotions.md +109 -0
- package/skills/dp-color/references/oklch-gamut.md +79 -0
- package/skills/dp-color/references/pitfalls.md +171 -0
- package/skills/dp-color/references/scale-patterns.md +206 -0
- package/skills/dp-color/references/tool-workflows.md +200 -0
- package/skills/dp-discovery/SKILL.md +480 -0
- package/skills/dp-eng_review/SKILL.md +471 -0
- package/skills/dp-eng_review/references/code-review-checklist.md +385 -0
- package/skills/dp-eng_review/references/react-patterns.md +512 -0
- package/skills/dp-eng_review/references/shadcn-patterns.md +510 -0
- package/skills/dp-eng_review/references/tailwind-conventions.md +351 -0
- package/skills/dp-journey/SKILL.md +682 -0
- package/skills/dp-journey/references/journey-types.md +97 -0
- package/skills/dp-journey/references/map-structures.md +177 -0
- package/skills/dp-journey/references/omnichannel-patterns.md +208 -0
- package/skills/dp-journey/references/research-methods.md +125 -0
- package/skills/dp-prd/SKILL.md +201 -0
- package/skills/dp-prd/references/claude-code-spec.md +107 -0
- package/skills/dp-prd/references/interview-questions.md +158 -0
- package/skills/dp-prd/references/section-templates.md +231 -0
- package/skills/dp-research/SKILL.md +540 -0
- package/skills/dp-research/references/facilitation-guide.md +291 -0
- package/skills/dp-research/references/interview-guide-template.md +190 -0
- package/skills/dp-research/references/method-selection.md +195 -0
- package/skills/dp-research/references/question-writing.md +244 -0
- package/skills/dp-research/references/research-report-template.md +363 -0
- package/skills/dp-research/references/synthesis-methods.md +289 -0
- package/skills/dp-research/references/usability-test-template.md +260 -0
- package/skills/dp-roadmap/SKILL.md +648 -0
- package/skills/dp-roadmap/references/prioritization-frameworks.md +312 -0
- package/skills/dp-roadmap/references/roadmap-structures.md +179 -0
- package/skills/dp-roadmap/references/roadmap-workshops.md +264 -0
- package/skills/dp-roadmap/references/theme-development.md +168 -0
- package/skills/dp-storytell/SKILL.md +645 -0
- package/skills/dp-storytell/references/audience-playbooks.md +260 -0
- package/skills/dp-storytell/references/content-type-templates.md +310 -0
- package/skills/dp-storytell/references/delivery-tactics.md +228 -0
- package/skills/dp-storytell/references/narrative-frameworks.md +259 -0
- package/skills/dp-ui/SKILL.md +503 -0
- package/skills/dp-ui/references/b2b-enterprise-patterns.md +319 -0
- package/skills/dp-ui/references/data-visualization.md +304 -0
- package/skills/dp-ui/references/visual-design-principles.md +237 -0
- package/skills/dp-ux/SKILL.md +414 -0
- package/skills/dp-ux/references/accessibility-checklist.md +128 -0
- package/skills/dp-ux/references/product-excellence.md +149 -0
- package/skills/dp-ux/references/usability-principles.md +140 -0
- package/skills/dp-ux/references/ux-patterns.md +221 -0
- package/templates/config.json +55 -0
- package/templates/context.md +96 -0
- package/templates/project.md +83 -0
- package/templates/requirements.md +137 -0
- package/templates/roadmap.md +168 -0
- package/templates/state.md +107 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# B2B & Enterprise UI Patterns
|
|
2
|
+
|
|
3
|
+
Patterns for data-dense, power-user focused applications.
|
|
4
|
+
|
|
5
|
+
## Dashboard Design
|
|
6
|
+
|
|
7
|
+
### Dashboard Anatomy
|
|
8
|
+
```
|
|
9
|
+
┌─────────────────────────────────────────────────────────┐
|
|
10
|
+
│ [Logo] Navigation [Search] [Profile] │ ← Global nav
|
|
11
|
+
├─────────────────────────────────────────────────────────┤
|
|
12
|
+
│ Page Title [Date Range ▼] [Filter] [Export]│ ← Page header
|
|
13
|
+
├───────────────┬───────────────┬───────────────┬─────────┤
|
|
14
|
+
│ KPI Card │ KPI Card │ KPI Card │ KPI Card│ ← Metrics row
|
|
15
|
+
│ $1.2M ↑12% │ 847 ↓3% │ 94.2% │ 23 New │
|
|
16
|
+
├───────────────┴───────────────┴───────────────┴─────────┤
|
|
17
|
+
│ │
|
|
18
|
+
│ Primary Chart / Visualization │ ← Main insight
|
|
19
|
+
│ │
|
|
20
|
+
├─────────────────────────────────┬───────────────────────┤
|
|
21
|
+
│ Secondary Chart │ Supporting Table │ ← Detail row
|
|
22
|
+
│ │ │
|
|
23
|
+
└─────────────────────────────────┴───────────────────────┘
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### KPI Cards
|
|
27
|
+
**Essential elements**:
|
|
28
|
+
- Metric label (what it measures)
|
|
29
|
+
- Primary value (large, prominent)
|
|
30
|
+
- Comparison/trend (vs. previous period)
|
|
31
|
+
- Sparkline (optional, shows trajectory)
|
|
32
|
+
|
|
33
|
+
**Layout**:
|
|
34
|
+
```
|
|
35
|
+
┌──────────────────────┐
|
|
36
|
+
│ Total Revenue │ ← Label
|
|
37
|
+
│ $1,247,392 │ ← Primary value (largest)
|
|
38
|
+
│ ↑ 12.4% vs last mo │ ← Comparison (green/red)
|
|
39
|
+
│ ▁▂▃▂▄▅▆▅▇ │ ← Sparkline (optional)
|
|
40
|
+
└──────────────────────┘
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Dashboard Best Practices
|
|
44
|
+
- **Above the fold**: Most important metrics visible without scrolling
|
|
45
|
+
- **Progressive disclosure**: Summary → Detail on drill-down
|
|
46
|
+
- **Consistent time periods**: All metrics should reference same period
|
|
47
|
+
- **Comparison context**: Raw numbers need benchmarks to be meaningful
|
|
48
|
+
- **Actionable insights**: Dashboards should answer "what should I do?"
|
|
49
|
+
|
|
50
|
+
## Data Tables
|
|
51
|
+
|
|
52
|
+
### Table Anatomy
|
|
53
|
+
```
|
|
54
|
+
┌─────┬──────────────┬────────────┬──────────┬─────────┬────────┐
|
|
55
|
+
│ ☐ │ Name ↕ │ Status │ Created │ Value │ Actions│
|
|
56
|
+
├─────┼──────────────┼────────────┼──────────┼─────────┼────────┤
|
|
57
|
+
│ ☐ │ Vessel Alpha │ ● Active │ Jan 15 │ $45,200 │ ••• ▼ │
|
|
58
|
+
│ ☐ │ Vessel Beta │ ○ Pending │ Jan 12 │ $38,100 │ ••• ▼ │
|
|
59
|
+
│ ☑ │ Vessel Gamma │ ● Active │ Jan 10 │ $52,800 │ ••• ▼ │
|
|
60
|
+
└─────┴──────────────┴────────────┴──────────┴─────────┴────────┘
|
|
61
|
+
│ │ │ │ │
|
|
62
|
+
Multi-select Sortable Status Formatted Actions
|
|
63
|
+
indicator badges numbers menu
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Table Features Checklist
|
|
67
|
+
- [ ] **Sorting**: Click header to sort, show direction indicator
|
|
68
|
+
- [ ] **Selection**: Checkbox column, "select all" in header
|
|
69
|
+
- [ ] **Bulk actions**: Appear when items selected
|
|
70
|
+
- [ ] **Pagination**: Or infinite scroll with virtualization
|
|
71
|
+
- [ ] **Column resizing**: Drag handles between columns
|
|
72
|
+
- [ ] **Column visibility**: Toggle columns on/off
|
|
73
|
+
- [ ] **Row actions**: Hover to reveal, or persistent "..." menu
|
|
74
|
+
- [ ] **Empty state**: Helpful message when no data
|
|
75
|
+
- [ ] **Loading state**: Skeleton rows, not spinner
|
|
76
|
+
|
|
77
|
+
### Table Density Options
|
|
78
|
+
```
|
|
79
|
+
Compact: 32px row height — Maximum data, power users
|
|
80
|
+
Default: 40px row height — Balanced
|
|
81
|
+
Comfortable: 48px row height — Easier scanning, touch-friendly
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Number Formatting in Tables
|
|
85
|
+
- Right-align numeric columns
|
|
86
|
+
- Use consistent decimal places
|
|
87
|
+
- Add thousand separators (1,234,567)
|
|
88
|
+
- Abbreviate large numbers (1.2M, 45K)
|
|
89
|
+
- Currency symbols once (in header) or per cell (if mixed)
|
|
90
|
+
|
|
91
|
+
## Filters & Search
|
|
92
|
+
|
|
93
|
+
### Filter Bar Pattern
|
|
94
|
+
```
|
|
95
|
+
┌───────────────────────────────────────────────────────────────┐
|
|
96
|
+
│ [🔍 Search... ] [Status ▼] [Date Range ▼] [+ Filter] │
|
|
97
|
+
├───────────────────────────────────────────────────────────────┤
|
|
98
|
+
│ Active filters: [Status: Active ×] [Date: Last 7 days ×] │
|
|
99
|
+
└───────────────────────────────────────────────────────────────┘
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Filter Types
|
|
103
|
+
- **Search**: Free text, searches across multiple fields
|
|
104
|
+
- **Dropdown select**: Single value from predefined list
|
|
105
|
+
- **Multi-select**: Multiple values (checkboxes in dropdown)
|
|
106
|
+
- **Date range**: Preset ranges + custom picker
|
|
107
|
+
- **Numeric range**: Min/max inputs or slider
|
|
108
|
+
- **Boolean toggle**: On/off states
|
|
109
|
+
|
|
110
|
+
### Filter UX Best Practices
|
|
111
|
+
- Show active filters as removable chips
|
|
112
|
+
- "Clear all" option when filters applied
|
|
113
|
+
- Persist filters in URL (shareable, bookmarkable)
|
|
114
|
+
- Show result count updating as filters change
|
|
115
|
+
- Remember recent/saved filter combinations
|
|
116
|
+
|
|
117
|
+
### Advanced Filter Builder
|
|
118
|
+
For complex queries:
|
|
119
|
+
```
|
|
120
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
121
|
+
│ Where ALL of the following match: │
|
|
122
|
+
│ ┌─────────────┬────────────┬─────────────────┬───┐ │
|
|
123
|
+
│ │ Status │ is │ Active │ × │ │
|
|
124
|
+
│ ├─────────────┼────────────┼─────────────────┼───┤ │
|
|
125
|
+
│ │ Created │ is after │ Jan 1, 2025 │ × │ │
|
|
126
|
+
│ ├─────────────┼────────────┼─────────────────┼───┤ │
|
|
127
|
+
│ │ Value │ is greater │ $10,000 │ × │ │
|
|
128
|
+
│ └─────────────┴────────────┴─────────────────┴───┘ │
|
|
129
|
+
│ [+ Add condition] │
|
|
130
|
+
└─────────────────────────────────────────────────────────────┘
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Complex Forms
|
|
134
|
+
|
|
135
|
+
### Multi-Step Forms
|
|
136
|
+
```
|
|
137
|
+
Step indicator:
|
|
138
|
+
──●────────●────────○────────○──
|
|
139
|
+
1 2 3 4
|
|
140
|
+
Details Settings Review Complete
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- Show progress (steps completed / total)
|
|
144
|
+
- Allow back navigation without data loss
|
|
145
|
+
- Validate each step before proceeding
|
|
146
|
+
- Summary/review step before final submission
|
|
147
|
+
|
|
148
|
+
### Form Section Organization
|
|
149
|
+
```
|
|
150
|
+
┌─────────────────────────────────────┐
|
|
151
|
+
│ Section Header │
|
|
152
|
+
│ Brief description of this section │
|
|
153
|
+
├─────────────────────────────────────┤
|
|
154
|
+
│ │
|
|
155
|
+
│ Label Label │
|
|
156
|
+
│ [Input field] [Input field] │
|
|
157
|
+
│ │
|
|
158
|
+
│ Label │
|
|
159
|
+
│ [Wider input field ] │
|
|
160
|
+
│ │
|
|
161
|
+
└─────────────────────────────────────┘
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Inline Editing
|
|
165
|
+
For settings and configuration:
|
|
166
|
+
```
|
|
167
|
+
Read mode: Edit mode:
|
|
168
|
+
┌────────────────────────┐ ┌────────────────────────┐
|
|
169
|
+
│ Company Name │ │ Company Name │
|
|
170
|
+
│ Acme Corp [Edit]│ │ [Acme Corp ] ✓ ✗│
|
|
171
|
+
└────────────────────────┘ └────────────────────────┘
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Navigation Patterns
|
|
175
|
+
|
|
176
|
+
### Sidebar Navigation
|
|
177
|
+
```
|
|
178
|
+
┌──────────────┬────────────────────────────────────────┐
|
|
179
|
+
│ [Logo] │ │
|
|
180
|
+
│ │ │
|
|
181
|
+
│ ● Dashboard │ Main Content Area │
|
|
182
|
+
│ ○ Vessels │ │
|
|
183
|
+
│ ○ Analytics │ │
|
|
184
|
+
│ ○ Reports │ │
|
|
185
|
+
│ │ │
|
|
186
|
+
│ ───────── │ │
|
|
187
|
+
│ ○ Settings │ │
|
|
188
|
+
│ ○ Help │ │
|
|
189
|
+
│ │ │
|
|
190
|
+
│ [User ▼] │ │
|
|
191
|
+
└──────────────┴────────────────────────────────────────┘
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Collapsible Sidebar
|
|
195
|
+
- Expand: Full labels + icons
|
|
196
|
+
- Collapse: Icons only (with tooltips)
|
|
197
|
+
- Persist user preference
|
|
198
|
+
- Keyboard shortcut to toggle
|
|
199
|
+
|
|
200
|
+
### Tab Navigation (for sub-sections)
|
|
201
|
+
```
|
|
202
|
+
┌─────────────────────────────────────────────────────┐
|
|
203
|
+
│ Vessel Detail │
|
|
204
|
+
├──────────┬───────────┬────────────┬─────────────────┤
|
|
205
|
+
│ Overview │ Voyages │ Documents │ Activity │
|
|
206
|
+
├──────────┴───────────┴────────────┴─────────────────┤
|
|
207
|
+
│ │
|
|
208
|
+
│ Tab content here │
|
|
209
|
+
│ │
|
|
210
|
+
└─────────────────────────────────────────────────────┘
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Detail Views
|
|
214
|
+
|
|
215
|
+
### Master-Detail Pattern
|
|
216
|
+
```
|
|
217
|
+
┌──────────────────────┬──────────────────────────────────┐
|
|
218
|
+
│ List / Table │ Detail Panel │
|
|
219
|
+
│ │ │
|
|
220
|
+
│ ○ Item 1 │ Item 2 Details │
|
|
221
|
+
│ ● Item 2 ←selected │ ───────────── │
|
|
222
|
+
│ ○ Item 3 │ [All properties and actions] │
|
|
223
|
+
│ ○ Item 4 │ │
|
|
224
|
+
│ │ │
|
|
225
|
+
└──────────────────────┴──────────────────────────────────┘
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Side Panel / Drawer
|
|
229
|
+
- Slides in from right (typically)
|
|
230
|
+
- Width: 400-600px for forms, up to 50% for complex detail
|
|
231
|
+
- Overlay with backdrop, or push content
|
|
232
|
+
- Close on Escape, click outside, or explicit close button
|
|
233
|
+
|
|
234
|
+
### Full-Page Detail
|
|
235
|
+
Use when:
|
|
236
|
+
- Detail view is primary workspace
|
|
237
|
+
- Many tabs/sections of information
|
|
238
|
+
- Users spend significant time on single record
|
|
239
|
+
|
|
240
|
+
## Bulk Operations
|
|
241
|
+
|
|
242
|
+
### Selection + Action Bar
|
|
243
|
+
```
|
|
244
|
+
When items selected, show action bar:
|
|
245
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
246
|
+
│ ☑ 3 items selected [Archive] [Delete] [More ▼] [× Clear]│
|
|
247
|
+
└─────────────────────────────────────────────────────────────┘
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Bulk Action Best Practices
|
|
251
|
+
- Show count of selected items
|
|
252
|
+
- Disable invalid actions for selection
|
|
253
|
+
- Confirmation for destructive bulk actions
|
|
254
|
+
- Progress indicator for long operations
|
|
255
|
+
- Allow cancel mid-operation when possible
|
|
256
|
+
- Report results (success/failures) after completion
|
|
257
|
+
|
|
258
|
+
## Real-Time Updates
|
|
259
|
+
|
|
260
|
+
### Live Data Indicators
|
|
261
|
+
```
|
|
262
|
+
● Live — Green dot, real-time updates active
|
|
263
|
+
◐ Syncing — Animated, sync in progress
|
|
264
|
+
○ Paused — Gray, updates paused
|
|
265
|
+
⚠ Stale — Warning, data may be outdated
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Update Patterns
|
|
269
|
+
- **Silent updates**: Data refreshes without visual indication
|
|
270
|
+
- **Highlight updates**: Flash/highlight changed values briefly
|
|
271
|
+
- **Toast notification**: "3 new items available" [Refresh]
|
|
272
|
+
- **Inline indicator**: Show "Updated 2s ago" timestamp
|
|
273
|
+
|
|
274
|
+
### Handling Conflicts
|
|
275
|
+
When data changes while user is editing:
|
|
276
|
+
- Show notification: "This item was updated by another user"
|
|
277
|
+
- Options: [Keep my changes] [Load their changes] [Compare]
|
|
278
|
+
|
|
279
|
+
## Productivity Patterns
|
|
280
|
+
|
|
281
|
+
### Command Palette (Cmd+K)
|
|
282
|
+
Centrally accessed modal for navigation and actions.
|
|
283
|
+
- **Trigger**: `Cmd+K` / `Ctrl+K`.
|
|
284
|
+
- **Search Mode**: Find pages, vessels, data.
|
|
285
|
+
- **Action Mode**: "Create new...", "Change status to...", "Switch tenant".
|
|
286
|
+
- **Anatomy**:
|
|
287
|
+
- Input field (autofocused)
|
|
288
|
+
- Recent items list
|
|
289
|
+
- Results grouped by type (Navigation, Actions, Data)
|
|
290
|
+
- Keyboard navigation hints (↑ ↓ ↵)
|
|
291
|
+
|
|
292
|
+
### Keyboard First Design
|
|
293
|
+
Power users rely on keyboard efficiency.
|
|
294
|
+
- **Global Shortcuts**:
|
|
295
|
+
- `/`: Focus search
|
|
296
|
+
- `?`: Show keyboard shortcuts dialog
|
|
297
|
+
- `Esc`: Close modal/clear selection
|
|
298
|
+
- `j` / `k`: Next/previous item (Gmail style)
|
|
299
|
+
- **Focus Management**:
|
|
300
|
+
- Focus trapping in modals.
|
|
301
|
+
- Logical tab order (top-left to bottom-right).
|
|
302
|
+
- Visual focus indicators at all times.
|
|
303
|
+
|
|
304
|
+
## Empty States
|
|
305
|
+
|
|
306
|
+
### First Use (Onboarding)
|
|
307
|
+
- **Goal**: Teach value and drive first action.
|
|
308
|
+
- **Content**:
|
|
309
|
+
- Illustration (welcoming)
|
|
310
|
+
- "No [items] yet"
|
|
311
|
+
- Description of benefit
|
|
312
|
+
- [Primary Action Button]
|
|
313
|
+
|
|
314
|
+
### No Results (Search/Filter)
|
|
315
|
+
- **Goal**: Help user recover.
|
|
316
|
+
- **Content**:
|
|
317
|
+
- "No results found for 'xyz'"
|
|
318
|
+
- "Try adjusting filters or search term"
|
|
319
|
+
- [Clear Filters] button
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Data Visualization
|
|
2
|
+
|
|
3
|
+
Charts, graphs, and maritime-specific display patterns.
|
|
4
|
+
|
|
5
|
+
## Chart Selection Guide
|
|
6
|
+
|
|
7
|
+
### Choose Based on Data Relationship
|
|
8
|
+
|
|
9
|
+
| Relationship | Best Chart Types |
|
|
10
|
+
|--------------|------------------|
|
|
11
|
+
| **Comparison** (between categories) | Bar chart, grouped bar, radar |
|
|
12
|
+
| **Trend** (over time) | Line chart, area chart |
|
|
13
|
+
| **Part-to-whole** | Pie chart (≤5 segments), stacked bar, treemap |
|
|
14
|
+
| **Distribution** | Histogram, box plot, violin plot |
|
|
15
|
+
| **Correlation** | Scatter plot, bubble chart |
|
|
16
|
+
| **Geographic** | Map, choropleth, connection map |
|
|
17
|
+
| **Flow/Process** | Sankey, funnel |
|
|
18
|
+
| **Hierarchy** | Treemap, sunburst |
|
|
19
|
+
|
|
20
|
+
### Common Chart Patterns
|
|
21
|
+
|
|
22
|
+
**Line Chart** — Time series, trends
|
|
23
|
+
```
|
|
24
|
+
│ ╭─────╮
|
|
25
|
+
│ ╱ ╲ ╱
|
|
26
|
+
│ ╱ ╲──╱
|
|
27
|
+
│──╱
|
|
28
|
+
└────────────────────
|
|
29
|
+
Jan Feb Mar Apr
|
|
30
|
+
```
|
|
31
|
+
- Use for continuous data over time
|
|
32
|
+
- Limit to 5-7 lines before it gets cluttered
|
|
33
|
+
- Zero baseline not required (but be transparent)
|
|
34
|
+
|
|
35
|
+
**Bar Chart** — Comparison across categories
|
|
36
|
+
```
|
|
37
|
+
│ ████████████████ 87
|
|
38
|
+
│ ██████████████ 76
|
|
39
|
+
│ ████████████ 65
|
|
40
|
+
│ ████████ 43
|
|
41
|
+
└─────────────────────
|
|
42
|
+
```
|
|
43
|
+
- Horizontal bars for long labels
|
|
44
|
+
- Start at zero (truncated bars mislead)
|
|
45
|
+
- Order by value (unless natural order exists)
|
|
46
|
+
|
|
47
|
+
**Area Chart** — Volume over time, stacked composition
|
|
48
|
+
- Use stacked area for part-to-whole over time
|
|
49
|
+
- Ensure colors have enough contrast
|
|
50
|
+
- Consider 100% stacked for proportions
|
|
51
|
+
|
|
52
|
+
**Scatter Plot** — Correlation, distribution of two variables
|
|
53
|
+
- Use color/size for third dimension
|
|
54
|
+
- Add trend line to show correlation
|
|
55
|
+
- Handle overplotting (transparency, jitter)
|
|
56
|
+
|
|
57
|
+
## Chart Design Best Practices
|
|
58
|
+
|
|
59
|
+
### Visual Hierarchy
|
|
60
|
+
1. **Data** — Most prominent (highest contrast)
|
|
61
|
+
2. **Labels** — Supporting (medium contrast)
|
|
62
|
+
3. **Grid/axes** — Background (low contrast, subtle)
|
|
63
|
+
|
|
64
|
+
### Color Usage
|
|
65
|
+
```
|
|
66
|
+
Sequential: Light → Dark (for magnitude)
|
|
67
|
+
░▒▓█
|
|
68
|
+
|
|
69
|
+
Diverging: Color ← Neutral → Color (for +/-)
|
|
70
|
+
█▓▒░ ░▒▓█
|
|
71
|
+
|
|
72
|
+
Categorical: Distinct, accessible palette
|
|
73
|
+
█ █ █ █ █ (max 5-7 colors)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Accessible Palettes
|
|
77
|
+
- **Colorblind Safe**: Avoid Red/Green acting as the only differentiator.
|
|
78
|
+
- **Patterns**: Use dashed lines or textures for series differentiation.
|
|
79
|
+
- **Safe Pairs**: Blue/Orange, Purple/Green.
|
|
80
|
+
- **High Contrast**: Support system preference (thicker borders, distinct fills).
|
|
81
|
+
|
|
82
|
+
### Labeling
|
|
83
|
+
- **Title**: What is this showing? (not just "Chart")
|
|
84
|
+
- **Axis labels**: Include units
|
|
85
|
+
- **Data labels**: Directly on chart when possible (reduces eye movement)
|
|
86
|
+
- **Legend**: Near relevant data, avoid separate legend when possible
|
|
87
|
+
|
|
88
|
+
### Reduce Chart Junk
|
|
89
|
+
Remove:
|
|
90
|
+
- 3D effects (distort perception)
|
|
91
|
+
- Decorative gridlines
|
|
92
|
+
- Unnecessary borders
|
|
93
|
+
- Redundant legends
|
|
94
|
+
- Background colors (unless functional)
|
|
95
|
+
|
|
96
|
+
### Responsiveness
|
|
97
|
+
- Simplify for small screens (fewer data points, larger touch targets)
|
|
98
|
+
- Provide summary stats when chart can't fit
|
|
99
|
+
- Allow expand to full screen
|
|
100
|
+
- Horizontal scroll for time series on mobile
|
|
101
|
+
|
|
102
|
+
## Real-Time Data Visualization
|
|
103
|
+
|
|
104
|
+
### Streaming Data Patterns
|
|
105
|
+
|
|
106
|
+
**Live Line Chart**
|
|
107
|
+
```
|
|
108
|
+
Window approach:
|
|
109
|
+
│ ╱╲ ╱╲ ╱╲ ╱╲
|
|
110
|
+
│╱╲╱ ╲╱ ╲╱ ╲╱ ╲
|
|
111
|
+
└──────────────────────→ time
|
|
112
|
+
[← 5 minutes →] slides right
|
|
113
|
+
```
|
|
114
|
+
- Show rolling time window (last 5 min, last hour)
|
|
115
|
+
- Smooth transitions for new data points
|
|
116
|
+
- Option to pause/resume updates
|
|
117
|
+
- Show "live" indicator
|
|
118
|
+
|
|
119
|
+
**Real-Time Gauges**
|
|
120
|
+
```
|
|
121
|
+
╭──────╮
|
|
122
|
+
╱ ▲ ╲
|
|
123
|
+
│ │ │ Current: 72%
|
|
124
|
+
│ ╲ │ ╱ │ Target: 80%
|
|
125
|
+
╲ ─┴─ ╱
|
|
126
|
+
╰──────╯
|
|
127
|
+
0 100
|
|
128
|
+
```
|
|
129
|
+
- Use for single KPIs with known range
|
|
130
|
+
- Show target/threshold lines
|
|
131
|
+
- Color changes at thresholds
|
|
132
|
+
|
|
133
|
+
### Update Animation
|
|
134
|
+
- Smooth transitions (300-500ms)
|
|
135
|
+
- Highlight new data briefly
|
|
136
|
+
- Don't animate if updates are too frequent (>1/second)
|
|
137
|
+
|
|
138
|
+
## Maritime-Specific Visualizations
|
|
139
|
+
|
|
140
|
+
### Vessel Position Map
|
|
141
|
+
```
|
|
142
|
+
┌─────────────────────────────────────┐
|
|
143
|
+
│ ▲ Vessel A │
|
|
144
|
+
│ ○ Port ╱ (12 kts, N) │
|
|
145
|
+
│ ╱ │
|
|
146
|
+
│ ╱ │
|
|
147
|
+
│ - - - - ▲ Vessel B (anchored) │
|
|
148
|
+
│ (predicted path) │
|
|
149
|
+
│ │
|
|
150
|
+
│ ○ Port │
|
|
151
|
+
└─────────────────────────────────────┘
|
|
152
|
+
|
|
153
|
+
Legend:
|
|
154
|
+
▲ Vessel (arrow = heading)
|
|
155
|
+
● AIS position
|
|
156
|
+
○ Port
|
|
157
|
+
─ Historical track
|
|
158
|
+
- - Predicted path
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Map Features**:
|
|
162
|
+
- Vessel icons showing heading direction
|
|
163
|
+
- Historical track (past 24h, configurable)
|
|
164
|
+
- Predicted path based on speed/heading
|
|
165
|
+
- Port markers with names
|
|
166
|
+
- Vessel clusters at zoom levels
|
|
167
|
+
- Click for vessel details popup
|
|
168
|
+
|
|
169
|
+
### Voyage Timeline
|
|
170
|
+
```
|
|
171
|
+
Load Port Discharge Port
|
|
172
|
+
○─────────────────●
|
|
173
|
+
│ │
|
|
174
|
+
▼ ▼
|
|
175
|
+
[Rotterdam] [Singapore]
|
|
176
|
+
Jan 5 Jan 28
|
|
177
|
+
|
|
178
|
+
──●────○────○────○────●──────────→
|
|
179
|
+
Load Canal Waiting Discharge Next
|
|
180
|
+
3d 1d 2d 4d voyage
|
|
181
|
+
|
|
182
|
+
Status: ● Complete ○ In Progress ◌ Planned
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Fleet Overview Grid
|
|
186
|
+
```
|
|
187
|
+
┌────────────┬────────────┬────────────┐
|
|
188
|
+
│ ▲ ALPHA │ ▲ BETA │ ⚓ GAMMA │
|
|
189
|
+
│ En route │ En route │ At port │
|
|
190
|
+
│ → Singapore│ → Dubai │ Rotterdam │
|
|
191
|
+
│ ETA: 3d │ ETA: 7d │ Dep: 2d │
|
|
192
|
+
├────────────┼────────────┼────────────┤
|
|
193
|
+
│ ⚓ DELTA │ ▲ EPSILON │ ⚠ ZETA │
|
|
194
|
+
│ At port │ En route │ Delayed │
|
|
195
|
+
│ Houston │ → Santos │ Weather │
|
|
196
|
+
│ Dep: 1d │ ETA: 12d │ +2d │
|
|
197
|
+
└────────────┴────────────┴────────────┘
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Freight Rate Charts
|
|
201
|
+
```
|
|
202
|
+
Baltic Index (Time Series)
|
|
203
|
+
│2500
|
|
204
|
+
│ ╭──╮
|
|
205
|
+
│ ╱ ╲ ╭──
|
|
206
|
+
│ ╱ ╲╱
|
|
207
|
+
│1500
|
|
208
|
+
└────────────────────────
|
|
209
|
+
Jan Feb Mar Apr May
|
|
210
|
+
|
|
211
|
+
Annotations:
|
|
212
|
+
↑ Market event markers
|
|
213
|
+
─ Moving average (30-day)
|
|
214
|
+
░ Confidence interval / range
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Port Congestion Visualization
|
|
218
|
+
```
|
|
219
|
+
Port Rotterdam
|
|
220
|
+
┌─────────────────────────────────────┐
|
|
221
|
+
│ Vessels waiting: 23 (+5 vs avg) │
|
|
222
|
+
│ Avg wait time: 2.3 days │
|
|
223
|
+
├─────────────────────────────────────┤
|
|
224
|
+
│ Wait time distribution: │
|
|
225
|
+
│ <1d ████████░░░░░░░ 12 │
|
|
226
|
+
│ 1-3d ██████████░░░░░ 8 │
|
|
227
|
+
│ >3d ███░░░░░░░░░░░░ 3 │
|
|
228
|
+
└─────────────────────────────────────┘
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Distance/Duration Matrix
|
|
232
|
+
```
|
|
233
|
+
Rotterdam Singapore Houston
|
|
234
|
+
Rotterdam - 28d 14d
|
|
235
|
+
Singapore 28d - 35d
|
|
236
|
+
Houston 14d 35d -
|
|
237
|
+
|
|
238
|
+
Visual encoding:
|
|
239
|
+
░ Short ▒ Medium ▓ Long
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Vessel Performance Dashboard
|
|
243
|
+
```
|
|
244
|
+
┌──────────────────────────────────────────────────┐
|
|
245
|
+
│ MV Pacific Voyager │
|
|
246
|
+
├─────────────┬─────────────┬──────────────────────┤
|
|
247
|
+
│ Speed │ Fuel │ Efficiency │
|
|
248
|
+
│ 12.4 kts │ 45 MT/day │ 92% │
|
|
249
|
+
│ ↓ 0.2 │ ↑ 2% │ ↓ 3% │
|
|
250
|
+
├─────────────┴─────────────┴──────────────────────┤
|
|
251
|
+
│ Speed vs Consumption (Scatter) │
|
|
252
|
+
│ • │
|
|
253
|
+
│ • • • Optimal zone │
|
|
254
|
+
│ • ● • ┌───────────┐ │
|
|
255
|
+
│ • • │ │ Current: ● │
|
|
256
|
+
│ └───────────┘ │
|
|
257
|
+
└──────────────────────────────────────────────────┘
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Interactive Features
|
|
261
|
+
|
|
262
|
+
### Tooltips
|
|
263
|
+
```
|
|
264
|
+
Hover on data point:
|
|
265
|
+
┌──────────────────────┐
|
|
266
|
+
│ January 2025 │
|
|
267
|
+
│ Revenue: $1,234,567 │
|
|
268
|
+
│ vs LY: +12.4% │
|
|
269
|
+
│ [View details →] │
|
|
270
|
+
└──────────────────────┘
|
|
271
|
+
```
|
|
272
|
+
- Show on hover (desktop), tap (mobile)
|
|
273
|
+
- Formatted values with context
|
|
274
|
+
- Link to drill-down when available
|
|
275
|
+
|
|
276
|
+
### Zoom & Pan
|
|
277
|
+
- Click-drag to zoom to selection
|
|
278
|
+
- Mousewheel for zoom in/out
|
|
279
|
+
- Reset zoom button always visible
|
|
280
|
+
- Mini-map for context in large datasets
|
|
281
|
+
|
|
282
|
+
### Cross-Filtering
|
|
283
|
+
When clicking a chart element, filter other charts:
|
|
284
|
+
```
|
|
285
|
+
Click "January" in bar chart →
|
|
286
|
+
Line chart highlights January
|
|
287
|
+
Table filters to January rows
|
|
288
|
+
Map shows January positions
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Advanced Interactions
|
|
292
|
+
- **Sticky Tooltips**: Tooltip follows mouse vs. snaps to nearest point.
|
|
293
|
+
- **Drill-Down**:
|
|
294
|
+
- Click bar → Filter dashboard → Show detailed table.
|
|
295
|
+
- Maintains context (don't lose where you came from).
|
|
296
|
+
- **Brushing**: Drag to select range on one chart → highlights on others.
|
|
297
|
+
|
|
298
|
+
## Accessibility in Charts
|
|
299
|
+
|
|
300
|
+
- Don't rely on color alone (use patterns, labels)
|
|
301
|
+
- Provide data table alternative
|
|
302
|
+
- Keyboard navigation for interactive elements
|
|
303
|
+
- Screen reader descriptions for charts
|
|
304
|
+
- Sufficient contrast in all visual elements
|