본문으로 건너뛰기
cccskills
무료GitHub에 공개

craft-site

Craft CMS 5 front-end Twig development — atomic design, template architecture, components, Vite buildchain. Covers atoms/molecules/organisms, props/extends/block patterns, layout chains, view routing, content builders, image presets, Tailwind named-key collections, multi-brand CSS tokens, JavaScript boundaries (Alpine/DataStar/Vue, tabs, accordions), Vite asset loading, and front-end auth (login, registration, password reset, profiles).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

실행 점수 미검증

설치 방법 보기

포함된 파일(20)

  • SKILL.md15.1 KB
  • references/atomic-design.md11.1 KB
  • references/atomic-patterns.md12.3 KB
  • references/auth-account.md18.1 KB
  • references/auth-flows.md22.5 KB
  • references/boilerplate-routing.md14.7 KB
  • references/component-inventory.md11.4 KB
  • references/composition-patterns.md14.5 KB
  • references/element-partials.md7.9 KB
  • references/example-templates.md14.2 KB
  • references/feeds.md8.4 KB
  • references/headless.md14.9 KB
  • references/image-presets.md8.4 KB
  • references/javascript-boundaries.md12.4 KB
  • references/multi-site-patterns.md13.2 KB
  • references/search.md10.3 KB
  • references/tailwind-conventions.md6.8 KB
  • references/third-party-integration.md8.6 KB
  • references/twig-collections.md8.2 KB
  • references/vite-buildchain.md9.3 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Craft CMS 5 — Front-End Twig (Atomic Design)

Atomic design system patterns for Craft CMS 5 site templates. Vanilla Twig — no module dependency. Works with any Craft 5 project.

This skill is scoped to front-end template architecture — component design, routing, composition, theming, and buildchain. For extending Craft (plugins, modules, PHP), see the craftcms skill.

Companion Skills — Always Load Together

When this skill triggers, also load:

  • craft-twig-guidelines — Twig coding standards: variable naming, null handling, whitespace control, include isolation, Craft helpers. Required for any Twig code.
  • craft-content-modeling — Sections, entry types, fields, Matrix, relations. Required when deciding what content to query or how templates access data.
  • ddev — All commands run through DDEV. Required for running Vite, npm, and Craft CLI commands.
  • craft-cloud — When the site is hosted on Craft Cloud (detect via craft-cloud.yaml at the repo root or craftcms/cloud in composer.json). Required for edge static caching rules, cloud.esi(...) dynamic islands inside cached pages, edge image transform constraints, and the csrfInput() requirement on cacheable pages.
  • servd — When the site is hosted on Servd (detect via servd.yaml at the repo root or servd/craft-asset-storage in composer.json). Required for Servd static caching, {% dynamicInclude %} islands in cached pages, running Blitz in reverse-proxy mode, and off-server image transforms.

Documentation

Use WebFetch on specific doc pages when a reference file doesn't cover enough detail.

Common Pitfalls (Cross-Cutting)

  • Missing only on {% include %} — ambient variables leak in silently.
  • Variant logic via conditionals ({% if variant == 'x' %}) instead of extends/block.
  • Naming atoms by parent context (hero-button) instead of visual treatment (button--primary).
  • utilities prop used as override — it's additive. Override via named-slot merge.
  • Queries inside views — views receive data, they don't fetch it.
  • Missing .eagerly() on relation fields in views — causes N+1 queries.
  • Missing devMode fallback in builders for unknown block types.
  • Hardcoded Tailwind colors (bg-yellow-600) instead of brand tokens (bg-brand-accent).
  • Mixing buttons and links — buttons are actions (resolve to <a>, <button>, or <span> from props), links are navigation (always <a>). Separate atom categories.
  • Tracking/analytics inside components — decouple to data attributes at view/page level.
  • Forgetting project-config/touch after editing YAML outside the CP — Git pulls, manual edits, and merge conflict resolution don't update dateModified. Run ddev craft project-config/touch then ddev craft up, or craft up on other environments won't detect the change.

Reference Files

Read the relevant reference file(s) for your task. Multiple files often apply together.

