nitrostack 1.0.65 → 1.0.67
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 +3 -2
- package/src/studio/README.md +140 -0
- package/src/studio/app/api/auth/fetch-metadata/route.ts +71 -0
- package/src/studio/app/api/auth/register-client/route.ts +67 -0
- package/src/studio/app/api/chat/route.ts +250 -0
- package/src/studio/app/api/health/checks/route.ts +42 -0
- package/src/studio/app/api/health/route.ts +13 -0
- package/src/studio/app/api/init/route.ts +109 -0
- package/src/studio/app/api/ping/route.ts +13 -0
- package/src/studio/app/api/prompts/[name]/route.ts +21 -0
- package/src/studio/app/api/prompts/route.ts +13 -0
- package/src/studio/app/api/resources/[...uri]/route.ts +18 -0
- package/src/studio/app/api/resources/route.ts +13 -0
- package/src/studio/app/api/roots/route.ts +13 -0
- package/src/studio/app/api/sampling/route.ts +14 -0
- package/src/studio/app/api/tools/[name]/call/route.ts +41 -0
- package/src/studio/app/api/tools/route.ts +23 -0
- package/src/studio/app/api/widget-examples/route.ts +44 -0
- package/src/studio/app/auth/callback/page.tsx +175 -0
- package/src/studio/app/auth/page.tsx +560 -0
- package/src/studio/app/chat/page.tsx +1133 -0
- package/src/studio/app/chat/page.tsx.backup +390 -0
- package/src/studio/app/globals.css +486 -0
- package/src/studio/app/health/page.tsx +179 -0
- package/src/studio/app/layout.tsx +68 -0
- package/src/studio/app/logs/page.tsx +279 -0
- package/src/studio/app/page.tsx +351 -0
- package/src/studio/app/page.tsx.backup +346 -0
- package/src/studio/app/ping/page.tsx +209 -0
- package/src/studio/app/prompts/page.tsx +230 -0
- package/src/studio/app/resources/page.tsx +315 -0
- package/src/studio/app/settings/page.tsx +199 -0
- package/src/studio/branding.md +807 -0
- package/src/studio/components/EnlargeModal.tsx +138 -0
- package/src/studio/components/LogMessage.tsx +153 -0
- package/src/studio/components/MarkdownRenderer.tsx +410 -0
- package/src/studio/components/Sidebar.tsx +295 -0
- package/src/studio/components/ToolCard.tsx +139 -0
- package/src/studio/components/WidgetRenderer.tsx +346 -0
- package/src/studio/lib/api.ts +207 -0
- package/src/studio/lib/http-client-transport.ts +222 -0
- package/src/studio/lib/llm-service.ts +480 -0
- package/src/studio/lib/log-manager.ts +76 -0
- package/src/studio/lib/mcp-client.ts +258 -0
- package/src/studio/lib/store.ts +192 -0
- package/src/studio/lib/theme-provider.tsx +50 -0
- package/src/studio/lib/types.ts +107 -0
- package/src/studio/lib/widget-loader.ts +90 -0
- package/src/studio/middleware.ts +27 -0
- package/src/studio/next.config.js +38 -0
- package/src/studio/package.json +35 -0
- package/src/studio/postcss.config.mjs +10 -0
- package/src/studio/public/nitrocloud.png +0 -0
- package/src/studio/tailwind.config.ts +67 -0
- package/src/studio/tsconfig.json +42 -0
- package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +0 -701
- package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +0 -1260
- package/templates/typescript-oauth/package-lock.json +0 -4253
- package/templates/typescript-pizzaz/IMPLEMENTATION.md +0 -98
- package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +0 -701
- package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +0 -1260
|
@@ -0,0 +1,807 @@
|
|
|
1
|
+
# Nitrocloud Frontend Branding Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This document defines the visual identity, design system, and UI/UX philosophy of the Nitrocloud frontend application. Use this guide to maintain consistency across all new features, pages, and components.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🎨 Color Palette
|
|
9
|
+
|
|
10
|
+
### Brand Colors
|
|
11
|
+
|
|
12
|
+
#### Primary Brand Color
|
|
13
|
+
```css
|
|
14
|
+
/* Nitrocloud Blue */
|
|
15
|
+
--nitrocloud-primary: hsl(217, 91%, 60%) /* #3B9FFF - Main brand blue */
|
|
16
|
+
--nitrocloud-primary-dark: hsl(217, 91%, 50%) /* #1A8CFF - Darker variant */
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Usage**: Logo, primary CTAs, key UI elements, focus states
|
|
20
|
+
|
|
21
|
+
#### Brand Gradient
|
|
22
|
+
```css
|
|
23
|
+
/* Signature Nitrocloud Gradient */
|
|
24
|
+
--nitrocloud-gradient-start: hsl(217, 91%, 60%) /* Blue */
|
|
25
|
+
--nitrocloud-gradient-end: hsl(221, 83%, 53%) /* Deep Blue-Purple */
|
|
26
|
+
|
|
27
|
+
/* CSS Utility Classes */
|
|
28
|
+
.nitrocloud-gradient {
|
|
29
|
+
background: linear-gradient(135deg,
|
|
30
|
+
hsl(var(--nitrocloud-gradient-start)),
|
|
31
|
+
hsl(var(--nitrocloud-gradient-end))
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.nitrocloud-text-gradient {
|
|
36
|
+
background: linear-gradient(135deg,
|
|
37
|
+
hsl(var(--nitrocloud-gradient-start)),
|
|
38
|
+
hsl(var(--nitrocloud-gradient-end))
|
|
39
|
+
);
|
|
40
|
+
-webkit-background-clip: text;
|
|
41
|
+
-webkit-text-fill-color: transparent;
|
|
42
|
+
background-clip: text;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Usage**:
|
|
47
|
+
- Hero sections
|
|
48
|
+
- Premium buttons and CTAs
|
|
49
|
+
- Feature highlights
|
|
50
|
+
- Brand moments
|
|
51
|
+
|
|
52
|
+
### Semantic Colors
|
|
53
|
+
|
|
54
|
+
#### Light Mode
|
|
55
|
+
```css
|
|
56
|
+
--background: hsl(0, 0%, 100%) /* #FFFFFF */
|
|
57
|
+
--foreground: hsl(222.2, 84%, 4.9%) /* #020617 - Near black */
|
|
58
|
+
--primary: hsl(221.2, 83.2%, 53.3%) /* #3B82F6 - Primary blue */
|
|
59
|
+
--primary-foreground: hsl(210, 40%, 98%) /* #F8FAFC */
|
|
60
|
+
--secondary: hsl(210, 40%, 96.1%) /* #F1F5F9 */
|
|
61
|
+
--muted: hsl(210, 40%, 96.1%) /* #F1F5F9 */
|
|
62
|
+
--muted-foreground: hsl(215.4, 16.3%, 46.9%) /* #64748B */
|
|
63
|
+
--border: hsl(214.3, 31.8%, 91.4%) /* #E2E8F0 */
|
|
64
|
+
--destructive: hsl(0, 84.2%, 60.2%) /* #EF4444 */
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Dark Mode
|
|
68
|
+
```css
|
|
69
|
+
--background: hsl(222.2, 84%, 4.9%) /* #020617 - Deep dark blue */
|
|
70
|
+
--foreground: hsl(210, 40%, 98%) /* #F8FAFC */
|
|
71
|
+
--primary: hsl(217, 91%, 60%) /* #3B9FFF - Brighter in dark */
|
|
72
|
+
--primary-foreground: hsl(222.2, 47.4%, 11.2%) /* #0F172A */
|
|
73
|
+
--secondary: hsl(217.2, 32.6%, 17.5%) /* #1E293B */
|
|
74
|
+
--muted: hsl(217.2, 32.6%, 17.5%) /* #1E293B */
|
|
75
|
+
--muted-foreground: hsl(215, 20.2%, 65.1%) /* #94A3B8 */
|
|
76
|
+
--border: hsl(217.2, 32.6%, 17.5%) /* #1E293B */
|
|
77
|
+
--destructive: hsl(0, 62.8%, 30.6%) /* #991B1B */
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Feature-Specific Color Palettes
|
|
81
|
+
|
|
82
|
+
#### Plan Tiers
|
|
83
|
+
```typescript
|
|
84
|
+
const planColors = {
|
|
85
|
+
FREE: {
|
|
86
|
+
gradient: 'from-blue-500/20 via-cyan-500/20 to-blue-500/20',
|
|
87
|
+
border: 'border-blue-500/30',
|
|
88
|
+
badge: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',
|
|
89
|
+
icon: 'text-blue-500'
|
|
90
|
+
},
|
|
91
|
+
PRO: {
|
|
92
|
+
gradient: 'from-purple-500/20 via-pink-500/20 to-purple-500/20',
|
|
93
|
+
border: 'border-purple-500/30',
|
|
94
|
+
badge: 'bg-purple-500/10 text-purple-600 dark:text-purple-400',
|
|
95
|
+
icon: 'text-purple-500'
|
|
96
|
+
},
|
|
97
|
+
ENTERPRISE: {
|
|
98
|
+
gradient: 'from-amber-500/20 via-orange-500/20 to-amber-500/20',
|
|
99
|
+
border: 'border-amber-500/30',
|
|
100
|
+
badge: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',
|
|
101
|
+
icon: 'text-amber-500'
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### Feature Highlights
|
|
107
|
+
```css
|
|
108
|
+
/* Used in carousel and feature cards */
|
|
109
|
+
Emerald (Free Forever): from-emerald-50 via-teal-100 to-cyan-200
|
|
110
|
+
Blue-Indigo-Purple (Deploy Fast): from-blue-50 via-indigo-100 to-purple-200
|
|
111
|
+
Cyan-Blue-Indigo (Security): from-cyan-50 via-blue-100 to-indigo-200
|
|
112
|
+
Sky-Blue-Cyan (Auto-scaling): from-sky-50 via-blue-100 to-cyan-200
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 🔤 Typography
|
|
118
|
+
|
|
119
|
+
### Font Family
|
|
120
|
+
```typescript
|
|
121
|
+
import { Inter } from 'next/font/google';
|
|
122
|
+
|
|
123
|
+
const inter = Inter({ subsets: ['latin'] });
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Primary Font**: [Inter](https://fonts.google.com/specimen/Inter) - A modern, highly legible sans-serif font optimized for UI
|
|
127
|
+
|
|
128
|
+
### Type Scale
|
|
129
|
+
|
|
130
|
+
#### Headings
|
|
131
|
+
```css
|
|
132
|
+
/* Hero Headings */
|
|
133
|
+
.text-7xl /* 72px / 4.5rem - Landing page hero */
|
|
134
|
+
.text-6xl /* 60px / 3.75rem - Large hero */
|
|
135
|
+
.text-5xl /* 48px / 3rem - Page hero */
|
|
136
|
+
|
|
137
|
+
/* Section Headings */
|
|
138
|
+
.text-4xl /* 36px / 2.25rem - Major sections */
|
|
139
|
+
.text-3xl /* 30px / 1.875rem - Section headers */
|
|
140
|
+
.text-2xl /* 24px / 1.5rem - Subsection headers */
|
|
141
|
+
.text-xl /* 20px / 1.25rem - Card titles */
|
|
142
|
+
.text-lg /* 18px / 1.125rem - Small headers */
|
|
143
|
+
|
|
144
|
+
/* Body Text */
|
|
145
|
+
.text-base /* 16px / 1rem - Default body */
|
|
146
|
+
.text-sm /* 14px / 0.875rem - Secondary text */
|
|
147
|
+
.text-xs /* 12px / 0.75rem - Captions, labels */
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Font Weights
|
|
151
|
+
```css
|
|
152
|
+
font-bold /* 700 - Headings, emphasis */
|
|
153
|
+
font-semibold /* 600 - Subheadings, card titles */
|
|
154
|
+
font-medium /* 500 - Buttons, labels */
|
|
155
|
+
font-normal /* 400 - Body text */
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### Line Heights & Spacing
|
|
159
|
+
```css
|
|
160
|
+
tracking-tight /* -0.025em - Large headings */
|
|
161
|
+
tracking-normal /* 0em - Default */
|
|
162
|
+
leading-tight /* 1.25 - Headings */
|
|
163
|
+
leading-normal /* 1.5 - Body text */
|
|
164
|
+
leading-relaxed /* 1.625 - Long-form content */
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 📐 Spacing & Layout
|
|
170
|
+
|
|
171
|
+
### Base Spacing Unit
|
|
172
|
+
The design system uses Tailwind's spacing scale (4px base unit):
|
|
173
|
+
|
|
174
|
+
```css
|
|
175
|
+
/* Common Spacing */
|
|
176
|
+
space-y-2 /* 8px - Tight spacing */
|
|
177
|
+
space-y-4 /* 16px - Default component spacing */
|
|
178
|
+
space-y-6 /* 24px - Section spacing */
|
|
179
|
+
space-y-8 /* 32px - Large section spacing */
|
|
180
|
+
space-y-12 /* 48px - Major section breaks */
|
|
181
|
+
space-y-16 /* 64px - Page section spacing */
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Container Widths
|
|
185
|
+
```css
|
|
186
|
+
max-w-xs /* 320px - Tight containers */
|
|
187
|
+
max-w-sm /* 384px - Small forms */
|
|
188
|
+
max-w-md /* 448px - Auth pages */
|
|
189
|
+
max-w-lg /* 512px - Modal dialogs */
|
|
190
|
+
max-w-xl /* 576px - Forms */
|
|
191
|
+
max-w-2xl /* 672px - Content width */
|
|
192
|
+
max-w-4xl /* 896px - Large content */
|
|
193
|
+
max-w-6xl /* 1152px - Page max width */
|
|
194
|
+
max-w-7xl /* 1280px - Full layout */
|
|
195
|
+
|
|
196
|
+
/* Global Container */
|
|
197
|
+
container /* Centered, responsive container with padding */
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Border Radius
|
|
201
|
+
```css
|
|
202
|
+
--radius: 0.75rem; /* 12px - Global default */
|
|
203
|
+
|
|
204
|
+
rounded-sm /* 4px - Small elements */
|
|
205
|
+
rounded-md /* 8px - Buttons, inputs */
|
|
206
|
+
rounded-lg /* 12px - Cards, dialogs (default) */
|
|
207
|
+
rounded-xl /* 16px - Large cards */
|
|
208
|
+
rounded-2xl /* 24px - Hero sections */
|
|
209
|
+
rounded-full /* Badges, avatars */
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 🎯 Component Patterns
|
|
215
|
+
|
|
216
|
+
### Buttons
|
|
217
|
+
|
|
218
|
+
#### Variants
|
|
219
|
+
```typescript
|
|
220
|
+
// Primary (Brand)
|
|
221
|
+
<Button className="nitrocloud-gradient border-0">
|
|
222
|
+
Deploy Now
|
|
223
|
+
</Button>
|
|
224
|
+
|
|
225
|
+
// Default (Primary Color)
|
|
226
|
+
<Button variant="default">
|
|
227
|
+
Continue
|
|
228
|
+
</Button>
|
|
229
|
+
|
|
230
|
+
// Outline
|
|
231
|
+
<Button variant="outline">
|
|
232
|
+
Cancel
|
|
233
|
+
</Button>
|
|
234
|
+
|
|
235
|
+
// Ghost (Minimal)
|
|
236
|
+
<Button variant="ghost">
|
|
237
|
+
Learn More
|
|
238
|
+
</Button>
|
|
239
|
+
|
|
240
|
+
// Destructive
|
|
241
|
+
<Button variant="destructive">
|
|
242
|
+
Delete Project
|
|
243
|
+
</Button>
|
|
244
|
+
|
|
245
|
+
// Link
|
|
246
|
+
<Button variant="link">
|
|
247
|
+
View Details
|
|
248
|
+
</Button>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### Sizes
|
|
252
|
+
```typescript
|
|
253
|
+
<Button size="sm">Small</Button> /* 32px height */
|
|
254
|
+
<Button size="default">Default</Button> /* 40px height */
|
|
255
|
+
<Button size="lg">Large</Button> /* 44px height */
|
|
256
|
+
<Button size="icon">Icon</Button> /* 40x40px square */
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
#### Loading State
|
|
260
|
+
```typescript
|
|
261
|
+
<Button disabled={isLoading}>
|
|
262
|
+
{isLoading ? (
|
|
263
|
+
<>
|
|
264
|
+
<Loader2 className="mr-2 h-4 w-4 animate-spin" />
|
|
265
|
+
Processing...
|
|
266
|
+
</>
|
|
267
|
+
) : (
|
|
268
|
+
'Submit'
|
|
269
|
+
)}
|
|
270
|
+
</Button>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Cards
|
|
274
|
+
|
|
275
|
+
#### Standard Card
|
|
276
|
+
```typescript
|
|
277
|
+
<Card className="border-0 shadow-2xl">
|
|
278
|
+
<CardHeader>
|
|
279
|
+
<CardTitle>Title</CardTitle>
|
|
280
|
+
<CardDescription>Description</CardDescription>
|
|
281
|
+
</CardHeader>
|
|
282
|
+
<CardContent>
|
|
283
|
+
Content
|
|
284
|
+
</CardContent>
|
|
285
|
+
<CardFooter>
|
|
286
|
+
Footer actions
|
|
287
|
+
</CardFooter>
|
|
288
|
+
</Card>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### Gradient Accent Card
|
|
292
|
+
```typescript
|
|
293
|
+
<Card className="border-2 bg-gradient-to-br from-purple-500/20 via-pink-500/20 to-purple-500/20 border-purple-500/30">
|
|
294
|
+
{/* Plan tier card, feature highlight */}
|
|
295
|
+
</Card>
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
#### Glass Card
|
|
299
|
+
```typescript
|
|
300
|
+
<Card className="bg-background/60 backdrop-blur-sm border-border/50">
|
|
301
|
+
{/* Floating cards, overlays */}
|
|
302
|
+
</Card>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Badges
|
|
306
|
+
|
|
307
|
+
#### Status Badges
|
|
308
|
+
```typescript
|
|
309
|
+
// Active/Success
|
|
310
|
+
<Badge className="bg-emerald-500/10 text-emerald-600 border-emerald-500/20">
|
|
311
|
+
Active
|
|
312
|
+
</Badge>
|
|
313
|
+
|
|
314
|
+
// Warning
|
|
315
|
+
<Badge className="bg-amber-500/10 text-amber-600 border-amber-500/20">
|
|
316
|
+
Pending
|
|
317
|
+
</Badge>
|
|
318
|
+
|
|
319
|
+
// Error
|
|
320
|
+
<Badge className="bg-red-500/10 text-red-600 border-red-500/20">
|
|
321
|
+
Failed
|
|
322
|
+
</Badge>
|
|
323
|
+
|
|
324
|
+
// Info
|
|
325
|
+
<Badge className="bg-blue-500/10 text-blue-600 border-blue-500/20">
|
|
326
|
+
Info
|
|
327
|
+
</Badge>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Icons
|
|
331
|
+
|
|
332
|
+
**Icon Library**: [Lucide React](https://lucide.dev/)
|
|
333
|
+
|
|
334
|
+
#### Size Guidelines
|
|
335
|
+
```typescript
|
|
336
|
+
<Icon className="h-4 w-4" /> /* Small - Inline text, buttons */
|
|
337
|
+
<Icon className="h-5 w-5" /> /* Default - Most UI elements */
|
|
338
|
+
<Icon className="h-6 w-6" /> /* Medium - Card headers */
|
|
339
|
+
<Icon className="h-8 w-8" /> /* Large - Feature icons */
|
|
340
|
+
<Icon className="h-12 w-12" /> /* XL - Hero sections */
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
#### Common Icons
|
|
344
|
+
```typescript
|
|
345
|
+
// Navigation & Actions
|
|
346
|
+
import { Menu, X, ChevronRight, ArrowRight, ExternalLink } from 'lucide-react';
|
|
347
|
+
|
|
348
|
+
// Status
|
|
349
|
+
import { CheckCircle2, XCircle, AlertCircle, Info, Loader2 } from 'lucide-react';
|
|
350
|
+
|
|
351
|
+
// Features
|
|
352
|
+
import { Rocket, Zap, Shield, Cloud, Code, Database } from 'lucide-react';
|
|
353
|
+
|
|
354
|
+
// Social
|
|
355
|
+
import { Github, Twitter, Mail } from 'lucide-react';
|
|
356
|
+
|
|
357
|
+
// UI
|
|
358
|
+
import { Plus, Trash2, Edit, Eye, EyeOff, Search, Filter } from 'lucide-react';
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## 🏗️ Layout Structure
|
|
364
|
+
|
|
365
|
+
### Page Architecture
|
|
366
|
+
|
|
367
|
+
#### Full Page Layout
|
|
368
|
+
```typescript
|
|
369
|
+
<div className="min-h-screen bg-background">
|
|
370
|
+
{/* Header/Navigation */}
|
|
371
|
+
<header className="border-b">
|
|
372
|
+
{/* Navigation content */}
|
|
373
|
+
</header>
|
|
374
|
+
|
|
375
|
+
{/* Main Content */}
|
|
376
|
+
<main className="container mx-auto px-4 py-8">
|
|
377
|
+
{/* Page content */}
|
|
378
|
+
</main>
|
|
379
|
+
|
|
380
|
+
{/* Footer (optional) */}
|
|
381
|
+
<footer className="border-t mt-auto">
|
|
382
|
+
{/* Footer content */}
|
|
383
|
+
</footer>
|
|
384
|
+
</div>
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
#### Auth Pages Layout
|
|
388
|
+
```typescript
|
|
389
|
+
<div className="min-h-screen flex items-center justify-center p-4 bg-gradient-to-br from-slate-50 to-slate-100 dark:from-slate-900 dark:to-slate-800">
|
|
390
|
+
<div className="w-full max-w-6xl flex flex-col lg:flex-row gap-8">
|
|
391
|
+
{/* Feature Carousel (Left) */}
|
|
392
|
+
<div className="flex-1">
|
|
393
|
+
<FeatureCarousel />
|
|
394
|
+
</div>
|
|
395
|
+
|
|
396
|
+
{/* Auth Form (Right) */}
|
|
397
|
+
<div className="w-full lg:w-[480px]">
|
|
398
|
+
<Card className="border-0 shadow-2xl">
|
|
399
|
+
{/* Form content */}
|
|
400
|
+
</Card>
|
|
401
|
+
</div>
|
|
402
|
+
</div>
|
|
403
|
+
</div>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
#### Dashboard Layout
|
|
407
|
+
```typescript
|
|
408
|
+
<div className="min-h-screen bg-background">
|
|
409
|
+
<DashboardHeader />
|
|
410
|
+
|
|
411
|
+
<div className="container mx-auto px-4 py-8">
|
|
412
|
+
{/* Page Header */}
|
|
413
|
+
<div className="flex items-center justify-between mb-8">
|
|
414
|
+
<div>
|
|
415
|
+
<h1 className="text-3xl font-bold">Page Title</h1>
|
|
416
|
+
<p className="text-muted-foreground">Description</p>
|
|
417
|
+
</div>
|
|
418
|
+
<Button className="nitrocloud-gradient">
|
|
419
|
+
Primary Action
|
|
420
|
+
</Button>
|
|
421
|
+
</div>
|
|
422
|
+
|
|
423
|
+
{/* Content Grid */}
|
|
424
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
425
|
+
{/* Sidebar or filters */}
|
|
426
|
+
{/* Main content */}
|
|
427
|
+
</div>
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Responsive Breakpoints
|
|
433
|
+
```typescript
|
|
434
|
+
/* Tailwind Breakpoints */
|
|
435
|
+
sm: '640px' /* Small tablets */
|
|
436
|
+
md: '768px' /* Tablets */
|
|
437
|
+
lg: '1024px' /* Desktops */
|
|
438
|
+
xl: '1280px' /* Large desktops */
|
|
439
|
+
2xl: '1536px' /* Extra large screens */
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## ✨ Visual Effects & Animations
|
|
445
|
+
|
|
446
|
+
### Gradients
|
|
447
|
+
|
|
448
|
+
#### Background Gradients
|
|
449
|
+
```css
|
|
450
|
+
/* Hero Sections */
|
|
451
|
+
bg-gradient-to-br from-primary/5 via-background to-primary/5
|
|
452
|
+
|
|
453
|
+
/* Decorative Backgrounds */
|
|
454
|
+
bg-gradient-to-br from-slate-50 to-slate-100
|
|
455
|
+
dark:from-slate-900 dark:to-slate-800
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
#### Text Gradients
|
|
459
|
+
```typescript
|
|
460
|
+
<h1 className="bg-gradient-to-r from-primary via-primary/80 to-primary/60 bg-clip-text text-transparent">
|
|
461
|
+
Gradient Heading
|
|
462
|
+
</h1>
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Shadows
|
|
466
|
+
```css
|
|
467
|
+
shadow-sm /* Subtle elevation */
|
|
468
|
+
shadow-md /* Default cards */
|
|
469
|
+
shadow-lg /* Prominent cards */
|
|
470
|
+
shadow-xl /* Floating elements */
|
|
471
|
+
shadow-2xl /* Hero cards, modals */
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Animations
|
|
475
|
+
|
|
476
|
+
#### Fade In
|
|
477
|
+
```css
|
|
478
|
+
@keyframes fadeIn {
|
|
479
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
480
|
+
to { opacity: 1; transform: translateY(0); }
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.animate-fadeIn {
|
|
484
|
+
animation: fadeIn 0.6s ease-out forwards;
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
#### Spin (Loading)
|
|
489
|
+
```typescript
|
|
490
|
+
<Loader2 className="h-4 w-4 animate-spin" />
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
#### Transitions
|
|
494
|
+
```css
|
|
495
|
+
/* Default Button/Card Hover */
|
|
496
|
+
transition-colors /* Color changes */
|
|
497
|
+
transition-opacity /* Fade effects */
|
|
498
|
+
transition-all /* Multi-property */
|
|
499
|
+
|
|
500
|
+
/* Duration */
|
|
501
|
+
duration-150 /* 150ms - Fast interactions */
|
|
502
|
+
duration-300 /* 300ms - Standard */
|
|
503
|
+
duration-500 /* 500ms - Smooth effects */
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Hover States
|
|
507
|
+
```css
|
|
508
|
+
/* Buttons */
|
|
509
|
+
hover:opacity-80
|
|
510
|
+
hover:bg-primary/90
|
|
511
|
+
|
|
512
|
+
/* Cards */
|
|
513
|
+
hover:shadow-lg
|
|
514
|
+
hover:border-primary/50
|
|
515
|
+
|
|
516
|
+
/* Links */
|
|
517
|
+
hover:underline
|
|
518
|
+
hover:text-primary
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## 🎨 Design Philosophy
|
|
524
|
+
|
|
525
|
+
### Core Principles
|
|
526
|
+
|
|
527
|
+
#### 1. **Clarity First**
|
|
528
|
+
- Clean, uncluttered interfaces
|
|
529
|
+
- Clear visual hierarchy
|
|
530
|
+
- Obvious call-to-actions
|
|
531
|
+
- Minimal cognitive load
|
|
532
|
+
|
|
533
|
+
#### 2. **Modern & Professional**
|
|
534
|
+
- Contemporary design language
|
|
535
|
+
- Subtle gradients and shadows
|
|
536
|
+
- Refined spacing and typography
|
|
537
|
+
- Professional color palette
|
|
538
|
+
|
|
539
|
+
#### 3. **Accessible by Default**
|
|
540
|
+
- WCAG 2.1 AA compliance
|
|
541
|
+
- Sufficient color contrast
|
|
542
|
+
- Keyboard navigation support
|
|
543
|
+
- Screen reader friendly
|
|
544
|
+
|
|
545
|
+
#### 4. **Responsive & Adaptive**
|
|
546
|
+
- Mobile-first approach
|
|
547
|
+
- Fluid layouts
|
|
548
|
+
- Touch-friendly interactions
|
|
549
|
+
- Progressive enhancement
|
|
550
|
+
|
|
551
|
+
#### 5. **Performance Conscious**
|
|
552
|
+
- Optimized images (WebP, AVIF)
|
|
553
|
+
- Lazy loading
|
|
554
|
+
- Minimal animations
|
|
555
|
+
- Fast page loads
|
|
556
|
+
|
|
557
|
+
### Visual Style
|
|
558
|
+
|
|
559
|
+
#### **Glass morphism** (Subtle)
|
|
560
|
+
```css
|
|
561
|
+
bg-background/60 backdrop-blur-sm border-border/50
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
#### **Neumorphism** (Minimal)
|
|
565
|
+
Used sparingly for depth, primarily through shadows
|
|
566
|
+
|
|
567
|
+
#### **Flat Design 2.0**
|
|
568
|
+
Primary style - flat with subtle depth cues
|
|
569
|
+
|
|
570
|
+
### Whitespace Usage
|
|
571
|
+
- **Generous spacing** between sections (48-64px)
|
|
572
|
+
- **Comfortable padding** in containers (16-32px)
|
|
573
|
+
- **Breathing room** around text and UI elements
|
|
574
|
+
- **Visual separation** through space, not just lines
|
|
575
|
+
|
|
576
|
+
---
|
|
577
|
+
|
|
578
|
+
## 🎭 Brand Voice & Tone
|
|
579
|
+
|
|
580
|
+
### Visual Tone
|
|
581
|
+
- **Professional** yet approachable
|
|
582
|
+
- **Modern** and cutting-edge
|
|
583
|
+
- **Confident** without arrogance
|
|
584
|
+
- **Clean** and sophisticated
|
|
585
|
+
|
|
586
|
+
### Key Brand Attributes
|
|
587
|
+
1. **Fast** - Emphasize speed and efficiency
|
|
588
|
+
2. **Reliable** - Convey stability and trust
|
|
589
|
+
3. **Powerful** - Showcase capabilities
|
|
590
|
+
4. **Simple** - Maintain ease of use
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## 📱 Component Usage Guidelines
|
|
595
|
+
|
|
596
|
+
### When to Use Gradients
|
|
597
|
+
|
|
598
|
+
✅ **DO Use:**
|
|
599
|
+
- Primary CTAs (Deploy, Upgrade, etc.)
|
|
600
|
+
- Hero sections and landing pages
|
|
601
|
+
- Brand moments and highlights
|
|
602
|
+
- Premium features
|
|
603
|
+
|
|
604
|
+
❌ **DON'T Use:**
|
|
605
|
+
- Regular text content
|
|
606
|
+
- Every button
|
|
607
|
+
- Dense data tables
|
|
608
|
+
- Form inputs
|
|
609
|
+
|
|
610
|
+
### When to Use Shadows
|
|
611
|
+
|
|
612
|
+
✅ **DO Use:**
|
|
613
|
+
- Cards and containers
|
|
614
|
+
- Modals and dialogs
|
|
615
|
+
- Floating action buttons
|
|
616
|
+
- Dropdown menus
|
|
617
|
+
|
|
618
|
+
❌ **DON'T Use:**
|
|
619
|
+
- Body text
|
|
620
|
+
- List items
|
|
621
|
+
- Table rows
|
|
622
|
+
- Inline elements
|
|
623
|
+
|
|
624
|
+
### Color Accessibility
|
|
625
|
+
|
|
626
|
+
#### Contrast Ratios
|
|
627
|
+
- **Normal text** (16px+): 4.5:1 minimum
|
|
628
|
+
- **Large text** (24px+): 3:1 minimum
|
|
629
|
+
- **UI elements**: 3:1 minimum
|
|
630
|
+
|
|
631
|
+
#### Testing
|
|
632
|
+
```typescript
|
|
633
|
+
// Primary on background (Light)
|
|
634
|
+
hsl(221.2, 83.2%, 53.3%) on hsl(0, 0%, 100%) = 4.98:1 ✅
|
|
635
|
+
|
|
636
|
+
// Muted text on background (Light)
|
|
637
|
+
hsl(215.4, 16.3%, 46.9%) on hsl(0, 0%, 100%) = 4.63:1 ✅
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
---
|
|
641
|
+
|
|
642
|
+
## 🧩 Reusable Patterns
|
|
643
|
+
|
|
644
|
+
### Loading States
|
|
645
|
+
```typescript
|
|
646
|
+
{isLoading ? (
|
|
647
|
+
<div className="flex items-center justify-center py-8">
|
|
648
|
+
<Loader2 className="h-8 w-8 animate-spin text-primary" />
|
|
649
|
+
</div>
|
|
650
|
+
) : (
|
|
651
|
+
<Content />
|
|
652
|
+
)}
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### Empty States
|
|
656
|
+
```typescript
|
|
657
|
+
<div className="text-center py-12">
|
|
658
|
+
<Icon className="h-12 w-12 text-muted-foreground mx-auto mb-4" />
|
|
659
|
+
<h3 className="text-lg font-semibold mb-2">No items found</h3>
|
|
660
|
+
<p className="text-muted-foreground mb-4">
|
|
661
|
+
Get started by creating your first item.
|
|
662
|
+
</p>
|
|
663
|
+
<Button className="nitrocloud-gradient">
|
|
664
|
+
Create Item
|
|
665
|
+
</Button>
|
|
666
|
+
</div>
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
### Error States
|
|
670
|
+
```typescript
|
|
671
|
+
<div className="rounded-md bg-destructive/10 border border-destructive/20 p-4">
|
|
672
|
+
<div className="flex items-start gap-3">
|
|
673
|
+
<AlertCircle className="h-5 w-5 text-destructive flex-shrink-0 mt-0.5" />
|
|
674
|
+
<div>
|
|
675
|
+
<h4 className="font-semibold text-destructive mb-1">Error Title</h4>
|
|
676
|
+
<p className="text-sm text-destructive/90">Error message details</p>
|
|
677
|
+
</div>
|
|
678
|
+
</div>
|
|
679
|
+
</div>
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
### Success States
|
|
683
|
+
```typescript
|
|
684
|
+
<div className="rounded-md bg-emerald-500/10 border border-emerald-500/20 p-4">
|
|
685
|
+
<div className="flex items-center gap-2">
|
|
686
|
+
<CheckCircle2 className="h-5 w-5 text-emerald-600" />
|
|
687
|
+
<p className="text-sm text-emerald-600 dark:text-emerald-400">
|
|
688
|
+
Success message
|
|
689
|
+
</p>
|
|
690
|
+
</div>
|
|
691
|
+
</div>
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
---
|
|
695
|
+
|
|
696
|
+
## 🔧 Utility Classes Reference
|
|
697
|
+
|
|
698
|
+
### Custom Utilities (globals.css)
|
|
699
|
+
|
|
700
|
+
```css
|
|
701
|
+
/* Brand Gradient */
|
|
702
|
+
.nitrocloud-gradient
|
|
703
|
+
.nitrocloud-text-gradient
|
|
704
|
+
|
|
705
|
+
/* Scrollbars */
|
|
706
|
+
.custom-scrollbar
|
|
707
|
+
|
|
708
|
+
/* Mobile Fixes */
|
|
709
|
+
.h-screen (iOS fix included)
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
### Common Class Combinations
|
|
713
|
+
|
|
714
|
+
```css
|
|
715
|
+
/* Card Container */
|
|
716
|
+
.border-0 .shadow-2xl .rounded-lg
|
|
717
|
+
|
|
718
|
+
/* Page Section */
|
|
719
|
+
.container .mx-auto .px-4 .py-8
|
|
720
|
+
|
|
721
|
+
/* Flex Center */
|
|
722
|
+
.flex .items-center .justify-center
|
|
723
|
+
|
|
724
|
+
/* Text Muted */
|
|
725
|
+
.text-sm .text-muted-foreground
|
|
726
|
+
|
|
727
|
+
/* Interactive Element */
|
|
728
|
+
.transition-colors .hover:opacity-80 .cursor-pointer
|
|
729
|
+
|
|
730
|
+
/* Glass Effect */
|
|
731
|
+
.bg-background/60 .backdrop-blur-sm .border-border/50
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
---
|
|
735
|
+
|
|
736
|
+
## 📖 Best Practices
|
|
737
|
+
|
|
738
|
+
### DO's
|
|
739
|
+
✅ Use semantic color variables (--primary, --foreground, etc.)
|
|
740
|
+
✅ Maintain consistent spacing with Tailwind scale
|
|
741
|
+
✅ Apply `.nitrocloud-gradient` for premium CTAs
|
|
742
|
+
✅ Use Lucide icons for consistency
|
|
743
|
+
✅ Follow mobile-first responsive design
|
|
744
|
+
✅ Include loading and empty states
|
|
745
|
+
✅ Test in both light and dark modes
|
|
746
|
+
✅ Use Inter font throughout
|
|
747
|
+
✅ Apply proper heading hierarchy (h1 → h2 → h3)
|
|
748
|
+
|
|
749
|
+
### DON'Ts
|
|
750
|
+
❌ Don't use arbitrary color values (use CSS variables)
|
|
751
|
+
❌ Don't mix different icon libraries
|
|
752
|
+
❌ Don't override font family
|
|
753
|
+
❌ Don't use inline styles (use Tailwind classes)
|
|
754
|
+
❌ Don't create inconsistent spacing
|
|
755
|
+
❌ Don't forget dark mode variants
|
|
756
|
+
❌ Don't use too many different shadows
|
|
757
|
+
❌ Don't overuse animations
|
|
758
|
+
|
|
759
|
+
---
|
|
760
|
+
|
|
761
|
+
## 🚀 Quick Start Checklist
|
|
762
|
+
|
|
763
|
+
When creating a new page or component:
|
|
764
|
+
|
|
765
|
+
- [ ] Use Inter font (inherited from layout)
|
|
766
|
+
- [ ] Support both light and dark modes
|
|
767
|
+
- [ ] Apply proper semantic colors (--primary, --foreground, etc.)
|
|
768
|
+
- [ ] Use `.nitrocloud-gradient` for primary CTAs
|
|
769
|
+
- [ ] Include responsive breakpoints (mobile-first)
|
|
770
|
+
- [ ] Add loading, error, and empty states
|
|
771
|
+
- [ ] Use Lucide icons (h-5 w-5 for default)
|
|
772
|
+
- [ ] Apply proper spacing (space-y-4, space-y-6, etc.)
|
|
773
|
+
- [ ] Use Card components for containers
|
|
774
|
+
- [ ] Test keyboard navigation
|
|
775
|
+
- [ ] Verify color contrast (4.5:1 minimum)
|
|
776
|
+
- [ ] Add hover states for interactive elements
|
|
777
|
+
|
|
778
|
+
---
|
|
779
|
+
|
|
780
|
+
## 📚 Component Library
|
|
781
|
+
|
|
782
|
+
**UI Framework**: Custom components built on [Radix UI](https://www.radix-ui.com/) + [Tailwind CSS](https://tailwindcss.com/)
|
|
783
|
+
|
|
784
|
+
**Component Location**: `/components/ui/`
|
|
785
|
+
|
|
786
|
+
**Available Components**:
|
|
787
|
+
- Button, Card, Badge, Input, Label
|
|
788
|
+
- Select, Tabs, Dialog, Alert Dialog
|
|
789
|
+
- Dropdown Menu, Progress, Separator, Switch
|
|
790
|
+
|
|
791
|
+
---
|
|
792
|
+
|
|
793
|
+
## 🎯 Success Metrics
|
|
794
|
+
|
|
795
|
+
A well-branded component should:
|
|
796
|
+
1. **Feel familiar** - Consistent with existing design
|
|
797
|
+
2. **Look professional** - Polished and modern
|
|
798
|
+
3. **Be accessible** - WCAG compliant
|
|
799
|
+
4. **Work everywhere** - Responsive and cross-browser
|
|
800
|
+
5. **Load fast** - Optimized performance
|
|
801
|
+
|
|
802
|
+
---
|
|
803
|
+
|
|
804
|
+
**Last Updated**: 2025-11-16
|
|
805
|
+
**Version**: 1.0
|
|
806
|
+
**Maintained by**: Nitrocloud Design Team
|
|
807
|
+
**Questions?**: Refer to existing components in `/components/` and `/app/` directories
|