MinMaxHub
Documentation
  • Introduction
  • Architecture
  • Frontend
Domains
  • Nodes
  • Entities
  • Consensus
  • Suggestions
Resources
  • API Reference

Copyright 2026 MinMaxHub

  • Documentation
  • Domains
  • API Reference
NodesEntitiesSuggestionsVotesConsensusUsersRulesMedia
powered by Zudoku
Domains

Entities

The Entities domain manages the actual content pages of MinMaxHub (e.g., "Dwarf", "Bard", "Peter (Civ 6)"). While Nodes provide the folder structure and routing, entities hold the concrete data and layout configuration that drives each page.

Core Concepts

Layout Snapshotting

When an entity is created under a parent node, it copies the node's layout templates into its own layout field. This means each entity is self-contained -- editing the parent node's templates does not retroactively change existing entities.

A configVersion field tracks which version of the parent's templates the entity was created from, allowing the system to detect when an entity is out of sync.

Refreshing Layouts

When a parent node's templates change, an admin can explicitly refresh an entity's layout to pick up the new templates. This is an intentional action, not automatic -- preventing accidental changes to existing content.

Scoped Slug Uniqueness

Entity slugs are scoped per parent node. This means "Fireball" can exist under both "Wizard Spells" and "Sorcerer Spells" without conflict, as long as they belong to different parent nodes.

The full URL path is constructed as {parentNode.slugPath}/{slug}.

Entity Fields

FieldTypeDescription
entityIdUUIDUnique identifier
nodeIdUUIDParent node reference
slugstringURL-safe identifier (kebab-case)
slugPathstringFull URL path (e.g., dnd/classes/bard)
titlestringDisplay name
statusdraft, published, or archivedLifecycle state
heroImageobject or nullOptional cover image (url, alt)
heroDescriptionstring or nullOptional summary text for entity cards
layoutarrayLayout templates defining the page's sections
configVersionnumberTemplate generation tracker
createdAt / updatedAtISO dateTimestamps
createdBy / updatedByobject{ userId, username, photoUrl }

Layout Templates

Each template in the layout array defines a topic (section) on the entity page:

FieldDescription
kind'single' (one value), 'collections' (list of items), or 'wrapper' (groups child topics)
topicKeyUnique identifier within the layout
ruleJSON Schema rule name used for validation
orderDisplay order
defaultValueFallback content when no consensus exists
descriptionDescription of this section
collectionModeCollections only: 'expandable' (users can add items) or 'closed' (predefined items only)
childrenWrappers only: nested child topics

Status Lifecycle

  • Draft -- not visible to the public, editable by authenticated users.
  • Published -- visible on the public site, included in static generation.
  • Archived -- removed from public view. The slug becomes available for reuse.

API Endpoints

MethodEndpointPurposeAuth
GET/entities?nodeId={nodeId}List entities under a nodeRequired
GET/entities/{entityId}Get entity by IDRequired
GET/entities/slugsGet all published entity slug pathsPublic
POST/entitiesCreate an entity under a nodeRequired
PATCH/entities/{entityId}Update entity (title, status, hero image)Required
PATCH/entities/{entityId}/refreshRefresh layout from parent nodeRequired
DELETE/entities/{entityId}Delete an entityRequired
Last modified on April 2, 2026
NodesSuggestions
On this page
  • Core Concepts
    • Layout Snapshotting
    • Refreshing Layouts
    • Scoped Slug Uniqueness
  • Entity Fields
  • Layout Templates
  • Status Lifecycle
  • API Endpoints