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,144 @@
|
|
|
1
|
+
# Task 01: globals.css Foundation
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
complete
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
1
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update `globals.css` to establish the visual foundation for the entire UI improvement. This includes importing the unused `tw-animate-css` package, refreshing the color palette with a subtle blue accent, adding custom keyframe animations, expanding the base layer with better defaults, and defining reusable utility classes. All subsequent tasks depend on the utilities and color tokens defined here.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** None (Wave 1)
|
|
18
|
+
**Blocks:** task-05-home-page.md, task-06-dashboard.md, task-07-chat-page.md, task-08-profile-page.md, task-09-auth-pages.md, task-10-setup-checklist.md, task-11-starter-prompt-modal.md
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** N/A — this is the foundation task.
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/globals.css` — Add tw-animate-css import, update color tokens, add animations, expand base layer, add utility classes
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Add tw-animate-css import** — The package `tw-animate-css@1.4.0` is already installed (in package.json) but never imported. Add the import right after the tailwindcss import:
|
|
31
|
+
|
|
32
|
+
```css
|
|
33
|
+
@import "tailwindcss";
|
|
34
|
+
@import "tw-animate-css";
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
2. **Add animation tokens to `@theme inline`** — Add these at the end of the existing `@theme inline` block (after the `--radius-xl` line):
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
--animate-fade-in: fade-in 0.3s ease-out;
|
|
41
|
+
--animate-fade-up: fade-up 0.4s ease-out;
|
|
42
|
+
--animate-scale-in: scale-in 0.2s ease-out;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
3. **Update light mode color tokens in `:root`** — Change these 3 values (leave all other tokens unchanged):
|
|
46
|
+
|
|
47
|
+
```css
|
|
48
|
+
/* CHANGE these 3 lines: */
|
|
49
|
+
--primary: oklch(0.21 0.034 270); /* was oklch(0.21 0.006 285.885) */
|
|
50
|
+
--ring: oklch(0.705 0.06 270); /* was oklch(0.705 0.015 286.067) */
|
|
51
|
+
--accent: oklch(0.96 0.012 270); /* was oklch(0.967 0.001 286.375) */
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
4. **Update dark mode color tokens in `.dark`** — Change these 3 values (leave all other tokens unchanged):
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
/* CHANGE these 3 lines: */
|
|
58
|
+
--primary: oklch(0.92 0.02 270); /* was oklch(0.92 0.004 286.32) */
|
|
59
|
+
--ring: oklch(0.552 0.05 270); /* was oklch(0.552 0.016 285.938) */
|
|
60
|
+
--accent: oklch(0.28 0.018 270); /* was oklch(0.274 0.006 286.033) */
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
5. **Add keyframe definitions** — Add these right before the `@layer base` block:
|
|
64
|
+
|
|
65
|
+
```css
|
|
66
|
+
@keyframes fade-in {
|
|
67
|
+
from { opacity: 0; }
|
|
68
|
+
to { opacity: 1; }
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@keyframes fade-up {
|
|
72
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
73
|
+
to { opacity: 1; transform: translateY(0); }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@keyframes scale-in {
|
|
77
|
+
from { opacity: 0; transform: scale(0.97); }
|
|
78
|
+
to { opacity: 1; transform: scale(1); }
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
6. **Expand the `@layer base` block** — Replace the existing `@layer base` block with:
|
|
83
|
+
|
|
84
|
+
```css
|
|
85
|
+
@layer base {
|
|
86
|
+
* {
|
|
87
|
+
@apply border-border;
|
|
88
|
+
}
|
|
89
|
+
html {
|
|
90
|
+
scroll-behavior: smooth;
|
|
91
|
+
}
|
|
92
|
+
body {
|
|
93
|
+
@apply bg-background text-foreground;
|
|
94
|
+
font-feature-settings: "rlig" 1, "calt" 1;
|
|
95
|
+
}
|
|
96
|
+
:focus-visible {
|
|
97
|
+
@apply outline-2 outline-offset-2 outline-ring;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
7. **Add utility classes** — Add a new `@layer utilities` block after the `@layer base` block:
|
|
103
|
+
|
|
104
|
+
```css
|
|
105
|
+
@layer utilities {
|
|
106
|
+
.card-interactive {
|
|
107
|
+
@apply transition-all duration-200 ease-out;
|
|
108
|
+
}
|
|
109
|
+
.card-interactive:hover {
|
|
110
|
+
@apply shadow-md -translate-y-0.5;
|
|
111
|
+
}
|
|
112
|
+
.auth-bg {
|
|
113
|
+
background-image: radial-gradient(
|
|
114
|
+
circle at 50% 0%,
|
|
115
|
+
var(--accent) 0%,
|
|
116
|
+
transparent 50%
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Final file structure (order of sections)
|
|
123
|
+
|
|
124
|
+
1. `@import "tailwindcss";`
|
|
125
|
+
2. `@import "tw-animate-css";`
|
|
126
|
+
3. `@theme inline { ... }` (with animation tokens added at end)
|
|
127
|
+
4. `:root { ... }` (with 3 updated color values)
|
|
128
|
+
5. `.dark { ... }` (with 3 updated color values)
|
|
129
|
+
6. `@keyframes` definitions (3 keyframes)
|
|
130
|
+
7. `@layer base { ... }` (expanded)
|
|
131
|
+
8. `@layer utilities { ... }` (new)
|
|
132
|
+
|
|
133
|
+
## Acceptance Criteria
|
|
134
|
+
|
|
135
|
+
- [ ] `tw-animate-css` is imported and animation utilities like `animate-fade-up` are available
|
|
136
|
+
- [ ] `:root` has `--primary: oklch(0.21 0.034 270)`, `--ring: oklch(0.705 0.06 270)`, `--accent: oklch(0.96 0.012 270)`
|
|
137
|
+
- [ ] `.dark` has `--primary: oklch(0.92 0.02 270)`, `--ring: oklch(0.552 0.05 270)`, `--accent: oklch(0.28 0.018 270)`
|
|
138
|
+
- [ ] Three keyframe animations (`fade-in`, `fade-up`, `scale-in`) are defined
|
|
139
|
+
- [ ] `@theme inline` includes `--animate-fade-in`, `--animate-fade-up`, `--animate-scale-in`
|
|
140
|
+
- [ ] `.card-interactive` utility class is defined with hover shadow and translate
|
|
141
|
+
- [ ] `.auth-bg` utility class is defined with radial gradient
|
|
142
|
+
- [ ] `html` has `scroll-behavior: smooth`
|
|
143
|
+
- [ ] `:focus-visible` has global outline styling
|
|
144
|
+
- [ ] All other existing color tokens remain unchanged
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Task 02: Layout Sticky Footer
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
complete
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
1
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update the root layout to use a flex column structure that pushes the footer to the bottom of the viewport on short-content pages. Currently, pages like login/register have minimal content and the footer floats up, leaving blank space below. Adding `min-h-screen flex flex-col` to the body and `flex-1` to the main element creates a proper sticky footer layout.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** None (Wave 1)
|
|
18
|
+
**Blocks:** task-09-auth-pages.md (auth pages rely on the flex-1 main for proper vertical centering)
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** N/A — this is a foundation task.
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/layout.tsx` — Add flex classes to body and main elements
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Add flex layout classes to the `<body>` element** (line 92). The current className is:
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Change it to:
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
className={`${geistSans.variable} ${geistMono.variable} antialiased min-h-screen flex flex-col`}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. **Add `flex-1` to the `<main>` element** (line 101). The current element is:
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
<main id="main-content">{children}</main>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Change it to:
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
<main id="main-content" className="flex-1">{children}</main>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Why this works
|
|
55
|
+
|
|
56
|
+
The ThemeProvider component (`src/components/theme-provider.tsx`) is a pass-through wrapper around `next-themes` ThemeProvider — it renders children directly without adding a wrapping `<div>`. So the flex column chain from `<body>` flows directly through to `<SiteHeader>`, `<main>`, and `<SiteFooter>`.
|
|
57
|
+
|
|
58
|
+
The `min-h-screen` ensures the body fills at least the full viewport. `flex flex-col` creates a vertical flex container. `flex-1` on `<main>` makes it expand to fill all available space, pushing `<SiteFooter>` to the bottom.
|
|
59
|
+
|
|
60
|
+
## Acceptance Criteria
|
|
61
|
+
|
|
62
|
+
- [ ] `<body>` has classes `min-h-screen flex flex-col` in addition to existing font variable classes
|
|
63
|
+
- [ ] `<main>` has `className="flex-1"`
|
|
64
|
+
- [ ] On short-content pages (e.g. `/login`), the footer sits at the bottom of the viewport
|
|
65
|
+
- [ ] On long-content pages (e.g. `/profile`), the footer sits below the content as usual
|
|
66
|
+
- [ ] No visual regressions on any page
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Task 03: Site Header Responsive
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
complete
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
1
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update the site header component with responsive padding and sizing so it scales better on mobile devices. Currently the header uses fixed `px-4 py-4` padding and `text-2xl` logo text that could be tighter on small phones. The action buttons also use a fixed `gap-4` that is generous on narrow screens.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** None (Wave 1)
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** N/A
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/components/site-header.tsx` — Update Tailwind classes for responsive sizing
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Update nav padding** (line 19). Change:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
container mx-auto px-4 py-4 flex justify-between items-center
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
To:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
container mx-auto px-3 sm:px-4 py-3 sm:py-4 flex justify-between items-center
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. **Update logo text size** (line 21). Change the `<h1>` className from:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
text-2xl font-bold
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
text-xl sm:text-2xl font-bold
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
3. **Update actions group gap** (line 38). Change:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
flex items-center gap-4
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
To:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
flex items-center gap-2 sm:gap-4
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Current file reference
|
|
67
|
+
|
|
68
|
+
The full current file is at `src/components/site-header.tsx` (46 lines). The structure is:
|
|
69
|
+
- Skip-to-main-content link (accessibility)
|
|
70
|
+
- `<header className="border-b">` wrapper
|
|
71
|
+
- `<nav>` with logo on left, UserProfile + ModeToggle on right
|
|
72
|
+
|
|
73
|
+
## Acceptance Criteria
|
|
74
|
+
|
|
75
|
+
- [ ] Nav padding is `px-3 sm:px-4 py-3 sm:py-4`
|
|
76
|
+
- [ ] Logo text is `text-xl sm:text-2xl`
|
|
77
|
+
- [ ] Actions gap is `gap-2 sm:gap-4`
|
|
78
|
+
- [ ] Header looks good at 320px viewport width (no overflow, no cramping)
|
|
79
|
+
- [ ] Header looks unchanged at desktop widths (1024px+)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Task 04: Site Footer Responsive
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
complete
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
1
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update the site footer with responsive padding to match the header's responsive scaling and maintain consistent container padding across the app. Currently the footer uses fixed `py-6` and `px-4` that could be tighter on mobile and more generous on large screens.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** None (Wave 1)
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** N/A
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/components/site-footer.tsx` — Update Tailwind classes for responsive padding
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Update footer padding** (line 5). Change:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
border-t py-6 text-center text-sm text-muted-foreground
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
To:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
border-t py-4 sm:py-6 text-center text-sm text-muted-foreground
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. **Update container padding** (line 6). Change:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
container mx-auto px-4
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
container mx-auto px-4 sm:px-6 lg:px-8
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Current file reference
|
|
55
|
+
|
|
56
|
+
The file is at `src/components/site-footer.tsx` (24 lines). It renders a `<footer>` with a GitHubStars component and an attribution link.
|
|
57
|
+
|
|
58
|
+
## Acceptance Criteria
|
|
59
|
+
|
|
60
|
+
- [ ] Footer padding is `py-4 sm:py-6`
|
|
61
|
+
- [ ] Container padding is `px-4 sm:px-6 lg:px-8`
|
|
62
|
+
- [ ] Footer is slightly more compact on mobile (py-4 vs py-6)
|
|
63
|
+
- [ ] Footer has more generous side padding on large screens (lg:px-8)
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Task 05: Home Page Overhaul
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
pending
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
2
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Overhaul the home page with responsive typography, shadcn Card components replacing bare divs, hover effects on interactive cards, and better grid breakpoints. This is the highest-visibility page and sets the visual tone for the entire app. The feature cards and next steps cards are currently plain `<div>` elements with `border rounded-lg` — they need to be replaced with proper shadcn Card components with the `card-interactive` hover utility.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** task-01-globals-css.md
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** Task 01 defines the `card-interactive` utility class in globals.css which provides `transition-all duration-200 ease-out` with hover effects (`shadow-md -translate-y-0.5`). This task uses that class on all interactive cards. Task 01 also updates the color palette so `text-primary` on icons will show the new blue-tinted primary color.
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/page.tsx` — Replace bare divs with shadcn Cards, update typography responsive classes, fix grid breakpoints
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Add Card imports** at the top of the file. Add this import:
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import {
|
|
34
|
+
Card,
|
|
35
|
+
CardContent,
|
|
36
|
+
CardHeader,
|
|
37
|
+
CardTitle,
|
|
38
|
+
} from "@/components/ui/card";
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
2. **Update container spacing** (line 13). Change:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
className="flex-1 container mx-auto px-4 py-12"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
To:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
className="flex-1 container mx-auto px-4 sm:px-6 lg:px-8 py-8 sm:py-12"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. **Update hero h1 typography** (line 20). Change:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
className="text-5xl font-bold tracking-tight bg-gradient-to-r from-primary via-primary/90 to-primary/70 bg-clip-text text-transparent"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
To:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
className="text-3xl sm:text-4xl md:text-5xl font-bold tracking-tight bg-gradient-to-r from-primary via-primary/90 to-primary/70 bg-clip-text text-transparent"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
4. **Update hero h2 subtitle** (line 24). Change:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
className="text-2xl font-semibold text-muted-foreground"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
To:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
className="text-xl sm:text-2xl font-semibold text-muted-foreground"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
5. **Update hero description paragraph** (line 27). Change:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
className="text-xl text-muted-foreground"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
To:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
className="text-base sm:text-lg md:text-xl text-muted-foreground"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
6. **Update "Video Tutorial" heading** (line 35). Change:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
className="text-2xl font-semibold flex items-center justify-center gap-2"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
To:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
className="text-xl sm:text-2xl font-semibold flex items-center justify-center gap-2"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
7. **Add shadow to video embed container** (line 43). Change:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
className="relative pb-[56.25%] h-0 overflow-hidden rounded-lg border"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
To:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
className="relative pb-[56.25%] h-0 overflow-hidden rounded-lg border shadow-md"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
8. **Update feature grid** (line 55). Change:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mt-12"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
To:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6 mt-12"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
9. **Replace all 4 feature card divs** (lines 56-92) with shadcn Card components. Each card currently looks like:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<div className="p-6 border rounded-lg">
|
|
129
|
+
<h3 className="font-semibold mb-2 flex items-center gap-2">
|
|
130
|
+
<Shield className="h-4 w-4" />
|
|
131
|
+
Authentication
|
|
132
|
+
</h3>
|
|
133
|
+
<p className="text-sm text-muted-foreground">
|
|
134
|
+
Better Auth with Google OAuth integration
|
|
135
|
+
</p>
|
|
136
|
+
</div>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Replace each with:
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<Card className="card-interactive">
|
|
143
|
+
<CardHeader className="pb-3">
|
|
144
|
+
<CardTitle className="text-base flex items-center gap-2">
|
|
145
|
+
<Shield className="h-4 w-4 text-primary" />
|
|
146
|
+
Authentication
|
|
147
|
+
</CardTitle>
|
|
148
|
+
</CardHeader>
|
|
149
|
+
<CardContent>
|
|
150
|
+
<p className="text-sm text-muted-foreground">
|
|
151
|
+
Better Auth with Google OAuth integration
|
|
152
|
+
</p>
|
|
153
|
+
</CardContent>
|
|
154
|
+
</Card>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Do this for all 4 cards (Authentication/Shield, Database/Database, AI Ready/Bot, UI Components/Palette). Add `text-primary` to each icon.
|
|
158
|
+
|
|
159
|
+
10. **Update "Next Steps" heading** (line 97). Change:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
className="text-2xl font-semibold"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
To:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
className="text-xl sm:text-2xl font-semibold"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
11. **Update next steps grid** (line 98). Change:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
className="grid grid-cols-1 md:grid-cols-2 gap-4 text-left"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
To:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
className="grid grid-cols-1 sm:grid-cols-2 gap-4 text-left"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
12. **Replace all 4 next steps card divs** (lines 99-169) with shadcn Card components. Each currently looks like:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<div className="p-4 border rounded-lg">
|
|
187
|
+
<h4 className="font-medium mb-2">1. Set up environment variables</h4>
|
|
188
|
+
...content...
|
|
189
|
+
</div>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Replace each wrapper with:
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
<Card className="card-interactive">
|
|
196
|
+
<CardContent className="pt-6">
|
|
197
|
+
<h4 className="font-medium mb-2">1. Set up environment variables</h4>
|
|
198
|
+
...content stays the same...
|
|
199
|
+
</CardContent>
|
|
200
|
+
</Card>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Use `pt-6` on CardContent since there's no CardHeader for these simpler cards.
|
|
204
|
+
|
|
205
|
+
## Acceptance Criteria
|
|
206
|
+
|
|
207
|
+
- [ ] Hero h1 scales: `text-3xl` on mobile, `text-4xl` on sm, `text-5xl` on md+
|
|
208
|
+
- [ ] Hero h2 and description also scale responsively
|
|
209
|
+
- [ ] Feature grid uses `sm:grid-cols-2` breakpoint (2 columns at 640px)
|
|
210
|
+
- [ ] All 4 feature cards use shadcn `Card`/`CardHeader`/`CardContent` with `card-interactive`
|
|
211
|
+
- [ ] All feature card icons have `text-primary` class
|
|
212
|
+
- [ ] All 4 next steps cards use shadcn `Card`/`CardContent` with `card-interactive`
|
|
213
|
+
- [ ] Video embed has `shadow-md`
|
|
214
|
+
- [ ] Container has responsive padding: `px-4 sm:px-6 lg:px-8`
|
|
215
|
+
- [ ] No TypeScript errors (Card imports are correct)
|