aiblueprint-cli 1.4.81 → 1.4.83
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/README.md +25 -18
- package/agents-config/claude-config/scripts/statusline/data/.gitignore +8 -0
- package/agents-config/claude-config/scripts/statusline/data/.gitkeep +0 -0
- package/agents-config/claude-config/scripts/statusline/defaults.json +10 -10
- package/agents-config/claude-config/scripts/statusline/src/commands/interactive-config.ts +118 -6
- package/agents-config/claude-config/scripts/statusline/src/index.ts +100 -9
- package/agents-config/claude-config/scripts/statusline/src/lib/config.ts +28 -2
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/index.ts +164 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +163 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/presets.ts +13 -13
- package/agents-config/claude-config/scripts/statusline/statusline.config.free.json +4 -1
- package/agents-config/claude-config/scripts/statusline/statusline.config.json +44 -23
- package/agents-config/scripts/statusline/data/.gitignore +8 -0
- package/agents-config/scripts/statusline/data/.gitkeep +0 -0
- package/agents-config/scripts/statusline/defaults.json +10 -10
- package/agents-config/scripts/statusline/src/commands/interactive-config.ts +118 -6
- package/agents-config/scripts/statusline/src/index.ts +100 -9
- package/agents-config/scripts/statusline/src/lib/config.ts +28 -2
- package/agents-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
- package/agents-config/scripts/statusline/src/lib/features/limits/index.ts +164 -0
- package/agents-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +163 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
- package/agents-config/scripts/statusline/src/lib/presets.ts +13 -13
- package/agents-config/scripts/statusline/statusline.config.free.json +4 -1
- package/agents-config/scripts/statusline/statusline.config.json +44 -23
- package/agents-config/skills/{agents-managers → agents-manager}/SKILL.md +1 -1
- package/agents-config/skills/{agents-managers → agents-manager}/references/writing-agent-prompts.md +1 -1
- package/agents-config/skills/apex/SKILL.md +61 -0
- package/agents-config/skills/appstore-connect/SKILL.md +2 -2
- package/agents-config/skills/{appstore-connect-setup/SKILL.md → appstore-connect/references/setup.md} +3 -6
- package/agents-config/skills/environments-manager/SKILL.md +6 -6
- package/agents-config/skills/environments-manager/examples/{claude/commands/dev.md → skills/dev/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/lint.md → skills/lint/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/test.md → skills/test/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/typecheck.md → skills/typecheck/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/references/claude.md +13 -9
- package/agents-config/skills/environments-manager/references/cursor.md +2 -2
- package/agents-config/skills/ios-testflight/SKILL.md +2 -2
- package/agents-config/{commands/prompts/prompt.md → skills/prompt/SKILL.md} +5 -0
- package/agents-config/{commands/prompts/tools.md → skills/tools/SKILL.md} +1 -0
- package/agents-config/skills/ultrathink/SKILL.md +1 -1
- package/agents-config/skills/use-style/SKILL.md +7 -4
- package/agents-config/skills/use-style/examples/luma.html +221 -0
- package/agents-config/skills/use-style/examples/testspirite.html +340 -0
- package/agents-config/skills/use-style/styles/ios-app.md +350 -0
- package/agents-config/skills/use-style/styles/luma.md +422 -0
- package/agents-config/skills/use-style/styles/new-york-times.md +1 -1
- package/agents-config/skills/use-style/styles/split-auth.md +2 -2
- package/agents-config/skills/use-style/styles/testspirite.md +397 -0
- package/dist/cli.js +56 -118
- package/package.json +1 -1
- package/agents-config/claude-config/scripts/.claude/commands/fix-on-my-computer.md +0 -87
- package/agents-config/commands/prompts/create-vitejs-app.md +0 -272
- package/agents-config/commands/prompts/nextjs-add-prisma-db.md +0 -136
- package/agents-config/commands/prompts/nextjs-setup-better-auth.md +0 -173
- package/agents-config/commands/prompts/nextjs-setup-project.md +0 -200
- package/agents-config/commands/prompts/saas-challenge-idea.md +0 -135
- package/agents-config/commands/prompts/saas-create-architecture.md +0 -242
- package/agents-config/commands/prompts/saas-create-headline.md +0 -132
- package/agents-config/commands/prompts/saas-create-landing-copywritting.md +0 -267
- package/agents-config/commands/prompts/saas-create-legals-docs.md +0 -176
- package/agents-config/commands/prompts/saas-create-logos.md +0 -240
- package/agents-config/commands/prompts/saas-create-prd.md +0 -195
- package/agents-config/commands/prompts/saas-create-tasks.md +0 -240
- package/agents-config/commands/prompts/saas-define-pricing.md +0 -293
- package/agents-config/commands/prompts/saas-find-domain-name.md +0 -190
- package/agents-config/commands/prompts/saas-implement-landing-page.md +0 -257
- package/agents-config/commands/prompts/setup-tmux.md +0 -160
- /package/agents-config/skills/{agents-managers → agents-manager}/references/agents.md +0 -0
- /package/agents-config/skills/{agents-managers → agents-manager}/references/context-management.md +0 -0
- /package/agents-config/skills/{agents-managers → agents-manager}/references/debugging-agents.md +0 -0
- /package/agents-config/skills/{agents-managers → agents-manager}/references/error-handling-and-recovery.md +0 -0
- /package/agents-config/skills/{agents-managers → agents-manager}/references/evaluation-and-testing.md +0 -0
- /package/agents-config/skills/{agents-managers → agents-manager}/references/orchestration-patterns.md +0 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
# TestSpirite Style
|
|
2
|
+
|
|
3
|
+
Calm light SaaS product UI. Warm paper-white canvas, one forest-green accent, grouped sidebar, soft rounded cards on quiet borders, pale-green status pills, and isometric line-art empty states. Trust-driven dev tooling, never loud.
|
|
4
|
+
|
|
5
|
+
**Reference vibe:** TestSprite app shell (home dashboard, sidebar nav, test lists, monitoring, plan/billing, changelog rail).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core vibe
|
|
10
|
+
|
|
11
|
+
- **Product UI, not marketing.** App shell aesthetic: grouped sidebar + content + promo rail. Use it for dashboards, settings, and tool surfaces, not splashy hero landings.
|
|
12
|
+
- **Warm paper light mode.** Faint sage-tinted off-white canvas, white cards, near-black warm ink. Light, airy, never stark white-on-white.
|
|
13
|
+
- **One green, used calmly.** A single forest green `#3d7c4e` carries every action, active state, and positive status. 90% of the UI stays neutral gray; green is the only saturated color.
|
|
14
|
+
- **Line over depth.** 1px low-contrast borders define cards and panes. At most one barely-there ambient shadow on raised cards. No heavy elevation.
|
|
15
|
+
- **Soft, generous radius.** `rounded-xl` (12px) cards, `rounded-lg` (8px) buttons/inputs, `rounded-full` pills and avatars. Never sharp `0`.
|
|
16
|
+
- **Pale-green pills everywhere.** Feature checkmarks, `New` tags, `New Feature` changelog labels, status dots: tinted green text on a pale green wash.
|
|
17
|
+
- **Isometric wireframe empty states.** Light gray line-art stacked cubes / layered chevrons (echoing the TestSprite mark) sit centered above an empty-state CTA.
|
|
18
|
+
- **Conversion woven in.** Free-trial and upgrade promo cards live inside the shell (sidebar foot, right rail, section banners), not bolted on.
|
|
19
|
+
- **Clean Inter sans.** Inter / system grotesque for everything; `tabular-nums` for credits, counts, and dates. Mono only for IDs/keys.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Color
|
|
24
|
+
|
|
25
|
+
Portable palette. Map to project tokens when available.
|
|
26
|
+
|
|
27
|
+
| Role | Hex | CSS var (suggested) | Usage |
|
|
28
|
+
|------|-----|---------------------|-------|
|
|
29
|
+
| Canvas | `#f7f7f3` | `--ts-bg` | Page + sidebar background (warm sage-white) |
|
|
30
|
+
| Surface | `#ffffff` | `--ts-surface` | Cards, panels, promo rail, inputs |
|
|
31
|
+
| Surface sunken | `#f0f1ec` | `--ts-sunken` | Hover rows, inset blocks, table headers |
|
|
32
|
+
| Ink | `#1a1c19` | `--ts-fg` | Headings, primary values, active nav |
|
|
33
|
+
| Slate ink | `#494c46` | `--ts-slate` | Body copy, descriptions |
|
|
34
|
+
| Muted ink | `#8a8d84` | `--ts-muted-fg` | Section labels, metadata, inactive nav |
|
|
35
|
+
| Subtle ink | `#a8aaa0` | `--ts-subtle-fg` | Placeholders, helper text, faint icons |
|
|
36
|
+
| Border | `#e8e9e3` | `--ts-border` | Card outlines, dividers, row separators |
|
|
37
|
+
| Border strong | `#d8dad2` | `--ts-border-strong` | Hover/focus outlines |
|
|
38
|
+
| Primary | `#3d7c4e` | `--ts-primary` | Buttons, active state, links, focus ring |
|
|
39
|
+
| Primary hover | `#336b42` | `--ts-primary-hover` | Button / link hover |
|
|
40
|
+
| Primary surface | `#eaf3ea` | `--ts-primary-surface` | Pill / badge / promo-card wash, active row tint |
|
|
41
|
+
| Primary border | `#d3e6d5` | `--ts-primary-border` | Outline on pale-green surfaces |
|
|
42
|
+
| Status dot | `#2f9e54` | `--ts-status` | Brighter green for live/connected dots |
|
|
43
|
+
| Warning | `#c98a28` | `--ts-warning` | Pending, attention, low-credit |
|
|
44
|
+
| Error | `#cf4a3e` | `--ts-error` | Failed runs, destructive |
|
|
45
|
+
| Link | `#3d7c4e` | `--ts-link` | Text links |
|
|
46
|
+
|
|
47
|
+
### Tailwind mapping (when no project tokens)
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
:root {
|
|
51
|
+
--ts-bg: #f7f7f3;
|
|
52
|
+
--ts-surface: #fff;
|
|
53
|
+
--ts-sunken: #f0f1ec;
|
|
54
|
+
--ts-fg: #1a1c19;
|
|
55
|
+
--ts-slate: #494c46;
|
|
56
|
+
--ts-muted-fg: #8a8d84;
|
|
57
|
+
--ts-border: #e8e9e3;
|
|
58
|
+
--ts-primary: #3d7c4e;
|
|
59
|
+
--ts-primary-surface: #eaf3ea;
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
| Tailwind | Value |
|
|
64
|
+
|----------|-------|
|
|
65
|
+
| `bg-[#f7f7f3]` | Canvas / sidebar |
|
|
66
|
+
| `bg-white` | Card / surface |
|
|
67
|
+
| `bg-[#f0f1ec]` | Hover / sunken |
|
|
68
|
+
| `text-[#1a1c19]` | Primary ink |
|
|
69
|
+
| `text-[#8a8d84]` | Muted |
|
|
70
|
+
| `border-[#e8e9e3]` | Structure |
|
|
71
|
+
| `bg-[#3d7c4e]` | Primary action |
|
|
72
|
+
| `bg-[#eaf3ea]` | Green pill / promo wash |
|
|
73
|
+
| `text-[#3d7c4e]` | Accent / link |
|
|
74
|
+
|
|
75
|
+
**Rule:** Keep the layout neutral warm-gray and reserve forest green for actions, active state, and positive status. One green only; no second accent hue.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Typography
|
|
80
|
+
|
|
81
|
+
### Font stacks
|
|
82
|
+
|
|
83
|
+
| Role | Stack |
|
|
84
|
+
|------|-------|
|
|
85
|
+
| Sans (everything) | `Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif` |
|
|
86
|
+
| Mono (keys, IDs) | `"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace` |
|
|
87
|
+
|
|
88
|
+
Load Inter via `@fontsource/inter` or `next/font`. No display/serif face: TestSpirite is sans-only.
|
|
89
|
+
|
|
90
|
+
### Scale
|
|
91
|
+
|
|
92
|
+
| Level | Pattern |
|
|
93
|
+
|-------|---------|
|
|
94
|
+
| Page title | `text-xl md:text-2xl font-semibold tracking-tight text-[#1a1c19]` |
|
|
95
|
+
| Card / promo heading | `text-lg md:text-xl font-semibold text-[#1a1c19]` |
|
|
96
|
+
| Section heading (Recent Created Tests) | `text-sm font-semibold text-[#1a1c19]` |
|
|
97
|
+
| Sidebar section label | `text-[11px] font-medium uppercase tracking-wide text-[#8a8d84]` |
|
|
98
|
+
| Nav item | `text-sm text-[#494c46]` |
|
|
99
|
+
| Body / description | `text-sm leading-relaxed text-[#494c46]` |
|
|
100
|
+
| Metadata / date | `text-xs tabular-nums text-[#8a8d84]` |
|
|
101
|
+
| Metric / credits | `text-sm font-medium tabular-nums text-[#1a1c19]` |
|
|
102
|
+
| Key / ID | `font-mono text-xs text-[#494c46]` |
|
|
103
|
+
|
|
104
|
+
### Weight & tracking
|
|
105
|
+
|
|
106
|
+
- Headings: `font-semibold` (600), `tracking-tight`.
|
|
107
|
+
- Body: `font-normal` (400), relaxed leading.
|
|
108
|
+
- Sidebar section labels: `font-medium` (500), `uppercase`, light tracking, muted. (This is the one uppercase label in the system.)
|
|
109
|
+
- Nav items + most labels: sentence case.
|
|
110
|
+
- Counts, credits, dates: always `tabular-nums`.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Layout tokens
|
|
115
|
+
|
|
116
|
+
| Token | Value |
|
|
117
|
+
|-------|-------|
|
|
118
|
+
| `TS_SIDEBAR` | `w-60 shrink-0 border-r border-[#e8e9e3] bg-[#f7f7f3] flex flex-col` |
|
|
119
|
+
| `TS_MAIN` | `flex-1 min-w-0 bg-[#f7f7f3]` |
|
|
120
|
+
| `TS_TOPBAR` | `flex h-14 items-center border-b border-[#e8e9e3] px-6` |
|
|
121
|
+
| `TS_CONTENT` | `mx-auto w-full max-w-6xl px-6 py-6 md:py-8` |
|
|
122
|
+
| `TS_RAIL` | `w-80 shrink-0 space-y-4` (right promo/plan/changelog rail) |
|
|
123
|
+
| `TS_CARD` | `rounded-xl border border-[#e8e9e3] bg-white p-5` |
|
|
124
|
+
| `TS_ROW` | `flex items-center gap-2.5 rounded-lg px-2.5 py-2` |
|
|
125
|
+
| `TS_GAP` | `space-y-6 md:space-y-8` |
|
|
126
|
+
|
|
127
|
+
### App shell (TestSpirite's core layout)
|
|
128
|
+
|
|
129
|
+
Grouped sidebar + main column; main splits into a content stream and a right promo rail.
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
+--------+--------------------------------+-----------------+
|
|
133
|
+
| side | topbar (page title) | |
|
|
134
|
+
| bar +--------------------------------+ |
|
|
135
|
+
| groups | hero / section cards | promo rail |
|
|
136
|
+
| + foot | (recent tests, lists, ...) | plan, updates |
|
|
137
|
+
| w-60 | max-w-6xl | w-80 |
|
|
138
|
+
+--------+--------------------------------+-----------------+
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<div className="flex min-h-screen bg-[#f7f7f3] text-[#1a1c19]">
|
|
143
|
+
<aside className="flex w-60 shrink-0 flex-col border-r border-[#e8e9e3] bg-[#f7f7f3]">
|
|
144
|
+
<WorkspaceSwitcher />
|
|
145
|
+
<nav className="flex-1 space-y-5 px-3 py-4">{groups}</nav>
|
|
146
|
+
<TrialCard /> {/* sidebar foot */}
|
|
147
|
+
</aside>
|
|
148
|
+
<div className="flex flex-1 flex-col">
|
|
149
|
+
<header className="flex h-14 items-center border-b border-[#e8e9e3] px-6 text-sm text-[#494c46]">Home</header>
|
|
150
|
+
<main className="mx-auto flex w-full max-w-6xl gap-6 px-6 py-8">
|
|
151
|
+
<div className="min-w-0 flex-1 space-y-8">{content}</div>
|
|
152
|
+
<aside className="w-80 shrink-0 space-y-4">{rail}</aside>
|
|
153
|
+
</main>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Workspace switcher (sidebar head)
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
<button className="flex items-center gap-2.5 px-4 py-3 text-sm hover:bg-[#f0f1ec]">
|
|
162
|
+
<span className="grid size-7 place-items-center rounded-md bg-[#3d7c4e] text-xs font-semibold text-white">MW</span>
|
|
163
|
+
<span className="flex-1 truncate font-medium text-[#1a1c19]">My Workspace</span>
|
|
164
|
+
<ChevronsUpDown className="size-4 text-[#8a8d84]" />
|
|
165
|
+
</button>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Borders, radius & elevation
|
|
171
|
+
|
|
172
|
+
Line-defined and soft. Cards are bordered; one faint ambient shadow at most.
|
|
173
|
+
|
|
174
|
+
| Context | Radius | Border | Shadow |
|
|
175
|
+
|---------|--------|--------|--------|
|
|
176
|
+
| Card / panel / promo | `rounded-xl` (12px) | `border-[#e8e9e3]` | none, or `TS_SHADOW_CARD` |
|
|
177
|
+
| Hero / billboard card | `rounded-2xl` (16px) | `border-[#e8e9e3]` | `TS_SHADOW_CARD` |
|
|
178
|
+
| Button | `rounded-lg` (8px) | none (primary) / `border-[#e8e9e3]` (secondary) | none |
|
|
179
|
+
| Input | `rounded-lg` (8px) | `border-[#e8e9e3]` | none |
|
|
180
|
+
| Nav row / list row | `rounded-lg` (8px) | none; active = `bg-[#f0f1ec]` | none |
|
|
181
|
+
| Pill / badge / avatar | `rounded-full` | optional `border-[#d3e6d5]` | none |
|
|
182
|
+
| Workspace logo mark | `rounded-md` (6px) | none | none |
|
|
183
|
+
|
|
184
|
+
### Shadow token (the one soft ambient lift)
|
|
185
|
+
|
|
186
|
+
```css
|
|
187
|
+
--ts-shadow-card: 0 1px 2px rgba(26,28,25,0.04), 0 1px 3px rgba(26,28,25,0.03);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```tsx
|
|
191
|
+
className="shadow-[0_1px_2px_rgba(26,28,25,0.04),0_1px_3px_rgba(26,28,25,0.03)]"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Dividers: `border-t border-[#e8e9e3]`. Rows separate by spacing + hover bg, not per-row borders.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Component patterns
|
|
199
|
+
|
|
200
|
+
### Sidebar nav group
|
|
201
|
+
|
|
202
|
+
Tiny muted uppercase label, then icon + label rows. Active row = sunken bg + ink text. No left accent bar.
|
|
203
|
+
|
|
204
|
+
```tsx
|
|
205
|
+
<div>
|
|
206
|
+
<p className="px-2.5 pb-1.5 text-[11px] font-medium uppercase tracking-wide text-[#8a8d84]">Testing</p>
|
|
207
|
+
<a className={cn(
|
|
208
|
+
"flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm",
|
|
209
|
+
active ? "bg-[#f0f1ec] font-medium text-[#1a1c19]" : "text-[#494c46] hover:bg-[#f0f1ec]"
|
|
210
|
+
)}>
|
|
211
|
+
<FlaskConical className="size-4 shrink-0 text-[#8a8d84]" />
|
|
212
|
+
<span className="flex-1 truncate">Create Tests</span>
|
|
213
|
+
<NewBadge />
|
|
214
|
+
</a>
|
|
215
|
+
</div>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### `New` badge / `New Feature` tag
|
|
219
|
+
|
|
220
|
+
The signature pale-green pill.
|
|
221
|
+
|
|
222
|
+
```tsx
|
|
223
|
+
<span className="rounded-full bg-[#eaf3ea] px-2 py-0.5 text-[11px] font-medium text-[#3d7c4e]">New</span>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Feature pill with checkmark (promo cards)
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
<span className="inline-flex items-center gap-1.5 rounded-full bg-[#eaf3ea] px-2.5 py-1 text-xs font-medium text-[#3d7c4e]">
|
|
230
|
+
<Check className="size-3.5" /> Better Coverage
|
|
231
|
+
</span>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Status pill (live / connected)
|
|
235
|
+
|
|
236
|
+
```tsx
|
|
237
|
+
<span className="inline-flex items-center gap-1.5 rounded-full bg-[#eaf3ea] px-2.5 py-0.5 text-xs font-medium text-[#3d7c4e]">
|
|
238
|
+
<span className="size-1.5 rounded-full bg-[#2f9e54]" /> Connected
|
|
239
|
+
</span>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Buttons
|
|
243
|
+
|
|
244
|
+
| Variant | Classes |
|
|
245
|
+
|---------|---------|
|
|
246
|
+
| Primary | `rounded-lg bg-[#3d7c4e] px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-[#336b42]` |
|
|
247
|
+
| Secondary | `rounded-lg border border-[#e8e9e3] bg-white px-4 py-2 text-sm font-medium text-[#1a1c19] transition-colors hover:bg-[#f0f1ec]` |
|
|
248
|
+
| Ghost / icon | `rounded-lg p-2 text-[#8a8d84] transition-colors hover:bg-[#f0f1ec] hover:text-[#1a1c19]` |
|
|
249
|
+
| Link | `text-sm font-medium text-[#3d7c4e] hover:text-[#336b42]` |
|
|
250
|
+
|
|
251
|
+
### Input
|
|
252
|
+
|
|
253
|
+
```tsx
|
|
254
|
+
<input
|
|
255
|
+
className="w-full rounded-lg border border-[#e8e9e3] bg-white px-3 py-2 text-sm text-[#1a1c19] placeholder:text-[#a8aaa0] transition-shadow focus:border-[#3d7c4e] focus:shadow-[0_0_0_3px_rgba(61,124,78,0.15)] focus:outline-none"
|
|
256
|
+
placeholder="Search tests..."
|
|
257
|
+
/>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Card
|
|
261
|
+
|
|
262
|
+
```tsx
|
|
263
|
+
<div className="rounded-xl border border-[#e8e9e3] bg-white p-5">...</div>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Section header (with action)
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
<div className="flex items-center justify-between">
|
|
270
|
+
<h2 className="text-sm font-semibold text-[#1a1c19]">Recent Created Tests</h2>
|
|
271
|
+
<div className="flex items-center gap-2">
|
|
272
|
+
<button className="rounded-lg border border-[#e8e9e3] bg-white px-2.5 py-1.5 text-xs text-[#494c46] hover:bg-[#f0f1ec]">Last 7 Days ▾</button>
|
|
273
|
+
<button className="rounded-lg border border-[#e8e9e3] bg-white p-1.5 text-[#8a8d84] hover:bg-[#f0f1ec]"><Plus className="size-4" /></button>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Empty state (signature)
|
|
279
|
+
|
|
280
|
+
Isometric line-art mark, centered, muted, above a label + primary CTA. Draw the mark as stacked/offset wireframe cubes or layered chevrons in `--ts-subtle-fg` strokes (no fill).
|
|
281
|
+
|
|
282
|
+
```tsx
|
|
283
|
+
<div className="flex flex-col items-center gap-4 rounded-xl border border-[#e8e9e3] bg-white py-16">
|
|
284
|
+
<IsometricStackMark className="size-16 text-[#cfd1c8]" /> {/* line-art, stroke only */}
|
|
285
|
+
<p className="text-sm text-[#8a8d84]">No tests</p>
|
|
286
|
+
<button className="rounded-lg border border-[#e8e9e3] bg-white px-3.5 py-2 text-sm font-medium text-[#1a1c19] hover:bg-[#f0f1ec]">
|
|
287
|
+
<Plus className="mr-1.5 inline size-4" /> Create Tests
|
|
288
|
+
</button>
|
|
289
|
+
</div>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Promo / trial card (sidebar foot or rail)
|
|
293
|
+
|
|
294
|
+
Pale-green wash, sparkle glyph, headline, sub, feature pills, full-width primary CTA.
|
|
295
|
+
|
|
296
|
+
```tsx
|
|
297
|
+
<div className="rounded-xl border border-[#d3e6d5] bg-[#eaf3ea] p-4">
|
|
298
|
+
<p className="flex items-center gap-1.5 text-sm font-semibold text-[#1a1c19]"><Sparkles className="size-4 text-[#3d7c4e]" /> 1 Month Free Trial</p>
|
|
299
|
+
<p className="mt-1 text-xs text-[#494c46]">Unlock all features free for 1 month.</p>
|
|
300
|
+
<div className="mt-3 flex flex-wrap gap-1.5">{featurePills}</div>
|
|
301
|
+
<button className="mt-3 w-full rounded-lg bg-[#3d7c4e] px-4 py-2 text-sm font-medium text-white hover:bg-[#336b42]">Try For Free</button>
|
|
302
|
+
</div>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Plan / credits block (rail)
|
|
306
|
+
|
|
307
|
+
```tsx
|
|
308
|
+
<div className="rounded-xl border border-[#e8e9e3] bg-white p-4">
|
|
309
|
+
<div className="flex items-center justify-between">
|
|
310
|
+
<p className="text-sm font-semibold text-[#1a1c19]">My Plan</p>
|
|
311
|
+
<button className="text-xs font-medium text-[#3d7c4e]">Manage Plan</button>
|
|
312
|
+
</div>
|
|
313
|
+
<div className="mt-3 h-1.5 overflow-hidden rounded-full bg-[#f0f1ec]">
|
|
314
|
+
<div className="h-full rounded-full bg-[#3d7c4e]" style={{width:"30%"}} />
|
|
315
|
+
</div>
|
|
316
|
+
<p className="mt-2 flex items-center justify-between text-xs text-[#494c46]">
|
|
317
|
+
<span>Free</span><span className="tabular-nums"><b className="text-[#1a1c19]">150</b> Credits Remaining</span>
|
|
318
|
+
</p>
|
|
319
|
+
</div>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Changelog rail item
|
|
323
|
+
|
|
324
|
+
```tsx
|
|
325
|
+
<div className="border-t border-[#e8e9e3] py-3 first:border-0">
|
|
326
|
+
<span className="rounded-full bg-[#eaf3ea] px-2 py-0.5 text-[11px] font-medium text-[#3d7c4e]">New Feature</span>
|
|
327
|
+
<p className="mt-2 text-sm font-medium text-[#1a1c19]">GitHub Integration</p>
|
|
328
|
+
<p className="mt-1 text-xs leading-relaxed text-[#494c46]">Connect your repositories to streamline testing.</p>
|
|
329
|
+
<p className="mt-2 text-xs tabular-nums text-[#a8aaa0]">Feb 17, 2026</p>
|
|
330
|
+
</div>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Charts (light app data viz)
|
|
336
|
+
|
|
337
|
+
Quiet, green-led, on white panels:
|
|
338
|
+
|
|
339
|
+
- Primary series in forest green `#3d7c4e`; supporting series fade through a green ramp `#6fa67d → #a9cdb1 → #d3e6d5`. Status colors (`#c98a28`, `#cf4a3e`) only when the chart literally encodes pass/fail.
|
|
340
|
+
- **Rounded bars** (`borderRadius: 6`), flat fills. No gradients, no glow.
|
|
341
|
+
- Background = white card; gridlines `#e8e9e3`; axis text Inter, muted `#8a8d84`, `tabular-nums`.
|
|
342
|
+
- Tooltip: white bg, `#e8e9e3` border, ink `#1a1c19`, `8px` corners, the one soft card shadow.
|
|
343
|
+
|
|
344
|
+
```js
|
|
345
|
+
const PRIMARY="#3d7c4e", S2="#6fa67d", S3="#a9cdb1", S4="#d3e6d5", GRID="#e8e9e3";
|
|
346
|
+
Chart.defaults.font.family = "Inter, system-ui, sans-serif";
|
|
347
|
+
Chart.defaults.color = "#8a8d84";
|
|
348
|
+
// bars: backgroundColor:[S3, PRIMARY], borderRadius:6
|
|
349
|
+
// grid: { color: GRID }
|
|
350
|
+
// tooltip: { backgroundColor:"#fff", borderColor:"#e8e9e3", borderWidth:1, titleColor:"#1a1c19", bodyColor:"#494c46", cornerRadius:8 }
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Motion & effects
|
|
356
|
+
|
|
357
|
+
- **Calm.** `transition-colors duration-150` on interactive elements; `transition-shadow` on inputs.
|
|
358
|
+
- Hover = bg shift to `#f0f1ec` on rows/secondary buttons, darker fill `#336b42` on primary. No scale, no lift on rows.
|
|
359
|
+
- Focus: soft 3px green ring `rgba(61,124,78,0.15)` + green border on inputs. Always visible.
|
|
360
|
+
- At most one faint ambient card shadow; no neon glow (raycast), no hard offset (gumroad), no glass blur.
|
|
361
|
+
- Empty-state marks may fade/slide in gently; no bounce.
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## When to use
|
|
366
|
+
|
|
367
|
+
| Surface | Fit |
|
|
368
|
+
|---------|-----|
|
|
369
|
+
| Dev-tool dashboard, test runner, monitoring, settings, plan/billing | Strong fit |
|
|
370
|
+
| App shell with grouped sidebar + content + promo rail | Strong fit |
|
|
371
|
+
| Onboarding / empty states with illustrated CTAs | Strong fit |
|
|
372
|
+
| Marketing hero / landing page | Poor fit - use `grid`, `vercel-simple`, or `raycast` |
|
|
373
|
+
| Dense issue-tracker triage (3-pane) | Use `linear` |
|
|
374
|
+
|
|
375
|
+
TestSpirite is for **calm light-mode product app shells**. If the request is a marketing page, redirect to another style.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Anti-patterns
|
|
380
|
+
|
|
381
|
+
| Avoid | Why |
|
|
382
|
+
|-------|-----|
|
|
383
|
+
| Pure cool `#fff` / `#f9fafb` gray canvas | Use the warm sage-white `#f7f7f3`; the warmth is the signature |
|
|
384
|
+
| A second accent hue (blue, purple, etc.) | TestSpirite is one green only; color lives in green + status |
|
|
385
|
+
| Sharp `rounded-none` cards/buttons | The look is soft 8-16px radius, never blueprint-square |
|
|
386
|
+
| Heavy `shadow-lg`/`shadow-2xl` elevation | Structure is line-defined; at most one faint ambient shadow |
|
|
387
|
+
| Large green fills / green backgrounds | Reserve green for actions, active state, pills, and the pale promo wash |
|
|
388
|
+
| Filled or photographic empty-state art | Empty states are light gray isometric line-art (stroke only) |
|
|
389
|
+
| Uppercase letter-spaced labels everywhere | Only the sidebar section labels are uppercase; everything else is sentence case |
|
|
390
|
+
| Dark mode by default | TestSpirite is a light, warm, paper surface |
|
|
391
|
+
| Mono for body text | Inter sans for prose; mono only for keys/IDs |
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## Project overrides
|
|
396
|
+
|
|
397
|
+
If the repo defines `.agents/styles/testspirite.md` or `.agents/styles/testspirite-theme.md`, prefer those tokens and components over this portable spec.
|