- t3bootstrap-site-package: composer + site sets + when to add a local extension
- t3bootstrap-overrides: 4-layer override surface (Settings → SCSS → Fluid → DataProcessor)
- t3bootstrap-content-elements: 23 t3bs_* CE catalog + migration matrix (HTML/WP/Joomla/older TYPO3) + Flux-bs5 upgrade wizard
Mirrors the structure of wapplersystems/typo3-skills (.claude-plugin/{plugin.json,marketplace.json}, .agents/skills/<name>/{SKILL.md,agents/openai.yaml}).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
20 KiB
name, description
| name | description |
|---|---|
| t3bootstrap-site-package | Set up and configure a TYPO3 v14 project on the T3Bootstrap stack — composer repositories and dependencies for `t3bootstrap/*` and `wapplersystems/*` packages, site configuration with the right Site Sets, multi-language setup, when (and when not) to add a local site package, and the standard set of optional add-on packages (news, blog, address, sliders, gallery, hero, card, counter, countdown). Use this skill when bootstrapping a new T3Bootstrap project, adding a t3bootstrap add-on to an existing project, debugging "set not found" or unexpected content-element-missing errors, or deciding whether a customer-specific extension is needed. |
T3Bootstrap Site Package
Use this skill when setting up or extending a TYPO3 v14 project that is built on the
T3Bootstrap stack — i.e. uses t3bootstrap/template, t3bootstrap/core and the
related WapplerSystems extensions instead of (or in addition to) a hand-rolled site
package.
Companion skills:
t3bootstrap-overridesonce setup is done and customer styling/templating begins.t3bootstrap-content-elementsfor which CE to use where.
First Checks
Before adding anything, read what already exists:
- Is the project Composer mode? (
composer.jsonat root,vendor/directory present.) - Which
t3bootstrap/*andwapplersystems/*packages are already required? —composer show | grep -E "t3bootstrap|wapplersystems" - Where is the site config? —
config/sites/<site-id>/config.yaml. Which sets does itsdependencies:list? - Is there a local site package? Look for
packages/<vendor>/,local_packages/, or any in-repo TYPO3 extension. On a vanilla T3Bootstrap project there usually is NO local site package — the stack is sufficient out of the box and customization happens via Site Settings + Fluid overrides (seet3bootstrap-overrides). - Is DDEV configured? —
.ddev/config.yamlpresent. Confirm PHP version and the DB engine before suggesting commands.
The Core Stack
A T3Bootstrap project always uses these three foundation extensions:
| Package | Role |
|---|---|
t3bootstrap/core |
Base ext: ViewHelpers, DataProcessors, BackendLayouts, extended tt_content fields (spacing, background, classes, breakpoint grid), RegisterUtility (TSFE-replacement registry on v14). |
t3bootstrap/template |
Site template: page layouts, navigation, footer, search box, language menu, SCSS theme. Pulls Bootstrap 5 and the icon sets. |
t3bootstrap/container-bs5-templates |
The 23 Bootstrap 5 content elements (Card, Accordion, Tabs, Carousel, Timeline, Grid Row/Col, Megamenu, Buttons, …). Replaces the legacy Flux-based flux_bs5_templates. |
These three are mandatory. Everything else is an add-on.
Add-on Packages
All add-ons are optional; pull only what the project needs. Each ships its own Site Set that has to be included in the site config to take effect.
T3Bootstrap-vendored add-ons
| Package | Adds |
|---|---|
t3bootstrap/hero-item |
Hero content element (full-width banner with title, subtitle, CTA, background image/video). |
t3bootstrap/t3bootstrap-news |
georgringer/news integration with T3Bootstrap-styled list/detail templates. |
t3bootstrap/t3bootstrap-blog |
t3g/blog integration with T3Bootstrap-styled templates. |
t3bootstrap/t3bootstrap-address |
Address record CE styled for the template. |
t3bootstrap/t3bootstrap-form |
EXT:form templates and finishers wired into the template. |
t3bootstrap/t3bootstrap-filecollection_gallery |
File-collection-driven gallery CE. |
t3bootstrap/t3bootstrap-wsslider |
Slider integration for ws_slider. |
t3bootstrap/template-fontawesomeicons |
Font Awesome icon set Site Set. |
t3bootstrap/template-bootstrapicons |
Bootstrap Icons Site Set. |
t3bootstrap/template-aos |
Animate-on-scroll Site Set. |
t3bootstrap/template-imagedesigns |
Image design presets (rounded, framed, shadowed, …). |
WapplerSystems shared extensions
| Package | Adds |
|---|---|
wapplersystems/ws-scss |
SCSS-to-CSS compilation pipeline used by t3bootstrap/template. |
wapplersystems/ws-components |
Modular SCSS/JS component system (<scssComponents:require> / <jsComponents:require>). |
wapplersystems/ws-slider |
Generic slider framework (front-end-library-agnostic). |
wapplersystems/font-downloader |
Self-host Google Fonts. |
wapplersystems/teaser |
Teaser CE. |
wapplersystems/videos |
Video CE. |
wapplersystems/testimonials |
Testimonials CE. |
wapplersystems/address |
Address plugin (news-variant). |
wapplersystems/newslayouts |
Additional news layouts (3-col, 4-col, vertical list, top-image detail, …). |
wapplersystems/tag |
Tagging system. |
composer.json — The Repository Block
All T3Bootstrap packages are hosted on the Gitea instance at git.wappler.systems,
WapplerSystems packages on GitHub. Both need explicit repositories entries in
composer.json (Packagist does not mirror them).
{
"repositories": [
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/core.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/template.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/container-bs5-templates.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-news.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-blog.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-address.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-form.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-heroitem.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-filecollection_gallery.git" },
{ "type": "git", "url": "gitea@git.wappler.systems:T3Bootstrap/t3bootstrap-wsslider.git" },
{ "type": "git", "url": "git@github.com:WapplerSystems/ws_scss.git" },
{ "type": "git", "url": "git@github.com:WapplerSystems/ws-components.git" },
{ "type": "git", "url": "git@github.com:WapplerSystems/teaser.git" },
{ "type": "git", "url": "git@github.com:WapplerSystems/videos.git" },
{ "type": "git", "url": "git@github.com:WapplerSystems/testimonials.git" }
]
}
SSH access
The Gitea SSH URL requires the developer machine to be authorized at
git.wappler.systems. Inside DDEV containers, run ddev auth ssh on the host
beforehand so the agent forwards. HTTPS fallback URL pattern:
https://git.wappler.systems/T3Bootstrap/<repo>.git.
Require Block — Version Aliasing
The packages are typically tracked on the release/v14 branch. Use as-aliases so
Composer's solver treats the dev branch as a satisfiable version range:
{
"require": {
"typo3/cms-core": "^14.0",
"t3bootstrap/core": "dev-release/v14 as 14.0.0",
"t3bootstrap/template": "dev-release/v14 as 14.0.0",
"t3bootstrap/container-bs5-templates": "dev-release/v14 as 14.0.0",
"t3bootstrap/t3bootstrap-news": "dev-release/v14 as 14.0.0",
"wapplersystems/ws-scss": "dev-master as 14.0.0",
"wapplersystems/ws-components": "dev-master as 14.0.0"
}
}
Stability: add
"minimum-stability": "dev"and"prefer-stable": trueat the top level — otherwise Composer refuses dev branches.
Site Sets — The Real Configuration Surface
T3Bootstrap configures itself via TYPO3 v14 Site Sets, not by patching TypoScript
into the root template. Every t3bootstrap and wapplersystems extension ships one or more
sets under Configuration/Sets/<SetName>/config.yaml.
Set Catalog (foundation)
| Set | Provided by | Pulls in |
|---|---|---|
t3bootstrap/core |
t3bootstrap/core |
TypoScript constants & setup for the core registry, ViewHelpers, DataProcessors. |
t3bootstrap/template |
t3bootstrap/template |
Page rendering, layouts, navigation, footer; depends on t3bootstrap/core, t3bootstrap/gridlayouts, typo3/indexed-search. |
t3bootstrap/container-bs5-templates |
t3bootstrap/container-bs5-templates |
All 23 t3bs_* CTypes; depends on t3bootstrap/core. |
t3bootstrap/gridlayouts |
t3bootstrap/core |
Grid layouts for text/media elements (CE-internal column splits). |
Set Catalog (icons / theming)
| Set | Provided by | Pulls in |
|---|---|---|
t3bootstrap/template-fontawesomeicons |
t3bootstrap/template |
Font Awesome assets and link to the icon picker. |
t3bootstrap/template-bootstrapicons |
t3bootstrap/template |
Bootstrap Icons assets. |
t3bootstrap/template-aos |
t3bootstrap/template |
animate-on-scroll JS + CSS. |
t3bootstrap/template-imagedesigns |
t3bootstrap/template |
Image design presets. |
t3bootstrap/icons |
t3bootstrap/core |
Generic icon registry hooks. |
Set Catalog (CE add-ons)
| Set | Provided by |
|---|---|
t3bootstrap/card-element |
t3bootstrap/core |
t3bootstrap/compareslider-element |
t3bootstrap/core |
t3bootstrap/countdown-element |
t3bootstrap/core |
t3bootstrap/counterbar-element |
t3bootstrap/core |
t3bootstrap/hero-item |
t3bootstrap/hero-item |
Set Catalog (news / blog / address / form / gallery)
| Set | Provided by |
|---|---|
t3bootstrap/news |
t3bootstrap/t3bootstrap-news |
t3bootstrap/news-timeline-cards-straight |
t3bootstrap/t3bootstrap-news |
t3bootstrap/news-timeline-cards-alternately |
t3bootstrap/t3bootstrap-news |
t3bootstrap/news-newsblock |
t3bootstrap/t3bootstrap-news |
t3bootstrap/news-background-image-latest |
t3bootstrap/t3bootstrap-news |
t3bootstrap/news-right-image-latest |
t3bootstrap/t3bootstrap-news |
wapplersystems/newslayouts |
wapplersystems/newslayouts |
wapplersystems/newslayouts-detail-topimage |
wapplersystems/newslayouts |
wapplersystems/newslayouts-list-3columns |
wapplersystems/newslayouts |
wapplersystems/newslayouts-list-4columns |
wapplersystems/newslayouts |
wapplersystems/newslayouts-list-vertical |
wapplersystems/newslayouts |
t3bootstrap/blog |
t3bootstrap/t3bootstrap-blog |
t3bootstrap/address |
t3bootstrap/t3bootstrap-address |
wapplersystems/address-googlemaps |
wapplersystems/address |
wapplersystems/address-openstreetmap |
wapplersystems/address |
t3bootstrap/form |
t3bootstrap/t3bootstrap-form |
wapplersystems/filecollection-gallery |
t3bootstrap/t3bootstrap-filecollection_gallery |
wapplersystems/teaser |
wapplersystems/teaser |
wapplersystems/testimonials |
wapplersystems/testimonials |
Set Catalog (sliders)
| Set | Provided by |
|---|---|
wapplersystems/ws-slider |
wapplersystems/ws-slider |
wapplersystems/ws-slider-flexslider |
wapplersystems/ws-slider |
wapplersystems/ws-slider-tinyslider |
wapplersystems/ws-slider |
wapplersystems/ws-slider-swiper |
wapplersystems/ws-slider |
wapplersystems/ws-slider-bootstrap |
wapplersystems/ws-slider |
wapplersystems/ws-slider-slick |
wapplersystems/ws-slider |
t3bootstrap/ws-slider |
t3bootstrap/t3bootstrap-wsslider (T3Bootstrap-styled wrapper) |
A package's PHP code is loaded once Composer pulls it in. Its TypoScript and settings, however, only take effect when the matching Site Set is listed in
config/sites/<site-id>/config.yaml— adding the composer dependency without the set means nothing renders.
Site Config — Typical config.yaml
base: 'https://my-project.example.com/'
rootPageId: 1
websiteTitle: 'My Project'
dependencies:
# foundation — order matters: core → template → CE library
- t3bootstrap/template # depends on t3bootstrap/core + gridlayouts
- t3bootstrap/container-bs5-templates
# icons & theme add-ons
- t3bootstrap/template-fontawesomeicons
- t3bootstrap/template-bootstrapicons
- t3bootstrap/template-aos
- t3bootstrap/template-imagedesigns
# CE add-ons (only what the project needs)
- t3bootstrap/card-element
- t3bootstrap/counterbar-element
- t3bootstrap/countdown-element
- t3bootstrap/compareslider-element
- t3bootstrap/hero-item
# content domains (only what the project needs)
- t3bootstrap/news
- t3bootstrap/blog
- t3bootstrap/address
- t3bootstrap/form
# optional vendor add-ons
- wapplersystems/teaser
- wapplersystems/testimonials
- wapplersystems/newslayouts
- wapplersystems/ws-slider-swiper
- wapplersystems/filecollection-gallery
# TYPO3 core sets
- typo3/felogin
- typo3/seo-sitemap
languages:
- title: Deutsch
enabled: true
languageId: 0
base: /de/
locale: de_DE.utf8
iso-639-1: de
hreflang: de
flag: de
- title: English
enabled: true
languageId: 1
base: /en/
locale: en_US.utf8
iso-639-1: en
hreflang: en
fallbackType: strict
flag: en-us-gb
errorHandling:
- errorCode: 404
errorHandler: Page
errorContentSource: 't3://page?uid=<404-page-uid>'
- errorCode: 403
errorHandler: Page
errorContentSource: 't3://page?uid=<403-page-uid>'
- errorCode: 500
errorHandler: Page
errorContentSource: 't3://page?uid=<500-page-uid>'
routes:
- route: robots.txt
type: staticText
content: |
User-agent: *
Disallow: /typo3/
Disallow: /typo3_src/
Allow: /typo3/sysext/frontend/Resources/Public/*
Set Dependency Resolution
A set's dependencies: are resolved transitively — listing t3bootstrap/template
automatically pulls in t3bootstrap/core and t3bootstrap/gridlayouts. You only need
to list the highest-level set you want active.
But: explicit beats transitive for clarity. Listing the foundation sets explicitly makes the config self-documenting and avoids surprises when sets change their deps.
Do You Need a Local Site Package?
The honest answer for most projects: no. The T3Bootstrap stack already provides everything a site package usually wraps:
| Site-package responsibility | Where it lives in the T3Bootstrap stack |
|---|---|
| Page rendering / Fluid layouts | t3bootstrap/template → override via templateRootPaths.10 (see t3bootstrap-overrides) |
| Content element templates | t3bootstrap/container-bs5-templates + t3bootstrap/core → override via root-paths |
| Color theme | _variables.scss !default overrides (see t3bootstrap-overrides) |
| Backend layouts | shipped by t3bootstrap/template, customer extends via PageTSconfig |
| Routing | site config routeEnhancers |
| Settings | site config settings: + site sets |
When you DO need a local extension
Add a customer-specific extension only if any of these is true:
- Custom PHP — DataProcessors, Middlewares, EventListeners, ViewHelpers, RegisterUtility extensions, Scheduler tasks. PHP must live in a registered extension.
- Custom Fluid templates that go beyond drop-in overrides — e.g. you want to ship reusable Partials for the customer's brand. (Even drop-in overrides work without an extension if you load them from
fileadmin/, but that mixes content storage with code — not recommended.) - Custom TCA — fields on
tt_contentor other tables beyond whatt3bootstrap/corealready adds. - Customer-specific Site Set — settings, additional TypoScript, a backend layout shipped per project. Sets must live in
Configuration/Sets/<name>/config.yamlof an extension.
Skeleton for a customer extension
local_packages/<customer>/site_<customer>/
├── composer.json
├── ext_emconf.php
├── Classes/
│ ├── DataProcessing/
│ └── ViewHelpers/
├── Configuration/
│ ├── Sets/
│ │ └── Site<Customer>/
│ │ ├── config.yaml
│ │ ├── settings.yaml
│ │ └── setup.typoscript
│ └── TCA/Overrides/
├── Resources/
│ ├── Private/
│ │ ├── Templates/ # site-package overrides (see t3bootstrap-overrides skill)
│ │ ├── Partials/
│ │ ├── Layouts/
│ │ └── Language/
│ └── Public/
│ └── Scss/_overrides.scss # !default overrides
└── ext_localconf.php
Register the extension as a path repository in the root composer.json:
{
"repositories": [
{ "type": "path", "url": "local_packages/<customer>/site_<customer>" }
],
"require": {
"<customer>/site-<customer>": "@dev"
}
}
Then add <customer>/site-<customer> to the site config dependencies:.
Common Pitfalls
| Symptom | Cause | Fix |
|---|---|---|
| Backend shows no t3bs_* CEs | t3bootstrap/container-bs5-templates is required but its Site Set is not listed in config/sites/<id>/config.yaml. |
Add t3bootstrap/container-bs5-templates to dependencies:. |
| Frontend renders without styling | t3bootstrap/template set missing from dependencies:, or DDEV is serving stale CSS. |
Verify set is listed, then ddev exec vendor/bin/typo3 cache:flush + recompile SCSS via wapplersystems/ws-scss. |
Class "T3Bootstrap\Core\…" not found |
composer didn't pick up the package — usually missing repositories entry or no dev-release/v14 as alias. |
Re-check composer.json, run composer require t3bootstrap/core:dev-release/v14. |
Set "t3bootstrap/news" not found |
the matching composer package (t3bootstrap/t3bootstrap-news) is not installed. |
composer require t3bootstrap/t3bootstrap-news. |
| News-extension styled wrong | wapplersystems/newslayouts listed before t3bootstrap/news so the t3bootstrap templates override the wapplersystems ones. |
Order matters: T3Bootstrap-news set FIRST, then wapplersystems newslayouts add-ons. |
| Permission prompt on Gitea SSH inside DDEV | DDEV agent isn't forwarded. | ddev auth ssh on host before ddev composer install. |
Standard Setup Workflow
- Scaffold with TYPO3 v14 distribution or a clean Composer install.
- Add
claude-diagnostics(per global instructions) so the rest is faster to debug. - Add repositories block to
composer.jsonfor the Gitea + GitHub URLs of t3bootstrap and wapplersystems packages. - Set stability:
minimum-stability: dev,prefer-stable: true. - Require the foundation:
t3bootstrap/template,t3bootstrap/container-bs5-templates—t3bootstrap/corecomes transitively but list it explicitly if you want pinning. - Require add-ons matching the project brief (news/blog/form/gallery/sliders).
- Site config — list the sets matching the requires; add languages, error handling, route enhancers.
- Site Setting Module in the TYPO3 backend → verify all sets resolved, no "set not found" errors.
- Flush caches, log in, place a "Card" content element to verify
t3bs_*CTypes appear. - Decide on overrides — switch to the
t3bootstrap-overridesskill once the customer wants color/layout adjustments.
Where to Find Things in the Vendor Tree
vendor/t3bootstrap/core/Configuration/Sets/ # Core sets (gridlayouts, icons, T3BCore)
vendor/t3bootstrap/template/Configuration/Sets/Template/ # Main site template set
vendor/t3bootstrap/template/Configuration/TypoScript/ # TypoScript constants + setup
vendor/t3bootstrap/container-bs5-templates/Configuration/Sets/ContainerBs5Templates/
vendor/t3bootstrap/container-bs5-templates/Classes/Updates/MigrateFluxBs5ToContainerBs5.php
For the override surfaces (templateRootPaths.10, SCSS variables, …) see the
t3bootstrap-overrides skill.
For the CE catalog and content-migration mapping see the
t3bootstrap-content-elements skill.