@turquoisehealth/pit-viper 2.179.1-dev.0 → 2.181.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/claude-plugin/.claude-plugin/plugin.json +8 -2
- package/claude-plugin/.mcp.json +8 -0
- package/claude-plugin/CLAUDE.md +71 -250
- package/claude-plugin/README.md +123 -69
- package/claude-plugin/skills/pit-viper/SKILL.md +180 -0
- package/claude-plugin/skills/pit-viper/references/design-language.md +80 -0
- package/claude-plugin/skills/pit-viper/references/design-rules.md +254 -0
- package/claude-plugin/skills/pit-viper/references/html-patterns.md +451 -0
- package/claude-plugin/skills/pit-viper/references/layout-patterns.md +359 -0
- package/claude-plugin/skills/pit-viper/references/patterns-core.md +97 -0
- package/claude-plugin/skills/pit-viper/references/theme-guide.md +149 -0
- package/claude-plugin/skills/pit-viper/references/vue-guidelines.md +513 -0
- package/package.json +3 -3
- package/pv-components/dist/stats/vue/base/stats.html +1 -1
- package/pv-components/dist/stats/vue/visualizations/stats.html +1 -1
- package/pv-components/dist/stats/web/pv-menu-stats.html +1 -1
- package/pv-components/dist/stats/web/pv-multi-select-button-stats.html +1 -1
- package/pv-components/dist/stats/web/pv-query-builder-input-stats.html +1 -1
- package/pv-components/dist/stats/web/pv-select-button-stats.html +1 -1
- package/pv-components/dist/vue/base/pv-components-base.mjs +2 -2
- package/pv-components/dist/vue/base/pv-components-base.mjs.map +1 -1
- package/pv-components/dist/vue/visualizations/components/tables/PvDataTable/filters/filterHelpers.d.ts +1 -1
- package/pv-components/dist/vue/visualizations/pv-components-visualizations.mjs +5 -5
- package/pv-components/dist/vue/visualizations/pv-components-visualizations.mjs.map +1 -1
- package/pv-components/dist/web/components/pv-menu/pv-menu.js +2 -2
- package/pv-components/dist/web/components/pv-multi-select-button/pv-multi-select-button.js +2 -2
- package/pv-components/dist/web/components/pv-query-builder-input/pv-query-builder-input.js +2 -2
- package/pv-components/dist/web/components/pv-select-button/pv-select-button.js +2 -2
- package/pv-components/dist/web/pv-components.iife.js +1 -1
- package/pv-components/dist/web/pv-components.iife.js.map +1 -1
- package/claude-plugin/skills/audit/SKILL.md +0 -125
- package/claude-plugin/skills/create/SKILL.md +0 -389
- package/claude-plugin/skills/resolve/SKILL.md +0 -142
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pit-viper",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Pit Viper design system tooling for Claude Code"
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Pit Viper design system tooling for Claude Code",
|
|
5
|
+
"marketplace": {
|
|
6
|
+
"type": "github",
|
|
7
|
+
"owner": "turquoisehealth",
|
|
8
|
+
"repo": "pit-viper",
|
|
9
|
+
"path": "claude-plugin"
|
|
10
|
+
}
|
|
5
11
|
}
|
package/claude-plugin/CLAUDE.md
CHANGED
|
@@ -1,286 +1,107 @@
|
|
|
1
|
-
# Pit Viper Design System
|
|
1
|
+
# Pit Viper Design System
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Pit Viper is Turquoise Health's design system. Use it for all frontend work.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
- **Storybook:** https://pit-viper-storybook.netlify.app
|
|
8
|
-
- **Icons:** https://pitviper.turquoise.health/visual-style/icons/
|
|
9
|
-
|
|
10
|
-
### CSS Themes
|
|
11
|
-
|
|
12
|
-
For complete utility class definitions, fetch the appropriate theme:
|
|
13
|
-
|
|
14
|
-
| Theme | URL | Usage |
|
|
15
|
-
|-------|-----|-------|
|
|
16
|
-
| **Platform** (default) | https://pitviper.turquoise.health/assets/css/pit-viper-v2.css | Internal platform apps |
|
|
17
|
-
| **Consumer** | https://pitviper.turquoise.health/assets/css/pit-viper-consumer.css | Marketing / consumer-facing pages |
|
|
18
|
-
|
|
19
|
-
Do not use the `-scoped` variant.
|
|
20
|
-
|
|
21
|
-
## Overview
|
|
22
|
-
|
|
23
|
-
Pit Viper is Turquoise Health's custom design system. It exists as:
|
|
24
|
-
|
|
25
|
-
1. **CSS framework** — utility classes for spacing, typography, color, layout (`pv-*` prefix)
|
|
26
|
-
2. **Vue component library** — `@turquoisehealth/pit-viper`, providing 58+ components
|
|
27
|
-
|
|
28
|
-
**Package:** `@turquoisehealth/pit-viper` in `node_modules/`
|
|
29
|
-
**Font:** Inter (400, 500, 600)
|
|
30
|
-
**Type scale:** Compact (body-md = 0.75rem / 12px)
|
|
31
|
-
|
|
32
|
-
## Color Palette
|
|
33
|
-
|
|
34
|
-
### Brand Colors
|
|
35
|
-
| Token | Hex | Usage |
|
|
36
|
-
|---|---|---|
|
|
37
|
-
| Primary Brand | `#176F6F` | Interactive text, links, primary buttons, borders |
|
|
38
|
-
| Secondary Brand | `#02363D` | Body text, secondary buttons, dark surfaces |
|
|
39
|
-
| Brand Accent Light | `#A8E6E1` | Inverse buttons, AI button, tertiary buttons |
|
|
40
|
-
| Brand Accent Bg | `#F3FCFB` | Brand accent backgrounds |
|
|
41
|
-
| Brand Variant | `#16696D` | Visited links, tag primary, status success |
|
|
42
|
-
| Brand Gradient | `linear-gradient(109deg, #176F6F 0%, #02363D 100%)` | Brand surface gradient |
|
|
43
|
-
|
|
44
|
-
### Semantic Colors
|
|
45
|
-
| Token | Hex | Usage |
|
|
46
|
-
|---|---|---|
|
|
47
|
-
| Error / Critical | `#DA1E28` | Error text, destructive buttons |
|
|
48
|
-
| Error Hover | `#A2191F` | Error border, destructive hover |
|
|
49
|
-
| Warning | `#896000` | Warning text |
|
|
50
|
-
| Success | `#0E6027` | Success text |
|
|
51
|
-
| Success Status | `#218C88` | Checked states, success status dots |
|
|
52
|
-
| Yellow Status | `#E5A000` | Status indicators |
|
|
53
|
-
|
|
54
|
-
### Text Colors
|
|
55
|
-
| Class | Hex | Usage |
|
|
56
|
-
|---|---|---|
|
|
57
|
-
| `.pv-text-default` | `#02363D` | Primary body text |
|
|
58
|
-
| `.pv-text-subdued` | `#6E7784` | Secondary/helper text |
|
|
59
|
-
| `.pv-text-tertiary` | `#6E8081` | Tertiary text |
|
|
60
|
-
| `.pv-text-inverse` | `#FFFFFF` | Text on dark surfaces |
|
|
61
|
-
| `.pv-text-brand` | `#176F6F` | Brand-colored text, links |
|
|
62
|
-
| `.pv-text-critical` | `#DA1E28` | Error messages |
|
|
63
|
-
| `.pv-text-warning` | `#896000` | Warning text |
|
|
64
|
-
| `.pv-text-success` | `#0E6027` | Success text |
|
|
65
|
-
|
|
66
|
-
### Surface Colors
|
|
67
|
-
| Class | Hex | Usage |
|
|
68
|
-
|---|---|---|
|
|
69
|
-
| `.pv-surface` | `#FFFFFF` | Default background |
|
|
70
|
-
| `.pv-surface-accent` | `#F8F8FA` | Subtle alternate backgrounds |
|
|
71
|
-
| `.pv-surface-brand` | `#02363D` | Dark brand surfaces |
|
|
72
|
-
| `.pv-surface-brand-inverse` | `#176F6F` | Teal brand surfaces |
|
|
73
|
-
| `.pv-surface-highlight` | `#E4F8F6` | Highlight/selection backgrounds |
|
|
74
|
-
| `.pv-surface-brand-accent` | `#F3FCFB` | Light teal backgrounds |
|
|
75
|
-
| `.pv-surface-inverse` | `#242626` | Dark mode surfaces |
|
|
76
|
-
| `.pv-surface-warning` | `#FAECCC` | Warning backgrounds |
|
|
77
|
-
| `.pv-surface-success` | `#E8FDEA` | Success backgrounds |
|
|
78
|
-
| `.pv-surface-critical` | `#FFF1F1` | Error backgrounds |
|
|
79
|
-
|
|
80
|
-
### Border Colors
|
|
81
|
-
| Token | Hex | Usage |
|
|
82
|
-
|---|---|---|
|
|
83
|
-
| Default | `#DCDFE4` | Standard borders |
|
|
84
|
-
| Accent | `#176F6F` | Active/focus borders |
|
|
85
|
-
| Warning | `#EFC666` | Warning borders |
|
|
86
|
-
| Critical | `#A2191F` | Error borders |
|
|
87
|
-
| Brand | `#02363D` | Brand borders |
|
|
88
|
-
|
|
89
|
-
### Data Visualization Colors (in order)
|
|
90
|
-
1. `#36C5BA` 2. `#16696D` 3. `#FF7A4E` 4. `#C97AEB` 5. `#F2AD0D` 6. `#7C8AF4` 7. `#95C54C`
|
|
5
|
+
## Philosophy
|
|
91
6
|
|
|
92
|
-
|
|
7
|
+
Pit Viper enforces visual consistency across 50+ Turquoise Health apps by:
|
|
93
8
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| `.pv-heading-1` | 1.25rem (20px) | 1.2 | 600 |
|
|
98
|
-
| `.pv-heading-2` | 1rem (16px) | 1.5 | 600 |
|
|
99
|
-
| `.pv-heading-3` | 0.875rem (14px) | 1.43 | 600 |
|
|
100
|
-
| `.pv-heading-4` | 0.75rem (12px) | 1.33 | 600 |
|
|
101
|
-
| `.pv-heading-5` | 0.75rem (12px) | 1.33 | 600 |
|
|
9
|
+
- **Eliminating custom CSS** — Use only pv-* utility classes
|
|
10
|
+
- **Replacing raw HTML elements** — Use semantic Pit Viper components
|
|
11
|
+
- **Maintaining brand coherence** — Consistent colors, typography, spacing
|
|
102
12
|
|
|
103
|
-
|
|
104
|
-
| Class | Size | Line Height |
|
|
105
|
-
|---|---|---|
|
|
106
|
-
| `.pv-text-body-xl` | 0.875rem (14px) | 1.14 |
|
|
107
|
-
| `.pv-text-body-lg` | 0.875rem (14px) | 1.14 |
|
|
108
|
-
| `.pv-text-body-md` | 0.75rem (12px) | 1.33 |
|
|
109
|
-
| `.pv-text-body-sm` | 0.6875rem (11px) | 1.45 |
|
|
110
|
-
| `.pv-text-body-xs` | 0.6875rem (11px) | 1.45 |
|
|
111
|
-
|
|
112
|
-
### Title Classes (semibold variants)
|
|
113
|
-
`.pv-text-title-xl`, `.pv-text-title-lg`, `.pv-text-title-md`, `.pv-text-title-sm`, `.pv-text-title-xs` — same sizes as body, weight 600.
|
|
114
|
-
|
|
115
|
-
### Eyebrow Classes
|
|
116
|
-
| Class | Size | Weight | Style |
|
|
117
|
-
|---|---|---|---|
|
|
118
|
-
| `.pv-text-eyebrow-lg` | 0.875rem | 700 | Uppercase, letter-spacing 0.0375rem |
|
|
119
|
-
| `.pv-text-eyebrow-sm` | 0.75rem | 700 | Uppercase, letter-spacing 0.0375rem |
|
|
120
|
-
|
|
121
|
-
## Spacing
|
|
122
|
-
|
|
123
|
-
All spacing uses a 4px base grid. Classes apply `margin-bottom` (stack) or `padding` (inset).
|
|
124
|
-
|
|
125
|
-
### Stack (Vertical Margin)
|
|
126
|
-
| Class | Value |
|
|
127
|
-
|---|---|
|
|
128
|
-
| `.pv-stack-0` | 0 |
|
|
129
|
-
| `.pv-stack-4` | 0.25rem (4px) |
|
|
130
|
-
| `.pv-stack-8` | 0.5rem (8px) |
|
|
131
|
-
| `.pv-stack-12` | 0.75rem (12px) |
|
|
132
|
-
| `.pv-stack-16` | 1rem (16px) |
|
|
133
|
-
| `.pv-stack-20` | 1.25rem (20px) |
|
|
134
|
-
| `.pv-stack-24` | 1.5rem (24px) |
|
|
135
|
-
| `.pv-stack-32` | 2rem (32px) |
|
|
136
|
-
| `.pv-stack-64` | 4rem (64px) |
|
|
137
|
-
| `.pv-stack-128` | 8rem (128px) |
|
|
13
|
+
## Rules
|
|
138
14
|
|
|
139
|
-
|
|
15
|
+
These are non-negotiable:
|
|
140
16
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
| Squish (horiz > vert) | `.pv-inset-squish-8`, `-12`, `-16` | e.g. `0.75rem 1rem` |
|
|
146
|
-
| Block (vertical) | `.pv-inset-block-8` through `-32` | `padding-block` only |
|
|
147
|
-
| Inline (horizontal) | `.pv-inset-inline-16` through `-32` | `padding-inline` only |
|
|
17
|
+
1. **No custom CSS** — Only pv-* utility classes. No `<style>` blocks.
|
|
18
|
+
2. **No Tailwind** — Pit Viper has its own utility system.
|
|
19
|
+
3. **No raw form elements** — Use PvInput, PvButton, PvSelectButton, etc.
|
|
20
|
+
4. **No guessing** — Verify icons and component names exist before using.
|
|
148
21
|
|
|
149
|
-
|
|
150
|
-
`.pv-flow-8`, `.pv-flow-16`, `.pv-flow-24` — margin-bottom on all children except last.
|
|
22
|
+
## LLM Endpoints
|
|
151
23
|
|
|
152
|
-
|
|
153
|
-
| Class | Description |
|
|
154
|
-
|---|---|
|
|
155
|
-
| `.pv-flex` | `display: flex; gap: 0.5rem; align-items: center` |
|
|
156
|
-
| `.pv-flex-vertical` | Column direction |
|
|
157
|
-
| `.pv-flex-responsive` | Column on mobile, row at 768px+ |
|
|
158
|
-
| `.pv-flex-item` | `flex: 1` |
|
|
159
|
-
| `.pv-space-between` | `justify-content: space-between` |
|
|
24
|
+
Use these to look up current component info (via WebFetch):
|
|
160
25
|
|
|
161
|
-
|
|
26
|
+
| Endpoint | Purpose |
|
|
27
|
+
|----------|---------|
|
|
28
|
+
| `GET /llm/search?q={query}` | Search Vue + CSS components |
|
|
29
|
+
| `GET /llm/component/{name}` | Get component props, stories, source |
|
|
30
|
+
| `GET /llm/component` | List all Vue components |
|
|
31
|
+
| `GET /llm/css/{component}` | Get CSS component docs |
|
|
32
|
+
| `GET /llm/css` | List all CSS components |
|
|
33
|
+
| `GET /llm/tokens?category={cat}` | Get design tokens (color, spacing, etc.) |
|
|
162
34
|
|
|
163
|
-
|
|
35
|
+
Base URL: `https://pitviper.turquoise.health`
|
|
164
36
|
|
|
165
|
-
|
|
166
|
-
|---|---|
|
|
167
|
-
| `.pv-radius-sm` | 2px |
|
|
168
|
-
| `.pv-radius` | 5px (default) |
|
|
169
|
-
| `.pv-radius-lg` | 12px |
|
|
170
|
-
| `.pv-radius-top` | 5px 5px 0 0 |
|
|
171
|
-
| `.pv-radius-bottom` | 0 0 5px 5px |
|
|
37
|
+
Always search before assuming a component or class exists.
|
|
172
38
|
|
|
173
|
-
##
|
|
39
|
+
## Quick Reference
|
|
174
40
|
|
|
175
|
-
|
|
176
|
-
|---|---|---|
|
|
177
|
-
| Button | Default button elevation | `0px 6px 8px rgba(0,0,0,0.05), 0px 4px 6px -2px rgba(0,0,0,0.04)` |
|
|
178
|
-
| Popover | Dropdowns, popovers | `0px 8px 12px -4px rgba(0,0,0,0.08), 0px 12px 16px rgba(0,0,0,0.1)` |
|
|
179
|
-
| Elevated Hover | Button hover state | `0px 12px 16px rgba(0,0,0,0.1), 0px 8px 12px -4px rgba(0,0,0,0.08)` |
|
|
180
|
-
| Modal | Dialogs, drawers | `0px 12px 20px rgba(0,0,0,0.25), 0px 16px 28px -8px rgba(0,0,0,0.25)` |
|
|
41
|
+
### Themes
|
|
181
42
|
|
|
182
|
-
|
|
43
|
+
| Theme | CSS File | Use Case |
|
|
44
|
+
|-------|----------|----------|
|
|
45
|
+
| Platform | `pit-viper-v2.css` | Internal tools, dashboards |
|
|
46
|
+
| Consumer | `pit-viper-consumer.css` | Marketing, public sites |
|
|
183
47
|
|
|
184
|
-
|
|
185
|
-
|---|---|
|
|
186
|
-
| **768px** | Primary breakpoint — sidebar collapses, flex columns stack, responsive spacing adjusts |
|
|
48
|
+
### Common Classes
|
|
187
49
|
|
|
188
|
-
|
|
50
|
+
**Typography:**
|
|
51
|
+
- `.pv-heading-1` through `.pv-heading-5`
|
|
52
|
+
- `.pv-text-body-md`, `.pv-text-body-sm`
|
|
53
|
+
- `.pv-text-title-md`, `.pv-text-subdued`
|
|
189
54
|
|
|
190
|
-
|
|
55
|
+
**Spacing (4px grid):**
|
|
56
|
+
- `.pv-stack-8`, `.pv-stack-16`, `.pv-stack-24` (margin-bottom)
|
|
57
|
+
- `.pv-inset-square-16`, `.pv-inset-squish-12` (padding)
|
|
58
|
+
- `.pv-flow-16` (gap between children)
|
|
191
59
|
|
|
192
|
-
|
|
60
|
+
**Layout:**
|
|
61
|
+
- `.pv-flex`, `.pv-flex-vertical`
|
|
62
|
+
- `.pv-space-between`
|
|
63
|
+
- `.pv-container-md`, `.pv-container-lg`
|
|
193
64
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
| `PvButton` | All buttons (props: `variant`, `size`, `leftIcon`, `rightIcon`, `loading`, `disabled`, `inverse`) |
|
|
198
|
-
| `PvAiButton` | AI-specific action buttons |
|
|
199
|
-
| `PvIcon` | SVG icon (props: `name`, `size`: 10/12/20/24/32/64) |
|
|
200
|
-
| `PvSpinner` | Loading spinner (props: `variant`, `size`) |
|
|
201
|
-
| `PvInput` | Text input (v-model, props: `type`, `variant`, `placeholder`, `error`, `disabled`) |
|
|
202
|
-
| `PvTextArea` | Multi-line input |
|
|
203
|
-
| `PvCheckbox` | Checkbox (v-model, props: `indeterminate`, `disabled`) |
|
|
204
|
-
| `PvSwitch` | Toggle switch (v-model, props: `size`, `label`, `disabled`) |
|
|
205
|
-
| `PvSelectButton` | Dropdown with search (v-model, props: `options`, `optionsVariant`, `label`) |
|
|
206
|
-
| `PvTabs` | Tab bar (v-model, props: `tabs` array with `label`/`counter`/`icon`) |
|
|
207
|
-
| `PvSegmentedControl` | Button group toggle |
|
|
208
|
-
| `PvModal` | Dialog (v-model, props: `header`, `subheader`; slots: `#body`, `#footer`) |
|
|
209
|
-
| `PvDrawer` | Side panel (v-model, props: `header`, `showSearchbar`; slots: `#header`, `#default`, `#footer`) |
|
|
210
|
-
| `PvAccordion` | Collapsible section (v-model, props: `header`, `chevronPosition`, `counter`) |
|
|
211
|
-
| `PvToast` | Notification (props: `label`, `variant`: success/error/info/dark) |
|
|
212
|
-
| `PvTooltip` | Tooltip (props: `variant`, `tooltipPosition`, `interactive`; slots: `#label`, `#tooltip-content`) |
|
|
213
|
-
| `PvPopoverMenu` | Dropdown menu |
|
|
214
|
-
| `PvTag` | Inline tag |
|
|
215
|
-
| `PvPill` | Rounded badge |
|
|
216
|
-
| `PvCounterBadge` | Numeric badge |
|
|
217
|
-
| `PvBanner` | Alert banner |
|
|
218
|
-
| `PvAvatar` | User avatar |
|
|
219
|
-
| `PvCard` | Card container |
|
|
220
|
-
| `PvSkeleton` | Loading placeholder |
|
|
221
|
-
| `PvProgressBar` | Progress indicator |
|
|
222
|
-
| `PvTree` | Hierarchical tree |
|
|
223
|
-
| `PvSidePanel` | Three-column layout |
|
|
224
|
-
| `PvBreadcrumbs` | Breadcrumb nav |
|
|
225
|
-
| `PvPagination` | Pagination controls |
|
|
65
|
+
**Colors:**
|
|
66
|
+
- `.pv-text-default`, `.pv-text-brand`, `.pv-text-subdued`
|
|
67
|
+
- `.pv-surface`, `.pv-surface-accent`, `.pv-surface-brand`
|
|
226
68
|
|
|
227
|
-
###
|
|
228
|
-
Import from `@turquoisehealth/pit-viper/components/visualizations`:
|
|
69
|
+
### Common Components
|
|
229
70
|
|
|
230
|
-
|
|
|
231
|
-
|
|
232
|
-
|
|
|
233
|
-
|
|
|
234
|
-
|
|
|
235
|
-
|
|
|
71
|
+
| Need | Component |
|
|
72
|
+
|------|-----------|
|
|
73
|
+
| Button | `PvButton` |
|
|
74
|
+
| Text input | `PvInput` |
|
|
75
|
+
| Dropdown | `PvSelectButton` |
|
|
76
|
+
| Multi-select | `PvMultiSelectButton` |
|
|
77
|
+
| Data table | `PvDataTable` |
|
|
78
|
+
| Chart | `PvChart` |
|
|
79
|
+
| Modal | `PvModal` |
|
|
80
|
+
| Drawer | `PvDrawer` |
|
|
81
|
+
| Tabs | `PvTabs` |
|
|
82
|
+
| Card | `PvCard` |
|
|
236
83
|
|
|
237
|
-
|
|
84
|
+
### Import Paths
|
|
238
85
|
|
|
239
86
|
```typescript
|
|
240
87
|
// Base components
|
|
241
|
-
import { PvButton, PvInput
|
|
88
|
+
import { PvButton, PvInput } from '@turquoisehealth/pit-viper/components'
|
|
242
89
|
|
|
243
90
|
// Visualization components
|
|
244
91
|
import { PvDataTable, PvChart } from '@turquoisehealth/pit-viper/components/visualizations'
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
## Theme Selection
|
|
248
|
-
|
|
249
|
-
Choose the appropriate theme based on the application type:
|
|
250
|
-
|
|
251
|
-
| Application Type | Theme | CSS File |
|
|
252
|
-
|-----------------|-------|----------|
|
|
253
|
-
| Internal tools, dashboards, admin panels | Platform | `pit-viper-v2.css` |
|
|
254
|
-
| Marketing pages, public websites, consumer apps | Consumer | `pit-viper-consumer.css` |
|
|
255
|
-
|
|
256
|
-
### Key Visual Differences
|
|
257
|
-
|
|
258
|
-
| Property | Platform | Consumer |
|
|
259
|
-
|----------|----------|----------|
|
|
260
|
-
| Font Family | Inter | GT Standard |
|
|
261
|
-
| Heading-1 Size | 1.25rem (20px) | 3.875rem (62px) |
|
|
262
|
-
| Body Text Size | 0.75rem (12px) | 1rem (16px) |
|
|
263
|
-
| Overall Density | Compact | Spacious |
|
|
264
|
-
| Color Warmth | Cool blue-gray | Warmer teal |
|
|
265
|
-
|
|
266
|
-
### Theme URLs
|
|
267
92
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
Consumer: https://pitviper.turquoise.health/assets/css/pit-viper-consumer.css
|
|
93
|
+
// Layout (direct import)
|
|
94
|
+
import PvSidePanel from '@turquoisehealth/pit-viper/components/layout/PvSidePanel/PvSidePanel.vue'
|
|
271
95
|
```
|
|
272
96
|
|
|
273
|
-
|
|
97
|
+
## Resources
|
|
274
98
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
99
|
+
- **Storybook:** https://pit-viper-storybook.netlify.app
|
|
100
|
+
- **Icons:** https://pitviper.turquoise.health/visual-style/icons/
|
|
101
|
+
- **LLM API:** https://pitviper.turquoise.health/llm
|
|
278
102
|
|
|
279
|
-
|
|
103
|
+
## Skills
|
|
280
104
|
|
|
281
|
-
|
|
105
|
+
- `/pit-viper` — Main skill for all FE work (implicit triggering)
|
|
282
106
|
|
|
283
|
-
|
|
284
|
-
2. **No Tailwind** — Pit Viper has its own utility system
|
|
285
|
-
3. **Prefer components** — Use Pit Viper components over raw HTML elements
|
|
286
|
-
4. **Valid icons only** — Only use icon names from https://pitviper.turquoise.health/visual-style/icons/
|
|
107
|
+
To audit files for compliance, ask the skill: "audit this file" or "check for pit viper violations".
|
package/claude-plugin/README.md
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
1
|
# Pit Viper Claude Plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Claude Code plugin for Pit Viper design system.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### Option 1: Install from GitHub (recommended)
|
|
8
8
|
|
|
9
|
+
**Step 1: Add the marketplace**
|
|
10
|
+
|
|
11
|
+
Claude Code CLI:
|
|
9
12
|
```bash
|
|
10
|
-
|
|
13
|
+
/plugin
|
|
11
14
|
```
|
|
15
|
+
Then select **Marketplace** → **Add marketplace** → enter `turquoisehealth/pit-viper`
|
|
16
|
+
|
|
17
|
+
Claude Code Desktop:
|
|
18
|
+
Customize → Create plugin → Add marketplace → enter `turquoisehealth/pit-viper`
|
|
12
19
|
|
|
13
|
-
|
|
20
|
+
**Step 2: Install the plugin**
|
|
21
|
+
```bash
|
|
22
|
+
/plugin install turquoisehealth@pit-viper
|
|
23
|
+
```
|
|
14
24
|
|
|
15
|
-
###
|
|
25
|
+
### Option 2: Clone and install locally
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
```bash
|
|
28
|
+
git clone https://github.com/turquoisehealth/pit-viper.git
|
|
29
|
+
cd pit-viper
|
|
30
|
+
/plugin add ./claude-plugin
|
|
31
|
+
```
|
|
18
32
|
|
|
19
33
|
## Prerequisites
|
|
20
34
|
|
|
@@ -26,94 +40,134 @@ npm install @turquoisehealth/pit-viper
|
|
|
26
40
|
|
|
27
41
|
For Figma integration, authenticate via `/mcp` in Claude Code.
|
|
28
42
|
|
|
29
|
-
##
|
|
43
|
+
## Skills
|
|
30
44
|
|
|
31
|
-
### `/pit-viper
|
|
45
|
+
### `/pit-viper` (Implicit)
|
|
32
46
|
|
|
33
|
-
|
|
47
|
+
The main skill triggers automatically on all frontend work — UI building, Vue/HTML editing, component usage, and visual interface work.
|
|
34
48
|
|
|
35
|
-
**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/pit-viper:create a settings page with tabs for profile and notifications
|
|
40
|
-
/pit-viper:create a marketing landing page with hero and features
|
|
41
|
-
```
|
|
49
|
+
**Output Modes:**
|
|
50
|
+
- **Engineer Mode**: Vue 3 Composition API code (when editing .vue files)
|
|
51
|
+
- **Prototype Mode**: HTML with pv-* classes (for quick prototypes, non-technical users)
|
|
52
|
+
- **Design Review Mode**: Component selection rationale (for design discussions)
|
|
42
53
|
|
|
43
|
-
**
|
|
54
|
+
**Workflow:**
|
|
55
|
+
1. Searches for components via `/llm/search`
|
|
56
|
+
2. Gets detailed props/usage via `/llm/component/{name}`
|
|
57
|
+
3. Fetches CSS utilities and tokens via `/llm/css` and `/llm/tokens`
|
|
58
|
+
4. Generates appropriate output based on context
|
|
44
59
|
|
|
45
|
-
|
|
46
|
-
- Keywords like "marketing", "landing", "consumer" → Consumer theme (large typography)
|
|
47
|
-
- Keywords like "dashboard", "admin", "internal" → Platform theme (compact, default)
|
|
48
|
-
- Override with `--theme=consumer` or `--theme=platform`
|
|
60
|
+
### Auditing Files
|
|
49
61
|
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
62
|
+
To check files for design system compliance, ask the skill:
|
|
63
|
+
- "audit this file for pit viper violations"
|
|
64
|
+
- "check src/components/Foo.vue for compliance"
|
|
65
|
+
- "fix any pit viper violations in changed files"
|
|
53
66
|
|
|
54
|
-
|
|
67
|
+
The skill will check for custom CSS, raw HTML elements, invalid classes, and wrong imports — then auto-fix them.
|
|
55
68
|
|
|
56
|
-
|
|
69
|
+
## LLM Endpoints
|
|
57
70
|
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
/pit-viper:resolve dropdown with search
|
|
61
|
-
/pit-viper:resolve <figma-url>
|
|
62
|
-
/pit-viper:resolve <html-snippet>
|
|
63
|
-
```
|
|
71
|
+
The skill uses Pit Viper's `/llm` HTTP endpoints (via WebFetch) for dynamic component lookup:
|
|
64
72
|
|
|
65
|
-
|
|
73
|
+
| Endpoint | Purpose |
|
|
74
|
+
|----------|---------|
|
|
75
|
+
| `GET /llm` | API index |
|
|
76
|
+
| `GET /llm/search?q={query}` | Search across CSS and Vue components |
|
|
77
|
+
| `GET /llm/component` | List all Vue components |
|
|
78
|
+
| `GET /llm/component/{name}` | Get component details (props, stories, source) |
|
|
79
|
+
| `GET /llm/component/{name}?web_component=true` | Get web component variant |
|
|
80
|
+
| `GET /llm/css` | List all CSS components |
|
|
81
|
+
| `GET /llm/css/{component}` | Get CSS component documentation |
|
|
82
|
+
| `GET /llm/css/themes` | Get theme CDN URLs |
|
|
83
|
+
| `GET /llm/tokens` | List all design tokens |
|
|
84
|
+
| `GET /llm/tokens?category={cat}` | Filter tokens (color, spacing, typography, border, shadow) |
|
|
66
85
|
|
|
67
|
-
|
|
86
|
+
Base URL: `https://pitviper.turquoise.health`
|
|
68
87
|
|
|
69
|
-
|
|
88
|
+
## MCP Servers
|
|
70
89
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
The plugin includes an MCP configuration for Figma integration:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"mcpServers": {
|
|
95
|
+
"figma": {
|
|
96
|
+
"type": "http",
|
|
97
|
+
"url": "https://mcp.figma.com/mcp"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
76
101
|
```
|
|
77
102
|
|
|
78
|
-
|
|
79
|
-
- Custom CSS (`<style>` blocks, inline styles)
|
|
80
|
-
- Raw HTML elements that should be Pit Viper components
|
|
81
|
-
- Invalid CSS class names
|
|
82
|
-
- Wrong import paths
|
|
103
|
+
To authenticate, run `/mcp` in Claude Code and follow the Figma OAuth flow.
|
|
83
104
|
|
|
84
|
-
##
|
|
105
|
+
## Running Evals
|
|
85
106
|
|
|
86
|
-
|
|
107
|
+
The plugin includes an eval suite to verify skill behavior. Evals are stored in `pit-viper-workspace/evals/`.
|
|
108
|
+
|
|
109
|
+
### Using skill-creator
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
/skill-creator
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Then follow the prompts to run evals against the pit-viper skill. The skill-creator will:
|
|
116
|
+
1. Spawn test cases with and without the skill
|
|
117
|
+
2. Grade assertions automatically
|
|
118
|
+
3. Generate a benchmark report
|
|
119
|
+
4. Open a viewer for qualitative review
|
|
120
|
+
|
|
121
|
+
### Eval structure
|
|
87
122
|
|
|
88
123
|
```
|
|
89
|
-
|
|
90
|
-
├──
|
|
91
|
-
├──
|
|
92
|
-
|
|
93
|
-
└──
|
|
124
|
+
pit-viper-workspace/
|
|
125
|
+
├── evals/
|
|
126
|
+
│ ├── evals.json # Test cases with prompts and assertions
|
|
127
|
+
│ └── fixtures/ # Vue files used as test inputs
|
|
128
|
+
└── iteration-N/ # Results from each eval run
|
|
129
|
+
├── eval-name/
|
|
130
|
+
│ ├── with_skill/
|
|
131
|
+
│ └── without_skill/
|
|
132
|
+
└── benchmark.json
|
|
94
133
|
```
|
|
95
134
|
|
|
96
|
-
|
|
135
|
+
### Eval categories
|
|
136
|
+
|
|
137
|
+
| Category | Tests |
|
|
138
|
+
|----------|-------|
|
|
139
|
+
| Engineer (E1-E3) | Vue component generation, loading states, unknown components |
|
|
140
|
+
| Prototype (P1-P3) | HTML generation, settings pages, iterative context |
|
|
141
|
+
| Design (D1-D3) | Component selection, token validation, layout review |
|
|
142
|
+
| Cross (X1-X4) | Tailwind avoidance, theme detection, mode ambiguity, icons |
|
|
143
|
+
| Tables (T1-T4) | PvDataTable usage, PvChart usage, HTML tables, chart rejection |
|
|
97
144
|
|
|
98
145
|
## Resources
|
|
99
146
|
|
|
100
147
|
- **Storybook:** https://pit-viper-storybook.netlify.app
|
|
101
148
|
- **Icons:** https://pitviper.turquoise.health/visual-style/icons/
|
|
102
|
-
- **Design Tokens:** See `CLAUDE.md` for
|
|
103
|
-
- **
|
|
104
|
-
|
|
105
|
-
## MCP Tools
|
|
106
|
-
|
|
107
|
-
The plugin uses the Pit Viper MCP server for fast component lookups. Available tools:
|
|
149
|
+
- **Design Tokens:** See `CLAUDE.md` for quick reference
|
|
150
|
+
- **LLM API:** https://pitviper.turquoise.health/llm
|
|
108
151
|
|
|
109
|
-
|
|
110
|
-
|------|---------|
|
|
111
|
-
| `mcp__pit-viper__search` | Search across CSS and Vue components |
|
|
112
|
-
| `mcp__pit-viper__storybook_get_component` | Get Vue component details (props, stories, source) |
|
|
113
|
-
| `mcp__pit-viper__storybook_list_components` | List all Vue components with stories |
|
|
114
|
-
| `mcp__pit-viper__css_get_docs` | Get CSS component documentation |
|
|
115
|
-
| `mcp__pit-viper__css_list_components` | List CSS components by category |
|
|
116
|
-
| `mcp__pit-viper__css_list_tokens` | List design tokens (colors, spacing, etc.) |
|
|
117
|
-
| `mcp__pit-viper__css_search_classes` | Search CSS classes by pattern |
|
|
152
|
+
## Plugin Structure
|
|
118
153
|
|
|
119
|
-
|
|
154
|
+
```
|
|
155
|
+
claude-plugin/
|
|
156
|
+
├── .claude-plugin/
|
|
157
|
+
│ └── plugin.json # Plugin metadata
|
|
158
|
+
├── .mcp.json # MCP server configuration (Figma)
|
|
159
|
+
├── CLAUDE.md # Philosophy, rules, quick reference
|
|
160
|
+
├── README.md # This file
|
|
161
|
+
├── skills/
|
|
162
|
+
│ └── pit-viper/
|
|
163
|
+
│ ├── SKILL.md # Main skill (implicit triggering)
|
|
164
|
+
│ └── references/
|
|
165
|
+
│ ├── design-rules.md # Mandatory spacing, typography, layout rules
|
|
166
|
+
│ ├── patterns-core.md # Universal utility class patterns (always loaded)
|
|
167
|
+
│ ├── vue-guidelines.md # Engineer Mode — Vue patterns + anti-patterns
|
|
168
|
+
│ ├── html-patterns.md # Prototype Mode — HTML patterns + anti-patterns
|
|
169
|
+
│ ├── design-language.md # Design Review Mode reference
|
|
170
|
+
│ ├── layout-patterns.md # Page layout patterns
|
|
171
|
+
│ └── theme-guide.md # Theme selection guide
|
|
172
|
+
└── examples/ # Example usage files
|
|
173
|
+
```
|