Task examples:

  • "Build a new card component" → read atomic-patterns.md + composition-patterns.md + component-inventory.md + tailwind-conventions.md
  • "Set up a new project's template structure" → read boilerplate-routing.md + component-inventory.md
  • "Add a content builder for a Matrix field" → read boilerplate-routing.md + composition-patterns.md
  • "Handle responsive images" → read image-presets.md + plugins/image-optimize.md
  • "Add multi-brand theming" → read tailwind-conventions.md
  • "Decide between Alpine and Vue for a feature" → read javascript-boundaries.md
  • "Compose Tailwind classes without conflicts" → read tailwind-conventions.md + twig-collections.md
  • "Understand atomic design methodology" → read atomic-design.md
  • "Set up Vite + Tailwind in a new Craft project" → read vite-buildchain.md
  • "Debug why assets aren't loading in production" → read vite-buildchain.md
  • "Look up a craft.vite.* Twig function (asset, register, critical CSS)" → read plugins/vite.md
  • "Install GTM/analytics/CMP in a Craft project" → read third-party-integration.md
  • "Can't override a plugin's front-end CSS / plugin styles beat mine" → read third-party-integration.md (Plugin CSS Loads After Yours)
  • "Replace a plugin's template with my own / plugin widget stopped enhancing" → read third-party-integration.md (Hand-Written Templates for Plugin Widgets)
  • "Configure SEOMatic for a section" → read plugins/seomatic.md
  • "Set up Blitz caching with Cloudflare" → read plugins/blitz.md
  • "Add a form to a page" → read plugins/formie.md
  • "Configure CKEditor with nested entries" → read plugins/ckeditor.md
  • "Build a navigation menu" → read plugins/navigation.md
  • "Add a link field to a component" → read plugins/hyper.md
  • "Set up redirects for a site" → read plugins/retour.md
  • "Add recurring/repeating dates to entries" → read plugins/timeloop.md
  • "Create a JSON API endpoint" → read plugins/element-api.md
  • "Debug N+1 queries in templates" → read plugins/elements-panel.md
  • "Run a security audit" → read plugins/sherlock.md
  • "Embed a YouTube/Vimeo video as an asset" → read plugins/embedded-assets.md
  • "Configure email delivery via SES" → read plugins/amazon-ses.md + third-party-integration.md
  • "Build a language switcher" → read multi-site-patterns.md
  • "Add login/registration to the front end" → read auth-flows.md
  • "Build a user profile edit page" → read auth-account.md
  • "Set up password reset flow" → read auth-flows.md
  • "Set up hreflang tags" → read multi-site-patterns.md
  • "Plan a multi-language site architecture" → read multi-site-patterns.md
  • "Add live search without JavaScript" → read plugins/sprig.md
  • "Build reactive filtering or load-more" → read plugins/sprig.md
  • "Import data from an external feed" → read plugins/feed-me.md
  • "Set up responsive images with Imager-X" → read plugins/imager-x.md
  • "Build a search page" → read search.md
  • "Configure search settings" → read search.md (Search Configuration)
  • "Rebuild the search index" → read search.md (Rebuilding)
  • "Create an RSS feed" → read feeds.md
  • "Build an XML sitemap" → read feeds.md (XML Sitemap)
  • "Create a JSON Feed" → read feeds.md (JSON Feed)
  • "Set up a headless Craft CMS with Next.js" → read headless.md
  • "Fix GraphQL preview tokens" → read headless.md
  • "Consume Craft GraphQL API from a front-end framework" → read headless.md
  • "Use entry.render() for reusable card components" → read element-partials.md
  • "Set up _partials/ templates for entries" → read element-partials.md
  • "Render Matrix blocks with partials" → read element-partials.md
  • "Ship example templates with a plugin (bundle + install command)" → read example-templates.md
  • "Build a fluent front-end render/tag builder (craft.<handle>.thing().render())" → read example-templates.md
