gspec 1.7.0 → 1.10.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/bin/gspec.js +275 -8
- package/commands/gspec.analyze.md +1 -1
- package/commands/gspec.implement.md +3 -3
- package/commands/gspec.practices.md +3 -1
- package/commands/gspec.stack.md +11 -6
- package/commands/gspec.style.md +18 -23
- package/dist/antigravity/gspec-analyze/SKILL.md +1 -1
- package/dist/antigravity/gspec-architect/SKILL.md +1 -1
- package/dist/antigravity/gspec-feature/SKILL.md +1 -1
- package/dist/antigravity/gspec-implement/SKILL.md +4 -4
- package/dist/antigravity/gspec-migrate/SKILL.md +5 -5
- package/dist/antigravity/gspec-practices/SKILL.md +4 -2
- package/dist/antigravity/gspec-profile/SKILL.md +1 -1
- package/dist/antigravity/gspec-research/SKILL.md +3 -3
- package/dist/antigravity/gspec-stack/SKILL.md +12 -7
- package/dist/antigravity/gspec-style/SKILL.md +19 -24
- package/dist/claude/gspec-analyze/SKILL.md +1 -1
- package/dist/claude/gspec-architect/SKILL.md +1 -1
- package/dist/claude/gspec-feature/SKILL.md +1 -1
- package/dist/claude/gspec-implement/SKILL.md +4 -4
- package/dist/claude/gspec-migrate/SKILL.md +5 -5
- package/dist/claude/gspec-practices/SKILL.md +4 -2
- package/dist/claude/gspec-profile/SKILL.md +1 -1
- package/dist/claude/gspec-research/SKILL.md +3 -3
- package/dist/claude/gspec-stack/SKILL.md +12 -7
- package/dist/claude/gspec-style/SKILL.md +19 -24
- package/dist/codex/gspec-analyze/SKILL.md +1 -1
- package/dist/codex/gspec-architect/SKILL.md +1 -1
- package/dist/codex/gspec-feature/SKILL.md +1 -1
- package/dist/codex/gspec-implement/SKILL.md +4 -4
- package/dist/codex/gspec-migrate/SKILL.md +5 -5
- package/dist/codex/gspec-practices/SKILL.md +4 -2
- package/dist/codex/gspec-profile/SKILL.md +1 -1
- package/dist/codex/gspec-research/SKILL.md +3 -3
- package/dist/codex/gspec-stack/SKILL.md +12 -7
- package/dist/codex/gspec-style/SKILL.md +19 -24
- package/dist/cursor/gspec-analyze.mdc +1 -1
- package/dist/cursor/gspec-architect.mdc +1 -1
- package/dist/cursor/gspec-feature.mdc +1 -1
- package/dist/cursor/gspec-implement.mdc +4 -4
- package/dist/cursor/gspec-migrate.mdc +5 -5
- package/dist/cursor/gspec-practices.mdc +4 -2
- package/dist/cursor/gspec-profile.mdc +1 -1
- package/dist/cursor/gspec-research.mdc +3 -3
- package/dist/cursor/gspec-stack.mdc +12 -7
- package/dist/cursor/gspec-style.mdc +19 -24
- package/dist/opencode/gspec-analyze/SKILL.md +168 -0
- package/dist/opencode/gspec-architect/SKILL.md +361 -0
- package/dist/opencode/gspec-feature/SKILL.md +204 -0
- package/dist/opencode/gspec-implement/SKILL.md +200 -0
- package/dist/opencode/gspec-migrate/SKILL.md +118 -0
- package/dist/opencode/gspec-practices/SKILL.md +137 -0
- package/dist/opencode/gspec-profile/SKILL.md +221 -0
- package/dist/opencode/gspec-research/SKILL.md +302 -0
- package/dist/opencode/gspec-stack/SKILL.md +305 -0
- package/dist/opencode/gspec-style/SKILL.md +224 -0
- package/package.json +3 -1
- package/starters/features/about-page.md +98 -0
- package/starters/features/contact-form.md +147 -0
- package/starters/features/contact-page.md +103 -0
- package/starters/features/home-page.md +103 -0
- package/starters/features/responsive-navbar.md +113 -0
- package/starters/features/services-page.md +103 -0
- package/starters/features/site-footer.md +121 -0
- package/starters/features/theme-switcher.md +124 -0
- package/starters/practices/tdd-pipeline-first.md +192 -0
- package/starters/stacks/astro-tailwind-github-pages.md +283 -0
- package/starters/stacks/nextjs-supabase-vercel.md +319 -0
- package/starters/stacks/nextjs-vercel-typescript.md +264 -0
- package/starters/styles/clean-professional.md +316 -0
- package/starters/styles/dark-minimal-developer.md +442 -0
- package/templates/spec-sync.md +1 -1
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Clean, professional design with restrained palette and clear typography
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Visual Style Guide
|
|
7
|
+
|
|
8
|
+
## 1. Overview
|
|
9
|
+
|
|
10
|
+
- **Design Vision**: A clean, professional interface that communicates expertise and trustworthiness. The design recedes to let content take center stage — clear typography, generous whitespace, and purposeful color usage.
|
|
11
|
+
- **Target Platforms**: Responsive web (Mobile-First, scaling to Desktop/Tablet).
|
|
12
|
+
- **Visual Personality**: Professional, Approachable, Reliable, Pragmatic.
|
|
13
|
+
- **Design Rationale**: A professional services site must project competence and trustworthiness at a glance. The restrained palette and clear typography let the content speak, while strategic use of color draws attention to key actions. The minimal aesthetic avoids visual noise that could undermine credibility.
|
|
14
|
+
|
|
15
|
+
## 2. Color Palette
|
|
16
|
+
|
|
17
|
+
High-contrast and professional, designed for readability across devices and lighting conditions.
|
|
18
|
+
|
|
19
|
+
### Primary Colors
|
|
20
|
+
|
|
21
|
+
| Color Name | Hex | Usage |
|
|
22
|
+
| :--- | :--- | :--- |
|
|
23
|
+
| **Primary** | `#2563EB` | Primary action color. Used for primary buttons, active states, and key highlights. |
|
|
24
|
+
| **Primary Dark** | `#1D4ED8` | Hover states for primary actions. |
|
|
25
|
+
| **Primary Light** | `#60A5FA` | Accents on dark backgrounds. |
|
|
26
|
+
|
|
27
|
+
### Secondary Colors
|
|
28
|
+
|
|
29
|
+
| Color Name | Hex | Usage |
|
|
30
|
+
| :--- | :--- | :--- |
|
|
31
|
+
| **Slate Dark** | `#0F172A` | Dark mode background. |
|
|
32
|
+
| **Slate Surface** | `#1E293B` | Dark mode cards/surfaces. |
|
|
33
|
+
| **Paper White** | `#FFFFFF` | Light mode background. |
|
|
34
|
+
|
|
35
|
+
### Neutral Colors
|
|
36
|
+
|
|
37
|
+
| Role | Light Mode | Dark Mode | Usage |
|
|
38
|
+
| :--- | :--- | :--- | :--- |
|
|
39
|
+
| **Text Primary** | `#0F172A` | `#F8FAFC` | Headings, main body text. |
|
|
40
|
+
| **Text Secondary** | `#64748B` | `#94A3B8` | Labels, helper text, supporting content. |
|
|
41
|
+
| **Text Disabled** | `#CBD5E1` | `#475569` | Disabled fields, placeholders. |
|
|
42
|
+
| **Border** | `#E2E8F0` | `#334155` | Dividers, input borders. |
|
|
43
|
+
|
|
44
|
+
### Semantic Colors
|
|
45
|
+
|
|
46
|
+
| State | Color | Hex | Usage |
|
|
47
|
+
| :--- | :--- | :--- | :--- |
|
|
48
|
+
| **Success** | Emerald | `#10B981` | Success confirmations, positive feedback. |
|
|
49
|
+
| **Error** | Red | `#EF4444` | Validation errors, destructive actions. |
|
|
50
|
+
| **Warning** | Amber | `#F59E0B` | Non-critical alerts, warnings. |
|
|
51
|
+
| **Info** | Sky | `#0EA5E9` | Informational tooltips, notes. |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 3. Typography
|
|
56
|
+
|
|
57
|
+
Typography is the primary interface element. It must be legible and convey professionalism.
|
|
58
|
+
|
|
59
|
+
### Font Families
|
|
60
|
+
|
|
61
|
+
- **Primary (UI & Headings)**: **Inter** (Google Fonts). Clean, highly legible, with a tall x-height.
|
|
62
|
+
- **Monospace (Code & Data)**: **JetBrains Mono** or system monospace fallback. Used for code snippets or technical content if needed.
|
|
63
|
+
|
|
64
|
+
### Type Scale (Mobile-First)
|
|
65
|
+
|
|
66
|
+
| Level | Size (rem/px) | Line Height | Weight | Usage |
|
|
67
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
68
|
+
| **H1** | `1.875rem` (30px) | `1.2` | Bold (700) | Page titles |
|
|
69
|
+
| **H2** | `1.5rem` (24px) | `1.3` | SemiBold (600) | Section headers |
|
|
70
|
+
| **H3** | `1.25rem` (20px) | `1.4` | Medium (500) | Sub-sections, card titles |
|
|
71
|
+
| **Body Lg** | `1.125rem` (18px) | `1.5` | Regular (400) | Featured text, hero subtitles |
|
|
72
|
+
| **Body Base** | `1rem` (16px) | `1.5` | Regular (400) | Default text, descriptions |
|
|
73
|
+
| **Body Sm** | `0.875rem` (14px) | `1.4` | Regular (400) | Metadata, captions |
|
|
74
|
+
| **Caption** | `0.75rem` (12px) | `1.4` | Medium (500) | Tiny labels, tags |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 4. Spacing & Layout
|
|
79
|
+
|
|
80
|
+
Standard 4px grid system.
|
|
81
|
+
|
|
82
|
+
### Spacing Scale
|
|
83
|
+
|
|
84
|
+
- **xs**: `4px` (0.25rem) — Tight grouping (tags, icon+text)
|
|
85
|
+
- **sm**: `8px` (0.5rem) — Component internal spacing
|
|
86
|
+
- **md**: `16px` (1rem) — Standard separation between elements
|
|
87
|
+
- **lg**: `24px` (1.5rem) — Section separation
|
|
88
|
+
- **xl**: `32px` (2rem) — Major layout breaks
|
|
89
|
+
|
|
90
|
+
### Grid System
|
|
91
|
+
|
|
92
|
+
- **Container**: Max-width 1152px centered with horizontal padding for comfortable reading width.
|
|
93
|
+
- **Columns**: Single-column layout on mobile. Multi-column grids on desktop where appropriate.
|
|
94
|
+
|
|
95
|
+
### Layout Patterns
|
|
96
|
+
|
|
97
|
+
- **Mobile-first**: Single-column stacked layout.
|
|
98
|
+
- **Desktop**: Multi-column grids for cards and feature sections.
|
|
99
|
+
- **Flex containers**: Always apply `min-width: 0` on flex children that wrap content to prevent the flexbox `min-width: auto` default from causing horizontal overflow on mobile.
|
|
100
|
+
- **Content wrappers**: Use `overflow: hidden` on bounded containers (cards, main content area) to clip any remaining overflow.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 5. Themes
|
|
105
|
+
|
|
106
|
+
### Light Mode (Default)
|
|
107
|
+
- **Background**: `#FFFFFF`
|
|
108
|
+
- **Surface**: `#F8FAFC` or `#FFFFFF` with borders.
|
|
109
|
+
- **Text**: `#0F172A`
|
|
110
|
+
|
|
111
|
+
### Dark Mode
|
|
112
|
+
- **Background**: `#0F172A` (Not pure black, reduces contrast strain).
|
|
113
|
+
- **Surface**: `#1E293B`
|
|
114
|
+
- **Primary Action**: `#2563EB` stands out vividly.
|
|
115
|
+
- **Text**: `#F8FAFC` for high legibility.
|
|
116
|
+
|
|
117
|
+
### Theme Token Mapping
|
|
118
|
+
- Light and dark themes share the same token names. Switching themes swaps the values of `--color-background`, `--color-surface`, `--color-text-primary`, `--color-text-secondary`, `--color-text-disabled`, and `--color-border`.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 6. Component Styling
|
|
123
|
+
|
|
124
|
+
> **This section defines visual styling only** — colors, borders, typography, and spacing for common UI elements. Component structure, behavior, and layout patterns are defined in feature PRDs.
|
|
125
|
+
|
|
126
|
+
### Buttons
|
|
127
|
+
|
|
128
|
+
- **Primary**: Background `#2563EB`, text white, border-radius 6px.
|
|
129
|
+
- **Primary Hover**: Background `#1D4ED8`.
|
|
130
|
+
- **Secondary**: Background transparent, border 1px `#CBD5E1` (Light) / `#475569` (Dark), text `#334155` (Light) / `#CBD5E1` (Dark).
|
|
131
|
+
- **Ghost**: No border, no background. Hover: subtle background fill.
|
|
132
|
+
- **Disabled**: 50% opacity, `cursor: not-allowed`.
|
|
133
|
+
- **Sizes**: Default 40px height, Large 48px height. Minimum touch target 44x44px.
|
|
134
|
+
|
|
135
|
+
### Form Elements
|
|
136
|
+
|
|
137
|
+
- **Input Background**: Transparent (Light) / Transparent (Dark).
|
|
138
|
+
- **Input Border**: 1px `#CBD5E1` (Light) / `#334155` (Dark), border-radius 6px.
|
|
139
|
+
- **Focus**: Border `#2563EB` (2px), ring `rgba(37, 99, 235, 0.2)`.
|
|
140
|
+
- **Error**: Border `#EF4444`, helper text in `#EF4444`.
|
|
141
|
+
- **Disabled**: 50% opacity.
|
|
142
|
+
|
|
143
|
+
### Cards & Containers
|
|
144
|
+
|
|
145
|
+
- **Background**: `#FFFFFF` (Light) / `#1E293B` (Dark).
|
|
146
|
+
- **Border**: 1px solid `#E2E8F0` (Light) / `#334155` (Dark).
|
|
147
|
+
- **Border-radius**: 8px.
|
|
148
|
+
- **Shadow**: `--shadow-sm` or none. Heavy shadows are avoided for a clean look.
|
|
149
|
+
|
|
150
|
+
### Navigation Elements
|
|
151
|
+
|
|
152
|
+
- **Link Color**: `--color-text-secondary` default, `--color-text-primary` on hover.
|
|
153
|
+
- **Active Link**: `--color-primary` text color.
|
|
154
|
+
- **Nav Background**: `--color-background` with optional `--shadow-md` for sticky positioning.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 7. Visual Effects
|
|
159
|
+
|
|
160
|
+
### Shadows & Elevation
|
|
161
|
+
Minimalist approach.
|
|
162
|
+
- **None**: Most elements.
|
|
163
|
+
- **sm**: `0 1px 2px rgba(0, 0, 0, 0.05)` for cards to lift slightly off background.
|
|
164
|
+
- **md**: `0 4px 6px rgba(0, 0, 0, 0.07)` for floating elements or sticky headers.
|
|
165
|
+
|
|
166
|
+
### Border Radius
|
|
167
|
+
- **Standard**: 6px for inputs/buttons.
|
|
168
|
+
- **Large**: 8px for cards/containers.
|
|
169
|
+
- **Pills**: 9999px for status tags.
|
|
170
|
+
|
|
171
|
+
### Transitions & Animations
|
|
172
|
+
- **Speed**: Fast (150ms or 200ms).
|
|
173
|
+
- **Ease**: `cubic-bezier(0, 0, 0.2, 1)` (ease-out).
|
|
174
|
+
- **Feedback**: Immediate visual feedback on interaction (hover color shift, subtle scale reduction on press for buttons).
|
|
175
|
+
- **Loading States**: Skeleton screens or spinner indicators for async operations.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 8. Iconography
|
|
180
|
+
|
|
181
|
+
### Icon Library
|
|
182
|
+
- **Library**: [HeroIcons](https://heroicons.com/) — MIT-licensed, SVG-based, tree-shakeable inline imports. Maintained by the Tailwind team for consistent pairing with utility-first CSS.
|
|
183
|
+
- **Style**: Outlined, 2px stroke.
|
|
184
|
+
- **Size**:
|
|
185
|
+
- Small: 16px.
|
|
186
|
+
- Standard: 20px.
|
|
187
|
+
- Navigation: 24px.
|
|
188
|
+
|
|
189
|
+
### Usage Guidelines
|
|
190
|
+
- Pair icons with text labels in navigation for accessibility.
|
|
191
|
+
- Use familiar metaphors for common actions.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 9. Imagery & Media
|
|
196
|
+
|
|
197
|
+
### Photography Style
|
|
198
|
+
Not applicable for initial launch. If marketing imagery is added later, it should be authentic and professional — not generic stock photography.
|
|
199
|
+
|
|
200
|
+
### Illustrations
|
|
201
|
+
Not applicable — the UI relies on typography, spacing, and iconography rather than illustrations. Empty states use icon + text patterns.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 10. Accessibility
|
|
206
|
+
|
|
207
|
+
### Contrast Requirements
|
|
208
|
+
- Maintain WCAG AA standard (4.5:1) for normal text.
|
|
209
|
+
- Large text (18px+ or 14px+ bold) requires 3:1 minimum.
|
|
210
|
+
|
|
211
|
+
### Focus States
|
|
212
|
+
- Visible focus rings for keyboard/screen reader navigation.
|
|
213
|
+
- Focus ring style: 2px offset ring in primary color.
|
|
214
|
+
|
|
215
|
+
### Text Accessibility
|
|
216
|
+
- **Touch**: All interactive elements must have at least 44px hit areas.
|
|
217
|
+
- Minimum body font size: 16px (1rem).
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 11. Responsive Design
|
|
222
|
+
|
|
223
|
+
### Breakpoints
|
|
224
|
+
- **Mobile First**: Design for 375px width base.
|
|
225
|
+
- **sm**: 640px (Large phones)
|
|
226
|
+
- **md**: 768px (Tablets)
|
|
227
|
+
- **lg**: 1024px (Desktop)
|
|
228
|
+
|
|
229
|
+
### Mobile-Specific Patterns
|
|
230
|
+
- Touch targets: minimum 44x44px on all interactive elements.
|
|
231
|
+
- Mobile navigation: Hamburger menu pattern (see Components > Navigation).
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 12. Usage Examples
|
|
236
|
+
|
|
237
|
+
### Design Tokens
|
|
238
|
+
|
|
239
|
+
Tokens are defined as framework-agnostic CSS custom properties.
|
|
240
|
+
|
|
241
|
+
- Naming convention: `--color-*`, `--font-*`, `--spacing-*`, `--shadow-*`, `--radius-*`, `--duration-*`
|
|
242
|
+
|
|
243
|
+
```css
|
|
244
|
+
:root {
|
|
245
|
+
/* Colors — Primary */
|
|
246
|
+
--color-primary: #2563EB;
|
|
247
|
+
--color-primary-dark: #1D4ED8;
|
|
248
|
+
--color-primary-light: #60A5FA;
|
|
249
|
+
--color-primary-foreground: #FFFFFF;
|
|
250
|
+
|
|
251
|
+
/* Colors — Semantic */
|
|
252
|
+
--color-success: #10B981;
|
|
253
|
+
--color-error: #EF4444;
|
|
254
|
+
--color-warning: #F59E0B;
|
|
255
|
+
--color-info: #0EA5E9;
|
|
256
|
+
|
|
257
|
+
/* Colors — Light Mode (default) */
|
|
258
|
+
--color-background: #FFFFFF;
|
|
259
|
+
--color-surface: #F8FAFC;
|
|
260
|
+
--color-text-primary: #0F172A;
|
|
261
|
+
--color-text-secondary: #64748B;
|
|
262
|
+
--color-text-disabled: #CBD5E1;
|
|
263
|
+
--color-border: #E2E8F0;
|
|
264
|
+
|
|
265
|
+
/* Typography */
|
|
266
|
+
--font-family-sans: 'Inter', sans-serif;
|
|
267
|
+
--font-family-mono: 'JetBrains Mono', monospace;
|
|
268
|
+
--font-size-h1: 1.875rem;
|
|
269
|
+
--font-size-h2: 1.5rem;
|
|
270
|
+
--font-size-h3: 1.25rem;
|
|
271
|
+
--font-size-body-lg: 1.125rem;
|
|
272
|
+
--font-size-body: 1rem;
|
|
273
|
+
--font-size-body-sm: 0.875rem;
|
|
274
|
+
--font-size-caption: 0.75rem;
|
|
275
|
+
--font-weight-regular: 400;
|
|
276
|
+
--font-weight-medium: 500;
|
|
277
|
+
--font-weight-semibold: 600;
|
|
278
|
+
--font-weight-bold: 700;
|
|
279
|
+
|
|
280
|
+
/* Spacing */
|
|
281
|
+
--spacing-xs: 0.25rem;
|
|
282
|
+
--spacing-sm: 0.5rem;
|
|
283
|
+
--spacing-md: 1rem;
|
|
284
|
+
--spacing-lg: 1.5rem;
|
|
285
|
+
--spacing-xl: 2rem;
|
|
286
|
+
|
|
287
|
+
/* Border Radius */
|
|
288
|
+
--radius-md: 0.375rem;
|
|
289
|
+
--radius-lg: 0.5rem;
|
|
290
|
+
--radius-full: 9999px;
|
|
291
|
+
|
|
292
|
+
/* Shadows */
|
|
293
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
294
|
+
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
|
|
295
|
+
|
|
296
|
+
/* Transitions */
|
|
297
|
+
--duration-fast: 150ms;
|
|
298
|
+
--duration-medium: 200ms;
|
|
299
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* Dark Mode */
|
|
303
|
+
[data-theme="dark"],
|
|
304
|
+
.dark {
|
|
305
|
+
--color-background: #0F172A;
|
|
306
|
+
--color-surface: #1E293B;
|
|
307
|
+
--color-text-primary: #F8FAFC;
|
|
308
|
+
--color-text-secondary: #94A3B8;
|
|
309
|
+
--color-text-disabled: #475569;
|
|
310
|
+
--color-border: #334155;
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Component Combinations
|
|
315
|
+
|
|
316
|
+
To be defined.
|