Circle.so — Content Data Model · Circle terms on top, Finkelstein role beneath · crow's foot

Click any entity for its definition · drag to pan · wheel to zoom · hover to trace relationships

Legend

exactly one (mandatory)
zero or one (optional)
one or many (mandatory)
zero, one or many (optional)
inferred from product behaviour (not exposed in API)
supertype / subtype
principal intersecting dependent structure (recursive) subtype derived view

Questions this model answers

Read straight off the entities and business rules. Evidence: Circle Admin API v2 / Member API schemas and Circle's knowledge base.

1 · What can members comment on?

TargetCommentable?Mechanism (entity)Threading / reactions
Post in a Posts spaceYesCOMMENT (owned by POST)Parent comment → one level of replies (parent_comment_id); likes (COMMENT LIKE); can be disabled or closed per post; hidden entirely if space has "hide post settings"
Image post in an Images spaceYesCOMMENT — image posts are POST subtypesSame as posts
Event in an Events spaceYesCOMMENT — events are POST subtypes (out of scope here)Same as posts; can be disabled per event
Lesson in a Course spaceYesLESSON COMMENT — a chat‑room message attached to the lesson (lesson.chat_room_uuid), not a POST commentParent + threaded replies; emoji reactions (not likes); pinning; Threads panel; on by default per lesson (is_comments_enabled); admins get "new lesson comment" notifications
Quiz (a lesson subtype)YesLESSON COMMENT (same mechanism as lessons)Same as lessons
Section / ModuleNoSECTION has no comment childA section is a grouping container only
Space (any type)NoSPACE has no comment childYou comment on the content inside a space, never on the space. To "discuss a course" you pair it with a Posts space in the same Space Group.
Space GroupNoNavigation container only
Chat spaceMessages, not commentsCHAT MESSAGE (out of scope)Real‑time messages with threads & reactions
Members spaceNoA directory view; no content of its own
A comment itselfReply onlyCOMMENT → COMMENT (structure entity)One level: replies cannot have replies

Design consequence for Upgrade IQ: lesson discussion is siloed inside the course space and surfaces only in the Threads panel and course dashboard — it never reaches the Feed. If you want course conversations to be community‑visible, you need a companion Posts space.

2 · How does the Feed work?

The Feed is not a table — it is a derived view (a query) over POST. Per member it returns posts where:

Sorting: Latest · Oldest · Popular · Likes · New activity · Alphabetical · For you (recency × engagement). Side blocks: Trending posts (top 5 by engagement within an admin‑set day threshold) and Upcoming events (from the member's event spaces). Visitors to a public community see only Open‑space posts. Each Posts space also has its own local feed (layout Feed / List / Card) with per‑space default sort and Topic filters.

*Circle's KB names "post and event spaces" as feed sources; image posts are structurally POST subtypes and may surface — treat as unverified.

3 · Is there a document library?

No shared library entity exists in Circle's schema. Files are owned by the lesson (GET /courses/{course_id}/lessons/{lesson_id}/files → LESSON FILE), plus one optional featured media (video/audio) per lesson and inline attachments in the rich‑text body. So LESSON FILE is a dependent entity, not the intersecting DOCUMENT × LESSON you hypothesised. The same PDF used in three lessons is stored three times, with no single place to update it. Circle's own guidance for a "resource library" is a Posts space used as a library (one post per resource, filtered by Topics) — a modelling choice you make, not a feature they ship.

4 · Where do Public / Silver / Platinum live?

Tiers are not an entity; they are patterns over two mechanisms:

Recommended shape: one SPACE GROUP per tier for navigation clarity (their KB explicitly cites "Basic / Premium" space groups as a use case), with each tier's Course spaces, Posts space and resource Posts space inside it.