ReferenceScope
references/atomic-design.mdMethodology: Brad Frost's atomic design principles, 5-to-3 tier compression, composability, context-agnostic naming, classification problem, decompose-downward workflow. Technology-independent.
references/atomic-patterns.mdIndividual component construction: props/extends/block pattern, variant file mechanics, button/link/text/icon atom implementations
references/composition-patterns.mdComponent composition: molecule pattern, organism pattern, structural embed pattern, include/extends/embed decision table, calling conventions, creating new components
references/component-inventory.mdClassification methodology: decision tree, naming conventions, file naming, props design, scaffold guidelines, tier promotion, audit checklist
references/boilerplate-routing.mdTemplate chain: layout hierarchy, Craft section template paths, global variables, routers, views, content builders, directory structure
references/tailwind-conventions.mdClass composition: named-key collections, standard key names, utilities prop, variant-based dark mode, spacing preference. Assumes Tailwind CSS — adapt patterns to your CSS framework.
references/vite-buildchain.mdCraft CMS Vite setup: nystudio107 plugin bridge, config/vite.php, vite.config.ts, craft.vite.script(), conditional per-page loading, Tailwind v4 integration, DDEV configuration
references/image-presets.mdImage handling: single atom with presets, srcset/sizes, ImageOptimize vs Craft Cloud, hosting strategies
references/javascript-boundaries.mdJS decision tree: Twig → Alpine/DataStar → Vue, mount points, data handoff, coexistence rules
references/twig-collections.mdcollect() method reference: creating, accessing, transforming, filtering, sorting, slicing, arrow functions
references/third-party-integration.mdScript loading order, CMP (UserCentrics/CookieBot), GTM/sGTM data layer, analytics (Fathom/Plausible), AWS SES transport, n8n webhooks, plugin CSS cascade (loads after yours) + hand-written templates for plugin widgets, Blitz compatibility, full head template example
references/multi-site-patterns.mdLanguage switchers, hreflang tags, site architectures (subfolder/domain/subdomain/multi-brand), cross-site queries, static translations, site-specific templates, multi-site forms, site detection
references/auth-flows.mdFront-end authentication forms: login, registration, password reset, set new password
references/auth-account.mdAccount management: edit profile, email verification, navigation partial, access control tags, user session helpers, GeneralConfig auth settings
references/search.mdSearch: syntax, Twig queries, configuration, indexing, rebuilding, score and ranking
references/feeds.mdFeeds: RSS 2.0, Atom, JSON Feed, XML sitemap, custom routes, date filters
references/headless.mdHeadless & hybrid: headlessMode, GraphQL API, CORS, preview tokens, Next.js/Nuxt/Astro integration
references/element-partials.mdElement partials: entry.render(), _partials/ directory, template lookup, custom variables, eager loading in partials
references/example-templates.mdPlugin front-end delivery: Craft Commerce-style example-template bundles (canonical folder, _private/layouts/ shell, per-page {% extends %}/{% block main %}, index.twig redirect, install console command with rename/--overwrite), fluent craft.<handle>.<thing>({...}).render() BaseTag builders, progressive-enhancement discipline

Plugin References

Per-plugin configuration, Twig API, and pitfalls live in the craft-plugins skill (skills/craft-plugins/references/<plugin>.md) — kept there so they're discoverable from back-end, migration, and deployment tasks too, not just front-end ones.

When a front-end task involves a specific plugin — Formie form styling, SEOmatic meta, Blitz caching, Imager-X / ImageOptimize transforms, Sprig components, CKEditor, Hyper links, Navigation, Embedded Assets, Vite, Typogrify, Colour Swatches — load the craft-plugins skill and open the matching reference.

Component System Conventions

One canonical component system across all projects. Atoms are context-agnostic — always named by visual treatment, never by parent. HTML element type is resolved from props (url → <a>, type → <button>, fallback → <span>).

External link detection is derived from the URL, never passed as a prop. Components auto-apply target="_blank", rel="noopener noreferrer", external icon, and sr-only text when a URL is external.

FontAwesome is the universal icon system. Icons are passed as FA class strings.

Visual variants use extends/block — base template defines structure, variant overrides classes. Never use conditional logic to switch between variant styles. For structural skeletons with content slots, use {% embed %} — see composition-patterns.md.

Image handling uses a single atom with config-driven presets, not separate variant files per context.

CSS & Theming Conventions

This skill assumes Tailwind CSS for class composition examples. Adapt patterns to your CSS framework — the architectural principles (named keys, additive utilities, semantic tokens) are framework-agnostic.

Class collections use named keys per style concern — this is the primary mechanism for preventing conflicts. The utilities prop is additive (extending), not overriding. Override specific concerns via named-slot merge.

