Kestrel Fastening Systems KESTREL FASTENING SYSTEMS

Content

The page tree is the product. This page inventories what surface-swift puts in area 3, which subtrees are framework (never re-authored) and which are editorial (re-authored per customer), and the placeholder convention that makes un-replaced copy fail loudly.

What the baseline guarantees

Layer: surface-swift 1.5.1. Two mode trees.
replace/_content (source-wins — the structural skeleton; a re-deserialize replaces it):
  Swift 2/area.yml            the area record itself
  Customer center/            Account (Addresses, Carts, Favorites, Orders, Quotes, Users),
                              CSR (Accounts, Carts, Orders, Users), Customer center
                              (Change password, My addresses, My carts, My favorites,
                              My orders, My profile > Edit profile, My quotes, My returns,
                              My wallet), Overview
  Navigation/                 Footer Navigation, Secondary Navigation
  Newsletter Emails/          Unsubscribe confirmation page
  Page presets/Home pages/    Home preset
  Product Components/         Product Info (right side), Product List, Product List Card
  Search result page/
  Service Pages/              CartService, CartSummary, Content search results,
                              Favorites list service, Product and content search results,
                              Related products list, Related products slider_grid,
                              Variant Selector Service
  Shop/                       Product Details, Product List
  Shopping cart/              Add credit card, Cart (Checkout anonymous, Checkout user,
                              Empty cart, Quote checkout user)
  Sign in/                    Create user profile (User profile confirmed, User profile
                              created), Forgot password, Sign in
  System emails/              Checkout Emails, Form Emails, Stock notification Email,
                              User Management Emails
merge/_content (field-level merge — the editorial surface; your edits survive a
re-deserialize):
  Home/                       8 grid rows (1, 4, 5, 6, 7, 8, 9, 10)
  Header _ Footer/            Desktop Header, Desktop Footer, Mobile Header, Mobile Footer
  About/                      8 grid rows + Contact > Thank you
  Posts/                      Buying guides, Reviews, Travel guides
  Navigation/Footer Navigation/  About the shop (About us, Employees, Privacy policy, Terms),
                                 Help and info (Cookie notice, Delivery, Frequently asked),
                                 Languages (Preferences)
  Navigation/Secondary Navigation/ Find dealers
  Newsletter Emails/          Swift Newsletters - Dark/Light (Announcement, Sale)
Area record (layers/surface-swift (replace tree) _content/Swift 2/area.yml), values you will change:
  AreaUrlName            swift-2
  AreaCulture            en-US
  AreaLayout             Designs/Swift-v2/Swift-v2_Page.cshtml
  AreaColorSchemeGroupId default        AreaColorSchemeId  light
  AreaTypographyId       default        AreaButtonStyleId  default
  AnonymousUsers         cart-price     (hides prices + add-to-cart for anonymous)
  HeaderDesktop 157 / HeaderMobile 159 / FooterDesktop 156 / FooterMobile 158
Values the layer deliberately does NOT serialize, which you MUST bind after deserialize
(surface.contract-notes.json `perEnvironmentAreaExclusions`):
  AreaFrontpage, AreaEcomShopId, AreaEcomLanguageId, AreaEcomCurrencyId, AreaEcomCountryCode,
  AreaStockLocationID, AreaCdnHost, AreaDomain, AreaNoindex/Nofollow/RobotsTxt.
  Then restart the host — Area routing, frontpage resolution and shop resolution are cached
  at host startup.
Placeholder convention: 56 YAML files carry the literal string `Placeholder — <function>`,
e.g. `Placeholder — about intro heading (who this company is)`. `Placeholder` is the
machine-detectable marker a design gate greps for (/placeholder/i). Copy left un-replaced at
build time fails loudly rather than shipping.
Not present by design: no bike/lorem sample content anywhere in the tree; no
EcomFieldDisplayGroup rows (surface-swift 1.5.0 removed the dead PDP band).

Which skill covers it

dw-content-modelling (dynamo: true) — references/page-paragraph-writes.md is the one to read
before any page or paragraph write; references/modelling-discipline.md for item-type schema;
references/language-layers.md for the mirror write.
dw-swift-building (dynamo: true) — references/swift2-page-structure.md and
references/component-system-and-reskin.md for the re-skin doctrine.
dw-demo-swift (dynamo: false) — references/paragraphs.md (622 lines) is the deepest account
of paragraph write shapes; references/integrity-sweep.md is the post-deserialize gate.

Which MCP tools brand it

In the order dw-swift-building/SKILL.md:48-51 and :55-124 prescribe:
  get_areas, get_pages_by_area_id, get_pages_by_parent_id, get_navigation_structure
  get_page_item_field_values, get_item_field_values
  save_areas
  set_page_item_fields  ->  save_pages          (this order, always: save_pages re-derives
                                                 MenuText from the item's Title field)
  reorder_pages
  set_item_field_values (batched; it spans different items in one call)
  fetch_frontend_page_html

Verify

Storefront: GET <site-root>/home returns 200 and the body contains
zero occurrences of the string "Placeholder" once branding is done. Before branding it
contains many — that is the intended fail-loud signal.
MCP equivalent: fetch_frontend_page_html on <site-root>/home, grep for /placeholder/i.