No root theme ships member page templates or a member layout. Until your theme has a
members_dashboard template, the account subdomain root returns a not-found response for every member.Understand the template types
A theme export lays them out beside the storefront templates:
Create the member layout
A site’s pages render inside the layout the site names. Alayouts template named member is what a new site chooses when the theme has one, so start there. The layout owns the signed-in chrome: the greeting, the site’s navigation, and sign-out.
Create layouts/member.liquid:
{{ content_for_header }}carries the page’s security token and the account screens runtime. Without it, sign-out and the system screens do not work.- The sign-out form posts to
member_routes.sign_outwith the_methodoverride set todeleteand the token frommember_routes.csrf_token. A plain link cannot sign a member out. - The navigation reads
settings.menu, which is the site’s menu in the same shape as alink_listsetting. A navigation component you wrote for the storefront works here unchanged.
member_price, {% member_name %}, or {% member %} on member pages. Those helpers emit shells for the cached storefront. Here the render knows the member, so read member directly.
Build the dashboard
Createmembers_dashboard/default/index.liquid. The dashboard is the site root, so it is the first page a member sees after signing in:
{% layout %} tag to it or to any other member template. The site decides the frame, and a tag in the template is ignored.
Build the sign-in landing
Createmembers_login/default/index.liquid. A guest may open this page, so it receives no member value and no menu. It receives the sign-in URL to put behind its button:
/login from the storefront when you want a branded landing in between.
The landing is not indexed by search engines.
Compose custom pages
Each page you add to a site gets amembers_page template, created with the page and named after it. Open the page in the theme editor and drag sections onto it as you would on a storefront page. The template can also be edited in Code Mode.
A custom page receives the same values as the dashboard: member, member_routes, and settings.menu. It renders inside its site’s layout. Its slug and its site decide where it is served and who can open it, both of which are set on the page rather than in the template. See Add pages to a site.
Read member page values
Every member page except the sign-in landing receives these values on top of the theme’s usual variables.The member
member is a plain value, not an object with methods. Read the fields listed here and nothing else.
Member routes
The sign-in landing receives
member_routes.sign_in_url and member_routes.root instead.
The site’s menu
settings.menu is the resolved menu of the member’s site, deep-merged into the theme’s settings so everything else under settings survives.
Item URLs are already resolved for the account subdomain. Render them as given. Nothing marks the current page, so compare
item.url with request.path when you need an active state.
Follow the rendering rules
- Member pages render on every request for the signed-in member. They are never cached and never served by the CDN.
- Every member page is sent with headers that forbid caching and indexing. The sign-in landing forbids indexing only.
- A member who matches no site, an unpublished page, and a page in another member’s site all return a not-found response. A missing dashboard template returns a not-found response too.
- The site chooses the layout. A template’s own
{% layout %}tag is ignored. - Variants of a member template are chosen by default or region, never by member. Branch on
memberinside one template instead of adding a variant per audience. - System screens render as
members_pagetemplates that Fluid supplies. Your layout frames them; you do not author their body.
Test your templates
- Sign in as a member and open the dashboard. Confirm the layout, greeting, and menu render, and that no storefront header appears.
- Follow every menu item. Confirm each opens inside the same layout.
- Open a custom page and confirm it renders its sections and
membervalues. - Submit the sign-out form. Confirm you land on the storefront signed out, and that opening a member page sends you to sign in.
- Open
/loginas a guest and confirm the sign-in button leads to Fluid’s sign-in and back. - Open a system screen and confirm it renders inside your layout.
Troubleshoot a member template
Implementation checklist for coding agents
Treat this page as the member template contract. Read the target theme before editing it, and preserve its existing conventions and content.- Confirm member storefront is enabled for the target company. Do not infer it from the presence of this guide.
- Create
layouts/member.liquidwith{{ content_for_header }},{{ content_for_layout }}, a navigation loop oversettings.menu.menu_items, and a sign-out form with thedeletemethod override andmember_routes.csrf_token. - Create
members_dashboard/default/index.liquidandmembers_login/default/index.liquid. Put the sign-in URL behind a link in the landing. - Read only
member.first_name,member.last_name,member.full_name,member.email, andmember.status. - Do not add
{% layout %}tags to member templates. The site owns the frame. - Do not use
member_price,{% member_name %}, or{% member %}on member pages. - Do not hand-write system screen markup. Fluid renders the screens.
- Do not write member values into shared assets, cached pages, or storefront templates.
- Verify the dashboard, a custom page, a system screen, sign-out, and the guest sign-in flow.
- Report which files changed and which checks ran. Editing a theme, publishing it, and enabling the feature are separate actions; confirm the target and authorization before each remote change.