quiver-cli 0.1.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 +188 -0
- package/bin/quiver-cli.mjs +2 -0
- package/dist/cli.js +3074 -0
- package/package.json +55 -0
- package/template/.agents/AGENTS.md +25 -0
- package/template/.agents/commands/cp.md +116 -0
- package/template/.agents/commands/next-setup.md +1064 -0
- package/template/.agents/commands/tf-readme.md +38 -0
- package/template/.agents/config.json +60 -0
- package/template/.agents/skills/agent-browser/SKILL.md +55 -0
- package/template/.agents/skills/apps/skybridge/SKILL.md +46 -0
- package/template/.agents/skills/apps/skybridge/references/architecture.md +175 -0
- package/template/.agents/skills/apps/skybridge/references/copy-template.md +24 -0
- package/template/.agents/skills/apps/skybridge/references/csp.md +33 -0
- package/template/.agents/skills/apps/skybridge/references/deploy.md +33 -0
- package/template/.agents/skills/apps/skybridge/references/discover.md +84 -0
- package/template/.agents/skills/apps/skybridge/references/download-file.md +77 -0
- package/template/.agents/skills/apps/skybridge/references/fetch-and-render-data.md +151 -0
- package/template/.agents/skills/apps/skybridge/references/oauth.md +115 -0
- package/template/.agents/skills/apps/skybridge/references/open-external-links.md +71 -0
- package/template/.agents/skills/apps/skybridge/references/prompt-llm.md +20 -0
- package/template/.agents/skills/apps/skybridge/references/publish.md +19 -0
- package/template/.agents/skills/apps/skybridge/references/run-locally.md +51 -0
- package/template/.agents/skills/apps/skybridge/references/state-and-context.md +151 -0
- package/template/.agents/skills/apps/skybridge/references/ui-guidelines.md +205 -0
- package/template/.agents/skills/code/cleanup/SKILL.md +26 -0
- package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +3810 -0
- package/template/.agents/skills/code/vercel-react-best-practices/README.md +123 -0
- package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +149 -0
- package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +15 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.agents/skills/data/prisma-cli/SKILL.md +247 -0
- package/template/.agents/skills/data/prisma-cli/references/db-execute.md +78 -0
- package/template/.agents/skills/data/prisma-cli/references/db-pull.md +185 -0
- package/template/.agents/skills/data/prisma-cli/references/db-push.md +148 -0
- package/template/.agents/skills/data/prisma-cli/references/db-seed.md +188 -0
- package/template/.agents/skills/data/prisma-cli/references/debug.md +46 -0
- package/template/.agents/skills/data/prisma-cli/references/dev.md +157 -0
- package/template/.agents/skills/data/prisma-cli/references/format.md +48 -0
- package/template/.agents/skills/data/prisma-cli/references/generate.md +173 -0
- package/template/.agents/skills/data/prisma-cli/references/init.md +136 -0
- package/template/.agents/skills/data/prisma-cli/references/mcp.md +38 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +127 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +145 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +89 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +78 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +57 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +65 -0
- package/template/.agents/skills/data/prisma-cli/references/studio.md +137 -0
- package/template/.agents/skills/data/prisma-cli/references/validate.md +53 -0
- package/template/.agents/skills/data/prisma-client-api/SKILL.md +216 -0
- package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +223 -0
- package/template/.agents/skills/data/prisma-client-api/references/constructor.md +208 -0
- package/template/.agents/skills/data/prisma-client-api/references/filters.md +256 -0
- package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +281 -0
- package/template/.agents/skills/data/prisma-client-api/references/query-options.md +276 -0
- package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +194 -0
- package/template/.agents/skills/data/prisma-client-api/references/relations.md +308 -0
- package/template/.agents/skills/data/prisma-client-api/references/transactions.md +184 -0
- package/template/.agents/skills/design/impeccable/SKILL.md +176 -0
- package/template/.agents/skills/design/impeccable/reference/adapt.md +311 -0
- package/template/.agents/skills/design/impeccable/reference/animate.md +201 -0
- package/template/.agents/skills/design/impeccable/reference/audit.md +133 -0
- package/template/.agents/skills/design/impeccable/reference/bolder.md +113 -0
- package/template/.agents/skills/design/impeccable/reference/brand.md +108 -0
- package/template/.agents/skills/design/impeccable/reference/clarify.md +288 -0
- package/template/.agents/skills/design/impeccable/reference/codex.md +105 -0
- package/template/.agents/skills/design/impeccable/reference/colorize.md +257 -0
- package/template/.agents/skills/design/impeccable/reference/craft.md +123 -0
- package/template/.agents/skills/design/impeccable/reference/critique.md +767 -0
- package/template/.agents/skills/design/impeccable/reference/delight.md +302 -0
- package/template/.agents/skills/design/impeccable/reference/distill.md +111 -0
- package/template/.agents/skills/design/impeccable/reference/document.md +429 -0
- package/template/.agents/skills/design/impeccable/reference/extract.md +69 -0
- package/template/.agents/skills/design/impeccable/reference/harden.md +347 -0
- package/template/.agents/skills/design/impeccable/reference/init.md +172 -0
- package/template/.agents/skills/design/impeccable/reference/interaction-design.md +189 -0
- package/template/.agents/skills/design/impeccable/reference/layout.md +161 -0
- package/template/.agents/skills/design/impeccable/reference/live.md +718 -0
- package/template/.agents/skills/design/impeccable/reference/onboard.md +234 -0
- package/template/.agents/skills/design/impeccable/reference/optimize.md +258 -0
- package/template/.agents/skills/design/impeccable/reference/overdrive.md +130 -0
- package/template/.agents/skills/design/impeccable/reference/polish.md +241 -0
- package/template/.agents/skills/design/impeccable/reference/product.md +60 -0
- package/template/.agents/skills/design/impeccable/reference/quieter.md +99 -0
- package/template/.agents/skills/design/impeccable/reference/shape.md +165 -0
- package/template/.agents/skills/design/impeccable/reference/typeset.md +279 -0
- package/template/.agents/skills/design/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +94 -0
- package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +225 -0
- package/template/.agents/skills/design/impeccable/scripts/context.mjs +270 -0
- package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +242 -0
- package/template/.agents/skills/design/impeccable/scripts/design-parser.mjs +835 -0
- package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +198 -0
- package/template/.agents/skills/design/impeccable/scripts/detect.mjs +21 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +1733 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +4551 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +12 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +2316 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/template/.agents/skills/design/impeccable/scripts/impeccable-paths.mjs +126 -0
- package/template/.agents/skills/design/impeccable/scripts/is-generated.mjs +69 -0
- package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +812 -0
- package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +123 -0
- package/template/.agents/skills/design/impeccable/scripts/live-browser.js +10316 -0
- package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +75 -0
- package/template/.agents/skills/design/impeccable/scripts/live-completion.mjs +19 -0
- package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/template/.agents/skills/design/impeccable/scripts/live-event-validation.mjs +136 -0
- package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +557 -0
- package/template/.agents/skills/design/impeccable/scripts/live-insert-ui.mjs +458 -0
- package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +272 -0
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edits-buffer.mjs +152 -0
- package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +379 -0
- package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +94 -0
- package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +2322 -0
- package/template/.agents/skills/design/impeccable/scripts/live-session-store.mjs +289 -0
- package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +61 -0
- package/template/.agents/skills/design/impeccable/scripts/live-svelte-component.mjs +826 -0
- package/template/.agents/skills/design/impeccable/scripts/live-sveltekit-adapter.mjs +274 -0
- package/template/.agents/skills/design/impeccable/scripts/live-ui-core.mjs +179 -0
- package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +894 -0
- package/template/.agents/skills/design/impeccable/scripts/live.mjs +246 -0
- package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/template/.agents/skills/design/impeccable/scripts/palette.mjs +633 -0
- package/template/.agents/skills/design/impeccable/scripts/pin.mjs +214 -0
- package/template/.agents/skills/design/shadcn/SKILL.md +242 -0
- package/template/.agents/skills/design/shadcn/agents/openai.yml +5 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/design/shadcn/cli.md +257 -0
- package/template/.agents/skills/design/shadcn/customization.md +202 -0
- package/template/.agents/skills/design/shadcn/evals/evals.json +47 -0
- package/template/.agents/skills/design/shadcn/mcp.md +94 -0
- package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.agents/skills/design/shadcn/rules/composition.md +195 -0
- package/template/.agents/skills/design/shadcn/rules/forms.md +192 -0
- package/template/.agents/skills/design/shadcn/rules/icons.md +101 -0
- package/template/.agents/skills/design/shadcn/rules/styling.md +162 -0
- package/template/.agents/skills/find-skills/SKILL.md +142 -0
- package/template/.agents/skills/integrations/langfuse/SKILL.md +142 -0
- package/template/.agents/skills/integrations/langfuse/references/cli.md +52 -0
- package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +100 -0
- package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +134 -0
- package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +288 -0
- package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +234 -0
- package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +175 -0
- package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +52 -0
- package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +88 -0
- package/template/.agents/skills/integrations/posthog/SKILL.md +102 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +63 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +77 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +57 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +140 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +490 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +45 -0
- package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +139 -0
- package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +302 -0
- package/template/.agents/skills/integrations/posthog/references/identify-users.md +202 -0
- package/template/.agents/skills/integrations/posthog/references/integration-example.md +706 -0
- package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +385 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +43 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +37 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +22 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +38 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +200 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +62 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +197 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +397 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +98 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +120 -0
- package/template/.agents/skills/repo/repo-ci/SKILL.md +265 -0
- package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +129 -0
- package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +800 -0
- package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +47 -0
- package/template/.agents/skills/repo/repo-init-node/SKILL.md +196 -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/upstreams.json +80 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
Designs that only work with perfect data aren't production-ready. Harden the interface against the inputs, errors, languages, and network conditions that real users will throw at it.
|
|
2
|
+
|
|
3
|
+
## Assess Hardening Needs
|
|
4
|
+
|
|
5
|
+
Identify weaknesses and edge cases:
|
|
6
|
+
|
|
7
|
+
1. **Test with extreme inputs**:
|
|
8
|
+
- Very long text (names, descriptions, titles)
|
|
9
|
+
- Very short text (empty, single character)
|
|
10
|
+
- Special characters (emoji, RTL text, accents)
|
|
11
|
+
- Large numbers (millions, billions)
|
|
12
|
+
- Many items (1000+ list items, 50+ options)
|
|
13
|
+
- No data (empty states)
|
|
14
|
+
|
|
15
|
+
2. **Test error scenarios**:
|
|
16
|
+
- Network failures (offline, slow, timeout)
|
|
17
|
+
- API errors (400, 401, 403, 404, 500)
|
|
18
|
+
- Validation errors
|
|
19
|
+
- Permission errors
|
|
20
|
+
- Rate limiting
|
|
21
|
+
- Concurrent operations
|
|
22
|
+
|
|
23
|
+
3. **Test internationalization**:
|
|
24
|
+
- Long translations (German is often 30% longer than English)
|
|
25
|
+
- RTL languages (Arabic, Hebrew)
|
|
26
|
+
- Character sets (Chinese, Japanese, Korean, emoji)
|
|
27
|
+
- Date/time formats
|
|
28
|
+
- Number formats (1,000 vs 1.000)
|
|
29
|
+
- Currency symbols
|
|
30
|
+
|
|
31
|
+
**CRITICAL**: Designs that only work with perfect data aren't production-ready. Harden against reality.
|
|
32
|
+
|
|
33
|
+
## Hardening Dimensions
|
|
34
|
+
|
|
35
|
+
Systematically improve resilience:
|
|
36
|
+
|
|
37
|
+
### Text Overflow & Wrapping
|
|
38
|
+
|
|
39
|
+
**Long text handling**:
|
|
40
|
+
```css
|
|
41
|
+
/* Single line with ellipsis */
|
|
42
|
+
.truncate {
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
text-overflow: ellipsis;
|
|
45
|
+
white-space: nowrap;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Multi-line with clamp */
|
|
49
|
+
.line-clamp {
|
|
50
|
+
display: -webkit-box;
|
|
51
|
+
-webkit-line-clamp: 3;
|
|
52
|
+
-webkit-box-orient: vertical;
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Allow wrapping */
|
|
57
|
+
.wrap {
|
|
58
|
+
word-wrap: break-word;
|
|
59
|
+
overflow-wrap: break-word;
|
|
60
|
+
hyphens: auto;
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Flex/Grid overflow**:
|
|
65
|
+
```css
|
|
66
|
+
/* Prevent flex items from overflowing */
|
|
67
|
+
.flex-item {
|
|
68
|
+
min-width: 0; /* Allow shrinking below content size */
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Prevent grid items from overflowing */
|
|
73
|
+
.grid-item {
|
|
74
|
+
min-width: 0;
|
|
75
|
+
min-height: 0;
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Responsive text sizing**:
|
|
80
|
+
- Use `clamp()` for fluid typography
|
|
81
|
+
- Set minimum readable sizes (14px on mobile)
|
|
82
|
+
- Test text scaling (zoom to 200%)
|
|
83
|
+
- Ensure containers expand with text
|
|
84
|
+
|
|
85
|
+
### Internationalization (i18n)
|
|
86
|
+
|
|
87
|
+
**Text expansion**:
|
|
88
|
+
- Add 30-40% space budget for translations
|
|
89
|
+
- Use flexbox/grid that adapts to content
|
|
90
|
+
- Test with longest language (usually German)
|
|
91
|
+
- Avoid fixed widths on text containers
|
|
92
|
+
|
|
93
|
+
```jsx
|
|
94
|
+
// ❌ Bad: Assumes short English text
|
|
95
|
+
<button className="w-24">Submit</button>
|
|
96
|
+
|
|
97
|
+
// ✅ Good: Adapts to content
|
|
98
|
+
<button className="px-4 py-2">Submit</button>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**RTL (Right-to-Left) support**:
|
|
102
|
+
```css
|
|
103
|
+
/* Use logical properties */
|
|
104
|
+
margin-inline-start: 1rem; /* Not margin-left */
|
|
105
|
+
padding-inline: 1rem; /* Not padding-left/right */
|
|
106
|
+
border-inline-end: 1px solid; /* Not border-right */
|
|
107
|
+
|
|
108
|
+
/* Or use dir attribute */
|
|
109
|
+
[dir="rtl"] .arrow { transform: scaleX(-1); }
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Character set support**:
|
|
113
|
+
- Use UTF-8 encoding everywhere
|
|
114
|
+
- Test with Chinese/Japanese/Korean (CJK) characters
|
|
115
|
+
- Test with emoji (they can be 2-4 bytes)
|
|
116
|
+
- Handle different scripts (Latin, Cyrillic, Arabic, etc.)
|
|
117
|
+
|
|
118
|
+
**Date/Time formatting**:
|
|
119
|
+
```javascript
|
|
120
|
+
// ✅ Use Intl API for proper formatting
|
|
121
|
+
new Intl.DateTimeFormat('en-US').format(date); // 1/15/2024
|
|
122
|
+
new Intl.DateTimeFormat('de-DE').format(date); // 15.1.2024
|
|
123
|
+
|
|
124
|
+
new Intl.NumberFormat('en-US', {
|
|
125
|
+
style: 'currency',
|
|
126
|
+
currency: 'USD'
|
|
127
|
+
}).format(1234.56); // $1,234.56
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Pluralization**:
|
|
131
|
+
```javascript
|
|
132
|
+
// ❌ Bad: Assumes English pluralization
|
|
133
|
+
`${count} item${count !== 1 ? 's' : ''}`
|
|
134
|
+
|
|
135
|
+
// ✅ Good: Use proper i18n library
|
|
136
|
+
t('items', { count }) // Handles complex plural rules
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Error Handling
|
|
140
|
+
|
|
141
|
+
**Network errors**:
|
|
142
|
+
- Show clear error messages
|
|
143
|
+
- Provide retry button
|
|
144
|
+
- Explain what happened
|
|
145
|
+
- Offer offline mode (if applicable)
|
|
146
|
+
- Handle timeout scenarios
|
|
147
|
+
|
|
148
|
+
```jsx
|
|
149
|
+
// Error states with recovery
|
|
150
|
+
{error && (
|
|
151
|
+
<ErrorMessage>
|
|
152
|
+
<p>Failed to load data. {error.message}</p>
|
|
153
|
+
<button onClick={retry}>Try again</button>
|
|
154
|
+
</ErrorMessage>
|
|
155
|
+
)}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Form validation errors**:
|
|
159
|
+
- Inline errors near fields
|
|
160
|
+
- Clear, specific messages
|
|
161
|
+
- Suggest corrections
|
|
162
|
+
- Don't block submission unnecessarily
|
|
163
|
+
- Preserve user input on error
|
|
164
|
+
|
|
165
|
+
**API errors**:
|
|
166
|
+
- Handle each status code appropriately
|
|
167
|
+
- 400: Show validation errors
|
|
168
|
+
- 401: Redirect to login
|
|
169
|
+
- 403: Show permission error
|
|
170
|
+
- 404: Show not found state
|
|
171
|
+
- 429: Show rate limit message
|
|
172
|
+
- 500: Show generic error, offer support
|
|
173
|
+
|
|
174
|
+
**Graceful degradation**:
|
|
175
|
+
- Core functionality works without JavaScript
|
|
176
|
+
- Images have alt text
|
|
177
|
+
- Progressive enhancement
|
|
178
|
+
- Fallbacks for unsupported features
|
|
179
|
+
|
|
180
|
+
### Edge Cases & Boundary Conditions
|
|
181
|
+
|
|
182
|
+
**Empty states**:
|
|
183
|
+
- No items in list
|
|
184
|
+
- No search results
|
|
185
|
+
- No notifications
|
|
186
|
+
- No data to display
|
|
187
|
+
- Provide clear next action
|
|
188
|
+
|
|
189
|
+
**Loading states**:
|
|
190
|
+
- Initial load
|
|
191
|
+
- Pagination load
|
|
192
|
+
- Refresh
|
|
193
|
+
- Show what's loading ("Loading your projects...")
|
|
194
|
+
- Time estimates for long operations
|
|
195
|
+
|
|
196
|
+
**Large datasets**:
|
|
197
|
+
- Pagination or virtual scrolling
|
|
198
|
+
- Search/filter capabilities
|
|
199
|
+
- Performance optimization
|
|
200
|
+
- Don't load all 10,000 items at once
|
|
201
|
+
|
|
202
|
+
**Concurrent operations**:
|
|
203
|
+
- Prevent double-submission (disable button while loading)
|
|
204
|
+
- Handle race conditions
|
|
205
|
+
- Optimistic updates with rollback
|
|
206
|
+
- Conflict resolution
|
|
207
|
+
|
|
208
|
+
**Permission states**:
|
|
209
|
+
- No permission to view
|
|
210
|
+
- No permission to edit
|
|
211
|
+
- Read-only mode
|
|
212
|
+
- Clear explanation of why
|
|
213
|
+
|
|
214
|
+
**Browser compatibility**:
|
|
215
|
+
- Polyfills for modern features
|
|
216
|
+
- Fallbacks for unsupported CSS
|
|
217
|
+
- Feature detection (not browser detection)
|
|
218
|
+
- Test in target browsers
|
|
219
|
+
|
|
220
|
+
### Input Validation & Sanitization
|
|
221
|
+
|
|
222
|
+
**Client-side validation**:
|
|
223
|
+
- Required fields
|
|
224
|
+
- Format validation (email, phone, URL)
|
|
225
|
+
- Length limits
|
|
226
|
+
- Pattern matching
|
|
227
|
+
- Custom validation rules
|
|
228
|
+
|
|
229
|
+
**Server-side validation** (always):
|
|
230
|
+
- Never trust client-side only
|
|
231
|
+
- Validate and sanitize all inputs
|
|
232
|
+
- Protect against injection attacks
|
|
233
|
+
- Rate limiting
|
|
234
|
+
|
|
235
|
+
**Constraint handling**:
|
|
236
|
+
```html
|
|
237
|
+
<!-- Set clear constraints -->
|
|
238
|
+
<input
|
|
239
|
+
type="text"
|
|
240
|
+
maxlength="100"
|
|
241
|
+
pattern="[A-Za-z0-9]+"
|
|
242
|
+
required
|
|
243
|
+
aria-describedby="username-hint"
|
|
244
|
+
/>
|
|
245
|
+
<small id="username-hint">
|
|
246
|
+
Letters and numbers only, up to 100 characters
|
|
247
|
+
</small>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Accessibility Resilience
|
|
251
|
+
|
|
252
|
+
**Keyboard navigation**:
|
|
253
|
+
- All functionality accessible via keyboard
|
|
254
|
+
- Logical tab order
|
|
255
|
+
- Focus management in modals
|
|
256
|
+
- Skip links for long content
|
|
257
|
+
|
|
258
|
+
**Screen reader support**:
|
|
259
|
+
- Proper ARIA labels
|
|
260
|
+
- Announce dynamic changes (live regions)
|
|
261
|
+
- Descriptive alt text
|
|
262
|
+
- Semantic HTML
|
|
263
|
+
|
|
264
|
+
**Motion sensitivity**:
|
|
265
|
+
```css
|
|
266
|
+
@media (prefers-reduced-motion: reduce) {
|
|
267
|
+
* {
|
|
268
|
+
animation-duration: 0.01ms !important;
|
|
269
|
+
animation-iteration-count: 1 !important;
|
|
270
|
+
transition-duration: 0.01ms !important;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**High contrast mode**:
|
|
276
|
+
- Test in Windows high contrast mode
|
|
277
|
+
- Don't rely only on color
|
|
278
|
+
- Provide alternative visual cues
|
|
279
|
+
|
|
280
|
+
### Performance Resilience
|
|
281
|
+
|
|
282
|
+
**Slow connections**:
|
|
283
|
+
- Progressive image loading
|
|
284
|
+
- Skeleton screens
|
|
285
|
+
- Optimistic UI updates
|
|
286
|
+
- Offline support (service workers)
|
|
287
|
+
|
|
288
|
+
**Memory leaks**:
|
|
289
|
+
- Clean up event listeners
|
|
290
|
+
- Cancel subscriptions
|
|
291
|
+
- Clear timers/intervals
|
|
292
|
+
- Abort pending requests on unmount
|
|
293
|
+
|
|
294
|
+
**Throttling & Debouncing**:
|
|
295
|
+
```javascript
|
|
296
|
+
// Debounce search input
|
|
297
|
+
const debouncedSearch = debounce(handleSearch, 300);
|
|
298
|
+
|
|
299
|
+
// Throttle scroll handler
|
|
300
|
+
const throttledScroll = throttle(handleScroll, 100);
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Testing Strategies
|
|
304
|
+
|
|
305
|
+
**Manual testing**:
|
|
306
|
+
- Test with extreme data (very long, very short, empty)
|
|
307
|
+
- Test in different languages
|
|
308
|
+
- Test offline
|
|
309
|
+
- Test slow connection (throttle to 3G)
|
|
310
|
+
- Test with screen reader
|
|
311
|
+
- Test keyboard-only navigation
|
|
312
|
+
- Test on old browsers
|
|
313
|
+
|
|
314
|
+
**Automated testing**:
|
|
315
|
+
- Unit tests for edge cases
|
|
316
|
+
- Integration tests for error scenarios
|
|
317
|
+
- E2E tests for critical paths
|
|
318
|
+
- Visual regression tests
|
|
319
|
+
- Accessibility tests (axe, WAVE)
|
|
320
|
+
|
|
321
|
+
**IMPORTANT**: Hardening is about expecting the unexpected. Real users will do things you never imagined.
|
|
322
|
+
|
|
323
|
+
**NEVER**:
|
|
324
|
+
- Assume perfect input (validate everything)
|
|
325
|
+
- Ignore internationalization (design for global)
|
|
326
|
+
- Leave error messages generic ("Error occurred")
|
|
327
|
+
- Forget offline scenarios
|
|
328
|
+
- Trust client-side validation alone
|
|
329
|
+
- Use fixed widths for text
|
|
330
|
+
- Assume English-length text
|
|
331
|
+
- Block entire interface when one component errors
|
|
332
|
+
|
|
333
|
+
## Verify Hardening
|
|
334
|
+
|
|
335
|
+
Test thoroughly with edge cases:
|
|
336
|
+
|
|
337
|
+
- **Long text**: Try names with 100+ characters
|
|
338
|
+
- **Emoji**: Use emoji in all text fields
|
|
339
|
+
- **RTL**: Test with Arabic or Hebrew
|
|
340
|
+
- **CJK**: Test with Chinese/Japanese/Korean
|
|
341
|
+
- **Network issues**: Disable internet, throttle connection
|
|
342
|
+
- **Large datasets**: Test with 1000+ items
|
|
343
|
+
- **Concurrent actions**: Click submit 10 times rapidly
|
|
344
|
+
- **Errors**: Force API errors, test all error states
|
|
345
|
+
- **Empty**: Remove all data, test empty states
|
|
346
|
+
|
|
347
|
+
When edge cases are covered, hand off to `/impeccable polish` for the final pass.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Init Flow
|
|
2
|
+
|
|
3
|
+
The setup command for a project. One codebase crawl feeds everything it writes:
|
|
4
|
+
|
|
5
|
+
- **PRODUCT.md** (strategic): root project file for register, target users, product purpose, brand personality, anti-references, strategic design principles. Answers "who/what/why".
|
|
6
|
+
- **DESIGN.md** (visual): root project file for visual theme, color palette, typography, components, layout. Follows the [Google Stitch DESIGN.md format](https://stitch.withgoogle.com/docs/design-md/format/). Answers "how it looks".
|
|
7
|
+
- **`.impeccable/live/config.json`** (live mode): pre-configured so `/impeccable live` boots straight into variant mode with no first-time detour.
|
|
8
|
+
|
|
9
|
+
It closes by pointing the user at the best command to run next. Every other impeccable command reads PRODUCT.md and DESIGN.md before doing any work.
|
|
10
|
+
|
|
11
|
+
## Step 1: Load current state
|
|
12
|
+
|
|
13
|
+
Check what already exists. PRODUCT.md and DESIGN.md live at the project root, or under `.agents/context/` or `docs/` (case-insensitive). Read whichever are present with your native file tool. Also note whether `.impeccable/live/config.json` already exists (Step 6 leaves it untouched if so).
|
|
14
|
+
|
|
15
|
+
Decision tree:
|
|
16
|
+
- **Neither file exists (empty project or no context yet)**: do Steps 2-4 (write PRODUCT.md), then decide on DESIGN.md based on whether there's code to analyze.
|
|
17
|
+
- **PRODUCT.md exists, DESIGN.md missing**: skip to Step 5 and offer to run `/impeccable document` for DESIGN.md.
|
|
18
|
+
- **PRODUCT.md exists but has no `## Register` section (legacy)**: add it. Infer a hypothesis from the codebase (see Step 2), confirm with the user, write the field.
|
|
19
|
+
- **Both exist**: STOP and call the `question` tool to clarify. Ask which file to refresh. Skip the one the user doesn't want changed.
|
|
20
|
+
- **Just DESIGN.md exists (unusual)**: do Steps 2-4 to produce PRODUCT.md.
|
|
21
|
+
|
|
22
|
+
Never silently overwrite an existing file. Always confirm first.
|
|
23
|
+
|
|
24
|
+
If init was invoked as a setup blocker by another command, such as `/impeccable craft landing page`, pause that command here. Complete init, then resume the original command. Your own writes are the freshest source; no reload needed. For craft, resume into shape next; init creates project context, but it is not a substitute for the task-specific shape interview and confirmed design brief.
|
|
25
|
+
|
|
26
|
+
## Step 2: Explore the codebase
|
|
27
|
+
|
|
28
|
+
Before asking questions, thoroughly scan the project to discover what you can. This single crawl feeds PRODUCT.md, DESIGN.md, **and** the live-mode framework detection in Step 6, so be thorough once rather than re-scanning later:
|
|
29
|
+
|
|
30
|
+
- **README and docs**: Project purpose, target audience, any stated goals
|
|
31
|
+
- **Package.json / config files**: Tech stack, dependencies, existing design libraries, **and the framework** (Vite/SPA, Next.js, Nuxt, SvelteKit, Astro, multi-page static) plus the HTML entry the browser actually loads
|
|
32
|
+
- **Existing components**: Current design patterns, spacing, typography in use
|
|
33
|
+
- **Brand assets**: Logos, favicons, color values already defined
|
|
34
|
+
- **Design tokens / CSS variables**: Existing color palettes, font stacks, spacing scales
|
|
35
|
+
- **Any style guides or brand documentation**
|
|
36
|
+
|
|
37
|
+
Also form a **register hypothesis** from what you find:
|
|
38
|
+
|
|
39
|
+
- Brand signals: `/`, `/about`, `/pricing`, `/blog/*`, `/docs/*`, hero sections, big typography, scroll-driven sections, landing-page-shaped content.
|
|
40
|
+
- Product signals: `/app/*`, `/dashboard`, `/settings`, `/(auth)`, forms, data tables, side/top nav, app-shell components.
|
|
41
|
+
|
|
42
|
+
Register is a hypothesis at this point, not a decision; Step 3 confirms it.
|
|
43
|
+
|
|
44
|
+
Note what you've learned and what remains unclear. Also note any rough edges worth a follow-up command (thin hierarchy, flat or gray palette, missing error/empty states, dull copy); Step 7 turns these into concrete recommendations without re-analyzing.
|
|
45
|
+
|
|
46
|
+
## Step 3: Ask strategic questions (for PRODUCT.md)
|
|
47
|
+
|
|
48
|
+
STOP and call the `question` tool to clarify. Ask only about what you couldn't infer from the codebase.
|
|
49
|
+
|
|
50
|
+
### Interview mode, not confirmation mode
|
|
51
|
+
|
|
52
|
+
If the repo is empty or the user's brief is sparse, run a short interview before proposing PRODUCT.md. Do **not** turn a one-sentence request into a complete inferred PRODUCT.md and ask for blanket confirmation.
|
|
53
|
+
|
|
54
|
+
- Use the harness's structured question tool when one exists. Otherwise, ask directly in chat and stop.
|
|
55
|
+
- Ask **2-3 questions per round**, then wait for answers.
|
|
56
|
+
- Use inferred answers as hypotheses or options, not as finished facts.
|
|
57
|
+
- Complete at least one real user-answer round before drafting PRODUCT.md, unless every required answer is directly discoverable from repo docs.
|
|
58
|
+
- Round 1 should establish register, users/purpose, and desired outcome.
|
|
59
|
+
- Round 2 should establish brand personality or references, anti-references, and accessibility needs.
|
|
60
|
+
|
|
61
|
+
### Minimum viable interview
|
|
62
|
+
|
|
63
|
+
Ask enough to complete PRODUCT.md. At minimum, cover register confirmation, users and purpose, brand personality, anti-references, and accessibility needs unless each answer is directly discoverable from repo context. After at least one interview round, you may propose inferred answers, but the user must confirm them before you write PRODUCT.md. Never synthesize PRODUCT.md from the original task prompt alone.
|
|
64
|
+
|
|
65
|
+
### Register (ask first; it shapes everything below)
|
|
66
|
+
|
|
67
|
+
Every design task is either **brand** (marketing, landing, campaign, long-form content, portfolio: design IS the product) or **product** (app UI, admin, dashboards, tools: design SERVES the product).
|
|
68
|
+
|
|
69
|
+
If Step 2 produced a clear hypothesis, lead with it: *"From the codebase, this looks like a [brand / product] surface. Does that match your intent, or should we treat it differently?"*
|
|
70
|
+
|
|
71
|
+
If the signal is genuinely split (e.g. a product with a big marketing landing), STOP and call the `question` tool to clarify. Ask which register describes the **primary** surface. The register can be overridden per task later, but PRODUCT.md carries one default.
|
|
72
|
+
|
|
73
|
+
### Users & Purpose
|
|
74
|
+
- Who uses this? What's their context when using it?
|
|
75
|
+
- What job are they trying to get done?
|
|
76
|
+
- For brand: what emotions should the interface evoke? (confidence, delight, calm, urgency)
|
|
77
|
+
- For product: what workflow are they in? What's the primary task on any given screen?
|
|
78
|
+
|
|
79
|
+
### Brand & Personality
|
|
80
|
+
- How would you describe the brand personality in 3 words?
|
|
81
|
+
- Reference sites or apps that capture the right feel? What specifically about them?
|
|
82
|
+
- Push for specific named references with the *specific* thing about them that fits this brand, not generic "modern" adjectives or category-bucket lanes.
|
|
83
|
+
- What should this explicitly NOT look like? Any anti-references?
|
|
84
|
+
|
|
85
|
+
### Accessibility & Inclusion
|
|
86
|
+
- Specific accessibility requirements? (WCAG level, known user needs)
|
|
87
|
+
- Considerations for reduced motion, color blindness, or other accommodations?
|
|
88
|
+
|
|
89
|
+
Skip questions where the answer is already clear. **Do NOT ask about colors, fonts, radii, or visual styling here.** Those belong in DESIGN.md, not PRODUCT.md.
|
|
90
|
+
|
|
91
|
+
## Step 4: Write PRODUCT.md
|
|
92
|
+
|
|
93
|
+
Write PRODUCT.md only after the user has confirmed the strategic answers from Step 3. If an inferred answer is uncertain or unconfirmed, ask before writing.
|
|
94
|
+
|
|
95
|
+
Synthesize into a strategic document:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
# Product
|
|
99
|
+
|
|
100
|
+
## Register
|
|
101
|
+
|
|
102
|
+
product
|
|
103
|
+
|
|
104
|
+
## Users
|
|
105
|
+
[Who they are, their context, the job to be done]
|
|
106
|
+
|
|
107
|
+
## Product Purpose
|
|
108
|
+
[What this product does, why it exists, what success looks like]
|
|
109
|
+
|
|
110
|
+
## Brand Personality
|
|
111
|
+
[Voice, tone, 3-word personality, emotional goals]
|
|
112
|
+
|
|
113
|
+
## Anti-references
|
|
114
|
+
[What this should NOT look like. Specific bad-example sites or patterns to avoid.]
|
|
115
|
+
|
|
116
|
+
## Design Principles
|
|
117
|
+
[3-5 strategic principles derived from the conversation. Principles like "practice what you preach", "show, don't tell", "expert confidence". NOT visual rules like "use OKLCH" or "magenta accent".]
|
|
118
|
+
|
|
119
|
+
## Accessibility & Inclusion
|
|
120
|
+
[WCAG level, known user needs, considerations]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Register is either `brand` or `product` as a bare value. No prose, no commentary.
|
|
124
|
+
|
|
125
|
+
Write to `PROJECT_ROOT/PRODUCT.md`. If `.impeccable.md` existed, the loader already renamed it; merge into that content rather than starting from scratch.
|
|
126
|
+
|
|
127
|
+
## Step 5: Decide on DESIGN.md
|
|
128
|
+
|
|
129
|
+
Offer `/impeccable document` either way. Two paths:
|
|
130
|
+
|
|
131
|
+
- **Code exists** (CSS tokens, components, a running site): "I can generate a DESIGN.md that captures your visual system (colors, typography, components) so variants stay on-brand. Want to do that now?"
|
|
132
|
+
- **Pre-implementation** (empty project): "I can seed a starter DESIGN.md from five quick questions about color strategy, type direction, motion energy, and references. You can re-run once there's code, to capture the real tokens. Want to do that now?"
|
|
133
|
+
|
|
134
|
+
If the user agrees, delegate to `/impeccable document` (it auto-detects scan vs seed). Load its reference and follow that flow.
|
|
135
|
+
|
|
136
|
+
If the user prefers to skip, mention they can run `/impeccable document` any time later.
|
|
137
|
+
|
|
138
|
+
## Step 6: Configure live mode (when code exists)
|
|
139
|
+
|
|
140
|
+
If the project has code with HTML entries and a dev server (the same "code exists" condition that puts `/impeccable document` in scan mode), pre-configure live mode now. You already identified the framework and the served HTML entry in Step 2, so this is nearly free, and it spares the user the first-time setup detour when they later run `/impeccable live`.
|
|
141
|
+
|
|
142
|
+
**Skip this step for empty / pre-implementation projects** (nothing to inject into yet). Tell the user live mode will configure itself the first time they run it once there's code.
|
|
143
|
+
|
|
144
|
+
**If `.impeccable/live/config.json` already exists, leave it untouched** and note that live mode is already configured.
|
|
145
|
+
|
|
146
|
+
Otherwise:
|
|
147
|
+
|
|
148
|
+
1. Write `.impeccable/live/config.json`. Choose `files` (the HTML entries the browser actually loads), `insertBefore`, and `commentSyntax` from the framework table in [live.md](live.md)'s **First-time setup** section, using the framework you found in Step 2. That table is canonical; do not restate it here. For multi-page static sites, prefer a glob (`["public/**/*.html"]`) over a literal list.
|
|
149
|
+
2. Run `node .agents/skills/design/impeccable/scripts/detect-csp.mjs`. If it reports a patchable shape (`append-arrays` / `append-string`), use the **consent prompt template** from live.md before editing any source file. On decline, skip the patch. For `middleware` / `meta-tag` shapes, surface the detected files and ask the user to add `http://localhost:8400` to `script-src` and `connect-src` manually. For `null`, there's nothing to do.
|
|
150
|
+
3. Set `cspChecked: true` in the config once CSP is handled (patched, declined, manual, or not needed). The schema and per-shape patch details live in live.md's First-time setup; follow it rather than duplicating.
|
|
151
|
+
|
|
152
|
+
Writing the config file is harmless and needs no consent; only the CSP **source-file patch** requires a yes.
|
|
153
|
+
|
|
154
|
+
## Step 7: Recommend starting points, then wrap up
|
|
155
|
+
|
|
156
|
+
Summarize tersely:
|
|
157
|
+
- Register captured (brand / product)
|
|
158
|
+
- What was written (PRODUCT.md, DESIGN.md, live config, or a subset)
|
|
159
|
+
- The 3-5 strategic principles from PRODUCT.md that will guide future work
|
|
160
|
+
- If DESIGN.md or live config is pending, one line on how to set it up later
|
|
161
|
+
|
|
162
|
+
Then recommend the **best commands to run next**, drawn from what your Step 2 crawl already surfaced. Do not run a fresh analysis here; surface observations you already have. Tailor to register and to what you saw, offer the 2-4 most relevant (not a menu dump), and give the exact command to type. Group by intent:
|
|
163
|
+
|
|
164
|
+
- **Build something new**: `/impeccable craft <feature>` (shape, then build end-to-end) or `/impeccable shape <feature>` (plan first). Lead with this for empty or early-stage projects.
|
|
165
|
+
- **Improve what's there**: name the specific surface. `/impeccable critique <page>` for a scored UX review; `/impeccable audit <area>` for a11y / perf / responsive checks; `/impeccable polish <component>` for a pre-ship pass. When the crawl flagged a specific weakness, point the matching command at it: thin hierarchy or spacing → `layout`, flat or gray palette → `colorize`, missing error / empty states → `harden` or `onboard`, dull or unclear copy → `clarify`.
|
|
166
|
+
- **Iterate visually**: `/impeccable live` (configured in Step 6) to pick elements in the browser and generate variants in place.
|
|
167
|
+
|
|
168
|
+
The full command menu is one bare `/impeccable` away; keep this list short and pointed.
|
|
169
|
+
|
|
170
|
+
If init was invoked as a blocker by another impeccable command (e.g. the user ran `/impeccable polish` with no PRODUCT.md), resume that original task now. Your own writes are the freshest source; no reload needed.
|
|
171
|
+
|
|
172
|
+
Optionally STOP and call the `question` tool to clarify. Ask whether they'd like a brief summary of PRODUCT.md appended to AGENTS.md for easier agent reference. If yes, append a short **Design Context** pointer section there.
|