create-agentic-app 1.1.55 → 1.1.57
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 +40 -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,148 @@
|
|
|
1
|
+
# Security Audit Report
|
|
2
|
+
|
|
3
|
+
**Project:** [PROJECT_NAME]
|
|
4
|
+
**Date:** [YYYY-MM-DD]
|
|
5
|
+
**Auditor:** Claude Code Security Scanner
|
|
6
|
+
**Framework:** OWASP Top 10:2025
|
|
7
|
+
**Scope:** [LIST_OF_DIRECTORIES_AND_FILES_ANALYZED]
|
|
8
|
+
**Technology Stack:** [LANGUAGES_FRAMEWORKS_DETECTED]
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Executive Summary
|
|
13
|
+
|
|
14
|
+
[2-3 paragraph overview: what was analyzed, key risk areas found, overall risk posture, most urgent items to address]
|
|
15
|
+
|
|
16
|
+
**Overall Risk Score:** [SCORE] ([Low/Moderate/High/Critical] Risk)
|
|
17
|
+
|
|
18
|
+
| Severity | Count |
|
|
19
|
+
|----------|-------|
|
|
20
|
+
| Critical | [X] |
|
|
21
|
+
| High | [X] |
|
|
22
|
+
| Medium | [X] |
|
|
23
|
+
| Low | [X] |
|
|
24
|
+
| Info | [X] |
|
|
25
|
+
| **Total**| **[X]** |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Findings
|
|
30
|
+
|
|
31
|
+
### A01:2025 — Broken Access Control
|
|
32
|
+
|
|
33
|
+
[If findings exist, list each one using the format below. If no findings, write: "No issues identified. Checked: [list what was checked]."]
|
|
34
|
+
|
|
35
|
+
#### [SEVERITY] [Finding Title]
|
|
36
|
+
- **File:** `[path/to/file.ext]`
|
|
37
|
+
- **Line(s):** [XX-YY]
|
|
38
|
+
- **CWE:** [CWE-XXX: Name]
|
|
39
|
+
- **Description:** [What the vulnerability is and why it matters]
|
|
40
|
+
- **Evidence:**
|
|
41
|
+
```[language]
|
|
42
|
+
// vulnerable code snippet from the actual codebase
|
|
43
|
+
```
|
|
44
|
+
- **Recommendation:**
|
|
45
|
+
```[language]
|
|
46
|
+
// fixed code snippet showing the remediation
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### A02:2025 — Security Misconfiguration
|
|
52
|
+
|
|
53
|
+
[Same format as above]
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### A03:2025 — Software Supply Chain Failures
|
|
58
|
+
|
|
59
|
+
[Same format as above]
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### A04:2025 — Cryptographic Failures
|
|
64
|
+
|
|
65
|
+
[Same format as above]
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### A05:2025 — Injection
|
|
70
|
+
|
|
71
|
+
[Same format as above]
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### A06:2025 — Insecure Design
|
|
76
|
+
|
|
77
|
+
[Same format as above]
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### A07:2025 — Authentication Failures
|
|
82
|
+
|
|
83
|
+
[Same format as above]
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### A08:2025 — Software or Data Integrity Failures
|
|
88
|
+
|
|
89
|
+
[Same format as above]
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### A09:2025 — Security Logging and Alerting Failures
|
|
94
|
+
|
|
95
|
+
[Same format as above]
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### A10:2025 — Mishandling of Exceptional Conditions
|
|
100
|
+
|
|
101
|
+
[Same format as above]
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Risk Score Breakdown
|
|
106
|
+
|
|
107
|
+
Scoring: Critical = 10 pts, High = 7 pts, Medium = 4 pts, Low = 2 pts, Info = 0 pts.
|
|
108
|
+
|
|
109
|
+
| Category | Critical | High | Medium | Low | Info | Points |
|
|
110
|
+
|----------|----------|------|--------|-----|------|--------|
|
|
111
|
+
| A01 — Broken Access Control | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
112
|
+
| A02 — Security Misconfiguration | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
113
|
+
| A03 — Supply Chain Failures | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
114
|
+
| A04 — Cryptographic Failures | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
115
|
+
| A05 — Injection | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
116
|
+
| A06 — Insecure Design | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
117
|
+
| A07 — Authentication Failures | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
118
|
+
| A08 — Data Integrity Failures | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
119
|
+
| A09 — Logging & Alerting Failures | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
120
|
+
| A10 — Exceptional Conditions | [X] | [X] | [X] | [X] | [X] | [XX] |
|
|
121
|
+
| **Total** | | | | | | **[XX]** |
|
|
122
|
+
|
|
123
|
+
**Risk Rating:** 0-10 = Low | 11-30 = Moderate | 31-60 = High | 61+ = Critical
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Remediation Priority
|
|
128
|
+
|
|
129
|
+
[Ordered list of the most critical items to fix first, with brief rationale]
|
|
130
|
+
|
|
131
|
+
1. **[Most critical finding]** — [why this is urgent and what to do]
|
|
132
|
+
2. **[Second most critical]** — [why and what]
|
|
133
|
+
3. **[Third most critical]** — [why and what]
|
|
134
|
+
[Continue as needed...]
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Methodology
|
|
139
|
+
|
|
140
|
+
This audit was performed using static analysis against the OWASP Top 10:2025 framework. Each category was evaluated using pattern-matching (grep), code review (file reading), dependency analysis, and configuration inspection. The analysis covered source code, configuration files, dependency manifests, and environment settings.
|
|
141
|
+
|
|
142
|
+
**Limitations:** This is a static analysis — it does not include dynamic/runtime testing, penetration testing, or network-level analysis. Some vulnerabilities may only be discoverable through dynamic testing.
|
|
143
|
+
|
|
144
|
+
## References
|
|
145
|
+
|
|
146
|
+
- [OWASP Top 10:2025](https://owasp.org/Top10/2025/)
|
|
147
|
+
- [OWASP Application Security Verification Standard](https://owasp.org/www-project-application-security-verification-standard/)
|
|
148
|
+
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
|
package/template/AGENTS.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
Never make assumptions about what the user wants. Always ask clarifying questions before proceeding.
|
|
4
4
|
|
|
5
|
+
# MANDATORY: Feature Planning & Implementation Workflow
|
|
6
|
+
|
|
7
|
+
**This workflow is non-negotiable for any non-trivial feature or multi-step change.** Do not implement multi-task features directly in a single session. Do not write a monolithic plan and start coding from it. The workflow below exists because implementation plans that live in a single file are either too large for a context window or too shallow for independent execution — both lead to poor results.
|
|
8
|
+
|
|
9
|
+
### The workflow has three stages. Execute them in order, every time.
|
|
10
|
+
|
|
11
|
+
**Stage 1 — Plan.** Discuss the feature with the user. Ask clarifying questions. Understand requirements, technical constraints, and acceptance criteria. This happens naturally in planning mode.
|
|
12
|
+
|
|
13
|
+
**Stage 2 — Create the spec.** Once planning is complete, invoke the `create-spec` skill. This converts the planning conversation into a structured `specs/{feature}/` folder with:
|
|
14
|
+
- Self-contained task files (one per task, in a `tasks/` subfolder)
|
|
15
|
+
- A README with a dependency graph and parallel execution waves
|
|
16
|
+
- Requirements and manual action items
|
|
17
|
+
|
|
18
|
+
Do not skip this step. Do not proceed to implementation without a spec folder. The spec is what enables parallel agent execution — without it, you're back to single-threaded implementation.
|
|
19
|
+
|
|
20
|
+
**Stage 3 — Implement via orchestration.** Once the spec folder exists and the user approves it, invoke the `implement-feature` skill. This orchestrates parallel coder agents wave-by-wave:
|
|
21
|
+
- Each task is dispatched to its own coder agent
|
|
22
|
+
- Tasks within a wave run in parallel
|
|
23
|
+
- A code review gate runs between waves
|
|
24
|
+
- Issues from review are dispatched back to coder agents
|
|
25
|
+
- The cycle repeats until everything passes
|
|
26
|
+
|
|
27
|
+
The main agent (you) does NOT write code during Stage 3. You orchestrate. Coder subagents implement. The code-review agent verifies. You manage progress and commit completed waves.
|
|
28
|
+
|
|
29
|
+
### When does this workflow apply?
|
|
30
|
+
|
|
31
|
+
- Any feature with 2+ tasks or files to change
|
|
32
|
+
- Any work that came out of a planning conversation
|
|
33
|
+
- Any time the user says "implement", "build", "create this feature", or similar after discussing what to build
|
|
34
|
+
|
|
35
|
+
### When does it NOT apply?
|
|
36
|
+
|
|
37
|
+
- Single-file bug fixes or trivial changes
|
|
38
|
+
- Quick config edits or one-line patches
|
|
39
|
+
- Tasks the user explicitly asks to do inline ("just fix this here")
|
|
40
|
+
|
|
41
|
+
If in doubt, ask the user: "This looks like it could benefit from a spec — should I create one, or would you prefer I implement it directly?"
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
5
45
|
# Project Agent Instructions
|
|
6
46
|
|
|
7
47
|
## Skills
|
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)
|
|
@@ -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)
|