PortalResource in the graph.
Definition files
The file name is the resource slug. A display name inside the JSON does not replace that slug.
Project tooling
The installed package documentation matches the dependency versions in the project. Use it when local editor type information is unavailable.
Custom pages and route order
The project’ssrc/main.tsx starts the portal with createPortal from @fluid-app/portal-sdk. Keep screens, navigation and content in the Portal Definition, so admins can keep editing them in the Portal Builder. Add code only for a page the builder can’t make.
When someone opens a route, the portal renders the first match:
- A member type page for the viewer’s member type, at that slug.
- A custom page at exactly that slug.
- A custom page at the slug of the navigation item the route starts with. For example,
customPages.reportsrenders/reports/2026-09when a navigation item has the slugreports, withparamsset to2026-09. - A system screen at that slug.
- A screen from the Portal Definition, matched by its navigation item, then by slug.
- Page not found.
customPages.profile to replace the built-in profile screen. A builder screen can’t replace a system screen, so give your screens slugs that system screens don’t use.
A member type page doesn’t get past the rep-only rule for messages and my-site. See System screens with extra rules.
Widget files in a portal project
Company Widget Packages can also live in the generated project:
These files belong to the company Widget Package workflow, not to the Portal Definition JSON contract.