Key Concepts

Five nouns explain almost every screen in WordPuppi: account, site, content type, theme blueprint, and member. This page tells you which is which, and which of them own the others.

Accounts and seats

An account owns sites and pays the bill. Every user gets a personal account automatically on first sign-in, so you never have to create one to get started. You can also create additional accounts, and you can belong to accounts other people own.

Membership has exactly two roles:

  • owner, who can add and remove members
  • member, who can see the account and work in its sites

Accounts are scoped hard: an account that you are not a member of returns 404, not 403, so you cannot even confirm it exists.

The Team page under Account manages this: current members, pending invitations, and seat checkout. If you belong to more than one account, the sites list grows an account filter and each site card shows which account owns it.

Sites

A site is one published website: its content, its settings, its theme, its media, its forms, its platform connections.

  • The slug is set at creation and is immutable afterwards. It shows up in admin URLs, in API paths, in the media path /media/{site_slug}/..., and it is the default Cloudflare Pages project name.
  • Each site has its own content database. The default is the built-in managed SQLite database; you can instead point a site at your own PostgreSQL or MySQL connection, and migrate an existing site’s content across.
  • Sites belong to an account, and the sites list merges every site from every account you belong to into one list.

Deleting a site removes its content permanently, including posts, pages, and media.

Content types

Content lives in per-site tables with a wpp_ prefix. The API hides the prefix: /api/v1/sites/{slug}/content/posts reads wpp_posts.

Every site is bootstrapped with system types, including wpp_posts, wpp_pages, wpp_tags, wpp_post_tags, wpp_media, and wpp_members, plus the tables that back barks, the distribution queue, subscription tiers, and fediverse state.

On top of those you can define custom content types: a name, a slug, an optional icon, an optional singleton flag, and a list of fields. Fields come in fifteen types (text, long text, rich text, number, boolean, date, datetime, enum, JSON, image, file, relation, URL, email, slug). Creating a type creates its table; adding a field adds a column.

See Posts, Pages, and Content Types for the day to day of authoring.

Themes and blueprints

A theme is a directory of Tera templates plus static assets. WordPuppi ships bundled themes, and a site picks one.

A blueprint is an editable copy of a theme. Blueprints live in three scopes:

  • Account, shared with every seat on the account
  • Site, this site’s own fork of its active theme (at most one)
  • User, yours, visible on every account you belong to

At build time the precedence is fixed: the site’s own fork wins, then the applied blueprint, then the bundled theme named in settings. Full detail in Themes and Blueprints.

Two different things called “members”

This trips people up, so it is worth being blunt.

Account members are people who log into WordPuppi with you. They occupy seats, they are managed on Account, Team, and they are capped and billable.

Site members are your audience. They are rows in the site’s own wpp_members table, managed on the site’s Members page, they can be assigned subscription tiers, and they are who a newsletter would go to. They never log into the admin.

API keys

API keys are minted per user, not per site, and each key grants full access to your account. They are shown once at creation and only as a masked preview after that. You can revoke a key (keeping the audit row) or delete it outright. See API and MCP.

Esc