Multi-brand theming uses CSS custom properties activated by data-brand="{{ currentSite.handle }}" on <html>. Components reference semantic Tailwind classes (bg-brand-accent) resolved via CSS variables. Template-level brand overrides only exist when the HTML structure itself differs between brands — not for color/font/spacing differences.

Token naming follows three layers: primitives (--brand-{color}-{shade}), semantics (--brand-{purpose}), and framework mapping (--color-brand-{purpose}).

Tailwind v4 cascade layers don't fix class conflicts within the same utilities layer. Named-key collections remain necessary.

Routing Conventions

PHP handles data, Twig handles presentation. Views receive data through includes — they never query it themselves.

collect() is used for both props and class building. The full Collection API is available in Twig via Craft.

The JS boundary follows a decision tree: Twig is the default → Alpine/DataStar for UI state → Vue for application state.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Craft Cloud — Pixel & Tonic's serverless hosting platform for Craft CMS. Covers craft-cloud.yaml configuration, the Build → Migrate → Release deploy pipeline, the craftcms/cloud extension package, edge image transforms via Cloudflare, edge static caching with cache.rules + ESI, Cloud-managed S3 filesystem, MySQL 8 / Postgres 15 databases (no MariaDB, no tablePrefix), Console-based command runner and scheduled cron (once-per-hour minimum), auto-handled queue jobs, custom domains and SSL, preview environments per branch, Cloud limitations (ephemeral filesystem, no SSH, no .htaccess, no built-in mail), plugin development requirements for Cloud compatibility, and self-hosted → Cloud migration.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

Craft CMS 5 content modeling — sections, entry types, fields, Matrix, relations, project config, and content architecture strategy. Covers choosing section types, designing entry types and field layouts, selecting field types, configuring Matrix and nested entries, relations and eager loading, and multi-site propagation.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

Garnish — Craft CMS's built-in JavaScript UI toolkit for the control panel. ALWAYS load when writing, editing, or reviewing JavaScript that runs in the Craft CP — plugin CP assets, custom field type JS, element index JS, CP webpack config, or code importing garnishjs / referencing window.Garnish. Also for CP accessibility, keyboard interactions, drag-sort, and CP JS memory issues.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

Testing Craft CMS 5 plugins and modules with Pest — test isolation, database safety, and the markhuot/craft-pest-core harness. ALWAYS load when writing, running, fixing, or reviewing tests for a Craft plugin or module, and whenever a suite touches a real Craft install. Covers why rollback is opt-in, tests/Pest.php + tests/bootstrap.php wiring, phpunit.xml.dist <env> pins (force DB name + table prefix, default connection coordinates, pin CRAFT_ENVIRONMENT against server-scoped locks), why --configuration= defeats DB isolation, throwing fail-closed DB guards, installing the plugin under test, process-timezone pinning, per-test site fixtures, idempotent Install migrations, stale service caches when components get swapped, muting audit sinks, queue stubs, factories, HTTP/DB assertions, CI jobs.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

Craft CMS 5 PHP coding standards and conventions. ALWAYS load when writing, editing, reviewing, or discussing any PHP in a Craft plugin or module — even small edits. Also when running ECS, PHPStan, or scaffolding with ddev craft make. Covers: PHPDoc blocks (@author, @since, @throws chains), section headers (=========), class organization, naming conventions (services, queue jobs, records, events, enums), defineRules() and validation, beforePrepare() and addSelect(), MemoizableArray, DateTimeHelper vs Carbon, strict_types/declare(strict_types=1), short nullable notation (?string), typed properties, void returns, control flow (early returns, match over switch), CP Twig template conventions, form macros, translations (Craft::t), ECS/PHPStan config, scaffolding commands, and the verification checklist.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

Releasing Craft CMS plugins — tagging, Packagist propagation, GitHub releases, branch promotion, shared-library ordering, history rewrites. ALWAYS load when cutting, preparing, verifying, or debugging a plugin release: bumping a version, dating a changelog, creating or moving a git tag, or checking what Packagist serves.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

michtio/craftcms-claude-skills862026년 10월 16일 업데이트

michtio의 스킬 모두 보기

이 스킬의 문제 신고