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.
Files changed (49) hide show
  1. package/package.json +1 -1
  2. package/template/.agents/skills/security-scanner/SKILL.md +157 -0
  3. package/template/.agents/skills/security-scanner/references/A01-broken-access-control.md +136 -0
  4. package/template/.agents/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
  5. package/template/.agents/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
  6. package/template/.agents/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
  7. package/template/.agents/skills/security-scanner/references/A05-injection.md +155 -0
  8. package/template/.agents/skills/security-scanner/references/A06-insecure-design.md +145 -0
  9. package/template/.agents/skills/security-scanner/references/A07-authentication-failures.md +150 -0
  10. package/template/.agents/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
  11. package/template/.agents/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
  12. package/template/.agents/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
  13. package/template/.agents/skills/security-scanner/references/report-template.md +148 -0
  14. package/template/.claude/agents/security-scanner.md +214 -0
  15. package/template/.claude/skills/security-scanner/SKILL.md +157 -0
  16. package/template/.claude/skills/security-scanner/references/A01-broken-access-control.md +136 -0
  17. package/template/.claude/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
  18. package/template/.claude/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
  19. package/template/.claude/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
  20. package/template/.claude/skills/security-scanner/references/A05-injection.md +155 -0
  21. package/template/.claude/skills/security-scanner/references/A06-insecure-design.md +145 -0
  22. package/template/.claude/skills/security-scanner/references/A07-authentication-failures.md +150 -0
  23. package/template/.claude/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
  24. package/template/.claude/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
  25. package/template/.claude/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
  26. package/template/.claude/skills/security-scanner/references/report-template.md +148 -0
  27. package/template/AGENTS.md +40 -0
  28. package/template/next-env.d.ts +1 -1
  29. package/template/specs/ui-polish-responsive/README.md +59 -0
  30. package/template/specs/ui-polish-responsive/action-required.md +3 -0
  31. package/template/specs/ui-polish-responsive/requirements.md +53 -0
  32. package/template/specs/ui-polish-responsive/tasks/task-01-globals-css.md +144 -0
  33. package/template/specs/ui-polish-responsive/tasks/task-02-layout.md +66 -0
  34. package/template/specs/ui-polish-responsive/tasks/task-03-site-header.md +79 -0
  35. package/template/specs/ui-polish-responsive/tasks/task-04-site-footer.md +63 -0
  36. package/template/specs/ui-polish-responsive/tasks/task-05-home-page.md +215 -0
  37. package/template/specs/ui-polish-responsive/tasks/task-06-dashboard.md +222 -0
  38. package/template/specs/ui-polish-responsive/tasks/task-07-chat-page.md +225 -0
  39. package/template/specs/ui-polish-responsive/tasks/task-08-profile-page.md +192 -0
  40. package/template/specs/ui-polish-responsive/tasks/task-09-auth-pages.md +97 -0
  41. package/template/specs/ui-polish-responsive/tasks/task-10-setup-checklist.md +120 -0
  42. package/template/specs/ui-polish-responsive/tasks/task-11-starter-prompt-modal.md +87 -0
  43. package/template/src/app/globals.css +65 -7
  44. package/template/src/app/layout.tsx +2 -2
  45. package/template/src/app/page.tsx +174 -174
  46. package/template/src/components/setup-checklist.tsx +162 -162
  47. package/template/src/components/site-footer.tsx +2 -2
  48. package/template/src/components/site-header.tsx +3 -3
  49. 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/)
@@ -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
@@ -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,3 @@
1
+ # Action Required: UI Polish & Responsive Improvements
2
+
3
+ No manual steps required for this feature. All tasks can be implemented automatically.
@@ -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)