create-xani-agentic-app 1.0.0
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/README.md +237 -0
- package/index.js +219 -0
- package/package.json +46 -0
- package/template/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/template/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/template/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/template/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/template/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/template/.agents/skills/better-auth-best-practices/SKILL.md +175 -0
- package/template/.agents/skills/checkpoint/SKILL.md +82 -0
- package/template/.agents/skills/create-spec/SKILL.md +132 -0
- package/template/.agents/skills/create-spec/references/action-required-template.md +53 -0
- package/template/.agents/skills/create-spec/references/readme-template.md +53 -0
- package/template/.agents/skills/create-spec/references/requirements-template.md +54 -0
- package/template/.agents/skills/create-spec/references/task-template.md +79 -0
- package/template/.agents/skills/find-skills/SKILL.md +142 -0
- package/template/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/template/.agents/skills/frontend-design/SKILL.md +42 -0
- package/template/.agents/skills/implement-feature/SKILL.md +189 -0
- package/template/.agents/skills/implement-feature/references/coder-prompt-template.md +46 -0
- package/template/.agents/skills/implement-feature/references/fix-prompt-template.md +38 -0
- package/template/.agents/skills/implement-feature/references/review-prompt-template.md +50 -0
- package/template/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/template/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/template/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/template/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/template/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/template/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/template/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/template/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/template/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/template/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/template/.agents/skills/nextjs/SKILL.md +434 -0
- package/template/.agents/skills/nextjs/overlay.yaml +284 -0
- package/template/.agents/skills/nextjs/references/app-router-files.md +94 -0
- package/template/.agents/skills/nextjs/references/async-patterns.md +87 -0
- package/template/.agents/skills/nextjs/references/bundling.md +180 -0
- package/template/.agents/skills/nextjs/references/data-patterns.md +297 -0
- package/template/.agents/skills/nextjs/references/debug-tricks.md +105 -0
- package/template/.agents/skills/nextjs/references/directives.md +73 -0
- package/template/.agents/skills/nextjs/references/error-handling.md +227 -0
- package/template/.agents/skills/nextjs/references/file-conventions.md +140 -0
- package/template/.agents/skills/nextjs/references/font.md +245 -0
- package/template/.agents/skills/nextjs/references/functions.md +108 -0
- package/template/.agents/skills/nextjs/references/hydration-error.md +91 -0
- package/template/.agents/skills/nextjs/references/image.md +173 -0
- package/template/.agents/skills/nextjs/references/metadata.md +301 -0
- package/template/.agents/skills/nextjs/references/parallel-routes.md +287 -0
- package/template/.agents/skills/nextjs/references/route-handlers.md +146 -0
- package/template/.agents/skills/nextjs/references/rsc-boundaries.md +159 -0
- package/template/.agents/skills/nextjs/references/runtime-selection.md +39 -0
- package/template/.agents/skills/nextjs/references/scripts.md +141 -0
- package/template/.agents/skills/nextjs/references/self-hosting.md +371 -0
- package/template/.agents/skills/nextjs/references/suspense-boundaries.md +67 -0
- package/template/.agents/skills/nextjs/upstream/SKILL.md +153 -0
- package/template/.agents/skills/nextjs/upstream/references/app-router-files.md +94 -0
- package/template/.agents/skills/nextjs/upstream/references/async-patterns.md +87 -0
- package/template/.agents/skills/nextjs/upstream/references/bundling.md +180 -0
- package/template/.agents/skills/nextjs/upstream/references/data-patterns.md +297 -0
- package/template/.agents/skills/nextjs/upstream/references/debug-tricks.md +105 -0
- package/template/.agents/skills/nextjs/upstream/references/directives.md +73 -0
- package/template/.agents/skills/nextjs/upstream/references/error-handling.md +227 -0
- package/template/.agents/skills/nextjs/upstream/references/file-conventions.md +140 -0
- package/template/.agents/skills/nextjs/upstream/references/font.md +245 -0
- package/template/.agents/skills/nextjs/upstream/references/functions.md +108 -0
- package/template/.agents/skills/nextjs/upstream/references/hydration-error.md +91 -0
- package/template/.agents/skills/nextjs/upstream/references/image.md +173 -0
- package/template/.agents/skills/nextjs/upstream/references/metadata.md +301 -0
- package/template/.agents/skills/nextjs/upstream/references/parallel-routes.md +287 -0
- package/template/.agents/skills/nextjs/upstream/references/route-handlers.md +146 -0
- package/template/.agents/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
- package/template/.agents/skills/nextjs/upstream/references/runtime-selection.md +39 -0
- package/template/.agents/skills/nextjs/upstream/references/scripts.md +141 -0
- package/template/.agents/skills/nextjs/upstream/references/self-hosting.md +371 -0
- package/template/.agents/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
- package/template/.agents/skills/playwright-cli/SKILL.md +344 -0
- package/template/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/template/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/template/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/template/.agents/skills/playwright-cli/references/running-code.md +231 -0
- package/template/.agents/skills/playwright-cli/references/session-management.md +169 -0
- package/template/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/template/.agents/skills/playwright-cli/references/test-generation.md +88 -0
- package/template/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/template/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/template/.agents/skills/review-pr/SKILL.md +97 -0
- 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/.agents/skills/shadcn/SKILL.md +246 -0
- package/template/.agents/skills/shadcn/agents/openai.yml +5 -0
- package/template/.agents/skills/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/shadcn/cli.md +276 -0
- package/template/.agents/skills/shadcn/customization.md +209 -0
- package/template/.agents/skills/shadcn/evals/evals.json +47 -0
- package/template/.agents/skills/shadcn/mcp.md +94 -0
- package/template/.agents/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.agents/skills/shadcn/rules/composition.md +195 -0
- package/template/.agents/skills/shadcn/rules/forms.md +192 -0
- package/template/.agents/skills/shadcn/rules/icons.md +101 -0
- package/template/.agents/skills/shadcn/rules/styling.md +162 -0
- package/template/.agents/skills/ship-it/SKILL.md +174 -0
- package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agents/skills/skill-creator/SKILL.md +485 -0
- package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/template/.agents/skills/vercel-react-best-practices/AGENTS.md +3750 -0
- package/template/.agents/skills/vercel-react-best-practices/README.md +123 -0
- package/template/.agents/skills/vercel-react-best-practices/SKILL.md +148 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/.claude/agents/better-auth-expert.md +189 -0
- package/template/.claude/agents/code-review.md +147 -0
- package/template/.claude/agents/coder.md +139 -0
- package/template/.claude/agents/deep-dive.md +133 -0
- package/template/.claude/agents/polar-payments-expert.md +140 -0
- package/template/.claude/agents/security-scanner.md +214 -0
- package/template/.claude/settings.local.json +15 -0
- package/template/.claude/skills/ai-sdk/SKILL.md +78 -0
- package/template/.claude/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/template/.claude/skills/ai-sdk/references/common-errors.md +443 -0
- package/template/.claude/skills/ai-sdk/references/devtools.md +52 -0
- package/template/.claude/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/template/.claude/skills/better-auth-best-practices/SKILL.md +175 -0
- package/template/.claude/skills/caveman/SKILL.md +49 -0
- package/template/.claude/skills/checkpoint/SKILL.md +82 -0
- package/template/.claude/skills/create-spec/SKILL.md +132 -0
- package/template/.claude/skills/create-spec/references/action-required-template.md +53 -0
- package/template/.claude/skills/create-spec/references/readme-template.md +53 -0
- package/template/.claude/skills/create-spec/references/requirements-template.md +54 -0
- package/template/.claude/skills/create-spec/references/task-template.md +79 -0
- package/template/.claude/skills/d3-visualization/SKILL.md +62 -0
- package/template/.claude/skills/find-skills/SKILL.md +142 -0
- package/template/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/template/.claude/skills/frontend-design/SKILL.md +42 -0
- package/template/.claude/skills/grill-me/SKILL.md +10 -0
- package/template/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/template/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
- package/template/.claude/skills/grill-with-docs/SKILL.md +88 -0
- package/template/.claude/skills/gsap-core/SKILL.md +267 -0
- package/template/.claude/skills/implement-feature/SKILL.md +189 -0
- package/template/.claude/skills/implement-feature/references/coder-prompt-template.md +46 -0
- package/template/.claude/skills/implement-feature/references/fix-prompt-template.md +38 -0
- package/template/.claude/skills/implement-feature/references/review-prompt-template.md +50 -0
- package/template/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/template/.claude/skills/mcp-builder/SKILL.md +236 -0
- package/template/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/template/.claude/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/template/.claude/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/template/.claude/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/template/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/template/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/template/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/template/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/template/.claude/skills/nextjs/SKILL.md +434 -0
- package/template/.claude/skills/nextjs/overlay.yaml +284 -0
- package/template/.claude/skills/nextjs/references/app-router-files.md +94 -0
- package/template/.claude/skills/nextjs/references/async-patterns.md +87 -0
- package/template/.claude/skills/nextjs/references/bundling.md +180 -0
- package/template/.claude/skills/nextjs/references/data-patterns.md +297 -0
- package/template/.claude/skills/nextjs/references/debug-tricks.md +105 -0
- package/template/.claude/skills/nextjs/references/directives.md +73 -0
- package/template/.claude/skills/nextjs/references/error-handling.md +227 -0
- package/template/.claude/skills/nextjs/references/file-conventions.md +140 -0
- package/template/.claude/skills/nextjs/references/font.md +245 -0
- package/template/.claude/skills/nextjs/references/functions.md +108 -0
- package/template/.claude/skills/nextjs/references/hydration-error.md +91 -0
- package/template/.claude/skills/nextjs/references/image.md +173 -0
- package/template/.claude/skills/nextjs/references/metadata.md +301 -0
- package/template/.claude/skills/nextjs/references/parallel-routes.md +287 -0
- package/template/.claude/skills/nextjs/references/route-handlers.md +146 -0
- package/template/.claude/skills/nextjs/references/rsc-boundaries.md +159 -0
- package/template/.claude/skills/nextjs/references/runtime-selection.md +39 -0
- package/template/.claude/skills/nextjs/references/scripts.md +141 -0
- package/template/.claude/skills/nextjs/references/self-hosting.md +371 -0
- package/template/.claude/skills/nextjs/references/suspense-boundaries.md +67 -0
- package/template/.claude/skills/nextjs/upstream/SKILL.md +153 -0
- package/template/.claude/skills/nextjs/upstream/references/app-router-files.md +94 -0
- package/template/.claude/skills/nextjs/upstream/references/async-patterns.md +87 -0
- package/template/.claude/skills/nextjs/upstream/references/bundling.md +180 -0
- package/template/.claude/skills/nextjs/upstream/references/data-patterns.md +297 -0
- package/template/.claude/skills/nextjs/upstream/references/debug-tricks.md +105 -0
- package/template/.claude/skills/nextjs/upstream/references/directives.md +73 -0
- package/template/.claude/skills/nextjs/upstream/references/error-handling.md +227 -0
- package/template/.claude/skills/nextjs/upstream/references/file-conventions.md +140 -0
- package/template/.claude/skills/nextjs/upstream/references/font.md +245 -0
- package/template/.claude/skills/nextjs/upstream/references/functions.md +108 -0
- package/template/.claude/skills/nextjs/upstream/references/hydration-error.md +91 -0
- package/template/.claude/skills/nextjs/upstream/references/image.md +173 -0
- package/template/.claude/skills/nextjs/upstream/references/metadata.md +301 -0
- package/template/.claude/skills/nextjs/upstream/references/parallel-routes.md +287 -0
- package/template/.claude/skills/nextjs/upstream/references/route-handlers.md +146 -0
- package/template/.claude/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
- package/template/.claude/skills/nextjs/upstream/references/runtime-selection.md +39 -0
- package/template/.claude/skills/nextjs/upstream/references/scripts.md +141 -0
- package/template/.claude/skills/nextjs/upstream/references/self-hosting.md +371 -0
- package/template/.claude/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
- package/template/.claude/skills/playwright-cli/SKILL.md +344 -0
- package/template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/template/.claude/skills/playwright-cli/references/running-code.md +231 -0
- package/template/.claude/skills/playwright-cli/references/session-management.md +169 -0
- package/template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/template/.claude/skills/playwright-cli/references/test-generation.md +88 -0
- package/template/.claude/skills/playwright-cli/references/tracing.md +139 -0
- package/template/.claude/skills/playwright-cli/references/video-recording.md +143 -0
- package/template/.claude/skills/react-three-fiber/SKILL.md +180 -0
- package/template/.claude/skills/remotion/SKILL.md +43 -0
- package/template/.claude/skills/review-pr/SKILL.md +97 -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/.claude/skills/shadcn/SKILL.md +246 -0
- package/template/.claude/skills/shadcn/agents/openai.yml +5 -0
- package/template/.claude/skills/shadcn/assets/shadcn-small.png +0 -0
- package/template/.claude/skills/shadcn/assets/shadcn.png +0 -0
- package/template/.claude/skills/shadcn/cli.md +276 -0
- package/template/.claude/skills/shadcn/customization.md +209 -0
- package/template/.claude/skills/shadcn/evals/evals.json +47 -0
- package/template/.claude/skills/shadcn/mcp.md +94 -0
- package/template/.claude/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.claude/skills/shadcn/rules/composition.md +195 -0
- package/template/.claude/skills/shadcn/rules/forms.md +192 -0
- package/template/.claude/skills/shadcn/rules/icons.md +101 -0
- package/template/.claude/skills/shadcn/rules/styling.md +162 -0
- package/template/.claude/skills/ship-it/SKILL.md +174 -0
- package/template/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.claude/skills/skill-creator/SKILL.md +485 -0
- package/template/.claude/skills/skill-creator/agents/analyzer.md +274 -0
- package/template/.claude/skills/skill-creator/agents/comparator.md +202 -0
- package/template/.claude/skills/skill-creator/agents/grader.md +223 -0
- package/template/.claude/skills/skill-creator/assets/eval_review.html +146 -0
- package/template/.claude/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/template/.claude/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/template/.claude/skills/skill-creator/references/schemas.md +430 -0
- package/template/.claude/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/template/.claude/skills/skill-creator/scripts/generate_report.py +326 -0
- package/template/.claude/skills/skill-creator/scripts/improve_description.py +247 -0
- package/template/.claude/skills/skill-creator/scripts/package_skill.py +136 -0
- package/template/.claude/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/template/.claude/skills/skill-creator/scripts/run_eval.py +310 -0
- package/template/.claude/skills/skill-creator/scripts/run_loop.py +328 -0
- package/template/.claude/skills/skill-creator/scripts/utils.py +47 -0
- package/template/.claude/skills/svelte/SKILL.md +284 -0
- package/template/.claude/skills/tdd/SKILL.md +109 -0
- package/template/.claude/skills/tdd/deep-modules.md +33 -0
- package/template/.claude/skills/tdd/interface-design.md +31 -0
- package/template/.claude/skills/tdd/mocking.md +59 -0
- package/template/.claude/skills/tdd/refactoring.md +10 -0
- package/template/.claude/skills/tdd/tests.md +61 -0
- package/template/.claude/skills/threejs/SKILL.md +43 -0
- package/template/.claude/skills/to-issues/SKILL.md +83 -0
- package/template/.claude/skills/to-prd/SKILL.md +76 -0
- package/template/.claude/skills/vercel-react-best-practices/AGENTS.md +3750 -0
- package/template/.claude/skills/vercel-react-best-practices/README.md +123 -0
- package/template/.claude/skills/vercel-react-best-practices/SKILL.md +148 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.claude/skills/video-downloader/SKILL.md +42 -0
- package/template/.claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/.claude/skills/webgpu-threejs-tsl/REFERENCE.md +371 -0
- package/template/.claude/skills/webgpu-threejs-tsl/SKILL.md +93 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/compute-shaders.md +578 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/core-concepts.md +497 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/device-loss.md +359 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/limits-and-features.md +133 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/materials.md +353 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/post-processing.md +515 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +324 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/basic-setup.js +87 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/custom-material.js +170 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/earth-shader.js +292 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/particle-system.js +259 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/post-processing.js +199 -0
- package/template/.claude/skills/webgpu-threejs-tsl/templates/compute-shader.js +343 -0
- package/template/.claude/skills/webgpu-threejs-tsl/templates/webgpu-project.js +276 -0
- package/template/.claude/skills/zoom-out/SKILL.md +7 -0
- package/template/.mcp.json +5 -0
- package/template/.nvmrc +1 -0
- package/template/.prettierignore +25 -0
- package/template/.prettierrc +11 -0
- package/template/.vscode/settings.json +1 -0
- package/template/.vscode/tasks.json.example +85 -0
- package/template/AGENTS.md +37 -0
- package/template/CLAUDE.md +75 -0
- package/template/CONTEXT.md +29 -0
- package/template/DESIGN.md +451 -0
- package/template/README.md +394 -0
- package/template/_gitignore +48 -0
- package/template/components.json +21 -0
- package/template/docker-compose.yml +9 -0
- package/template/docs/business/starter-prompt.md +94 -0
- package/template/docs/technical/ai/streaming.md +520 -0
- package/template/docs/technical/ai/structured-data.md +409 -0
- package/template/docs/technical/betterauth/polar.md +476 -0
- package/template/docs/technical/react-markdown.md +123 -0
- package/template/drizzle/0000_chilly_the_phantom.sql +50 -0
- package/template/drizzle/0001_last_warpath.sql +5 -0
- package/template/drizzle/meta/0000_snapshot.json +326 -0
- package/template/drizzle/meta/0001_snapshot.json +410 -0
- package/template/drizzle/meta/_journal.json +20 -0
- package/template/drizzle.config.ts +10 -0
- package/template/env.example +26 -0
- package/template/eslint.config.mjs +75 -0
- package/template/next-env.d.ts +6 -0
- package/template/next.config.ts +57 -0
- package/template/package.json +79 -0
- package/template/postcss.config.mjs +5 -0
- package/template/public/file.svg +1 -0
- package/template/public/globe.svg +1 -0
- package/template/public/next.svg +1 -0
- package/template/public/vercel.svg +1 -0
- package/template/public/window.svg +1 -0
- package/template/scripts/setup.ts +277 -0
- package/template/skills-lock.json +61 -0
- 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/(auth)/forgot-password/page.tsx +35 -0
- package/template/src/app/(auth)/layout.tsx +7 -0
- package/template/src/app/(auth)/login/page.tsx +44 -0
- package/template/src/app/(auth)/register/page.tsx +33 -0
- package/template/src/app/(auth)/reset-password/page.tsx +36 -0
- package/template/src/app/api/auth/[...all]/route.ts +4 -0
- package/template/src/app/api/chat/route.ts +80 -0
- package/template/src/app/api/diagnostics/route.ts +162 -0
- package/template/src/app/chat/error.tsx +46 -0
- package/template/src/app/chat/loading.tsx +42 -0
- package/template/src/app/chat/page.tsx +348 -0
- package/template/src/app/dashboard/loading.tsx +63 -0
- package/template/src/app/dashboard/page.tsx +79 -0
- package/template/src/app/error.tsx +44 -0
- package/template/src/app/favicon.ico +0 -0
- package/template/src/app/globals.css +175 -0
- package/template/src/app/layout.tsx +108 -0
- package/template/src/app/manifest.ts +21 -0
- package/template/src/app/not-found.tsx +28 -0
- package/template/src/app/page.tsx +152 -0
- package/template/src/app/profile/page.tsx +416 -0
- package/template/src/app/robots.ts +16 -0
- package/template/src/app/sitemap.ts +26 -0
- package/template/src/components/auth/forgot-password-form.tsx +83 -0
- package/template/src/components/auth/reset-password-form.tsx +107 -0
- package/template/src/components/auth/sign-in-button.tsx +97 -0
- package/template/src/components/auth/sign-out-button.tsx +31 -0
- package/template/src/components/auth/sign-up-form.tsx +121 -0
- package/template/src/components/auth/user-profile.tsx +91 -0
- package/template/src/components/setup-checklist.tsx +180 -0
- package/template/src/components/site-footer.tsx +24 -0
- package/template/src/components/site-header.tsx +46 -0
- package/template/src/components/starter-prompt-modal.tsx +202 -0
- package/template/src/components/theme-provider.tsx +11 -0
- package/template/src/components/ui/avatar.tsx +52 -0
- package/template/src/components/ui/badge.tsx +35 -0
- package/template/src/components/ui/button.tsx +58 -0
- package/template/src/components/ui/card.tsx +78 -0
- package/template/src/components/ui/dialog.tsx +142 -0
- package/template/src/components/ui/dropdown-menu.tsx +256 -0
- package/template/src/components/ui/github-stars.tsx +53 -0
- package/template/src/components/ui/input.tsx +20 -0
- package/template/src/components/ui/label.tsx +23 -0
- package/template/src/components/ui/mode-toggle.tsx +38 -0
- package/template/src/components/ui/separator.tsx +23 -0
- package/template/src/components/ui/skeleton.tsx +13 -0
- package/template/src/components/ui/sonner.tsx +42 -0
- package/template/src/components/ui/spinner.tsx +21 -0
- package/template/src/components/ui/textarea.tsx +17 -0
- package/template/src/hooks/use-diagnostics.ts +86 -0
- package/template/src/lib/auth-client.ts +16 -0
- package/template/src/lib/auth.ts +25 -0
- package/template/src/lib/db.ts +12 -0
- package/template/src/lib/env.ts +117 -0
- package/template/src/lib/schema.ts +82 -0
- package/template/src/lib/session.ts +48 -0
- package/template/src/lib/storage.ts +225 -0
- package/template/src/lib/utils.ts +6 -0
- package/template/src/proxy.ts +25 -0
- package/template/tsconfig.json +48 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Task 07: Chat Page
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
pending
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
2
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update the chat page to use shadcn Input/Button components instead of native HTML elements, add responsive breakpoints to the header and message bubbles, make the input form sticky at the bottom, and improve the empty state. This page has the most interactive elements and benefits significantly from consistent component usage.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** task-01-globals-css.md
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** Task 01 updates the color palette (so `text-primary`, `bg-primary` references use the new blue-tinted primary). No utility classes from Task 01 are used on this page (chat doesn't use `card-interactive`).
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/chat/page.tsx` — Replace native elements with shadcn components, add responsive classes, sticky input
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Add Input import**. Add to the existing imports:
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { Input } from "@/components/ui/input";
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The file already imports `Button` from `@/components/ui/button`.
|
|
37
|
+
|
|
38
|
+
2. **Also import Bot icon** for the improved empty state. Add `Bot` to the existing lucide-react import:
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import { Copy, Check, Loader2, Bot } from "lucide-react";
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. **Replace native `<button>` in CopyButton** (lines 165-177). Change the function body from:
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
return (
|
|
48
|
+
<button
|
|
49
|
+
onClick={handleCopy}
|
|
50
|
+
className="p-1 hover:bg-muted rounded transition-colors"
|
|
51
|
+
title="Copy to clipboard"
|
|
52
|
+
>
|
|
53
|
+
{copied ? (
|
|
54
|
+
<Check className="h-3.5 w-3.5 text-green-500" />
|
|
55
|
+
) : (
|
|
56
|
+
<Copy className="h-3.5 w-3.5 text-muted-foreground" />
|
|
57
|
+
)}
|
|
58
|
+
</button>
|
|
59
|
+
);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
To:
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
return (
|
|
66
|
+
<Button
|
|
67
|
+
variant="ghost"
|
|
68
|
+
size="icon"
|
|
69
|
+
className="h-7 w-7"
|
|
70
|
+
onClick={handleCopy}
|
|
71
|
+
title="Copy to clipboard"
|
|
72
|
+
>
|
|
73
|
+
{copied ? (
|
|
74
|
+
<Check className="h-3.5 w-3.5 text-green-500" />
|
|
75
|
+
) : (
|
|
76
|
+
<Copy className="h-3.5 w-3.5 text-muted-foreground" />
|
|
77
|
+
)}
|
|
78
|
+
</Button>
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
4. **Update container** (line 247). Change:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
className="container mx-auto px-4 py-8"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
To:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
className="container mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
5. **Update chat header** (lines 249-261). Change:
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
<div className="flex justify-between items-center mb-6 pb-4 border-b">
|
|
98
|
+
<h1 className="text-2xl font-bold">AI Chat</h1>
|
|
99
|
+
<div className="flex items-center gap-4">
|
|
100
|
+
<span className="text-sm text-muted-foreground">
|
|
101
|
+
Welcome, {session.user.name}!
|
|
102
|
+
</span>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
To:
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
<div className="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 sm:gap-4 mb-4 sm:mb-6 pb-4 border-b">
|
|
109
|
+
<h1 className="text-xl sm:text-2xl font-bold">AI Chat</h1>
|
|
110
|
+
<div className="flex items-center gap-2 sm:gap-4">
|
|
111
|
+
<span className="text-sm text-muted-foreground hidden sm:inline">
|
|
112
|
+
Welcome, {session.user.name}!
|
|
113
|
+
</span>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Key changes: flex stacks on mobile, welcome text hidden on mobile (`hidden sm:inline`), smaller gaps.
|
|
117
|
+
|
|
118
|
+
6. **Update message bubble max-widths** (line ~289-290). For user messages, change:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
bg-primary text-primary-foreground ml-auto max-w-[80%]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
To:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
bg-primary text-primary-foreground ml-auto max-w-[85%] sm:max-w-[80%] md:max-w-2xl shadow-sm
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
For AI messages, change:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
bg-muted max-w-[80%]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
To:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
bg-muted max-w-[85%] sm:max-w-[80%] md:max-w-2xl shadow-sm
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
7. **Update message area** (line 271). Change:
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
className="min-h-[50vh] overflow-y-auto space-y-4 mb-4"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
To:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
className="min-h-[50vh] overflow-y-auto space-y-4 mb-4 pb-4"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
8. **Improve empty state** (lines 272-275). Change:
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
<div className="text-center text-muted-foreground py-12">
|
|
158
|
+
Start a conversation with AI
|
|
159
|
+
</div>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
To:
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
<div className="text-center text-muted-foreground py-16 space-y-3">
|
|
166
|
+
<Bot className="h-12 w-12 mx-auto text-muted-foreground/50" />
|
|
167
|
+
<p className="text-lg font-medium">Start a conversation with AI</p>
|
|
168
|
+
<p className="text-sm">Type a message below to begin chatting</p>
|
|
169
|
+
</div>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
9. **Make input form sticky and replace native input** (lines 317-344). Change the form from:
|
|
173
|
+
|
|
174
|
+
```tsx
|
|
175
|
+
<form
|
|
176
|
+
onSubmit={...}
|
|
177
|
+
className="flex gap-2"
|
|
178
|
+
>
|
|
179
|
+
<input
|
|
180
|
+
value={input}
|
|
181
|
+
onChange={(e) => setInput(e.target.value)}
|
|
182
|
+
placeholder="Type your message..."
|
|
183
|
+
className="flex-1 p-2 border border-border rounded-md focus:outline-none focus:ring-2 focus:ring-ring"
|
|
184
|
+
disabled={isStreaming}
|
|
185
|
+
/>
|
|
186
|
+
<Button type="submit" disabled={!input.trim() || isStreaming}>
|
|
187
|
+
...
|
|
188
|
+
</Button>
|
|
189
|
+
</form>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
To:
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
<form
|
|
196
|
+
onSubmit={...}
|
|
197
|
+
className="sticky bottom-0 bg-background py-4 border-t z-10 flex gap-2 sm:gap-3"
|
|
198
|
+
>
|
|
199
|
+
<Input
|
|
200
|
+
value={input}
|
|
201
|
+
onChange={(e) => setInput(e.target.value)}
|
|
202
|
+
placeholder="Type your message..."
|
|
203
|
+
className="flex-1 min-w-0"
|
|
204
|
+
disabled={isStreaming}
|
|
205
|
+
/>
|
|
206
|
+
<Button type="submit" disabled={!input.trim() || isStreaming}>
|
|
207
|
+
...
|
|
208
|
+
</Button>
|
|
209
|
+
</form>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Key changes: `sticky bottom-0 bg-background py-4 border-t z-10` makes the form stick. `Input` replaces native `<input>` for consistent styling. `min-w-0` prevents flex overflow.
|
|
213
|
+
|
|
214
|
+
## Acceptance Criteria
|
|
215
|
+
|
|
216
|
+
- [ ] Chat input uses shadcn `Input` component, not a native `<input>`
|
|
217
|
+
- [ ] CopyButton uses shadcn `Button variant="ghost" size="icon"`, not a native `<button>`
|
|
218
|
+
- [ ] Chat header stacks vertically on mobile (`flex-col`) and is horizontal on sm+
|
|
219
|
+
- [ ] Welcome text is hidden on mobile (`hidden sm:inline`)
|
|
220
|
+
- [ ] Message bubbles have `shadow-sm` for depth
|
|
221
|
+
- [ ] Message widths scale: `max-w-[85%]` on mobile, `max-w-[80%]` on sm, `max-w-2xl` on md+
|
|
222
|
+
- [ ] Input form is sticky at bottom with `bg-background` and `border-t`
|
|
223
|
+
- [ ] Empty state shows Bot icon, title text, and subtitle
|
|
224
|
+
- [ ] Container has responsive padding: `px-4 sm:px-6 lg:px-8`
|
|
225
|
+
- [ ] No TypeScript errors (Input import is correct)
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Task 08: Profile Page
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
pending
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
2
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Update the profile page with responsive stacking, improved grid breakpoints, and flex-wrap on tight rows. The avatar section needs to stack vertically on mobile, the quick actions grid needs an intermediate `sm:` breakpoint, and all the `flex items-center justify-between` rows in cards and dialogs need `flex-wrap` to prevent overflow on narrow screens.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** task-01-globals-css.md
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** Task 01 updates the color palette. No utility classes from Task 01 are specifically used on this page (profile cards are informational, not interactive).
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/profile/page.tsx` — Update responsive classes throughout
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Update container** (line 67). Change:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
className="container max-w-4xl mx-auto py-8 px-4"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
To:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
className="container max-w-4xl mx-auto py-6 sm:py-8 px-4 sm:px-6 lg:px-8"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. **Update title row** (line 68). Change:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
className="flex items-center gap-4 mb-8"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
className="flex items-center gap-2 sm:gap-4 mb-6 sm:mb-8"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
3. **Update title text** (line 78). Change:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
className="text-3xl font-bold"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
To:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
className="text-2xl sm:text-3xl font-bold"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
4. **Update avatar section** (line 85). Change:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
className="flex items-center space-x-4"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
To:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
className="flex flex-col items-center sm:flex-row sm:items-center gap-4"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Important: remove `space-x-4` entirely — it conflicts with `flex-col`. The `gap-4` handles spacing in both directions.
|
|
79
|
+
|
|
80
|
+
5. **Update avatar size** (line 86). Change:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
className="h-20 w-20"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
To:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
className="h-16 w-16 sm:h-20 sm:w-20"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
6. **Update text container** next to avatar (line 96). Change:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
className="space-y-2"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
To:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
className="space-y-2 text-center sm:text-left"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
7. **Update name heading** (line 97). Change:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
className="text-2xl font-semibold"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
To:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
className="text-xl sm:text-2xl font-semibold"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
8. **Update email row** (line 98). Change:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
className="flex items-center gap-2 text-muted-foreground"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
To:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
className="flex flex-wrap items-center justify-center sm:justify-start gap-2 text-muted-foreground"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
9. **Update Account Status grid** (line 160). Change:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
className="grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
To:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
className="grid grid-cols-1 sm:grid-cols-2 gap-4"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
10. **Update all status/activity flex rows** — add `flex-wrap gap-2` and responsive padding. These appear at multiple locations. For each row that has `flex items-center justify-between p-4 border rounded-lg`, change to:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
flex flex-wrap items-center justify-between gap-2 p-3 sm:p-4 border rounded-lg
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Apply this to the following locations:
|
|
147
|
+
- Line 161 (Email Verification status)
|
|
148
|
+
- Line 172 (Account Type status)
|
|
149
|
+
- Line 196 (Current Session activity)
|
|
150
|
+
|
|
151
|
+
11. **Update Quick Actions grid** (line 224). Change:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
className="grid grid-cols-1 md:grid-cols-3 gap-4"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
To:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
12. **Update dialog inner rows** — For the Security Settings dialog (lines 325, 342, 357), each row with `flex items-center justify-between p-4 border rounded-lg`, change to:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
flex flex-wrap items-center justify-between gap-2 p-3 sm:p-4 border rounded-lg
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
13. **Update Email Preferences dialog rows** (lines 388, 396) — same pattern, change:
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
flex items-center justify-between p-4 border rounded-lg
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
To:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
flex flex-wrap items-center justify-between gap-2 p-3 sm:p-4 border rounded-lg
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Acceptance Criteria
|
|
182
|
+
|
|
183
|
+
- [ ] Avatar section stacks vertically on mobile (flex-col) and is horizontal on sm+
|
|
184
|
+
- [ ] Avatar is smaller on mobile (h-16 w-16) and full size on sm+ (h-20 w-20)
|
|
185
|
+
- [ ] Text next to avatar is centered on mobile, left-aligned on sm+
|
|
186
|
+
- [ ] Email row wraps on narrow screens (flex-wrap)
|
|
187
|
+
- [ ] Quick actions grid has intermediate breakpoint: 1 col → 2 at sm → 3 at lg
|
|
188
|
+
- [ ] Account status grid uses sm:grid-cols-2 instead of md:grid-cols-2
|
|
189
|
+
- [ ] All flex justify-between rows in cards and dialogs have flex-wrap and gap-2
|
|
190
|
+
- [ ] Container and title have responsive padding and sizing
|
|
191
|
+
- [ ] No overflow or horizontal scroll at 320px viewport
|
|
192
|
+
- [ ] Profile page title scales: `text-2xl sm:text-3xl`
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Task 09: Auth Pages
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
pending
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
2
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Polish all 4 auth pages (login, register, forgot-password, reset-password) with entrance animations, card shadows, a subtle background gradient, and improved vertical centering that works with the new flex layout. These pages are the first thing new users see, so visual polish matters.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** task-01-globals-css.md, task-02-layout.md
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** Task 01 defines the `auth-bg` utility class (radial gradient from accent color) and the `animate-fade-up` animation in globals.css. Task 02 adds `flex-1` to the `<main>` element, so auth pages can use `flex-1` to fill available vertical space properly.
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/app/(auth)/login/page.tsx` — Add animation, shadow, background, update min-height
|
|
25
|
+
- `src/app/(auth)/register/page.tsx` — Same changes
|
|
26
|
+
- `src/app/(auth)/forgot-password/page.tsx` — Same changes
|
|
27
|
+
- `src/app/(auth)/reset-password/page.tsx` — Same changes
|
|
28
|
+
|
|
29
|
+
## Technical Details
|
|
30
|
+
|
|
31
|
+
### Implementation Steps
|
|
32
|
+
|
|
33
|
+
All 4 files follow the exact same pattern. Each has an outer wrapper div with a Card inside.
|
|
34
|
+
|
|
35
|
+
#### For each file, make these 2 changes:
|
|
36
|
+
|
|
37
|
+
**Change 1: Update the wrapper div.** Each file has:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<div className="flex min-h-[calc(100vh-4rem)] items-center justify-center p-4">
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Change to:
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
<div className="auth-bg flex flex-1 min-h-[calc(100vh-8rem)] items-center justify-center p-4">
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Changes:
|
|
50
|
+
- `auth-bg` — adds the subtle radial gradient background from globals.css
|
|
51
|
+
- `flex-1` — fills available space in the flex column layout (from Task 02)
|
|
52
|
+
- `min-h-[calc(100vh-8rem)]` — accounts for both header and footer height (was just 4rem for header)
|
|
53
|
+
|
|
54
|
+
**Change 2: Add shadow and animation to the Card.** Each file has:
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<Card className="w-full max-w-md">
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Change to:
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
<Card className="w-full max-w-md shadow-lg animate-fade-up">
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Changes:
|
|
67
|
+
- `shadow-lg` — adds elevation/depth to the card
|
|
68
|
+
- `animate-fade-up` — entrance animation (defined in globals.css keyframes, registered in @theme inline)
|
|
69
|
+
|
|
70
|
+
### File-specific locations:
|
|
71
|
+
|
|
72
|
+
**login/page.tsx:**
|
|
73
|
+
- Wrapper div: line 27
|
|
74
|
+
- Card: line 28
|
|
75
|
+
|
|
76
|
+
**register/page.tsx:**
|
|
77
|
+
- Wrapper div: line 20
|
|
78
|
+
- Card: line 21
|
|
79
|
+
|
|
80
|
+
**forgot-password/page.tsx:**
|
|
81
|
+
- Wrapper div: line 21
|
|
82
|
+
- Card: line 22
|
|
83
|
+
|
|
84
|
+
**reset-password/page.tsx:**
|
|
85
|
+
- Wrapper div: line 21
|
|
86
|
+
- Card: line 22
|
|
87
|
+
|
|
88
|
+
## Acceptance Criteria
|
|
89
|
+
|
|
90
|
+
- [ ] All 4 auth pages have `auth-bg` class on the wrapper div
|
|
91
|
+
- [ ] All 4 auth pages have `flex-1 min-h-[calc(100vh-8rem)]` on the wrapper div
|
|
92
|
+
- [ ] All 4 auth cards have `shadow-lg` for depth
|
|
93
|
+
- [ ] All 4 auth cards have `animate-fade-up` for entrance animation
|
|
94
|
+
- [ ] Cards animate upward on page load (smooth fade + translate)
|
|
95
|
+
- [ ] Subtle radial gradient visible in the background (especially visible in dark mode)
|
|
96
|
+
- [ ] Footer stays at the bottom of the viewport on all auth pages
|
|
97
|
+
- [ ] No visual regressions to auth form functionality
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Task 10: Setup Checklist Card Adoption
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
pending
|
|
6
|
+
|
|
7
|
+
## Wave
|
|
8
|
+
|
|
9
|
+
2
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Replace the bare `<div>` wrapper in the SetupChecklist component with a shadcn Card component for visual consistency with the rest of the app. The checklist is displayed on the home page and currently uses `p-6 border rounded-lg` which is the same pattern as the feature cards that are being upgraded to shadcn Cards.
|
|
14
|
+
|
|
15
|
+
## Dependencies
|
|
16
|
+
|
|
17
|
+
**Depends on:** task-01-globals-css.md
|
|
18
|
+
**Blocks:** None
|
|
19
|
+
|
|
20
|
+
**Context from dependencies:** Task 01 updates the color palette. The setup checklist does not use `card-interactive` since it's an informational display, not a clickable card.
|
|
21
|
+
|
|
22
|
+
## Files to Modify
|
|
23
|
+
|
|
24
|
+
- `src/components/setup-checklist.tsx` — Replace wrapper div with shadcn Card
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
|
|
28
|
+
### Implementation Steps
|
|
29
|
+
|
|
30
|
+
1. **Add Card imports.** Add at the top:
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import {
|
|
34
|
+
Card,
|
|
35
|
+
CardContent,
|
|
36
|
+
CardHeader,
|
|
37
|
+
CardTitle,
|
|
38
|
+
} from "@/components/ui/card";
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
2. **Replace the outer wrapper** (line 124). The current structure is:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<div className="p-6 border rounded-lg text-left">
|
|
45
|
+
<div className="flex items-center justify-between mb-4">
|
|
46
|
+
<div>
|
|
47
|
+
<h3 className="font-semibold">Setup checklist</h3>
|
|
48
|
+
<p className="text-sm text-muted-foreground">
|
|
49
|
+
{completed}/{steps.length} completed
|
|
50
|
+
</p>
|
|
51
|
+
</div>
|
|
52
|
+
<Button size="sm" onClick={load} disabled={loading}>
|
|
53
|
+
{loading ? "Checking..." : "Re-check"}
|
|
54
|
+
</Button>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
{error ? <div className="text-sm text-destructive">{error}</div> : null}
|
|
58
|
+
|
|
59
|
+
<ul className="space-y-2">
|
|
60
|
+
...checklist items...
|
|
61
|
+
</ul>
|
|
62
|
+
|
|
63
|
+
{data ? (
|
|
64
|
+
<div className="mt-4 text-xs text-muted-foreground">
|
|
65
|
+
Last checked: {new Date(data.timestamp).toLocaleString()}
|
|
66
|
+
</div>
|
|
67
|
+
) : null}
|
|
68
|
+
</div>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Replace with:
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
<Card className="text-left">
|
|
75
|
+
<CardHeader className="pb-4">
|
|
76
|
+
<div className="flex items-center justify-between">
|
|
77
|
+
<div>
|
|
78
|
+
<CardTitle className="text-base">Setup checklist</CardTitle>
|
|
79
|
+
<p className="text-sm text-muted-foreground">
|
|
80
|
+
{completed}/{steps.length} completed
|
|
81
|
+
</p>
|
|
82
|
+
</div>
|
|
83
|
+
<Button size="sm" onClick={load} disabled={loading}>
|
|
84
|
+
{loading ? "Checking..." : "Re-check"}
|
|
85
|
+
</Button>
|
|
86
|
+
</div>
|
|
87
|
+
</CardHeader>
|
|
88
|
+
<CardContent>
|
|
89
|
+
{error ? <div className="text-sm text-destructive mb-4">{error}</div> : null}
|
|
90
|
+
|
|
91
|
+
<ul className="space-y-2">
|
|
92
|
+
...checklist items stay the same...
|
|
93
|
+
</ul>
|
|
94
|
+
|
|
95
|
+
{data ? (
|
|
96
|
+
<div className="mt-4 text-xs text-muted-foreground">
|
|
97
|
+
Last checked: {new Date(data.timestamp).toLocaleString()}
|
|
98
|
+
</div>
|
|
99
|
+
) : null}
|
|
100
|
+
</CardContent>
|
|
101
|
+
</Card>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Key changes:
|
|
105
|
+
- Outer `<div>` → `<Card>`
|
|
106
|
+
- Title area wrapped in `<CardHeader>` with the flex row inside
|
|
107
|
+
- `h3` → `<CardTitle className="text-base">` (text-base to match current visual size)
|
|
108
|
+
- Content wrapped in `<CardContent>`
|
|
109
|
+
- Error div gets `mb-4` since CardContent doesn't have the same padding structure
|
|
110
|
+
- All checklist items and timestamp stay exactly the same
|
|
111
|
+
|
|
112
|
+
## Acceptance Criteria
|
|
113
|
+
|
|
114
|
+
- [ ] Setup checklist uses shadcn `Card`/`CardHeader`/`CardTitle`/`CardContent`
|
|
115
|
+
- [ ] Visual appearance is consistent — no jarring size or spacing changes
|
|
116
|
+
- [ ] Title uses `CardTitle` with `text-base` to maintain current size
|
|
117
|
+
- [ ] Re-check button still works and is positioned to the right of the title
|
|
118
|
+
- [ ] Error state still displays correctly
|
|
119
|
+
- [ ] Checklist items render identically to before
|
|
120
|
+
- [ ] No TypeScript errors
|