skills/decocms/deco-start/deco-site-patterns

deco-site-patterns

SKILL.md

Sub-documents

Document Topic
cms-wiring.md CMS block system, __resolveType, decofile, pages, redirects, dependency resolution
section-patterns.md Section conventions, loaders, LoadingFallback, JSDoc for admin, widget types
client-patterns.md Invoke proxy, islands, signals, analytics, cart/wishlist/user hooks, SDK utilities
app-composition.md App factory, AppContext, theme, images, routes, matchers, global layout

Deco Site Patterns

Pattern reference for building Deco storefronts. Documents how a site uses the Deco framework and apps ecosystem.

Three-Layer Architecture

@deco/deco (framework)
  Resolution engine, block system, plugins, hooks, runtime
        |
deco-cx/apps (integrations)
  Commerce types, VTEX/Shopify loaders, website handlers, matchers, analytics
        |
Site repo (storefront)
  Sections, islands, components, SDK, routes, .deco/blocks

The framework resolves blocks. Apps provide commerce and website capabilities. The site wires them together via CMS configuration and custom code.

Site File Structure

my-store/
|-- deno.json               # Imports, tasks, compiler options
|-- fresh.config.ts          # Fresh + Deco plugin registration
|-- manifest.gen.ts          # Auto-generated block registry
|-- fresh.gen.ts             # Auto-generated Fresh manifest (routes + islands)
|-- runtime.ts               # Typed invoke proxy for client-side calls
|-- main.ts                  # Production entry point
|-- dev.ts                   # Dev entry (tailwind + HMR)
|
|-- apps/                    # App registrations
|   |-- site.ts              # Main app: manifest + dependencies (std, commerce)
|   |-- decohub.ts           # Admin hub re-export
|
|-- .deco/blocks/            # CMS content (decofile)
|   |-- site.json            # Root config: global sections, routes, SEO, theme
|   |-- everyone.json        # Flag with route definitions
|   |-- pages-*.json         # Page blocks with sections and variants
|   |-- redirects-*.json     # Individual redirect definitions
|   |-- vtex.json            # VTEX app configuration
|
|-- sections/                # CMS-renderable UI sections
|   |-- ProductRetrofit/     # Product sections (PDP, shelf, search)
|   |-- HeaderRetrofit/      # Header section
|   |-- FooterRetrofit/      # Footer section
|   |-- ImagesRetrofit/      # Banner, carousel, gallery sections
|   |-- Theme/               # Theme section (colors, fonts, CSS vars)
|
|-- islands/                 # Client-side interactive components (hydrated)
|   |-- HeaderRetrofit/      # Header islands (search, drawers)
|   |-- DetailsRetrofit/     # PDP islands (product actions, size selector)
|   |-- CartRetrofit/        # Cart island
|
|-- components/              # Shared Preact components (used by sections + islands)
|   |-- productRetrofit/     # Product card, gallery, details
|   |-- searchRetrofit/      # Search result, filters, sort
|   |-- uiRetrofit/          # Base UI (image, slider, modal, button)
|   |-- minicartRetrofit/    # Cart, cart item, coupon
|
|-- sdk/                     # Client-side utilities
|   |-- useUIRetrofit.ts     # Global UI state (signals)
|   |-- formatRetrofit.ts    # Price formatting
|   |-- analyticsRetrofit.ts # Analytics event dispatch
|   |-- useAddToCart*.ts     # Add to cart logic
|   |-- useLazyLoad.tsx      # IntersectionObserver lazy loading
|
|-- loaders/                 # Site-specific data loaders
|-- actions/                 # Site-specific mutations
|-- matchers/                # Site-specific audience matchers
|-- routes/                  # Fresh routes (_app.tsx, proxy.ts)
|-- static/                  # Static assets

Key Concepts

1. Everything is a Block

Sections, loaders, actions, handlers, matchers, and flags are all "blocks" registered in manifest.gen.ts. The CMS references them by key (e.g., site/sections/ProductRetrofit/ProductDetails.tsx).

2. CMS Wires Data to Sections

The CMS admin creates page configurations stored in .deco/blocks/pages-*.json. Each section in a page can have props that reference loaders via __resolveType. The framework resolves these before rendering.

3. Islands Bridge Server and Client

Sections render on the server. Islands are the client-side boundary -- they hydrate and run in the browser. Islands use invoke to call server loaders/actions and @preact/signals for reactive state.

4. Apps Compose Capabilities

The site's apps/site.ts composes the std (compatibility) and commerce (VTEX/Shopify) apps as dependencies. Each app contributes loaders, actions, and handlers to the manifest.

Related Skills

Skill Focus
deco-core-architecture Framework internals (engine, blocks, runtime)
deco-apps-architecture Apps monorepo structure (VTEX, Shopify, website)
deco-start-architecture TanStack Start version of the framework
deco-to-tanstack-migration Fresh/Preact to TanStack/React migration
deco-apps-vtex-porting VTEX-specific porting guide
Weekly Installs
2
First Seen
5 days ago
Installed on
amp2
cline2
opencode2
cursor2
kimi-cli2
codex2