ElmsPark Guides

PageMotor guide

Documents, Boxes and Blank_Slate

Where a page actually comes from in PageMotor, and where each EP plugin's output lands, so you can build a Document-first site without guessing.

Use this guide with any AI assistant

Download it as a prompt file, paste it into Claude, ChatGPT, Gemini or any LLM, and it will walk you through it.

Download as LLM prompt

Three surfaces, three different things

The confusion is that all three end up as HTML in the browser. They are not the same kind of thing at all.

Blank_Slate

A Theme. A Theme owns Templates, and a Template is a tree of blocks whose instances emit markup: HTML Container, HTML Box, Page Content and so on.

What is in it

Almost nothing. A Page template and a 404 template, both fallbacks.

Use it when

Your Documents carry the design and the Theme only has to catch what falls through.

HTML Document

A content row, not a Theme. Type html. PageMotor stores the whole document, folds the site head metadata in when you save it, and serves it as stored at a clean URL.

What it gets from the Theme

Nothing. No Template, no blocks, no Theme CSS. What you write is what ships.

Use it for

The home page and every designed page.

HTML Box

A block instance inside a Template. A box of raw HTML you author, rendered inside the Template tree, with the Theme's CSS around it.

What makes it different

PageMotor processes its content, so shortcodes expand inside it.

Use it when

You need plugin output on a designed surface. It is the bridge between the two worlds.

How a page is served

One decision decides everything else. PageMotor looks at the content row's type and takes one of two paths.

1. The URL finds a content row

Every clean URL maps to one row: a Page, a Post, a Document, a Members Only page.

2a. Standalone type

Document types (html, and any plugin type cloned from it) get an access check, then the stored content is sent as it is. Finished. The Theme never runs.

2b. Everything else

The Theme picks a Template, walks its block tree, and Page Content emits the row's body. That is where shortcodes are processed.

Hold on to this. Shortcodes are processed on path 2b only: in Page Content, in an HTML Box, in a Text Box and in Modular Content. Path 2a never processes anything.

Two kinds of plugin output

Every EP plugin puts things on the page in one of two ways, and the way decides where it can go.

KindExamplesWhere it renders
A content type
The plugin registers a new kind of row.
EP Blog's Post. EP Membership's Members Only page. Where the type says. A Post goes through the Theme's Page template. A Members Only page is a Document and is served as stored.
A shortcode
The plugin replaces a tag in your content with markup.
EP Cards' cards and card groups. EP Blog's index and recent-posts list. EP Membership's login and register forms. Page content, an HTML Box, a Text Box, Modular Content. Never inside a Document.

Plugin by plugin

EP Blog

FeatureHow it rendersPut it in
A postContent type post, through the ThemeBlank_Slate's Page template, which you style once
The blog indexShortcode [ep-blog]A Page called Blog, or an HTML Box
Recent posts, categories, post navigationShortcodesA Page or an HTML Box

EP Cards

FeatureHow it rendersPut it in
One cardShortcode [ep_card id="…"]A Page or an HTML Box
A card groupShortcode [ep_card_group group="…"]A Page or an HTML Box

EP Cards is entirely shortcodes. It has no content type of its own.

EP Membership

FeatureHow it rendersPut it in
A gated pageContent type Members Only: a clone of the html type with the protection flag onIt is already a Document. Write it as one.
Login, register, logout linkShortcodesA Page such as Sign in, or an HTML Box
Member profile, member dashboardShortcodesA Page such as Account
Someone below the level opens a gated pagePageMotor checks access before serving and sends the plugin's denied text instead of the pageNothing to place. Set the denied text in EP Membership.

The one trap: a shortcode inside a Document

Put [ep_card_group] or [ep-blog] or [ep-login-form] inside a Document and the visitor sees the tag as literal text. Not broken markup, not an error: the tag itself, because a Document is served as stored.

Checked on a clean install with a control. The same core shortcode in a Document and in a Page:

Document → YEAR:[current-year]:END Page → YEAR:2026:END

The fix is placement, not code. Move the shortcode to a Page or an HTML Box. If the design needs plugin output on a page that must stay a Document, either render that piece at save time or make that one page a Page with an HTML Box carrying the design.

Build recipe: a minimal blog with cards and members

The ellanew.com shape: a quiet front, posts underneath, a few cards, and a members area. Tick each step as you go. Ticks stay in this browser only.

  1. Activate Blank_Slate

    Themes, pick Blank_Slate. You now have a Page template and a 404 template and nothing else.

  2. Write the home page as a Document

    Type html, with its own CSS in its own head. Over MCP that is save-content with type html and the whole page in document. Set it as the site home.

  3. Style Blank_Slate's Page template once

    Header, footer, type and colour, matching the home Document. Every Post and every Page will inherit this, so do it once and do it well.

  4. Install EP Blog and write Posts

    Each post is a Post row. It renders through the Page template you just styled.

  5. Make a Page called Blog holding the index

    A plain Page whose content is [ep-blog]. Link to it from the home Document's nav.

  6. Place cards in a Page or a Box

    Install EP Cards, build the group, then put [ep_card_group group="…"] in a Page or an HTML Box. Not in the home Document.

  7. Install EP Membership and write the gated pages

    Set the levels, then write each members page as a Members Only row. They are Documents, so they carry their own CSS like the home page does.

  8. Make a Sign in Page with the form shortcodes

    A Page holding the login and register form shortcodes. Link it from the nav and from the denied text.

  9. Check it the way a visitor would

    Open the home Document signed out. Open a Post. Open the Blog Page and see the index. Sign in as a member below the level and open a gated page: you should see the denied text, not the page and not a 404.

Quick lookup

I wantPut it in
A designed page with its own lookA Document
A page that is only for membersA Members Only Document
A blog postA Post, styled by the Page template
The list of posts[ep-blog] in a Page or an HTML Box
A row of cards[ep_card_group] in a Page or an HTML Box
Login and register formsThe form shortcodes in a Page or an HTML Box
Plugin output on a designed pageMake that page a Page with an HTML Box, not a Document

Questions people ask next

Can I put a card group on the home page if the home page is a Document?

Not by shortcode. Either make the home page a Page whose design lives in an HTML Box, so the shortcode expands, or render the cards' markup into the Document when you save it.

Does a Document get the Theme's CSS or fonts?

No. It carries its own head. PageMotor folds in the site metadata when you save, nothing else.

Does a Members Only page get the Theme?

No. It is a Document with a lock on it. Write it with its own CSS, the same as the home page.

What does a member below the level see on a gated page?

The plugin's denied text, sent instead of the page. Not a 404. Set that text in EP Membership and link the sign-in Page from it.

Can Claude build all of this over MCP?

Yes. Documents are save-content with type html and the page in document. Pages and Posts are save-content with content. Members Only pages use the plugin's type. The Theme template is edited through the theme actions.

Where does the Design Conversion Skill fit?

It converts an existing HTML design into a Theme. On a Document-first site you are not converting anything, so you do not need it.