Working with Modules

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:

AddressWhere it shows
admin.navA page in the admin sidebar, in one of its areas
admin.actionsA shortcut in the ⌘K menu, and on the admin home if you choose
admin.settings-sectionA section in the admin's Settings
admin.sidebar-headerSomething 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.