Time: 0:30 - Hello and welcome - Daniel, Full Stack Developer - A few slides, then live code - We build a small Sulu merchandise shop: T-shirts, mugs, stickers - The repo is public: QR code, one pull request per step; the bundle link below it - If I break it: one branch per step, `git checkout` is my undo Cue: stay on the title. Do not read the subtitle.
Time: 1:30 - Products are content, like a page or an article - Same tabs: SEO/Excerpt, URL, preview - Same lifecycle: draft, publish, versions, workflow - Plus product logic: families, attributes, variants, associations - Not a shop system: a flexible presentation layer for your products - Three types: product, product with variants, variant Cue: count the three types on your fingers.
Time: 1:00 - Example: a T-shirt - Product: shared facts, title, family, material - Variant: colour, size, own picture, own URL - Today the variant has the URL - Coming: one URL per product, variant by query parameter or not at all, per project Cue: point at the shirt tag on the left, then at the cards on the right.
Time: 1:30 - Product: only the identity (uuid, type, parent) - A variant points to its parent - DimensionContent: everything editors write, one per stage and locale - Draft, published, versioned: the same design as pages and articles - Values, family and associations hang on the content - Family and attributes: next slide Cue: left box, then the dark box, then down. Say "one to n" on the first line.
Time: 0:45 - Attribute: one fact with a type (colour, weight, release date) - Group: one block in the admin form and on the website, no logic - Ours: Look, Material & care, Specs, Good to know - Family: which attributes a product has - Per family: required, variant - Weight: required for clothing, optional for accessories - On the page the variant's value wins - Filterable is set on the attribute: becomes a search filter Cue: if short on time, skip the group.
Time: 0:45 - Text: print motif, fun fact, translatable - Number: with a unit, 17 measurement families (weight, temperature, volume, ...), the config picks the units - Date: release date, your format - Options: fixed list, one value, so colour and size are two attributes - Boolean: new, limited edition, dishwasher safe - Coming soon: range, multiple selection Cue: one card per breath. Say "new" at boolean.
Time: 1:00 - Fresh Sulu skeleton, nothing installed - Install, catalogue as data, console import - Product page with attributes and related products - Variants: colour and size, own URL - Catalogue page with filters and search - AI: an MCP client manages products; Symfony AI tools only mentioned - Review before going live Cue: touch each card in reading order.
Time: 0:30 - From now on only code - One pull request per step: follow along with the QR code - Step 1: install the bundle Cue: switch to the editor, branch `step-00-skeleton`. Typing fails: `git checkout -f step-NN-...`.
Time: Q&A - Thank you - QR code: the repo with one pull request per step; the bundle link below the title - Questions Cue: leave this slide up during Q&A.