@auto-engineer/react-gen 1.134.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/dist/skills/design/SKILL.md +302 -0
- package/dist/skills/design/data/cip/deliverables.csv +51 -0
- package/dist/skills/design/data/cip/industries.csv +21 -0
- package/dist/skills/design/data/cip/mockup-contexts.csv +21 -0
- package/dist/skills/design/data/cip/styles.csv +21 -0
- package/dist/skills/design/data/icon/styles.csv +16 -0
- package/dist/skills/design/data/logo/colors.csv +56 -0
- package/dist/skills/design/data/logo/industries.csv +56 -0
- package/dist/skills/design/data/logo/styles.csv +56 -0
- package/dist/skills/design/references/banner-sizes-and-styles.md +118 -0
- package/dist/skills/design/references/cip-deliverable-guide.md +95 -0
- package/dist/skills/design/references/cip-design.md +121 -0
- package/dist/skills/design/references/cip-prompt-engineering.md +84 -0
- package/dist/skills/design/references/cip-style-guide.md +68 -0
- package/dist/skills/design/references/design-routing.md +207 -0
- package/dist/skills/design/references/icon-design.md +122 -0
- package/dist/skills/design/references/logo-color-psychology.md +101 -0
- package/dist/skills/design/references/logo-design.md +92 -0
- package/dist/skills/design/references/logo-prompt-engineering.md +158 -0
- package/dist/skills/design/references/logo-style-guide.md +109 -0
- package/dist/skills/design/references/slides-copywriting-formulas.md +84 -0
- package/dist/skills/design/references/slides-create.md +4 -0
- package/dist/skills/design/references/slides-html-template.md +295 -0
- package/dist/skills/design/references/slides-layout-patterns.md +137 -0
- package/dist/skills/design/references/slides-strategies.md +94 -0
- package/dist/skills/design/references/slides.md +42 -0
- package/dist/skills/design/references/social-photos-design.md +329 -0
- package/dist/skills/design/scripts/cip/core.py +215 -0
- package/dist/skills/design/scripts/cip/generate.py +484 -0
- package/dist/skills/design/scripts/cip/render-html.py +424 -0
- package/dist/skills/design/scripts/cip/search.py +127 -0
- package/dist/skills/design/scripts/icon/generate.py +487 -0
- package/dist/skills/design/scripts/logo/core.py +175 -0
- package/dist/skills/design/scripts/logo/generate.py +362 -0
- package/dist/skills/design/scripts/logo/search.py +114 -0
- package/dist/skills/design-system/SKILL.md +244 -0
- package/dist/skills/design-system/data/slide-backgrounds.csv +11 -0
- package/dist/skills/design-system/data/slide-charts.csv +26 -0
- package/dist/skills/design-system/data/slide-color-logic.csv +14 -0
- package/dist/skills/design-system/data/slide-copy.csv +26 -0
- package/dist/skills/design-system/data/slide-layout-logic.csv +16 -0
- package/dist/skills/design-system/data/slide-layouts.csv +26 -0
- package/dist/skills/design-system/data/slide-strategies.csv +16 -0
- package/dist/skills/design-system/data/slide-typography.csv +15 -0
- package/dist/skills/design-system/references/component-specs.md +236 -0
- package/dist/skills/design-system/references/component-tokens.md +214 -0
- package/dist/skills/design-system/references/primitive-tokens.md +203 -0
- package/dist/skills/design-system/references/semantic-tokens.md +215 -0
- package/dist/skills/design-system/references/states-and-variants.md +241 -0
- package/dist/skills/design-system/references/tailwind-integration.md +251 -0
- package/dist/skills/design-system/references/token-architecture.md +224 -0
- package/dist/skills/design-system/scripts/embed-tokens.cjs +97 -0
- package/dist/skills/design-system/scripts/fetch-background.py +317 -0
- package/dist/skills/design-system/scripts/generate-slide.py +753 -0
- package/dist/skills/design-system/scripts/generate-tokens.cjs +213 -0
- package/dist/skills/design-system/scripts/html-token-validator.py +327 -0
- package/dist/skills/design-system/scripts/search-slides.py +218 -0
- package/dist/skills/design-system/scripts/slide-token-validator.py +35 -0
- package/dist/skills/design-system/scripts/slide_search_core.py +453 -0
- package/dist/skills/design-system/scripts/validate-tokens.cjs +251 -0
- package/dist/skills/design-system/templates/design-tokens-starter.json +143 -0
- package/dist/skills/design-taste-frontend/SKILL.md +79 -0
- package/dist/skills/emil-design-engineering/SKILL.md +108 -0
- package/dist/skills/emil-design-engineering/animations.md +266 -0
- package/dist/skills/emil-design-engineering/component-design.md +382 -0
- package/dist/skills/emil-design-engineering/forms-controls.md +261 -0
- package/dist/skills/emil-design-engineering/marketing.md +160 -0
- package/dist/skills/emil-design-engineering/performance.md +222 -0
- package/dist/skills/emil-design-engineering/touch-accessibility.md +236 -0
- package/dist/skills/emil-design-engineering/ui-polish.md +303 -0
- package/dist/skills/frontend-design/SKILL.md +42 -0
- package/dist/skills/full-output-enforcement/SKILL.md +32 -0
- package/dist/skills/high-end-visual-design/SKILL.md +98 -0
- package/dist/skills/react-doctor/AGENTS.md +15 -0
- package/dist/skills/react-doctor/SKILL.md +19 -0
- package/dist/skills/redesign-existing-projects/SKILL.md +178 -0
- package/dist/skills/ui-styling/LICENSE.txt +202 -0
- package/dist/skills/ui-styling/SKILL.md +324 -0
- package/dist/skills/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/dist/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/dist/skills/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/dist/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/dist/skills/ui-styling/references/canvas-design-system.md +320 -0
- package/dist/skills/ui-styling/references/shadcn-accessibility.md +471 -0
- package/dist/skills/ui-styling/references/shadcn-components.md +424 -0
- package/dist/skills/ui-styling/references/shadcn-theming.md +373 -0
- package/dist/skills/ui-styling/references/tailwind-customization.md +483 -0
- package/dist/skills/ui-styling/references/tailwind-responsive.md +382 -0
- package/dist/skills/ui-styling/references/tailwind-utilities.md +455 -0
- package/dist/skills/ui-styling/scripts/.coverage +0 -0
- package/dist/skills/ui-styling/scripts/requirements.txt +17 -0
- package/dist/skills/ui-styling/scripts/shadcn_add.py +292 -0
- package/dist/skills/ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/dist/skills/ui-styling/scripts/tests/coverage-ui.json +1392 -0
- package/dist/skills/ui-styling/scripts/tests/requirements.txt +3 -0
- package/dist/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/dist/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/dist/skills/ui-ux-pro-max/SKILL.md +659 -0
- package/dist/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/dist/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/dist/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/dist/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/dist/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/dist/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/dist/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/dist/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/dist/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/dist/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/dist/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/dist/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/dist/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/dist/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/dist/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/dist/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/dist/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/dist/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/dist/skills/ui-ux-pro-max/scripts/core.py +247 -0
- package/dist/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/dist/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/dist/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/dist/skills/vercel-react-best-practices/README.md +123 -0
- package/dist/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/dist/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/skills/web-animation-design/PRACTICAL-TIPS.md +304 -0
- package/dist/skills/web-animation-design/SKILL.md +336 -0
- package/dist/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/src/agents/create-constants-agent.d.ts +6 -0
- package/dist/src/agents/create-constants-agent.d.ts.map +1 -0
- package/dist/src/agents/create-constants-agent.js +42 -0
- package/dist/src/agents/create-constants-agent.js.map +1 -0
- package/dist/src/agents/create-landing-page-agent.d.ts +4 -0
- package/dist/src/agents/create-landing-page-agent.d.ts.map +1 -0
- package/dist/src/agents/create-landing-page-agent.js +62 -0
- package/dist/src/agents/create-landing-page-agent.js.map +1 -0
- package/dist/src/agents/create-narrative-agent.d.ts +4 -0
- package/dist/src/agents/create-narrative-agent.d.ts.map +1 -0
- package/dist/src/agents/create-narrative-agent.js +36 -0
- package/dist/src/agents/create-narrative-agent.js.map +1 -0
- package/dist/src/agents/create-pipeline.d.ts +9 -0
- package/dist/src/agents/create-pipeline.d.ts.map +1 -0
- package/dist/src/agents/create-pipeline.js +28 -0
- package/dist/src/agents/create-pipeline.js.map +1 -0
- package/dist/src/agents/create-router-agent.d.ts +4 -0
- package/dist/src/agents/create-router-agent.d.ts.map +1 -0
- package/dist/src/agents/create-router-agent.js +46 -0
- package/dist/src/agents/create-router-agent.js.map +1 -0
- package/dist/src/agents/create-theme-agent.d.ts +4 -0
- package/dist/src/agents/create-theme-agent.d.ts.map +1 -0
- package/dist/src/agents/create-theme-agent.js +105 -0
- package/dist/src/agents/create-theme-agent.js.map +1 -0
- package/dist/src/agents/create-validation-agent.d.ts +4 -0
- package/dist/src/agents/create-validation-agent.d.ts.map +1 -0
- package/dist/src/agents/create-validation-agent.js +36 -0
- package/dist/src/agents/create-validation-agent.js.map +1 -0
- package/dist/src/agents/scaffold-agent.d.ts +5 -0
- package/dist/src/agents/scaffold-agent.d.ts.map +1 -0
- package/dist/src/agents/scaffold-agent.js +11 -0
- package/dist/src/agents/scaffold-agent.js.map +1 -0
- package/dist/src/commands/generate-react-app.d.ts +27 -0
- package/dist/src/commands/generate-react-app.d.ts.map +1 -0
- package/dist/src/commands/generate-react-app.js +92 -0
- package/dist/src/commands/generate-react-app.js.map +1 -0
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +15 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/prompts/build-narrative-context.d.ts +3 -0
- package/dist/src/prompts/build-narrative-context.d.ts.map +1 -0
- package/dist/src/prompts/build-narrative-context.js +103 -0
- package/dist/src/prompts/build-narrative-context.js.map +1 -0
- package/dist/src/prompts/landing-page-system.d.ts +2 -0
- package/dist/src/prompts/landing-page-system.d.ts.map +1 -0
- package/dist/src/prompts/landing-page-system.js +63 -0
- package/dist/src/prompts/landing-page-system.js.map +1 -0
- package/dist/src/prompts/narrative-system.d.ts +2 -0
- package/dist/src/prompts/narrative-system.d.ts.map +1 -0
- package/dist/src/prompts/narrative-system.js +52 -0
- package/dist/src/prompts/narrative-system.js.map +1 -0
- package/dist/src/prompts/router-system.d.ts +2 -0
- package/dist/src/prompts/router-system.d.ts.map +1 -0
- package/dist/src/prompts/router-system.js +35 -0
- package/dist/src/prompts/router-system.js.map +1 -0
- package/dist/src/prompts/theme-system.d.ts +2 -0
- package/dist/src/prompts/theme-system.d.ts.map +1 -0
- package/dist/src/prompts/theme-system.js +126 -0
- package/dist/src/prompts/theme-system.js.map +1 -0
- package/dist/src/prompts/validation-system.d.ts +2 -0
- package/dist/src/prompts/validation-system.d.ts.map +1 -0
- package/dist/src/prompts/validation-system.js +28 -0
- package/dist/src/prompts/validation-system.js.map +1 -0
- package/dist/src/tools/check-imports.d.ts +6 -0
- package/dist/src/tools/check-imports.d.ts.map +1 -0
- package/dist/src/tools/check-imports.js +129 -0
- package/dist/src/tools/check-imports.js.map +1 -0
- package/dist/src/tools/exit-loop.d.ts +6 -0
- package/dist/src/tools/exit-loop.d.ts.map +1 -0
- package/dist/src/tools/exit-loop.js +12 -0
- package/dist/src/tools/exit-loop.js.map +1 -0
- package/dist/src/tools/list-files.d.ts +4 -0
- package/dist/src/tools/list-files.d.ts.map +1 -0
- package/dist/src/tools/list-files.js +36 -0
- package/dist/src/tools/list-files.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +10 -0
- package/dist/src/tools/read-file.d.ts.map +1 -0
- package/dist/src/tools/read-file.js +21 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/run-eslint.d.ts +6 -0
- package/dist/src/tools/run-eslint.d.ts.map +1 -0
- package/dist/src/tools/run-eslint.js +27 -0
- package/dist/src/tools/run-eslint.js.map +1 -0
- package/dist/src/tools/run-tsc.d.ts +6 -0
- package/dist/src/tools/run-tsc.d.ts.map +1 -0
- package/dist/src/tools/run-tsc.js +27 -0
- package/dist/src/tools/run-tsc.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +15 -0
- package/dist/src/tools/write-file.d.ts.map +1 -0
- package/dist/src/tools/write-file.js +44 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/types.d.ts +330 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +102 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/create-skill-tool.d.ts +2 -0
- package/dist/src/utils/create-skill-tool.d.ts.map +1 -0
- package/dist/src/utils/create-skill-tool.js +13 -0
- package/dist/src/utils/create-skill-tool.js.map +1 -0
- package/dist/src/utils/parse-model.d.ts +3 -0
- package/dist/src/utils/parse-model.d.ts.map +1 -0
- package/dist/src/utils/parse-model.js +7 -0
- package/dist/src/utils/parse-model.js.map +1 -0
- package/dist/src/utils/slugify.d.ts +2 -0
- package/dist/src/utils/slugify.d.ts.map +1 -0
- package/dist/src/utils/slugify.js +7 -0
- package/dist/src/utils/slugify.js.map +1 -0
- package/dist/starter/.env.example +1 -0
- package/dist/starter/README.md +73 -0
- package/dist/starter/components.json +21 -0
- package/dist/starter/eslint.config.js +23 -0
- package/dist/starter/index.html +13 -0
- package/dist/starter/package-lock.json +7590 -0
- package/dist/starter/package.json +57 -0
- package/dist/starter/pnpm-lock.yaml +4479 -0
- package/dist/starter/public/favicon.svg +1 -0
- package/dist/starter/public/icons.svg +24 -0
- package/dist/starter/src/App.tsx +7 -0
- package/dist/starter/src/assets/hero.png +0 -0
- package/dist/starter/src/assets/vite.svg +1 -0
- package/dist/starter/src/components/error-boundary.tsx +38 -0
- package/dist/starter/src/components/not-found.tsx +16 -0
- package/dist/starter/src/components/ui/accordion.tsx +51 -0
- package/dist/starter/src/components/ui/alert-dialog.tsx +162 -0
- package/dist/starter/src/components/ui/alert.tsx +49 -0
- package/dist/starter/src/components/ui/aspect-ratio.tsx +9 -0
- package/dist/starter/src/components/ui/avatar.tsx +87 -0
- package/dist/starter/src/components/ui/badge.tsx +40 -0
- package/dist/starter/src/components/ui/breadcrumb.tsx +92 -0
- package/dist/starter/src/components/ui/button-group.tsx +74 -0
- package/dist/starter/src/components/ui/button.tsx +62 -0
- package/dist/starter/src/components/ui/calendar.tsx +158 -0
- package/dist/starter/src/components/ui/card.tsx +56 -0
- package/dist/starter/src/components/ui/carousel.tsx +215 -0
- package/dist/starter/src/components/ui/chart.tsx +296 -0
- package/dist/starter/src/components/ui/checkbox.tsx +29 -0
- package/dist/starter/src/components/ui/collapsible.tsx +15 -0
- package/dist/starter/src/components/ui/combobox.tsx +266 -0
- package/dist/starter/src/components/ui/command.tsx +136 -0
- package/dist/starter/src/components/ui/context-menu.tsx +211 -0
- package/dist/starter/src/components/ui/dialog.tsx +135 -0
- package/dist/starter/src/components/ui/direction.tsx +18 -0
- package/dist/starter/src/components/ui/drawer.tsx +106 -0
- package/dist/starter/src/components/ui/dropdown-menu.tsx +219 -0
- package/dist/starter/src/components/ui/empty.tsx +85 -0
- package/dist/starter/src/components/ui/field.tsx +225 -0
- package/dist/starter/src/components/ui/form.tsx +135 -0
- package/dist/starter/src/components/ui/hover-card.tsx +36 -0
- package/dist/starter/src/components/ui/input-group.tsx +146 -0
- package/dist/starter/src/components/ui/input-otp.tsx +68 -0
- package/dist/starter/src/components/ui/input.tsx +21 -0
- package/dist/starter/src/components/ui/item.tsx +157 -0
- package/dist/starter/src/components/ui/kbd.tsx +22 -0
- package/dist/starter/src/components/ui/label.tsx +19 -0
- package/dist/starter/src/components/ui/menubar.tsx +236 -0
- package/dist/starter/src/components/ui/native-select.tsx +44 -0
- package/dist/starter/src/components/ui/navigation-menu.tsx +142 -0
- package/dist/starter/src/components/ui/pagination.tsx +98 -0
- package/dist/starter/src/components/ui/popover.tsx +52 -0
- package/dist/starter/src/components/ui/progress.tsx +24 -0
- package/dist/starter/src/components/ui/radio-group.tsx +31 -0
- package/dist/starter/src/components/ui/resizable.tsx +47 -0
- package/dist/starter/src/components/ui/scroll-area.tsx +46 -0
- package/dist/starter/src/components/ui/select.tsx +162 -0
- package/dist/starter/src/components/ui/separator.tsx +26 -0
- package/dist/starter/src/components/ui/sheet.tsx +107 -0
- package/dist/starter/src/components/ui/sidebar.tsx +674 -0
- package/dist/starter/src/components/ui/skeleton.tsx +7 -0
- package/dist/starter/src/components/ui/slider.tsx +54 -0
- package/dist/starter/src/components/ui/sonner.tsx +31 -0
- package/dist/starter/src/components/ui/spinner.tsx +9 -0
- package/dist/starter/src/components/ui/switch.tsx +33 -0
- package/dist/starter/src/components/ui/table.tsx +75 -0
- package/dist/starter/src/components/ui/tabs.tsx +69 -0
- package/dist/starter/src/components/ui/textarea.tsx +18 -0
- package/dist/starter/src/components/ui/toggle-group.tsx +79 -0
- package/dist/starter/src/components/ui/toggle.tsx +41 -0
- package/dist/starter/src/components/ui/tooltip.tsx +42 -0
- package/dist/starter/src/hooks/use-mobile.ts +19 -0
- package/dist/starter/src/index.css +93 -0
- package/dist/starter/src/lib/graphql-client.ts +5 -0
- package/dist/starter/src/lib/providers.tsx +23 -0
- package/dist/starter/src/lib/utils.ts +6 -0
- package/dist/starter/src/main.tsx +16 -0
- package/dist/starter/tsconfig.app.json +32 -0
- package/dist/starter/tsconfig.json +4 -0
- package/dist/starter/tsconfig.node.json +26 -0
- package/dist/starter/vite.config.ts +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -0
- package/skills/design/SKILL.md +302 -0
- package/skills/design/data/cip/deliverables.csv +51 -0
- package/skills/design/data/cip/industries.csv +21 -0
- package/skills/design/data/cip/mockup-contexts.csv +21 -0
- package/skills/design/data/cip/styles.csv +21 -0
- package/skills/design/data/icon/styles.csv +16 -0
- package/skills/design/data/logo/colors.csv +56 -0
- package/skills/design/data/logo/industries.csv +56 -0
- package/skills/design/data/logo/styles.csv +56 -0
- package/skills/design/references/banner-sizes-and-styles.md +118 -0
- package/skills/design/references/cip-deliverable-guide.md +95 -0
- package/skills/design/references/cip-design.md +121 -0
- package/skills/design/references/cip-prompt-engineering.md +84 -0
- package/skills/design/references/cip-style-guide.md +68 -0
- package/skills/design/references/design-routing.md +207 -0
- package/skills/design/references/icon-design.md +122 -0
- package/skills/design/references/logo-color-psychology.md +101 -0
- package/skills/design/references/logo-design.md +92 -0
- package/skills/design/references/logo-prompt-engineering.md +158 -0
- package/skills/design/references/logo-style-guide.md +109 -0
- package/skills/design/references/slides-copywriting-formulas.md +84 -0
- package/skills/design/references/slides-create.md +4 -0
- package/skills/design/references/slides-html-template.md +295 -0
- package/skills/design/references/slides-layout-patterns.md +137 -0
- package/skills/design/references/slides-strategies.md +94 -0
- package/skills/design/references/slides.md +42 -0
- package/skills/design/references/social-photos-design.md +329 -0
- package/skills/design/scripts/cip/core.py +215 -0
- package/skills/design/scripts/cip/generate.py +484 -0
- package/skills/design/scripts/cip/render-html.py +424 -0
- package/skills/design/scripts/cip/search.py +127 -0
- package/skills/design/scripts/icon/generate.py +487 -0
- package/skills/design/scripts/logo/core.py +175 -0
- package/skills/design/scripts/logo/generate.py +362 -0
- package/skills/design/scripts/logo/search.py +114 -0
- package/skills/design-system/SKILL.md +244 -0
- package/skills/design-system/data/slide-backgrounds.csv +11 -0
- package/skills/design-system/data/slide-charts.csv +26 -0
- package/skills/design-system/data/slide-color-logic.csv +14 -0
- package/skills/design-system/data/slide-copy.csv +26 -0
- package/skills/design-system/data/slide-layout-logic.csv +16 -0
- package/skills/design-system/data/slide-layouts.csv +26 -0
- package/skills/design-system/data/slide-strategies.csv +16 -0
- package/skills/design-system/data/slide-typography.csv +15 -0
- package/skills/design-system/references/component-specs.md +236 -0
- package/skills/design-system/references/component-tokens.md +214 -0
- package/skills/design-system/references/primitive-tokens.md +203 -0
- package/skills/design-system/references/semantic-tokens.md +215 -0
- package/skills/design-system/references/states-and-variants.md +241 -0
- package/skills/design-system/references/tailwind-integration.md +251 -0
- package/skills/design-system/references/token-architecture.md +224 -0
- package/skills/design-system/scripts/embed-tokens.cjs +97 -0
- package/skills/design-system/scripts/fetch-background.py +317 -0
- package/skills/design-system/scripts/generate-slide.py +753 -0
- package/skills/design-system/scripts/generate-tokens.cjs +213 -0
- package/skills/design-system/scripts/html-token-validator.py +327 -0
- package/skills/design-system/scripts/search-slides.py +218 -0
- package/skills/design-system/scripts/slide-token-validator.py +35 -0
- package/skills/design-system/scripts/slide_search_core.py +453 -0
- package/skills/design-system/scripts/validate-tokens.cjs +251 -0
- package/skills/design-system/templates/design-tokens-starter.json +143 -0
- package/skills/design-taste-frontend/SKILL.md +79 -0
- package/skills/emil-design-engineering/SKILL.md +108 -0
- package/skills/emil-design-engineering/animations.md +266 -0
- package/skills/emil-design-engineering/component-design.md +382 -0
- package/skills/emil-design-engineering/forms-controls.md +261 -0
- package/skills/emil-design-engineering/marketing.md +160 -0
- package/skills/emil-design-engineering/performance.md +222 -0
- package/skills/emil-design-engineering/touch-accessibility.md +236 -0
- package/skills/emil-design-engineering/ui-polish.md +303 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/full-output-enforcement/SKILL.md +32 -0
- package/skills/high-end-visual-design/SKILL.md +98 -0
- package/skills/react-doctor/AGENTS.md +15 -0
- package/skills/react-doctor/SKILL.md +19 -0
- package/skills/redesign-existing-projects/SKILL.md +178 -0
- package/skills/ui-styling/LICENSE.txt +202 -0
- package/skills/ui-styling/SKILL.md +324 -0
- package/skills/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/ui-styling/references/canvas-design-system.md +320 -0
- package/skills/ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/ui-styling/references/shadcn-components.md +424 -0
- package/skills/ui-styling/references/shadcn-theming.md +373 -0
- package/skills/ui-styling/references/tailwind-customization.md +483 -0
- package/skills/ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/ui-styling/scripts/.coverage +0 -0
- package/skills/ui-styling/scripts/requirements.txt +17 -0
- package/skills/ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/ui-styling/scripts/tests/coverage-ui.json +1392 -0
- package/skills/ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/ui-ux-pro-max/SKILL.md +659 -0
- package/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +247 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/skills/vercel-react-best-practices/README.md +123 -0
- package/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web-animation-design/PRACTICAL-TIPS.md +304 -0
- package/skills/web-animation-design/SKILL.md +336 -0
- package/skills/web-design-guidelines/SKILL.md +39 -0
- package/starter/.env.example +1 -0
- package/starter/README.md +73 -0
- package/starter/components.json +21 -0
- package/starter/eslint.config.js +23 -0
- package/starter/index.html +13 -0
- package/starter/package-lock.json +7590 -0
- package/starter/package.json +57 -0
- package/starter/pnpm-lock.yaml +4479 -0
- package/starter/public/favicon.svg +1 -0
- package/starter/public/icons.svg +24 -0
- package/starter/src/App.tsx +7 -0
- package/starter/src/assets/hero.png +0 -0
- package/starter/src/assets/vite.svg +1 -0
- package/starter/src/components/error-boundary.tsx +38 -0
- package/starter/src/components/not-found.tsx +16 -0
- package/starter/src/components/ui/accordion.tsx +51 -0
- package/starter/src/components/ui/alert-dialog.tsx +162 -0
- package/starter/src/components/ui/alert.tsx +49 -0
- package/starter/src/components/ui/aspect-ratio.tsx +9 -0
- package/starter/src/components/ui/avatar.tsx +87 -0
- package/starter/src/components/ui/badge.tsx +40 -0
- package/starter/src/components/ui/breadcrumb.tsx +92 -0
- package/starter/src/components/ui/button-group.tsx +74 -0
- package/starter/src/components/ui/button.tsx +62 -0
- package/starter/src/components/ui/calendar.tsx +158 -0
- package/starter/src/components/ui/card.tsx +56 -0
- package/starter/src/components/ui/carousel.tsx +215 -0
- package/starter/src/components/ui/chart.tsx +296 -0
- package/starter/src/components/ui/checkbox.tsx +29 -0
- package/starter/src/components/ui/collapsible.tsx +15 -0
- package/starter/src/components/ui/combobox.tsx +266 -0
- package/starter/src/components/ui/command.tsx +136 -0
- package/starter/src/components/ui/context-menu.tsx +211 -0
- package/starter/src/components/ui/dialog.tsx +135 -0
- package/starter/src/components/ui/direction.tsx +18 -0
- package/starter/src/components/ui/drawer.tsx +106 -0
- package/starter/src/components/ui/dropdown-menu.tsx +219 -0
- package/starter/src/components/ui/empty.tsx +85 -0
- package/starter/src/components/ui/field.tsx +225 -0
- package/starter/src/components/ui/form.tsx +135 -0
- package/starter/src/components/ui/hover-card.tsx +36 -0
- package/starter/src/components/ui/input-group.tsx +146 -0
- package/starter/src/components/ui/input-otp.tsx +68 -0
- package/starter/src/components/ui/input.tsx +21 -0
- package/starter/src/components/ui/item.tsx +157 -0
- package/starter/src/components/ui/kbd.tsx +22 -0
- package/starter/src/components/ui/label.tsx +19 -0
- package/starter/src/components/ui/menubar.tsx +236 -0
- package/starter/src/components/ui/native-select.tsx +44 -0
- package/starter/src/components/ui/navigation-menu.tsx +142 -0
- package/starter/src/components/ui/pagination.tsx +98 -0
- package/starter/src/components/ui/popover.tsx +52 -0
- package/starter/src/components/ui/progress.tsx +24 -0
- package/starter/src/components/ui/radio-group.tsx +31 -0
- package/starter/src/components/ui/resizable.tsx +47 -0
- package/starter/src/components/ui/scroll-area.tsx +46 -0
- package/starter/src/components/ui/select.tsx +162 -0
- package/starter/src/components/ui/separator.tsx +26 -0
- package/starter/src/components/ui/sheet.tsx +107 -0
- package/starter/src/components/ui/sidebar.tsx +674 -0
- package/starter/src/components/ui/skeleton.tsx +7 -0
- package/starter/src/components/ui/slider.tsx +54 -0
- package/starter/src/components/ui/sonner.tsx +31 -0
- package/starter/src/components/ui/spinner.tsx +9 -0
- package/starter/src/components/ui/switch.tsx +33 -0
- package/starter/src/components/ui/table.tsx +75 -0
- package/starter/src/components/ui/tabs.tsx +69 -0
- package/starter/src/components/ui/textarea.tsx +18 -0
- package/starter/src/components/ui/toggle-group.tsx +79 -0
- package/starter/src/components/ui/toggle.tsx +41 -0
- package/starter/src/components/ui/tooltip.tsx +42 -0
- package/starter/src/hooks/use-mobile.ts +19 -0
- package/starter/src/index.css +93 -0
- package/starter/src/lib/graphql-client.ts +5 -0
- package/starter/src/lib/providers.tsx +23 -0
- package/starter/src/lib/utils.ts +6 -0
- package/starter/src/main.tsx +16 -0
- package/starter/tsconfig.app.json +32 -0
- package/starter/tsconfig.json +4 -0
- package/starter/tsconfig.node.json +26 -0
- package/starter/vite.config.ts +16 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Slide Strategies
|
|
2
|
+
|
|
3
|
+
15 proven deck structures with emotion arcs.
|
|
4
|
+
|
|
5
|
+
## Strategy Selection
|
|
6
|
+
|
|
7
|
+
| Strategy | Slides | Goal | Audience |
|
|
8
|
+
|----------|--------|------|----------|
|
|
9
|
+
| YC Seed Deck | 10-12 | Raise seed funding | VCs |
|
|
10
|
+
| Guy Kawasaki | 10 | Pitch in 20 min | Investors |
|
|
11
|
+
| Series A | 12-15 | Raise Series A | Growth VCs |
|
|
12
|
+
| Product Demo | 5-8 | Demonstrate value | Prospects |
|
|
13
|
+
| Sales Pitch | 7-10 | Close deal | Qualified leads |
|
|
14
|
+
| Nancy Duarte Sparkline | Varies | Transform perspective | Any |
|
|
15
|
+
| Problem-Solution-Benefit | 3-5 | Quick persuasion | Time-pressed |
|
|
16
|
+
| QBR | 10-15 | Update stakeholders | Leadership |
|
|
17
|
+
| Team All-Hands | 8-12 | Align team | Employees |
|
|
18
|
+
| Conference Talk | 15-25 | Thought leadership | Attendees |
|
|
19
|
+
| Workshop | 20-40 | Teach skills | Learners |
|
|
20
|
+
| Case Study | 8-12 | Prove value | Prospects |
|
|
21
|
+
| Competitive Analysis | 6-10 | Strategic decisions | Internal |
|
|
22
|
+
| Board Meeting | 15-20 | Update board | Directors |
|
|
23
|
+
| Webinar | 20-30 | Generate leads | Registrants |
|
|
24
|
+
|
|
25
|
+
## Common Structures
|
|
26
|
+
|
|
27
|
+
### YC Seed Deck (10 slides)
|
|
28
|
+
1. Title/Hook
|
|
29
|
+
2. Problem
|
|
30
|
+
3. Solution
|
|
31
|
+
4. Traction
|
|
32
|
+
5. Market
|
|
33
|
+
6. Product
|
|
34
|
+
7. Business Model
|
|
35
|
+
8. Team
|
|
36
|
+
9. Financials
|
|
37
|
+
10. The Ask
|
|
38
|
+
|
|
39
|
+
**Emotion arc:** curiosity→frustration→hope→confidence→trust→urgency
|
|
40
|
+
|
|
41
|
+
### Sales Pitch (9 slides)
|
|
42
|
+
1. Personalized Hook
|
|
43
|
+
2. Their Problem
|
|
44
|
+
3. Cost of Inaction
|
|
45
|
+
4. Your Solution
|
|
46
|
+
5. Proof/Case Studies
|
|
47
|
+
6. Differentiators
|
|
48
|
+
7. Pricing/ROI
|
|
49
|
+
8. Objection Handling
|
|
50
|
+
9. CTA + Next Steps
|
|
51
|
+
|
|
52
|
+
**Emotion arc:** connection→frustration→fear→hope→trust→confidence→urgency
|
|
53
|
+
|
|
54
|
+
### Product Demo (6 slides)
|
|
55
|
+
1. Hook/Problem
|
|
56
|
+
2. Solution Overview
|
|
57
|
+
3. Live Demo/Screenshots
|
|
58
|
+
4. Key Features
|
|
59
|
+
5. Benefits/Pricing
|
|
60
|
+
6. CTA
|
|
61
|
+
|
|
62
|
+
**Emotion arc:** curiosity→frustration→hope→confidence→urgency
|
|
63
|
+
|
|
64
|
+
## Duarte Sparkline Pattern
|
|
65
|
+
|
|
66
|
+
Alternate between "What Is" (current pain) and "What Could Be" (better future):
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
What Is → What Could Be → What Is → What Could Be → New Bliss
|
|
70
|
+
(pain) (hope) (pain) (hope) (resolution)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Pattern breaks at 1/3 and 2/3 positions create engagement peaks.
|
|
74
|
+
|
|
75
|
+
## Search Commands
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Find strategy by goal
|
|
79
|
+
python .claude/skills/design-system/scripts/search-slides.py "investor pitch" -d strategy
|
|
80
|
+
|
|
81
|
+
# Get emotion arc
|
|
82
|
+
python .claude/skills/design-system/scripts/search-slides.py "series a funding" -d strategy --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Matching Strategy to Context
|
|
86
|
+
|
|
87
|
+
| Context | Recommended Strategy |
|
|
88
|
+
|---------|---------------------|
|
|
89
|
+
| Raising money | YC Seed, Series A, Guy Kawasaki |
|
|
90
|
+
| Selling product | Sales Pitch, Product Demo |
|
|
91
|
+
| Internal update | QBR, All-Hands, Board Meeting |
|
|
92
|
+
| Public speaking | Conference Talk, Workshop |
|
|
93
|
+
| Proving value | Case Study, Competitive Analysis |
|
|
94
|
+
| Lead generation | Webinar |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Slides Reference
|
|
2
|
+
|
|
3
|
+
Strategic HTML presentation design with Chart.js data visualization, design tokens, responsive layouts, and copywriting formulas.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Activate the `design` skill and specify slides task, e.g. "create a pitch deck".
|
|
8
|
+
|
|
9
|
+
## Knowledge Base
|
|
10
|
+
|
|
11
|
+
| Topic | File | Purpose |
|
|
12
|
+
|-------|------|---------|
|
|
13
|
+
| Creation Guide | `references/slides-create.md` | Step-by-step slide creation workflow |
|
|
14
|
+
| Layout Patterns | `references/slides-layout-patterns.md` | Slide layout templates and grid systems |
|
|
15
|
+
| HTML Template | `references/slides-html-template.md` | Base HTML structure for presentations |
|
|
16
|
+
| Copywriting | `references/slides-copywriting-formulas.md` | AIDA, PAS, FAB for slide content |
|
|
17
|
+
| Strategies | `references/slides-strategies.md` | Contextual strategies by presentation type |
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- Marketing presentations and pitch decks
|
|
22
|
+
- Data-driven slides with Chart.js visualizations
|
|
23
|
+
- Strategic slide design with layout patterns
|
|
24
|
+
- Copywriting-optimized presentation content
|
|
25
|
+
- Investor decks, sales presentations, team updates
|
|
26
|
+
|
|
27
|
+
## Key Features
|
|
28
|
+
|
|
29
|
+
- **Chart.js Integration**: Bar, line, pie, doughnut, radar charts
|
|
30
|
+
- **Design Tokens**: Consistent spacing, colors, typography
|
|
31
|
+
- **Responsive**: Works on desktop and mobile
|
|
32
|
+
- **Copywriting**: Built-in AIDA, PAS, FAB formulas
|
|
33
|
+
- **Layout Patterns**: Hero, split, grid, comparison, timeline
|
|
34
|
+
|
|
35
|
+
## Workflow
|
|
36
|
+
|
|
37
|
+
1. Parse presentation type from user request
|
|
38
|
+
2. Load `references/slides-create.md` for creation guide
|
|
39
|
+
3. Select layout patterns from `references/slides-layout-patterns.md`
|
|
40
|
+
4. Apply copywriting formulas from `references/slides-copywriting-formulas.md`
|
|
41
|
+
5. Use HTML template from `references/slides-html-template.md`
|
|
42
|
+
6. Apply strategy from `references/slides-strategies.md`
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# Social Photos Design Guide
|
|
2
|
+
|
|
3
|
+
Design social media images via HTML/CSS rendering + screenshot export. Orchestrates `ui-ux-pro-max`, `brand`, `design-system`, and `chrome-devtools` skills.
|
|
4
|
+
|
|
5
|
+
## Platform Sizes
|
|
6
|
+
|
|
7
|
+
| Platform | Type | Size (px) | Aspect |
|
|
8
|
+
|----------|------|-----------|--------|
|
|
9
|
+
| Instagram | Post | 1080 x 1080 | 1:1 |
|
|
10
|
+
| Instagram | Story/Reel | 1080 x 1920 | 9:16 |
|
|
11
|
+
| Instagram | Carousel | 1080 x 1350 | 4:5 |
|
|
12
|
+
| Facebook | Post | 1200 x 630 | ~1.9:1 |
|
|
13
|
+
| Facebook | Story | 1080 x 1920 | 9:16 |
|
|
14
|
+
| Twitter/X | Post | 1200 x 675 | 16:9 |
|
|
15
|
+
| Twitter/X | Card | 800 x 418 | ~1.91:1 |
|
|
16
|
+
| LinkedIn | Post | 1200 x 627 | ~1.91:1 |
|
|
17
|
+
| LinkedIn | Article | 1200 x 644 | ~1.86:1 |
|
|
18
|
+
| Pinterest | Pin | 1000 x 1500 | 2:3 |
|
|
19
|
+
| YouTube | Thumbnail | 1280 x 720 | 16:9 |
|
|
20
|
+
| TikTok | Cover | 1080 x 1920 | 9:16 |
|
|
21
|
+
| Threads | Post | 1080 x 1080 | 1:1 |
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
### Step 1: Activate Project Management
|
|
26
|
+
|
|
27
|
+
Invoke `project-management` skill to create persistent TODO tasks via Claude's native task orchestration. Break down into:
|
|
28
|
+
- Requirement analysis task
|
|
29
|
+
- Idea generation task(s)
|
|
30
|
+
- HTML design task(s) — can parallelize per size/variant
|
|
31
|
+
- Screenshot export task(s) — can parallelize per file
|
|
32
|
+
- Report generation task
|
|
33
|
+
|
|
34
|
+
Spawn parallel subagents for independent tasks (e.g., multiple HTML files for different sizes).
|
|
35
|
+
|
|
36
|
+
### Step 2: Analyze Requirements
|
|
37
|
+
|
|
38
|
+
Parse user input for:
|
|
39
|
+
- **Subject/topic** — what the social photo represents
|
|
40
|
+
- **Target platforms** — which sizes needed (default: Instagram Post 1:1 + Story 9:16)
|
|
41
|
+
- **Visual style** — minimalist, bold, gradient, photo-based, etc.
|
|
42
|
+
- **Brand context** — read from `docs/brand-guidelines.md` if exists
|
|
43
|
+
- **Content elements** — headline, subtext, CTA, images, icons
|
|
44
|
+
- **Quantity** — how many variations (default: 3)
|
|
45
|
+
|
|
46
|
+
### Step 3: Generate Ideas
|
|
47
|
+
|
|
48
|
+
Create 3-5 concept ideas that:
|
|
49
|
+
- Match the input prompt/requirements
|
|
50
|
+
- Consider platform-specific best practices
|
|
51
|
+
- Vary in composition, color, typography approach
|
|
52
|
+
- Align with brand guidelines if available
|
|
53
|
+
|
|
54
|
+
Present ideas to user via `AskUserQuestion` for approval before designing.
|
|
55
|
+
|
|
56
|
+
### Step 4: Design HTML Files
|
|
57
|
+
|
|
58
|
+
Activate these skills in sequence:
|
|
59
|
+
|
|
60
|
+
1. **`/ckm:brand`** — Extract brand colors, fonts, voice from user's project
|
|
61
|
+
2. **`/ckm:design-system`** — Get design tokens (spacing, typography scale, color palette)
|
|
62
|
+
3. **Randomly invoke ONE of:** `/ck:ui-ux-pro-max` OR `/ck:frontend-design` — for layout, hierarchy, visual balance. Pick one at random each run for design variety.
|
|
63
|
+
|
|
64
|
+
For each approved idea + each target size, create an HTML file:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
output/social-photos/
|
|
68
|
+
├── idea-1-instagram-post-1080x1080.html
|
|
69
|
+
├── idea-1-instagram-story-1080x1920.html
|
|
70
|
+
├── idea-2-instagram-post-1080x1080.html
|
|
71
|
+
├── idea-2-instagram-story-1080x1920.html
|
|
72
|
+
└── ...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
#### HTML Design Rules
|
|
76
|
+
|
|
77
|
+
- **Viewport** — Set exact pixel dimensions matching target size
|
|
78
|
+
- **Self-contained** — Inline all CSS, embed fonts via Google Fonts CDN
|
|
79
|
+
- **No scrolling** — Everything fits in one viewport
|
|
80
|
+
- **High contrast** — Text readable at thumbnail size
|
|
81
|
+
- **Brand-aligned** — Use extracted brand colors/fonts
|
|
82
|
+
- **Safe zones** — Critical content within central 80% area
|
|
83
|
+
- **Typography** — Min 24px for headlines, min 16px for body at 1080px width
|
|
84
|
+
- **Visual hierarchy** — One focal point, clear reading flow
|
|
85
|
+
|
|
86
|
+
#### HTML Template Structure
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<!DOCTYPE html>
|
|
90
|
+
<html>
|
|
91
|
+
<head>
|
|
92
|
+
<meta charset="UTF-8">
|
|
93
|
+
<meta name="viewport" content="width={WIDTH}, initial-scale=1.0">
|
|
94
|
+
<link href="https://fonts.googleapis.com/css2?family={FONT}&display=swap" rel="stylesheet">
|
|
95
|
+
<style>
|
|
96
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
97
|
+
html, body {
|
|
98
|
+
width: {WIDTH}px;
|
|
99
|
+
height: {HEIGHT}px;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
font-family: '{FONT}', sans-serif;
|
|
102
|
+
}
|
|
103
|
+
.canvas {
|
|
104
|
+
width: {WIDTH}px;
|
|
105
|
+
height: {HEIGHT}px;
|
|
106
|
+
position: relative;
|
|
107
|
+
/* Background: gradient, solid, or image */
|
|
108
|
+
}
|
|
109
|
+
/* Design tokens from brand/design-system */
|
|
110
|
+
</style>
|
|
111
|
+
</head>
|
|
112
|
+
<body>
|
|
113
|
+
<div class="canvas">
|
|
114
|
+
<!-- Content layers -->
|
|
115
|
+
</div>
|
|
116
|
+
</body>
|
|
117
|
+
</html>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Step 5: Screenshot Export
|
|
121
|
+
|
|
122
|
+
Use Chrome headless, `chrome-devtools` skill, or Playwright/Puppeteer to capture exact-size screenshots.
|
|
123
|
+
|
|
124
|
+
**IMPORTANT:** Always add a delay (3-5s) after page load for fonts/images to fully render before capture.
|
|
125
|
+
|
|
126
|
+
#### Option A: Chrome Headless CLI (Recommended — zero dependencies)
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
130
|
+
DELAY=5 # seconds for fonts/images to load
|
|
131
|
+
|
|
132
|
+
"$CHROME" \
|
|
133
|
+
--headless \
|
|
134
|
+
--disable-gpu \
|
|
135
|
+
--no-sandbox \
|
|
136
|
+
--hide-scrollbars \
|
|
137
|
+
--window-size="${WIDTH},${HEIGHT}" \
|
|
138
|
+
--virtual-time-budget=$((DELAY * 1000)) \
|
|
139
|
+
--screenshot="output.png" \
|
|
140
|
+
"file:///path/to/file.html"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Key flags:
|
|
144
|
+
- `--virtual-time-budget=5000` — waits 5s virtual time for assets (Google Fonts, images) to load
|
|
145
|
+
- `--hide-scrollbars` — prevents scrollbar artifacts in screenshots
|
|
146
|
+
- `--window-size=WxH` — sets exact pixel dimensions
|
|
147
|
+
|
|
148
|
+
#### Option B: chrome-devtools skill
|
|
149
|
+
|
|
150
|
+
Invoke `/chrome-devtools` with instructions to:
|
|
151
|
+
1. Open each HTML file in browser
|
|
152
|
+
2. Set viewport to exact target dimensions
|
|
153
|
+
3. Wait 3-5s for fonts/images to fully load
|
|
154
|
+
4. Screenshot full page to PNG
|
|
155
|
+
5. Save to `output/social-photos/exports/`
|
|
156
|
+
|
|
157
|
+
#### Option C: Playwright script
|
|
158
|
+
|
|
159
|
+
```javascript
|
|
160
|
+
const { chromium } = require('playwright');
|
|
161
|
+
|
|
162
|
+
async function captureScreenshots(htmlFiles) {
|
|
163
|
+
const browser = await chromium.launch();
|
|
164
|
+
|
|
165
|
+
for (const file of htmlFiles) {
|
|
166
|
+
const [width, height] = file.match(/(\d+)x(\d+)/).slice(1).map(Number);
|
|
167
|
+
|
|
168
|
+
const page = await browser.newPage();
|
|
169
|
+
await page.setViewportSize({ width, height });
|
|
170
|
+
await page.goto(`file://${file}`, { waitUntil: 'networkidle' });
|
|
171
|
+
// Wait for fonts/images to fully render
|
|
172
|
+
await page.waitForTimeout(3000);
|
|
173
|
+
|
|
174
|
+
const outputPath = file.replace('.html', '.png').replace('social-photos/', 'social-photos/exports/');
|
|
175
|
+
await page.screenshot({ path: outputPath, type: 'png' });
|
|
176
|
+
await page.close();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
await browser.close();
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### Option D: Puppeteer script
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
const puppeteer = require('puppeteer');
|
|
187
|
+
|
|
188
|
+
async function captureScreenshots(htmlFiles) {
|
|
189
|
+
const browser = await puppeteer.launch();
|
|
190
|
+
|
|
191
|
+
for (const file of htmlFiles) {
|
|
192
|
+
const [width, height] = file.match(/(\d+)x(\d+)/).slice(1).map(Number);
|
|
193
|
+
|
|
194
|
+
const page = await browser.newPage();
|
|
195
|
+
await page.setViewport({ width, height, deviceScaleFactor: 2 }); // 2x for retina
|
|
196
|
+
await page.goto(`file://${file}`, { waitUntil: 'networkidle0' });
|
|
197
|
+
// Wait for fonts/images to fully render
|
|
198
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
199
|
+
|
|
200
|
+
const outputPath = file.replace('.html', '.png').replace('social-photos/', 'social-photos/exports/');
|
|
201
|
+
await page.screenshot({ path: outputPath, type: 'png' });
|
|
202
|
+
await page.close();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
await browser.close();
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**IMPORTANT:** Use `deviceScaleFactor: 2` for retina-quality output (Puppeteer only).
|
|
210
|
+
|
|
211
|
+
### Step 6: Verify & Fix Designs
|
|
212
|
+
|
|
213
|
+
Use Chrome MCP or `chrome-devtools` skill to visually inspect each exported PNG:
|
|
214
|
+
|
|
215
|
+
1. Open exported screenshots and check for layout/styling issues
|
|
216
|
+
2. Verify: fonts rendered correctly, colors match brand, text readable at thumbnail size
|
|
217
|
+
3. Check: no overflow, no cut-off content, safe zones respected, visual hierarchy clear
|
|
218
|
+
4. If issues found → fix HTML source → re-export screenshot → verify again
|
|
219
|
+
5. Repeat until all designs pass visual QA
|
|
220
|
+
|
|
221
|
+
**Common issues to check:**
|
|
222
|
+
- Fonts not loaded (fallback to system fonts)
|
|
223
|
+
- Text overflow or clipping
|
|
224
|
+
- Elements outside safe zone (central 80%)
|
|
225
|
+
- Low contrast text (below WCAG AA 4.5:1)
|
|
226
|
+
- Misaligned elements or broken layouts
|
|
227
|
+
|
|
228
|
+
### Step 7: Generate Summary Report
|
|
229
|
+
|
|
230
|
+
Save report to `plans/reports/` with naming pattern from session hooks.
|
|
231
|
+
|
|
232
|
+
Report structure:
|
|
233
|
+
|
|
234
|
+
```markdown
|
|
235
|
+
# Social Photos Design Report
|
|
236
|
+
|
|
237
|
+
## Overview
|
|
238
|
+
- Prompt/requirements: {original input}
|
|
239
|
+
- Platforms: {target platforms}
|
|
240
|
+
- Variations: {count}
|
|
241
|
+
- Style: {chosen style}
|
|
242
|
+
|
|
243
|
+
## Ideas Generated
|
|
244
|
+
1. **{Idea name}** — {brief description, rationale}
|
|
245
|
+
2. ...
|
|
246
|
+
|
|
247
|
+
## Design Decisions
|
|
248
|
+
- Color palette: {colors used, why}
|
|
249
|
+
- Typography: {fonts, sizes, why}
|
|
250
|
+
- Layout: {composition approach, why}
|
|
251
|
+
- Brand alignment: {how brand guidelines influenced design}
|
|
252
|
+
|
|
253
|
+
## Output Files
|
|
254
|
+
| File | Size | Platform | Preview |
|
|
255
|
+
|------|------|----------|---------|
|
|
256
|
+
| exports/{filename}.png | {WxH} | {platform} | {description} |
|
|
257
|
+
|
|
258
|
+
## Why This Works
|
|
259
|
+
- {Platform-specific reasoning}
|
|
260
|
+
- {Brand alignment reasoning}
|
|
261
|
+
- {Visual hierarchy reasoning}
|
|
262
|
+
- {Engagement potential reasoning}
|
|
263
|
+
|
|
264
|
+
## Recommendations
|
|
265
|
+
- {A/B test suggestions}
|
|
266
|
+
- {Platform-specific tips}
|
|
267
|
+
- {Iteration opportunities}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Step 8: Organize Output
|
|
271
|
+
|
|
272
|
+
Invoke `assets-organizing` skill to organize all output files and reports:
|
|
273
|
+
- Move/copy exported PNGs to proper asset directories
|
|
274
|
+
- Ensure reports are in `plans/reports/` with correct naming
|
|
275
|
+
- Clean up intermediate HTML files if requested
|
|
276
|
+
- Tag outputs with metadata (platform, size, concept name)
|
|
277
|
+
|
|
278
|
+
## Design Best Practices
|
|
279
|
+
|
|
280
|
+
### Platform-Specific Tips
|
|
281
|
+
|
|
282
|
+
- **Instagram** — Visual-first, minimal text (<20%), strong colors, lifestyle feel
|
|
283
|
+
- **Facebook** — Informative, can have more text, eye-catching in feed
|
|
284
|
+
- **Twitter/X** — Bold headlines, contrast for dark/light mode, clear message
|
|
285
|
+
- **LinkedIn** — Professional, clean, data-driven visuals, thought leadership
|
|
286
|
+
- **Pinterest** — Vertical format, text overlay on images, how-to style
|
|
287
|
+
- **YouTube** — Face close-ups perform best, bright colors, readable at small size
|
|
288
|
+
- **TikTok** — Trendy, energetic, bold typography, youth-oriented
|
|
289
|
+
|
|
290
|
+
### Art Direction Styles (Reuse from Banner)
|
|
291
|
+
|
|
292
|
+
| Style | Best For | Key Elements |
|
|
293
|
+
|-------|----------|--------------|
|
|
294
|
+
| Minimalist | SaaS, tech, luxury | Whitespace, single accent color, clean type |
|
|
295
|
+
| Bold Typography | Announcements, quotes | Large type, high contrast, minimal imagery |
|
|
296
|
+
| Gradient Mesh | Modern brands, apps | Fluid color transitions, floating elements |
|
|
297
|
+
| Photo-Based | Lifestyle, e-commerce | Hero image, subtle overlay, text on image |
|
|
298
|
+
| Geometric | Tech, fintech | Shapes, patterns, structured layouts |
|
|
299
|
+
| Glassmorphism | SaaS, modern apps | Frosted glass, blur effects, transparency |
|
|
300
|
+
| Flat Illustration | Education, health | Custom illustrations, friendly, approachable |
|
|
301
|
+
| Duotone | Creative, editorial | Two-color treatment on photos |
|
|
302
|
+
| Collage | Fashion, culture | Mixed media, overlapping elements |
|
|
303
|
+
| 3D/Isometric | Tech, product | Depth, shadows, modern perspective |
|
|
304
|
+
|
|
305
|
+
### Color & Contrast
|
|
306
|
+
|
|
307
|
+
- Ensure WCAG AA contrast ratio (4.5:1 min) for all text
|
|
308
|
+
- Test designs at 50% size to verify readability
|
|
309
|
+
- Consider platform dark/light mode compatibility
|
|
310
|
+
- Use brand primary color as dominant, secondary as accent
|
|
311
|
+
|
|
312
|
+
### Typography Hierarchy
|
|
313
|
+
|
|
314
|
+
| Element | Min Size (at 1080px) | Weight |
|
|
315
|
+
|---------|---------------------|--------|
|
|
316
|
+
| Headline | 48px | Bold/Black |
|
|
317
|
+
| Subheadline | 32px | Semibold |
|
|
318
|
+
| Body | 24px | Regular |
|
|
319
|
+
| Caption | 18px | Regular/Light |
|
|
320
|
+
| CTA | 28px | Bold |
|
|
321
|
+
|
|
322
|
+
## Security & Scope
|
|
323
|
+
|
|
324
|
+
This sub-skill handles social media image design only. Does NOT handle:
|
|
325
|
+
- Video content creation
|
|
326
|
+
- Animation/motion graphics
|
|
327
|
+
- Print production files (CMYK, bleed)
|
|
328
|
+
- Direct social media posting/scheduling
|
|
329
|
+
- AI image generation (use `ai-artist` skill for that)
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
CIP Design Core - BM25 search engine for Corporate Identity Program design guidelines
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import csv
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from math import log
|
|
11
|
+
from collections import defaultdict
|
|
12
|
+
|
|
13
|
+
# ============ CONFIGURATION ============
|
|
14
|
+
DATA_DIR = Path(__file__).parent.parent.parent / "data" / "cip"
|
|
15
|
+
MAX_RESULTS = 3
|
|
16
|
+
|
|
17
|
+
CSV_CONFIG = {
|
|
18
|
+
"deliverable": {
|
|
19
|
+
"file": "deliverables.csv",
|
|
20
|
+
"search_cols": ["Deliverable", "Category", "Keywords", "Description", "Mockup Context"],
|
|
21
|
+
"output_cols": ["Deliverable", "Category", "Keywords", "Description", "Dimensions", "File Format", "Logo Placement", "Color Usage", "Typography Notes", "Mockup Context", "Best Practices", "Avoid"]
|
|
22
|
+
},
|
|
23
|
+
"style": {
|
|
24
|
+
"file": "styles.csv",
|
|
25
|
+
"search_cols": ["Style Name", "Category", "Keywords", "Description", "Mood"],
|
|
26
|
+
"output_cols": ["Style Name", "Category", "Keywords", "Description", "Primary Colors", "Secondary Colors", "Typography", "Materials", "Finishes", "Mood", "Best For", "Avoid For"]
|
|
27
|
+
},
|
|
28
|
+
"industry": {
|
|
29
|
+
"file": "industries.csv",
|
|
30
|
+
"search_cols": ["Industry", "Keywords", "CIP Style", "Mood"],
|
|
31
|
+
"output_cols": ["Industry", "Keywords", "CIP Style", "Primary Colors", "Secondary Colors", "Typography", "Key Deliverables", "Mood", "Best Practices", "Avoid"]
|
|
32
|
+
},
|
|
33
|
+
"mockup": {
|
|
34
|
+
"file": "mockup-contexts.csv",
|
|
35
|
+
"search_cols": ["Context Name", "Category", "Keywords", "Scene Description"],
|
|
36
|
+
"output_cols": ["Context Name", "Category", "Keywords", "Scene Description", "Lighting", "Environment", "Props", "Camera Angle", "Background", "Style Notes", "Best For", "Prompt Modifiers"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# ============ BM25 IMPLEMENTATION ============
|
|
42
|
+
class BM25:
|
|
43
|
+
"""BM25 ranking algorithm for text search"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, k1=1.5, b=0.75):
|
|
46
|
+
self.k1 = k1
|
|
47
|
+
self.b = b
|
|
48
|
+
self.corpus = []
|
|
49
|
+
self.doc_lengths = []
|
|
50
|
+
self.avgdl = 0
|
|
51
|
+
self.idf = {}
|
|
52
|
+
self.doc_freqs = defaultdict(int)
|
|
53
|
+
self.N = 0
|
|
54
|
+
|
|
55
|
+
def tokenize(self, text):
|
|
56
|
+
"""Lowercase, split, remove punctuation, filter short words"""
|
|
57
|
+
text = re.sub(r'[^\w\s]', ' ', str(text).lower())
|
|
58
|
+
return [w for w in text.split() if len(w) > 2]
|
|
59
|
+
|
|
60
|
+
def fit(self, documents):
|
|
61
|
+
"""Build BM25 index from documents"""
|
|
62
|
+
self.corpus = [self.tokenize(doc) for doc in documents]
|
|
63
|
+
self.N = len(self.corpus)
|
|
64
|
+
if self.N == 0:
|
|
65
|
+
return
|
|
66
|
+
self.doc_lengths = [len(doc) for doc in self.corpus]
|
|
67
|
+
self.avgdl = sum(self.doc_lengths) / self.N
|
|
68
|
+
|
|
69
|
+
for doc in self.corpus:
|
|
70
|
+
seen = set()
|
|
71
|
+
for word in doc:
|
|
72
|
+
if word not in seen:
|
|
73
|
+
self.doc_freqs[word] += 1
|
|
74
|
+
seen.add(word)
|
|
75
|
+
|
|
76
|
+
for word, freq in self.doc_freqs.items():
|
|
77
|
+
self.idf[word] = log((self.N - freq + 0.5) / (freq + 0.5) + 1)
|
|
78
|
+
|
|
79
|
+
def score(self, query):
|
|
80
|
+
"""Score all documents against query"""
|
|
81
|
+
query_tokens = self.tokenize(query)
|
|
82
|
+
scores = []
|
|
83
|
+
|
|
84
|
+
for idx, doc in enumerate(self.corpus):
|
|
85
|
+
score = 0
|
|
86
|
+
doc_len = self.doc_lengths[idx]
|
|
87
|
+
term_freqs = defaultdict(int)
|
|
88
|
+
for word in doc:
|
|
89
|
+
term_freqs[word] += 1
|
|
90
|
+
|
|
91
|
+
for token in query_tokens:
|
|
92
|
+
if token in self.idf:
|
|
93
|
+
tf = term_freqs[token]
|
|
94
|
+
idf = self.idf[token]
|
|
95
|
+
numerator = tf * (self.k1 + 1)
|
|
96
|
+
denominator = tf + self.k1 * (1 - self.b + self.b * doc_len / self.avgdl)
|
|
97
|
+
score += idf * numerator / denominator
|
|
98
|
+
|
|
99
|
+
scores.append((idx, score))
|
|
100
|
+
|
|
101
|
+
return sorted(scores, key=lambda x: x[1], reverse=True)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# ============ SEARCH FUNCTIONS ============
|
|
105
|
+
def _load_csv(filepath):
|
|
106
|
+
"""Load CSV and return list of dicts"""
|
|
107
|
+
with open(filepath, 'r', encoding='utf-8') as f:
|
|
108
|
+
return list(csv.DictReader(f))
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _search_csv(filepath, search_cols, output_cols, query, max_results):
|
|
112
|
+
"""Core search function using BM25"""
|
|
113
|
+
if not filepath.exists():
|
|
114
|
+
return []
|
|
115
|
+
|
|
116
|
+
data = _load_csv(filepath)
|
|
117
|
+
|
|
118
|
+
# Build documents from search columns
|
|
119
|
+
documents = [" ".join(str(row.get(col, "")) for col in search_cols) for row in data]
|
|
120
|
+
|
|
121
|
+
# BM25 search
|
|
122
|
+
bm25 = BM25()
|
|
123
|
+
bm25.fit(documents)
|
|
124
|
+
ranked = bm25.score(query)
|
|
125
|
+
|
|
126
|
+
# Get top results with score > 0
|
|
127
|
+
results = []
|
|
128
|
+
for idx, score in ranked[:max_results]:
|
|
129
|
+
if score > 0:
|
|
130
|
+
row = data[idx]
|
|
131
|
+
results.append({col: row.get(col, "") for col in output_cols if col in row})
|
|
132
|
+
|
|
133
|
+
return results
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def detect_domain(query):
|
|
137
|
+
"""Auto-detect the most relevant domain from query"""
|
|
138
|
+
query_lower = query.lower()
|
|
139
|
+
|
|
140
|
+
domain_keywords = {
|
|
141
|
+
"deliverable": ["card", "letterhead", "envelope", "folder", "shirt", "cap", "badge", "signage", "vehicle", "car", "van", "stationery", "uniform", "merchandise", "packaging", "banner", "booth"],
|
|
142
|
+
"style": ["style", "minimal", "modern", "luxury", "vintage", "industrial", "elegant", "bold", "corporate", "organic", "playful"],
|
|
143
|
+
"industry": ["tech", "finance", "legal", "healthcare", "hospitality", "food", "fashion", "retail", "construction", "logistics"],
|
|
144
|
+
"mockup": ["mockup", "scene", "context", "photo", "shot", "lighting", "background", "studio", "lifestyle"]
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
scores = {domain: sum(1 for kw in keywords if kw in query_lower) for domain, keywords in domain_keywords.items()}
|
|
148
|
+
best = max(scores, key=scores.get)
|
|
149
|
+
return best if scores[best] > 0 else "deliverable"
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def search(query, domain=None, max_results=MAX_RESULTS):
|
|
153
|
+
"""Main search function with auto-domain detection"""
|
|
154
|
+
if domain is None:
|
|
155
|
+
domain = detect_domain(query)
|
|
156
|
+
|
|
157
|
+
config = CSV_CONFIG.get(domain, CSV_CONFIG["deliverable"])
|
|
158
|
+
filepath = DATA_DIR / config["file"]
|
|
159
|
+
|
|
160
|
+
if not filepath.exists():
|
|
161
|
+
return {"error": f"File not found: {filepath}", "domain": domain}
|
|
162
|
+
|
|
163
|
+
results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results)
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
"domain": domain,
|
|
167
|
+
"query": query,
|
|
168
|
+
"file": config["file"],
|
|
169
|
+
"count": len(results),
|
|
170
|
+
"results": results
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def search_all(query, max_results=2):
|
|
175
|
+
"""Search across all domains and combine results"""
|
|
176
|
+
all_results = {}
|
|
177
|
+
for domain in CSV_CONFIG.keys():
|
|
178
|
+
result = search(query, domain, max_results)
|
|
179
|
+
if result.get("results"):
|
|
180
|
+
all_results[domain] = result["results"]
|
|
181
|
+
return all_results
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def get_cip_brief(brand_name, industry_query, style_query=None):
|
|
185
|
+
"""Generate a comprehensive CIP brief for a brand"""
|
|
186
|
+
# Search industry
|
|
187
|
+
industry_results = search(industry_query, "industry", 1)
|
|
188
|
+
industry = industry_results.get("results", [{}])[0] if industry_results.get("results") else {}
|
|
189
|
+
|
|
190
|
+
# Search style (use industry style if not specified)
|
|
191
|
+
style_query = style_query or industry.get("CIP Style", "corporate minimal")
|
|
192
|
+
style_results = search(style_query, "style", 1)
|
|
193
|
+
style = style_results.get("results", [{}])[0] if style_results.get("results") else {}
|
|
194
|
+
|
|
195
|
+
# Get recommended deliverables for the industry
|
|
196
|
+
key_deliverables = industry.get("Key Deliverables", "").split()
|
|
197
|
+
deliverable_results = []
|
|
198
|
+
for d in key_deliverables[:5]:
|
|
199
|
+
result = search(d, "deliverable", 1)
|
|
200
|
+
if result.get("results"):
|
|
201
|
+
deliverable_results.append(result["results"][0])
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
"brand_name": brand_name,
|
|
205
|
+
"industry": industry,
|
|
206
|
+
"style": style,
|
|
207
|
+
"recommended_deliverables": deliverable_results,
|
|
208
|
+
"color_system": {
|
|
209
|
+
"primary": style.get("Primary Colors", industry.get("Primary Colors", "")),
|
|
210
|
+
"secondary": style.get("Secondary Colors", industry.get("Secondary Colors", ""))
|
|
211
|
+
},
|
|
212
|
+
"typography": style.get("Typography", industry.get("Typography", "")),
|
|
213
|
+
"materials": style.get("Materials", ""),
|
|
214
|
+
"finishes": style.get("Finishes", "")
|
|
215
|
+
}
|