gspec 1.7.0 → 1.11.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 +10 -8
- 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 +11 -9
- 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 +11 -9
- 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 +11 -9
- 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 +11 -9
- 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 +202 -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,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Next.js App Router, TypeScript, Tailwind CSS, deployed on Vercel
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Technology Stack Definition
|
|
7
|
+
|
|
8
|
+
## 1. Overview
|
|
9
|
+
|
|
10
|
+
- **Architecture style**: Server-rendered monolith (Next.js App Router with SSR/SSG)
|
|
11
|
+
- **Deployment target**: Cloud — Vercel (edge/serverless rendering with built-in CDN)
|
|
12
|
+
- **Scale & performance**: Core content loads within 2s on typical mobile networks; lean bundles via dynamic imports and tree-shaking; responsive across desktop and mobile viewports
|
|
13
|
+
|
|
14
|
+
## 2. Open Questions & Clarifications
|
|
15
|
+
|
|
16
|
+
None — all critical technology decisions are resolved.
|
|
17
|
+
|
|
18
|
+
## 3. Core Technology Stack
|
|
19
|
+
|
|
20
|
+
### Programming Languages
|
|
21
|
+
|
|
22
|
+
- **Primary**: TypeScript 5.x (strict mode enabled)
|
|
23
|
+
- *Rationale*: Type safety, predictable refactors, first-class Next.js support
|
|
24
|
+
- **Secondary**: N/A
|
|
25
|
+
- **Tooling**: ESLint (TypeScript rules), Prettier (formatting)
|
|
26
|
+
|
|
27
|
+
### Runtime Environment
|
|
28
|
+
|
|
29
|
+
- **Runtime**: Node.js 20+ LTS
|
|
30
|
+
- *Rationale*: Required for Next.js; LTS ensures stability and long-term security patches
|
|
31
|
+
- **Container runtime**: Not required — Vercel manages the runtime environment
|
|
32
|
+
|
|
33
|
+
## 4. Frontend Stack
|
|
34
|
+
|
|
35
|
+
### Framework
|
|
36
|
+
|
|
37
|
+
- **Framework**: Next.js (latest LTS release, App Router)
|
|
38
|
+
- *Rationale*: Server-rendered defaults with hydration as needed; App Router provides layouts, server components, and streaming out of the box; first-class Vercel deployment support
|
|
39
|
+
- **Update strategy**: Track Next.js LTS releases; upgrade within 30 days of new LTS availability
|
|
40
|
+
|
|
41
|
+
### Build Tools
|
|
42
|
+
|
|
43
|
+
- **Bundler**: Next.js built-in (SWC-based compiler + Turbopack for development)
|
|
44
|
+
- *Rationale*: Zero-config, optimized for the Next.js ecosystem; SWC provides fast TypeScript transpilation
|
|
45
|
+
- **Build optimization**: Dynamic imports for code-splitting, tree-shaking via ES module imports, Next.js image optimization pipeline
|
|
46
|
+
|
|
47
|
+
### State Management
|
|
48
|
+
|
|
49
|
+
- **Approach**: Server-first — lean on server components and server-rendered data; client-side state kept minimal
|
|
50
|
+
- **Libraries**: React built-in hooks (`useState`, `useReducer`, `useContext`) for local/client state
|
|
51
|
+
- *Rationale*: No global state library needed for a content-driven frontend; avoids unnecessary bundle weight
|
|
52
|
+
- **Data fetching**: Next.js `fetch` with caching directives in server components; SWR or server actions for any client-side data needs
|
|
53
|
+
|
|
54
|
+
### Styling Technology
|
|
55
|
+
|
|
56
|
+
- **Framework**: Tailwind CSS 4.x with design tokens for spacing, typography, colors, and elevation
|
|
57
|
+
- *Rationale*: Utility-first approach aligns with component-based architecture; shared configuration keeps styles cohesive; excellent tree-shaking for production
|
|
58
|
+
- **CSS-in-JS**: Not used — Tailwind utilities only; no raw CSS outside Tailwind conventions
|
|
59
|
+
- **Responsive design**: Tailwind responsive prefixes (`sm:`, `md:`, `lg:`, `xl:`) for mobile-first breakpoints
|
|
60
|
+
- **Note**: Icon library choices are defined in `gspec/style.md`. The stack defines the CSS framework and component library; the style defines the icon set.
|
|
61
|
+
|
|
62
|
+
## 5. Backend Stack
|
|
63
|
+
|
|
64
|
+
**Not Applicable** — this is a frontend-only / static site project deployed to Vercel. No database, API layer, or server-side auth is required.
|
|
65
|
+
|
|
66
|
+
### Database
|
|
67
|
+
|
|
68
|
+
N/A
|
|
69
|
+
|
|
70
|
+
### Caching Layer
|
|
71
|
+
|
|
72
|
+
N/A — Vercel edge caching and Next.js built-in caching handle content delivery.
|
|
73
|
+
|
|
74
|
+
### Message Queue / Event Bus
|
|
75
|
+
|
|
76
|
+
N/A
|
|
77
|
+
|
|
78
|
+
## 6. Infrastructure & DevOps
|
|
79
|
+
|
|
80
|
+
### Cloud Provider
|
|
81
|
+
|
|
82
|
+
- **Provider**: Vercel
|
|
83
|
+
- *Key services*: Edge network, serverless functions (if needed), image optimization, analytics
|
|
84
|
+
- *Rationale*: Purpose-built for Next.js; predictable builds, automatic edge caching, zero-config HTTPS
|
|
85
|
+
|
|
86
|
+
### Container Orchestration
|
|
87
|
+
|
|
88
|
+
N/A — Vercel manages scaling and deployment infrastructure automatically.
|
|
89
|
+
|
|
90
|
+
### CI/CD Pipeline
|
|
91
|
+
|
|
92
|
+
- **Platform:** GitLab CI
|
|
93
|
+
- *Rationale:* Aligns with existing team infrastructure and workflow.
|
|
94
|
+
- **Deployment trigger:** Merge to main branch after pipeline passes.
|
|
95
|
+
- **Deployment method:** Vercel Git integration for preview deployments on merge requests; production deploy on main branch merge.
|
|
96
|
+
- **Note:** Pipeline stages and structure (lint → typecheck → test → build → deploy) are defined in `gspec/practices.md`. This section defines the CI technology and deployment configuration.
|
|
97
|
+
|
|
98
|
+
### Infrastructure as Code
|
|
99
|
+
|
|
100
|
+
N/A — Vercel manages infrastructure. Project configuration lives in `next.config.ts` and `vercel.json` (if needed).
|
|
101
|
+
|
|
102
|
+
## 7. Data & Storage
|
|
103
|
+
|
|
104
|
+
### File Storage
|
|
105
|
+
|
|
106
|
+
- **Static assets**: Served via Vercel's built-in CDN from the `public/` directory
|
|
107
|
+
- **Images**: Next.js `<Image />` component with automatic optimization (WebP/AVIF, responsive sizing)
|
|
108
|
+
- **Asset management**: Styled placeholders used during development; final assets swapped in before release
|
|
109
|
+
|
|
110
|
+
### Data Warehouse / Analytics
|
|
111
|
+
|
|
112
|
+
N/A
|
|
113
|
+
|
|
114
|
+
## 8. Authentication & Security
|
|
115
|
+
|
|
116
|
+
N/A — no authentication or authorization layer for this frontend-only project.
|
|
117
|
+
|
|
118
|
+
### Security Tools
|
|
119
|
+
|
|
120
|
+
- **Secrets management**: Environment variables via Vercel project settings (build-time and runtime)
|
|
121
|
+
- **Security scanning**: `pnpm audit` for dependency vulnerabilities; Dependabot or Renovate for automated dependency updates
|
|
122
|
+
- **Compliance**: HTTPS enforced by Vercel; no user data collection requiring GDPR/CCPA compliance at this stage
|
|
123
|
+
|
|
124
|
+
## 9. Monitoring & Observability
|
|
125
|
+
|
|
126
|
+
Minimal for initial launch — to be revisited as the project scales.
|
|
127
|
+
|
|
128
|
+
### Application Monitoring
|
|
129
|
+
|
|
130
|
+
Deferred — Vercel provides basic deployment and function metrics out of the box.
|
|
131
|
+
|
|
132
|
+
### Logging
|
|
133
|
+
|
|
134
|
+
Deferred — Vercel function logs available via dashboard for debugging.
|
|
135
|
+
|
|
136
|
+
### Tracing
|
|
137
|
+
|
|
138
|
+
N/A
|
|
139
|
+
|
|
140
|
+
### Error Tracking
|
|
141
|
+
|
|
142
|
+
Deferred — can add Sentry when needed. Next.js has built-in error boundaries for graceful UI failure handling.
|
|
143
|
+
|
|
144
|
+
## 10. Testing Infrastructure
|
|
145
|
+
|
|
146
|
+
### Testing Frameworks
|
|
147
|
+
|
|
148
|
+
- **Unit / Integration**: Vitest
|
|
149
|
+
- *Rationale*: Fast, ESM-native, excellent TypeScript support; compatible with React Testing Library
|
|
150
|
+
- **Component testing**: React Testing Library
|
|
151
|
+
- *Rationale*: Tests components as users interact with them; encourages accessible markup
|
|
152
|
+
- **E2E**: Cypress (headless in CI)
|
|
153
|
+
- *Rationale*: Mature ecosystem, reliable deterministic tests with `cy.intercept()` for stubbing
|
|
154
|
+
|
|
155
|
+
### Test Data Management
|
|
156
|
+
|
|
157
|
+
- **Fixtures**: JSON fixtures in `tests/fixtures/` for consistent test data
|
|
158
|
+
- **Mocks**: Vitest built-in mocking for modules; `cy.intercept()` for network stubbing in E2E
|
|
159
|
+
- **Test isolation**: Each test suite manages its own state; no shared mutable state between tests
|
|
160
|
+
|
|
161
|
+
### Performance Testing
|
|
162
|
+
|
|
163
|
+
Deferred — Core Web Vitals monitored via Lighthouse CI or Vercel Analytics when enabled.
|
|
164
|
+
|
|
165
|
+
## 11. Third-Party Integrations
|
|
166
|
+
|
|
167
|
+
### External Services
|
|
168
|
+
|
|
169
|
+
- **Formspree** — Client-side form submission service for contact forms and visitor inquiries. Accepts POST requests directly from the browser — no server-side endpoint or backend code required.
|
|
170
|
+
- *Rationale*: This is a frontend-only project with no backend logic. Formspree provides form handling without requiring server actions or API routes, keeping the architecture static.
|
|
171
|
+
- Free tier supports up to 50 submissions per month.
|
|
172
|
+
- Submissions are forwarded to a configured email address.
|
|
173
|
+
|
|
174
|
+
### API Clients
|
|
175
|
+
|
|
176
|
+
- **HTTP client**: Native `fetch` API for Formspree form submissions. No SDK dependency needed — Formspree accepts standard `FormData` POST requests.
|
|
177
|
+
|
|
178
|
+
## 12. Development Tools
|
|
179
|
+
|
|
180
|
+
### Package Management
|
|
181
|
+
|
|
182
|
+
- **Package manager**: pnpm (latest stable)
|
|
183
|
+
- *Rationale*: Fast installs, strict dependency resolution prevents phantom dependencies, disk-efficient via content-addressable storage
|
|
184
|
+
- **Dependency management**: `pnpm-lock.yaml` committed to version control; `pnpm audit` run in CI
|
|
185
|
+
- **Private registry**: N/A
|
|
186
|
+
|
|
187
|
+
### Code Quality Tools
|
|
188
|
+
|
|
189
|
+
- **Linter**: ESLint with `eslint-config-next` and TypeScript rules
|
|
190
|
+
- **Formatter**: Prettier (configured to align with ESLint)
|
|
191
|
+
- **Pre-commit hooks**: Husky + lint-staged for running ESLint and Prettier on staged files
|
|
192
|
+
- **Type checking**: `tsc --noEmit` in CI pipeline
|
|
193
|
+
|
|
194
|
+
### Local Development
|
|
195
|
+
|
|
196
|
+
- **Project starter**: `create-next-app` (official Next.js scaffolding tool via `pnpm create next-app`)
|
|
197
|
+
- *Rationale*: Provides a well-structured starting point with recommended defaults, TypeScript config, and App Router setup
|
|
198
|
+
- **Setup**: `pnpm install` → `pnpm dev` (Next.js dev server with Turbopack)
|
|
199
|
+
- **Hot reload**: Built-in via Next.js Fast Refresh
|
|
200
|
+
- **Environment**: `.env.local` for local environment variables (gitignored)
|
|
201
|
+
|
|
202
|
+
## 13. Migration & Compatibility
|
|
203
|
+
|
|
204
|
+
### Legacy System Integration
|
|
205
|
+
|
|
206
|
+
N/A — greenfield project.
|
|
207
|
+
|
|
208
|
+
### Upgrade Path
|
|
209
|
+
|
|
210
|
+
- **Next.js**: Track LTS releases; review changelogs and run codemods when upgrading major versions
|
|
211
|
+
- **Tailwind CSS**: Follow major version migration guides; design tokens minimize breaking changes
|
|
212
|
+
- **Dependencies**: Automated update PRs via Renovate or Dependabot; reviewed weekly
|
|
213
|
+
|
|
214
|
+
## 14. Technology Decisions & Tradeoffs
|
|
215
|
+
|
|
216
|
+
### Key Architectural Decisions
|
|
217
|
+
|
|
218
|
+
| Decision | Choice | Alternatives Considered | Rationale |
|
|
219
|
+
|---|---|---|---|
|
|
220
|
+
| Framework | Next.js (App Router) | Remix, Astro, Nuxt | Best Vercel integration; mature SSR/SSG; React ecosystem |
|
|
221
|
+
| Styling | Tailwind CSS | CSS Modules, Styled Components | Utility-first aligns with component architecture; zero runtime cost; design token support |
|
|
222
|
+
| Testing | Vitest + Cypress | Jest + Playwright | Vitest is faster and ESM-native; Cypress is mature for E2E with reliable stubbing |
|
|
223
|
+
| Package manager | pnpm | npm, yarn | Strict resolution prevents phantom deps; faster installs; disk-efficient |
|
|
224
|
+
| Deployment | Vercel | Netlify, AWS Amplify, Cloudflare Pages | Purpose-built for Next.js; edge caching; zero-config previews |
|
|
225
|
+
| CI/CD | GitLab CI | GitHub Actions | Aligns with existing team infrastructure and workflow |
|
|
226
|
+
|
|
227
|
+
### Risk Mitigation
|
|
228
|
+
|
|
229
|
+
| Risk | Mitigation | Fallback |
|
|
230
|
+
|---|---|---|
|
|
231
|
+
| Next.js breaking changes on major upgrade | Pin to LTS; test upgrades in preview branch | Delay upgrade; apply security patches only |
|
|
232
|
+
| Vercel vendor lock-in | Keep Next.js config portable; avoid Vercel-only APIs where possible | Self-host via `next start` on any Node.js platform |
|
|
233
|
+
| Tailwind major version migration | Use design tokens abstraction layer; follow official migration guides | Gradual migration with compatibility layer |
|
|
234
|
+
|
|
235
|
+
## 15. Technology-Specific Practices
|
|
236
|
+
|
|
237
|
+
### Framework Conventions & Patterns
|
|
238
|
+
|
|
239
|
+
- **App Router structure:** Use the `app/` directory with route groups for logical organization (e.g., `(marketing)` for public pages). Keep layouts in `app/layout.tsx` and page-level layouts in route group folders.
|
|
240
|
+
- **Server vs Client Components:** Default to Server Components. Add `"use client"` only when the component needs browser APIs, event handlers, or React hooks (`useState`, `useEffect`). Push interactivity to leaf components.
|
|
241
|
+
- **Static generation:** Prefer static rendering (SSG) for content pages. Use `generateStaticParams()` for dynamic routes if applicable.
|
|
242
|
+
- **Loading and error states:** Use `loading.tsx` and `error.tsx` files at appropriate route levels for streaming UI and error boundaries.
|
|
243
|
+
- **Metadata:** Export `metadata` or `generateMetadata` from every page for SEO (title, description, Open Graph).
|
|
244
|
+
|
|
245
|
+
### Library Usage Patterns
|
|
246
|
+
|
|
247
|
+
- **Tailwind conventions:** Use Tailwind utility classes directly in JSX. Avoid `@apply` except in global styles for base resets. Use `cn()` or `clsx()` for conditional class merging. Follow mobile-first responsive design (`sm:`, `md:`, `lg:` breakpoints).
|
|
248
|
+
- **Design token mapping:** Map design tokens from `gspec/style.md` to Tailwind's theme configuration in `tailwind.config.ts` under `theme.extend`. Use CSS custom properties in `app/globals.css` for runtime theme switching (light/dark mode).
|
|
249
|
+
- **Image optimization:** Use Next.js `<Image />` component for all images. Set `priority` on above-the-fold hero images.
|
|
250
|
+
|
|
251
|
+
### Language Idioms
|
|
252
|
+
|
|
253
|
+
- **TypeScript strict mode:** `strict: true` in `tsconfig.json`. No `any` types — use `unknown` and narrow with type guards.
|
|
254
|
+
- **Path aliases:** Use `@/` alias (configured in `tsconfig.json`) for imports from the project root. Example: `import { Button } from "@/components/ui/button"`.
|
|
255
|
+
- **Import organization:** Group imports: (1) React/Next.js, (2) third-party libraries, (3) internal modules, (4) relative imports.
|
|
256
|
+
- **Async patterns:** Use `async/await` consistently. Avoid `.then()` chains.
|
|
257
|
+
|
|
258
|
+
### Stack-Specific Anti-Patterns
|
|
259
|
+
|
|
260
|
+
- **Don't use `useEffect` for data fetching** when a Server Component can do the same work — causes client-side waterfalls.
|
|
261
|
+
- **Don't add `"use client"` to layout files** unless absolutely necessary — this forces all children to be client components.
|
|
262
|
+
- **Don't import server-only modules in Client Components.** Use the `server-only` package to enforce boundaries.
|
|
263
|
+
- **Don't install a CSS-in-JS library** alongside Tailwind — pick one styling approach.
|
|
264
|
+
- **Don't use inline styles** for values that should be design tokens — map them through Tailwind configuration.
|
|
@@ -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.
|