create-agentic-app 1.1.56 → 1.1.58
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/package.json +1 -1
- package/template/.agents/skills/security-scanner/SKILL.md +157 -0
- package/template/.agents/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.agents/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.agents/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.agents/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.agents/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.agents/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.agents/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.agents/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.agents/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.agents/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.agents/skills/security-scanner/references/report-template.md +148 -0
- package/template/.claude/agents/security-scanner.md +214 -0
- package/template/.claude/skills/security-scanner/SKILL.md +157 -0
- package/template/.claude/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.claude/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.claude/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.claude/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.claude/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.claude/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.claude/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.claude/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.claude/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.claude/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.claude/skills/security-scanner/references/report-template.md +148 -0
- package/template/AGENTS.md +21 -77
- package/template/DESIGN.md +451 -0
- package/template/next-env.d.ts +1 -1
- package/template/specs/ui-polish-responsive/README.md +59 -0
- package/template/specs/ui-polish-responsive/action-required.md +3 -0
- package/template/specs/ui-polish-responsive/requirements.md +53 -0
- package/template/specs/ui-polish-responsive/tasks/task-01-globals-css.md +144 -0
- package/template/specs/ui-polish-responsive/tasks/task-02-layout.md +66 -0
- package/template/specs/ui-polish-responsive/tasks/task-03-site-header.md +79 -0
- package/template/specs/ui-polish-responsive/tasks/task-04-site-footer.md +63 -0
- package/template/specs/ui-polish-responsive/tasks/task-05-home-page.md +215 -0
- package/template/specs/ui-polish-responsive/tasks/task-06-dashboard.md +222 -0
- package/template/specs/ui-polish-responsive/tasks/task-07-chat-page.md +225 -0
- package/template/specs/ui-polish-responsive/tasks/task-08-profile-page.md +192 -0
- package/template/specs/ui-polish-responsive/tasks/task-09-auth-pages.md +97 -0
- package/template/specs/ui-polish-responsive/tasks/task-10-setup-checklist.md +120 -0
- package/template/specs/ui-polish-responsive/tasks/task-11-starter-prompt-modal.md +87 -0
- package/template/src/app/globals.css +65 -7
- package/template/src/app/layout.tsx +2 -2
- package/template/src/app/page.tsx +174 -174
- package/template/src/components/setup-checklist.tsx +162 -162
- package/template/src/components/site-footer.tsx +2 -2
- package/template/src/components/site-header.tsx +3 -3
- package/template/src/components/starter-prompt-modal.tsx +202 -202
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
# Design System
|
|
2
|
+
|
|
3
|
+
This document defines the visual design system for the project. All new components and pages **must** follow these tokens, patterns, and conventions.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Stack
|
|
8
|
+
|
|
9
|
+
- **Framework:** Next.js (App Router) + React + TypeScript
|
|
10
|
+
- **Styling:** Tailwind CSS v4 (CSS-first config via `@theme inline` in `globals.css` — no `tailwind.config.ts`)
|
|
11
|
+
- **Components:** shadcn/ui (new-york style, neutral base)
|
|
12
|
+
- **Icons:** Lucide React
|
|
13
|
+
- **Fonts:** Geist (sans) + Geist Mono (mono) via `next/font/google`
|
|
14
|
+
- **Dark mode:** next-themes (class-based, system default)
|
|
15
|
+
- **Utilities:** `cn()` from `@/lib/utils` (clsx + tailwind-merge)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Colors
|
|
20
|
+
|
|
21
|
+
All values use the **oklch** color space. Colors are defined as CSS custom properties in `globals.css` and bridged to Tailwind via `@theme inline`.
|
|
22
|
+
|
|
23
|
+
### Semantic Tokens
|
|
24
|
+
|
|
25
|
+
| Token | Light | Dark | Usage |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| `background` | `oklch(1 0 0)` | `oklch(0.141 0.005 285.823)` | Page background |
|
|
28
|
+
| `foreground` | `oklch(0.141 0.005 285.823)` | `oklch(0.985 0 0)` | Primary text |
|
|
29
|
+
| `primary` | `oklch(0.21 0.034 270)` | `oklch(0.92 0.02 270)` | Buttons, links, accents |
|
|
30
|
+
| `primary-foreground` | `oklch(0.985 0 0)` | `oklch(0.21 0.006 285.885)` | Text on primary |
|
|
31
|
+
| `secondary` | `oklch(0.967 0.001 286.375)` | `oklch(0.274 0.006 286.033)` | Secondary buttons, subtle bg |
|
|
32
|
+
| `secondary-foreground` | `oklch(0.21 0.006 285.885)` | `oklch(0.985 0 0)` | Text on secondary |
|
|
33
|
+
| `muted` | `oklch(0.967 0.001 286.375)` | `oklch(0.274 0.006 286.033)` | Subdued backgrounds |
|
|
34
|
+
| `muted-foreground` | `oklch(0.552 0.016 285.938)` | `oklch(0.705 0.015 286.067)` | Subdued text, placeholders |
|
|
35
|
+
| `accent` | `oklch(0.96 0.012 270)` | `oklch(0.28 0.018 270)` | Hover backgrounds, highlights |
|
|
36
|
+
| `accent-foreground` | `oklch(0.21 0.006 285.885)` | `oklch(0.985 0 0)` | Text on accent |
|
|
37
|
+
| `destructive` | `oklch(0.577 0.245 27.325)` | `oklch(0.704 0.191 22.216)` | Error states, delete actions |
|
|
38
|
+
| `card` | `oklch(1 0 0)` | `oklch(0.21 0.006 285.885)` | Card backgrounds |
|
|
39
|
+
| `card-foreground` | `oklch(0.141 0.005 285.823)` | `oklch(0.985 0 0)` | Card text |
|
|
40
|
+
| `popover` | `oklch(1 0 0)` | `oklch(0.21 0.006 285.885)` | Popover/dropdown bg |
|
|
41
|
+
| `popover-foreground` | `oklch(0.141 0.005 285.823)` | `oklch(0.985 0 0)` | Popover/dropdown text |
|
|
42
|
+
| `border` | `oklch(0.92 0.004 286.32)` | `oklch(1 0 0 / 10%)` | Borders, dividers |
|
|
43
|
+
| `input` | `oklch(0.92 0.004 286.32)` | `oklch(1 0 0 / 15%)` | Input borders |
|
|
44
|
+
| `ring` | `oklch(0.705 0.06 270)` | `oklch(0.552 0.05 270)` | Focus rings |
|
|
45
|
+
|
|
46
|
+
### Chart Colors
|
|
47
|
+
|
|
48
|
+
| Token | Light | Dark |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `chart-1` | `oklch(0.646 0.222 41.116)` | `oklch(0.488 0.243 264.376)` |
|
|
51
|
+
| `chart-2` | `oklch(0.6 0.118 184.704)` | `oklch(0.696 0.17 162.48)` |
|
|
52
|
+
| `chart-3` | `oklch(0.398 0.07 227.392)` | `oklch(0.769 0.188 70.08)` |
|
|
53
|
+
| `chart-4` | `oklch(0.828 0.189 84.429)` | `oklch(0.627 0.265 303.9)` |
|
|
54
|
+
| `chart-5` | `oklch(0.769 0.188 70.08)` | `oklch(0.645 0.246 16.439)` |
|
|
55
|
+
|
|
56
|
+
### Sidebar Colors
|
|
57
|
+
|
|
58
|
+
| Token | Light | Dark |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `sidebar` | `oklch(0.985 0 0)` | `oklch(0.21 0.006 285.885)` |
|
|
61
|
+
| `sidebar-foreground` | `oklch(0.141 0.005 285.823)` | `oklch(0.985 0 0)` |
|
|
62
|
+
| `sidebar-primary` | `oklch(0.21 0.006 285.885)` | `oklch(0.488 0.243 264.376)` |
|
|
63
|
+
| `sidebar-primary-foreground` | `oklch(0.985 0 0)` | `oklch(0.985 0 0)` |
|
|
64
|
+
| `sidebar-accent` | `oklch(0.967 0.001 286.375)` | `oklch(0.274 0.006 286.033)` |
|
|
65
|
+
| `sidebar-accent-foreground` | `oklch(0.21 0.006 285.885)` | `oklch(0.985 0 0)` |
|
|
66
|
+
| `sidebar-border` | `oklch(0.92 0.004 286.32)` | `oklch(1 0 0 / 10%)` |
|
|
67
|
+
| `sidebar-ring` | `oklch(0.705 0.015 286.067)` | `oklch(0.552 0.016 285.938)` |
|
|
68
|
+
|
|
69
|
+
### Ad-hoc Status Colors
|
|
70
|
+
|
|
71
|
+
Use these Tailwind utilities for status indicators — they are not part of the token system but are used consistently:
|
|
72
|
+
|
|
73
|
+
- **Success:** `text-green-600` / `dark:text-green-400`, `bg-green-500`
|
|
74
|
+
- **Error:** `text-red-600`, `text-destructive`
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Typography
|
|
79
|
+
|
|
80
|
+
### Font Families
|
|
81
|
+
|
|
82
|
+
| Token | Font | Usage |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| `--font-geist-sans` | Geist | All UI text (applied to body) |
|
|
85
|
+
| `--font-geist-mono` | Geist Mono | Code, monospace content |
|
|
86
|
+
|
|
87
|
+
Body has `font-feature-settings: "rlig" 1, "calt" 1` and `antialiased` enabled.
|
|
88
|
+
|
|
89
|
+
### Type Scale
|
|
90
|
+
|
|
91
|
+
| Class | Size | Usage |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `text-xs` | 12px | Timestamps, shortcuts, helper text, code |
|
|
94
|
+
| `text-sm` | 14px | Descriptions, labels, body copy, card descriptions |
|
|
95
|
+
| `text-base` | 16px | Base text, inputs (mobile) |
|
|
96
|
+
| `text-lg` | 18px | Dialog titles, sub-headings |
|
|
97
|
+
| `text-xl` | 20px | Section titles, header logo |
|
|
98
|
+
| `text-2xl` | 24px | Page titles, card titles |
|
|
99
|
+
| `text-3xl` | 30px | Dashboard/profile headings |
|
|
100
|
+
| `text-4xl` | 36px | Large display text |
|
|
101
|
+
| `text-5xl` | 48px | Hero title |
|
|
102
|
+
|
|
103
|
+
### Font Weights
|
|
104
|
+
|
|
105
|
+
| Class | Weight | Usage |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| `font-medium` | 500 | Buttons, labels, nav items |
|
|
108
|
+
| `font-semibold` | 600 | Card titles, section headings, badges, dialog titles |
|
|
109
|
+
| `font-bold` | 700 | Page titles, hero heading |
|
|
110
|
+
|
|
111
|
+
### Line Heights & Tracking
|
|
112
|
+
|
|
113
|
+
| Class | Usage |
|
|
114
|
+
|---|---|
|
|
115
|
+
| `leading-none` | Labels, card titles |
|
|
116
|
+
| `leading-5` | Code blocks |
|
|
117
|
+
| `leading-6` | List items |
|
|
118
|
+
| `leading-7` | Paragraphs (markdown) |
|
|
119
|
+
| `tracking-tight` | Hero/display text |
|
|
120
|
+
| `tracking-widest` | Keyboard shortcuts |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Spacing
|
|
125
|
+
|
|
126
|
+
### Container Pattern
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
container mx-auto px-4
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Responsive overrides where needed:
|
|
133
|
+
- Header: `px-3 sm:px-4`
|
|
134
|
+
- Footer: `px-4 sm:px-6 lg:px-8`
|
|
135
|
+
|
|
136
|
+
### Max Widths
|
|
137
|
+
|
|
138
|
+
| Class | Value | Usage |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| `max-w-sm` | 24rem | Auth forms |
|
|
141
|
+
| `max-w-md` | 28rem | Login/register cards, error pages |
|
|
142
|
+
| `max-w-lg` | 32rem | Dialog content (sm+) |
|
|
143
|
+
| `max-w-2xl` | 42rem | Large dialogs |
|
|
144
|
+
| `max-w-3xl` | 48rem | Embeds, protected state |
|
|
145
|
+
| `max-w-4xl` | 56rem | Main content pages |
|
|
146
|
+
|
|
147
|
+
### Vertical Spacing (space-y)
|
|
148
|
+
|
|
149
|
+
| Class | Usage |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `space-y-1` | Tight lists, inline stacks |
|
|
152
|
+
| `space-y-1.5` | Card header |
|
|
153
|
+
| `space-y-2` | Form field groups, small stacks |
|
|
154
|
+
| `space-y-3` | Footer stacks |
|
|
155
|
+
| `space-y-4` | Form sections, dialog content |
|
|
156
|
+
| `space-y-6` | Card content sections |
|
|
157
|
+
| `space-y-8` | Page-level sections |
|
|
158
|
+
|
|
159
|
+
### Padding
|
|
160
|
+
|
|
161
|
+
| Class | Usage |
|
|
162
|
+
|---|---|
|
|
163
|
+
| `p-1` | Dropdown content, icon buttons |
|
|
164
|
+
| `p-2` | Code blocks, muted backgrounds |
|
|
165
|
+
| `p-3` | Chat bubbles, inputs |
|
|
166
|
+
| `p-4` | Grid items, action buttons, list items |
|
|
167
|
+
| `p-6` | Cards, dialog content |
|
|
168
|
+
|
|
169
|
+
### Page Vertical Padding
|
|
170
|
+
|
|
171
|
+
| Class | Usage |
|
|
172
|
+
|---|---|
|
|
173
|
+
| `py-3 sm:py-4` | Header |
|
|
174
|
+
| `py-4 sm:py-6` | Footer |
|
|
175
|
+
| `py-8` | Standard content pages |
|
|
176
|
+
| `py-12` | Home page, dashboard |
|
|
177
|
+
| `py-16` | Error/not-found pages |
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Border Radius
|
|
182
|
+
|
|
183
|
+
| Token | Value | Class |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| `--radius` | `0.625rem` (10px) | Base |
|
|
186
|
+
| `--radius-sm` | `calc(--radius - 4px)` = 6px | `rounded-sm` |
|
|
187
|
+
| `--radius-md` | `calc(--radius - 2px)` = 8px | `rounded-md` |
|
|
188
|
+
| `--radius-lg` | `var(--radius)` = 10px | `rounded-lg` |
|
|
189
|
+
| `--radius-xl` | `calc(--radius + 4px)` = 14px | `rounded-xl` |
|
|
190
|
+
| — | 9999px | `rounded-full` |
|
|
191
|
+
|
|
192
|
+
**Usage:**
|
|
193
|
+
- `rounded-md` — Buttons, inputs, textarea, code blocks, dropdowns
|
|
194
|
+
- `rounded-lg` — Cards, dialogs, feature cards, chat bubbles
|
|
195
|
+
- `rounded-xl` — Hero logo container
|
|
196
|
+
- `rounded-full` — Badges, avatars
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Shadows
|
|
201
|
+
|
|
202
|
+
| Class | Usage |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `shadow-xs` | Inputs, textarea, secondary/outline buttons |
|
|
205
|
+
| `shadow-sm` | Card base |
|
|
206
|
+
| `shadow-md` | Card hover, dropdown content |
|
|
207
|
+
| `shadow-lg` | Dialogs, dropdown sub-content |
|
|
208
|
+
|
|
209
|
+
No custom shadow definitions — all Tailwind defaults.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Animations
|
|
214
|
+
|
|
215
|
+
### Custom Keyframes
|
|
216
|
+
|
|
217
|
+
| Name | Effect | Duration | Easing |
|
|
218
|
+
|---|---|---|---|
|
|
219
|
+
| `fade-in` | Opacity 0 → 1 | 0.3s | ease-out |
|
|
220
|
+
| `fade-up` | Opacity 0 → 1 + translateY(8px → 0) | 0.4s | ease-out |
|
|
221
|
+
| `scale-in` | Opacity 0 → 1 + scale(0.97 → 1) | 0.2s | ease-out |
|
|
222
|
+
|
|
223
|
+
Use via: `animate-fade-in`, `animate-fade-up`, `animate-scale-in`
|
|
224
|
+
|
|
225
|
+
### tw-animate-css Animations
|
|
226
|
+
|
|
227
|
+
Used on dialogs and dropdowns:
|
|
228
|
+
- `animate-in` / `animate-out`
|
|
229
|
+
- `fade-in-0` / `fade-out-0`
|
|
230
|
+
- `zoom-in-95` / `zoom-out-95`
|
|
231
|
+
- `slide-in-from-{top|bottom|left|right}-2`
|
|
232
|
+
|
|
233
|
+
### Transition Classes
|
|
234
|
+
|
|
235
|
+
| Class | Usage |
|
|
236
|
+
|---|---|
|
|
237
|
+
| `transition-colors` | Links, hover color changes |
|
|
238
|
+
| `transition-opacity` | Avatar hover, reveal-on-hover |
|
|
239
|
+
| `transition-all duration-200` | Card interactive hover, buttons |
|
|
240
|
+
| `transition-[color,box-shadow]` | Input/textarea focus |
|
|
241
|
+
|
|
242
|
+
### Utility Classes
|
|
243
|
+
|
|
244
|
+
```css
|
|
245
|
+
.card-interactive {
|
|
246
|
+
@apply transition-all duration-200 ease-out;
|
|
247
|
+
}
|
|
248
|
+
.card-interactive:hover {
|
|
249
|
+
@apply shadow-md -translate-y-0.5;
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```css
|
|
254
|
+
.auth-bg {
|
|
255
|
+
background-image: radial-gradient(
|
|
256
|
+
circle at 50% 0%,
|
|
257
|
+
var(--accent) 0%,
|
|
258
|
+
transparent 50%
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Layout
|
|
266
|
+
|
|
267
|
+
### Root Structure
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
<body class="antialiased min-h-screen flex flex-col">
|
|
271
|
+
<SiteHeader />
|
|
272
|
+
<main id="main-content" class="flex-1">{children}</main>
|
|
273
|
+
<SiteFooter />
|
|
274
|
+
<Toaster />
|
|
275
|
+
</body>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Page Layout Patterns
|
|
279
|
+
|
|
280
|
+
**Auth pages:**
|
|
281
|
+
```
|
|
282
|
+
flex min-h-[calc(100vh-4rem)] items-center justify-center p-4
|
|
283
|
+
→ Card w-full max-w-md
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Standard content pages:**
|
|
287
|
+
```
|
|
288
|
+
container mx-auto px-4 py-8
|
|
289
|
+
→ max-w-4xl mx-auto
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Error/not-found pages:**
|
|
293
|
+
```
|
|
294
|
+
container mx-auto px-4 py-16
|
|
295
|
+
→ max-w-md mx-auto text-center
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Grid Patterns
|
|
299
|
+
|
|
300
|
+
| Pattern | Usage |
|
|
301
|
+
|---|---|
|
|
302
|
+
| `grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6` | Feature cards (4-col) |
|
|
303
|
+
| `grid grid-cols-1 md:grid-cols-2 gap-6` | Dashboard cards |
|
|
304
|
+
| `grid grid-cols-1 md:grid-cols-2 gap-4` | Profile info |
|
|
305
|
+
| `grid grid-cols-1 md:grid-cols-3 gap-4` | Quick actions |
|
|
306
|
+
|
|
307
|
+
### Responsive Breakpoints
|
|
308
|
+
|
|
309
|
+
Standard Tailwind breakpoints:
|
|
310
|
+
- `sm:` (640px) — Padding adjustments, text alignment, button sizing
|
|
311
|
+
- `md:` (768px) — Grid column changes (→ 2 col), input font size
|
|
312
|
+
- `lg:` (1024px) — Grid column changes (→ 4 col), wide padding
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Icons
|
|
317
|
+
|
|
318
|
+
**Library:** Lucide React
|
|
319
|
+
|
|
320
|
+
### Sizing Convention
|
|
321
|
+
|
|
322
|
+
| Size | Classes | Usage |
|
|
323
|
+
|---|---|---|
|
|
324
|
+
| XS | `h-3 w-3` | Inline badge icons |
|
|
325
|
+
| SM | `h-3.5 w-3.5` | Copy buttons |
|
|
326
|
+
| Default | `h-4 w-4` or `size-4` | Standard UI icons |
|
|
327
|
+
| MD | `h-5 w-5` | Header logo icon |
|
|
328
|
+
| LG | `h-7 w-7` | Hero logo icon |
|
|
329
|
+
| XL | `h-16 w-16` | Error/empty state illustrations |
|
|
330
|
+
|
|
331
|
+
### Commonly Used Icons
|
|
332
|
+
|
|
333
|
+
`Bot`, `User`, `Lock`, `Shield`, `Mail`, `Calendar`, `Copy`, `Check`, `Loader2`, `LogOut`, `Sun`, `Moon`, `Github`, `ArrowLeft`, `RefreshCw`, `AlertCircle`, `FileQuestion`, `Database`, `Palette`, `Video`
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Components (shadcn/ui)
|
|
338
|
+
|
|
339
|
+
All components live in `src/components/ui/`. They use `data-slot` attributes, accept `className` for overrides via `cn()`, and follow either `React.forwardRef` or functional component patterns.
|
|
340
|
+
|
|
341
|
+
### Button
|
|
342
|
+
|
|
343
|
+
6 variants, 4 sizes (CVA-based):
|
|
344
|
+
|
|
345
|
+
| Variant | Usage |
|
|
346
|
+
|---|---|
|
|
347
|
+
| `default` | Primary actions |
|
|
348
|
+
| `secondary` | Secondary actions |
|
|
349
|
+
| `outline` | Tertiary actions |
|
|
350
|
+
| `ghost` | Subtle/icon actions |
|
|
351
|
+
| `destructive` | Delete/danger actions |
|
|
352
|
+
| `link` | Inline text links |
|
|
353
|
+
|
|
354
|
+
| Size | Height | Padding |
|
|
355
|
+
|---|---|---|
|
|
356
|
+
| `sm` | h-8 | px-3 |
|
|
357
|
+
| `default` | h-9 | px-4 |
|
|
358
|
+
| `lg` | h-10 | px-6 |
|
|
359
|
+
| `icon` | size-9 | — |
|
|
360
|
+
|
|
361
|
+
### Card
|
|
362
|
+
|
|
363
|
+
6 sub-components: `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`
|
|
364
|
+
|
|
365
|
+
Base: `rounded-lg border bg-card text-card-foreground shadow-sm`
|
|
366
|
+
|
|
367
|
+
### Input / Textarea
|
|
368
|
+
|
|
369
|
+
- Height: `h-9` (input), `min-h-16` (textarea)
|
|
370
|
+
- Border: `border bg-transparent rounded-md shadow-xs`
|
|
371
|
+
- Focus: `focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`
|
|
372
|
+
- Validation: `aria-invalid:border-destructive aria-invalid:ring-destructive/20`
|
|
373
|
+
- Responsive font: `text-base md:text-sm`
|
|
374
|
+
|
|
375
|
+
### Badge
|
|
376
|
+
|
|
377
|
+
4 variants: `default`, `secondary`, `destructive`, `outline`
|
|
378
|
+
|
|
379
|
+
Base: `rounded-full border px-2.5 py-0.5 text-xs font-semibold`
|
|
380
|
+
|
|
381
|
+
### Dialog
|
|
382
|
+
|
|
383
|
+
Radix-based with overlay (`bg-black/50`), fade + zoom animations, optional close button.
|
|
384
|
+
|
|
385
|
+
### DropdownMenu
|
|
386
|
+
|
|
387
|
+
Radix-based. Content: `rounded-md border p-1 shadow-md min-w-[8rem]`. Items support a `destructive` variant.
|
|
388
|
+
|
|
389
|
+
### Spinner
|
|
390
|
+
|
|
391
|
+
Sizes: `sm` (h-4 w-4), `md` (h-6 w-6), `lg` (h-8 w-8). Uses `Loader2` with `animate-spin`.
|
|
392
|
+
|
|
393
|
+
### Toast (Sonner)
|
|
394
|
+
|
|
395
|
+
Custom icons per state (success, info, warning, error, loading). Themed via CSS variable overrides.
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Focus & Interaction States
|
|
400
|
+
|
|
401
|
+
### Focus Ring (Global)
|
|
402
|
+
|
|
403
|
+
```css
|
|
404
|
+
outline-2 outline-offset-2 outline-ring/70
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Component-level override:
|
|
408
|
+
```
|
|
409
|
+
focus-visible:ring-ring/50 focus-visible:ring-[3px]
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Disabled
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
disabled:pointer-events-none disabled:opacity-50
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Interactive Card Hover
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
transition-all duration-200 ease-out
|
|
422
|
+
hover:shadow-md hover:-translate-y-0.5
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## Dark Mode
|
|
428
|
+
|
|
429
|
+
- **Method:** Class-based via `next-themes` with `attribute="class"` and `disableTransitionOnChange`
|
|
430
|
+
- **Default:** System preference
|
|
431
|
+
- **Toggle:** 3-way dropdown — Light / Dark / System
|
|
432
|
+
- All semantic color tokens swap automatically via `.dark` CSS selector
|
|
433
|
+
- Use `dark:` prefix for component-specific overrides (e.g., `dark:bg-input/30`)
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Branding
|
|
438
|
+
|
|
439
|
+
### Logo Text
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
bg-gradient-to-r from-primary to-primary/70 bg-clip-text text-transparent
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Logo Icon Container
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
w-8 h-8 rounded-lg bg-primary/10 flex items-center justify-center
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
Hero variant: `w-12 h-12 rounded-xl`
|
package/template/next-env.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="next" />
|
|
2
2
|
/// <reference types="next/image-types/global" />
|
|
3
|
-
import "./.next/types/routes.d.ts";
|
|
3
|
+
import "./.next/dev/types/routes.d.ts";
|
|
4
4
|
|
|
5
5
|
// NOTE: This file should not be edited
|
|
6
6
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# UI Polish & Responsive Improvements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Improve the visual quality, component consistency, and responsive behavior of the boilerplate UI across all pages. This includes refreshing the color palette with a subtle blue accent, replacing bare HTML elements with shadcn components, adding hover/transition effects via a reusable utility class, and introducing `sm:` breakpoints throughout for better tablet/mobile scaling. All custom styling goes in globals.css — no inline or custom CSS on components.
|
|
6
|
+
|
|
7
|
+
## Quick Links
|
|
8
|
+
|
|
9
|
+
- [Requirements](./requirements.md) — full requirements and acceptance criteria
|
|
10
|
+
- [Action Required](./action-required.md) — manual steps needing human action
|
|
11
|
+
|
|
12
|
+
## Dependency Graph
|
|
13
|
+
|
|
14
|
+
```mermaid
|
|
15
|
+
graph TD
|
|
16
|
+
task-01-globals-css["01: globals.css Foundation"]
|
|
17
|
+
task-02-layout["02: Layout Sticky Footer"]
|
|
18
|
+
task-03-site-header["03: Site Header Responsive"]
|
|
19
|
+
task-04-site-footer["04: Site Footer Responsive"]
|
|
20
|
+
task-05-home-page["05: Home Page Overhaul"]
|
|
21
|
+
task-06-dashboard["06: Dashboard Page"]
|
|
22
|
+
task-07-chat-page["07: Chat Page"]
|
|
23
|
+
task-08-profile-page["08: Profile Page"]
|
|
24
|
+
task-09-auth-pages["09: Auth Pages"]
|
|
25
|
+
task-10-setup-checklist["10: Setup Checklist"]
|
|
26
|
+
task-11-starter-prompt-modal["11: Starter Prompt Modal"]
|
|
27
|
+
task-01-globals-css --> task-05-home-page
|
|
28
|
+
task-01-globals-css --> task-06-dashboard
|
|
29
|
+
task-01-globals-css --> task-07-chat-page
|
|
30
|
+
task-01-globals-css --> task-08-profile-page
|
|
31
|
+
task-01-globals-css --> task-09-auth-pages
|
|
32
|
+
task-01-globals-css --> task-10-setup-checklist
|
|
33
|
+
task-01-globals-css --> task-11-starter-prompt-modal
|
|
34
|
+
task-02-layout --> task-09-auth-pages
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Waves
|
|
38
|
+
|
|
39
|
+
| Wave | Tasks | Description |
|
|
40
|
+
|------|-------|-------------|
|
|
41
|
+
| 1 | task-01, task-02, task-03, task-04 | Foundation: globals.css enhancements, layout flex structure, header/footer responsive |
|
|
42
|
+
| 2 | task-05, task-06, task-07, task-08, task-09, task-10, task-11 | All pages: Card adoption, responsive breakpoints, component swaps |
|
|
43
|
+
|
|
44
|
+
## Task Status
|
|
45
|
+
|
|
46
|
+
### Wave 1
|
|
47
|
+
- [x] [task-01-globals-css](./tasks/task-01-globals-css.md) — globals.css color palette, animations, and utility classes
|
|
48
|
+
- [x] [task-02-layout](./tasks/task-02-layout.md) — Root layout sticky footer with flex column
|
|
49
|
+
- [x] [task-03-site-header](./tasks/task-03-site-header.md) — Header responsive padding and sizing
|
|
50
|
+
- [x] [task-04-site-footer](./tasks/task-04-site-footer.md) — Footer responsive padding
|
|
51
|
+
|
|
52
|
+
### Wave 2
|
|
53
|
+
- [ ] [task-05-home-page](./tasks/task-05-home-page.md) — Home page Card adoption + responsive typography
|
|
54
|
+
- [ ] [task-06-dashboard](./tasks/task-06-dashboard.md) — Dashboard Card adoption + responsive grid
|
|
55
|
+
- [ ] [task-07-chat-page](./tasks/task-07-chat-page.md) — Chat Input swap + sticky form + responsive
|
|
56
|
+
- [ ] [task-08-profile-page](./tasks/task-08-profile-page.md) — Profile responsive stacking + grid fixes
|
|
57
|
+
- [ ] [task-09-auth-pages](./tasks/task-09-auth-pages.md) — Auth pages animation, shadow, and background
|
|
58
|
+
- [ ] [task-10-setup-checklist](./tasks/task-10-setup-checklist.md) — Setup checklist Card adoption
|
|
59
|
+
- [ ] [task-11-starter-prompt-modal](./tasks/task-11-starter-prompt-modal.md) — Textarea swap + responsive buttons
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Requirements: UI Polish & Responsive Improvements
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
The boilerplate UI is functional but visually flat — bare `<div>` elements instead of shadcn Cards, a monotone neutral-gray palette, no hover/transition effects, and minimal responsive breakpoints (most pages only use `md:`). The goal is to meaningfully improve visual quality, component consistency, and responsive behavior across all pages and components.
|
|
6
|
+
|
|
7
|
+
All changes must use Tailwind utilities and shadcn standards. Custom styling (animations, utilities, color tokens) goes in `globals.css`. No custom inline styles or CSS-in-JS on individual components. The result should look like a polished, high-quality default that can be customized by users of the boilerplate.
|
|
8
|
+
|
|
9
|
+
## Goals
|
|
10
|
+
|
|
11
|
+
- Refresh the color palette with a subtle cool blue accent (shift primary/ring/accent from flat gray to hue 270)
|
|
12
|
+
- Replace all bare `<div>` cards with shadcn Card components for consistency
|
|
13
|
+
- Replace native `<input>`, `<button>`, and `<textarea>` elements with their shadcn equivalents
|
|
14
|
+
- Add hover/transition effects to interactive cards via a reusable `card-interactive` utility
|
|
15
|
+
- Introduce `sm:` breakpoints throughout for proper tablet/mobile scaling
|
|
16
|
+
- Add entrance animations to auth pages
|
|
17
|
+
- Fix the sticky footer layout so it works on short-content pages
|
|
18
|
+
- Ensure all pages scale well from 320px to 1536px+ viewports
|
|
19
|
+
|
|
20
|
+
## Non-Goals
|
|
21
|
+
|
|
22
|
+
- No hamburger/mobile menu for the header — the current content (avatar + theme toggle) is minimal enough
|
|
23
|
+
- No new shadcn component installations — all needed components are already installed
|
|
24
|
+
- No changes to business logic, API routes, or authentication flows
|
|
25
|
+
- No new pages or routes
|
|
26
|
+
- No changes to the Geist font choice
|
|
27
|
+
- No Storybook or component documentation
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria
|
|
30
|
+
|
|
31
|
+
- [ ] All pages render correctly in both light and dark modes
|
|
32
|
+
- [ ] No horizontal scroll on any page at 320px viewport width
|
|
33
|
+
- [ ] Feature cards, dashboard cards, and next steps cards use shadcn Card components
|
|
34
|
+
- [ ] Chat input uses shadcn Input, not a native `<input>`
|
|
35
|
+
- [ ] Footer sticks to the bottom on short-content pages (auth pages)
|
|
36
|
+
- [ ] Primary color has a visible cool-blue tint (not flat gray)
|
|
37
|
+
- [ ] Cards have hover lift effect with shadow transition
|
|
38
|
+
- [ ] All grids have `sm:` breakpoints for tablet-size viewports
|
|
39
|
+
- [ ] `pnpm lint` and `pnpm typecheck` pass with no errors
|
|
40
|
+
|
|
41
|
+
## Assumptions
|
|
42
|
+
|
|
43
|
+
- Tailwind CSS v4 is in use (confirmed: `@import "tailwindcss"` syntax, `@theme inline` block)
|
|
44
|
+
- `tw-animate-css` is installed in dependencies but currently unused (confirmed in package.json)
|
|
45
|
+
- The ThemeProvider from next-themes renders children directly without a wrapping `<div>` (confirmed by reading the component)
|
|
46
|
+
- All shadcn components needed (Card, Input, Button, Textarea, Badge, Avatar, Dialog) are already installed
|
|
47
|
+
|
|
48
|
+
## Technical Constraints
|
|
49
|
+
|
|
50
|
+
- All custom CSS (animations, utilities, color tokens) must go in `src/app/globals.css`
|
|
51
|
+
- Component files should only use Tailwind utility classes and shadcn components — no `style={{}}` props
|
|
52
|
+
- Must maintain both light and dark mode support via the existing OKLch CSS variable system
|
|
53
|
+
- Must not break existing functionality (auth flows, chat, diagnostics)
|