Extend a Module
Add your own sections, panels, sales channels and admin pages to a Module's screens through slots.
A slot is a place on a Module's screen where other code can add something: a section on the product page, a panel on the register, a section in Settings. The Module renders whatever is contributed there, in order. Your app adds to a slot without editing the Module, so the addition survives every update.
Find the slot
Each Module's reference page lists its slots under Facts → Slots, by address. An address is
<surface>.<key>: catalog.product-channel is the product page's sales channels, and POS uses it
to add Sell at the register. A slot only exists while its Module is on, and what you put in it
disappears with the Module.
The app itself owns a few slots that every Module, and your code, can fill:
| Address | Where it shows |
|---|---|
admin.nav | A page in the admin sidebar, in one of its areas |
admin.actions | A shortcut in the ⌘K menu, and on the admin home if you choose |
admin.settings-section | A section in the admin's Settings |
admin.sidebar-header | Something at the top of the admin sidebar (the location switcher) |
Add to it
Your coding agent adds the entry to the app's own extensions file,
apps/web/src/lib/modules/app-extensions.ts. Stardeck never changes that file, so updates keep
your entries. Each entry has an id, an order and whatever the slot asks
for, usually a component and sometimes a permission. Ask your agent for the change in product
terms ("add a Marketplace section to the product page's sales channels") and it finds the slot and
the shape.
The app checks every entry against its slot. An entry for a slot that doesn't exist, or one missing what the slot needs, is refused with the slot's address and where the entry came from, so an update that renames a slot tells you instead of silently dropping your section.
Move, rename or hide admin pages
The admin sidebar is split into areas (home, bookings, sales, customers, products, stock, team,
finance, website, settings). To move a Module's page to another area, rename an area, hide a page
or reorder the home cards, your agent edits the app's admin overrides file, apps/web/src/admin/overrides.ts, not the Module. Stardeck
ships that file empty and never changes it. A test fails when an override names a page or
area that no longer exists, so an update that renames a page doesn't bring a hidden page back
without telling you.
To hide a whole Module from staff, use Features in use instead (see Two switches).
When Modules extend each other
Modules also add to each other: a confirmed booking earns Membership points; POS adds Sell at the register to Catalog. These additions, called enhancements, run only while both Modules are on, and each reference page lists them under Adds to these when they're on and Added to by. You don't wire them: switching the second Module on is enough.
When a slot isn't enough
A slot adds to a screen. To change the screen itself (its layout, its fields, its look beyond what
the theme can do), see Customize a Module's screens.
For the theme first, see your app's AGENTS.md § "Theme and branding": colours, corners,
sizes and fonts change on every screen, the Modules' included, without customizing any of them.