Teams
Teams decide who, within the organization, can operate each piece of content. A team is about the staff who produce and maintain courses — not about the learners who take them.
Members versus learners
Before anything else, keep two populations apart:
- Members are the organization's staff — the people who create, price, and moderate. Teams are made up of members, and only members.
- Learners are the students who take the courses. They reach the organization through the content, never through the internal roster, and they never join teams.
If someone belongs to a team, they are staff. The people who learn together inside a course are organized separately, as communities.
What a team is
A team is a subgroup of the organization's staff — people who are already members of the organization. Each team has:
| Attribute | Rule |
|---|---|
| Name | 2 to 60 characters; unique within the organization (case-insensitive) |
| Logo | An already-uploaded image (the team avatar) |
| Bio | Free text, up to 500 characters |
Creating, renaming, and deleting teams, managing members, and defining roles are actions restricted to the organization owner or admin. A regular member can see the teams they belong to but does not administer the structure.
The owning team is the authority
Each piece of content can belong to one team, through the content.teamId field. That team is the single authority over the content, and who within it does what is defined by the per-member roles below.
When a piece of content has no team, the owner (ownerId) is the fallback and holds all the functions.
Per-member roles (team_member_role)
Being on a team, by itself, grants no power over its courses. What grants it are the per-member roles (team_member_role), assigned individually on the team's members screen through a per-person role popover.
Each role corresponds to a function (domain) of the content. The role's name matches the function's name:
| Role | Function (domain) | What it allows |
|---|---|---|
editor | content | Edit the course content |
finance | finance | Price, coupons, refunds, and listing (commercialization) |
community | community | Manage and moderate the communities and make up the tutor pool |
The roles are cumulative and granular: the same person can have editor and community, or only finance. A member with only finance handles the commercial side but is read-only in the content editor — when they open the editor they get a restricted-access screen, not an editing session. Likewise, someone with only editor does not touch price or communities.
The operation to set roles replaces the entire set of a member's roles at once (it does not increment). Unknown roles are rejected.
How access to a piece of content is resolved
Every action on a piece of content is checked against a specific function (content, finance, or community). Resolution follows this order:
| Step | Who passes |
|---|---|
| Read | Any member of the organization can view |
| Organization owner/admin | Always have access to all functions (bypass) |
Owner (ownerId) | Holds all functions of the content |
| Member of the owning team | Passes only on the function whose role they carry |
| Content with no owner or team | Only the organization owner/admin can change it |
In other words: editor, finance, and community take effect only when the person is a member of the owning team of that content. Holding the role on another team is not enough.
Owner-level actions — transferring ownership and the danger zone — sit at an even higher tier: only the owner or an organization owner/admin. No team role (editor/finance/community) reaches this level; the team can operate the course but cannot delete or reassign it merely by being on the team.
Managing a team
From the team profile, an organization owner/admin can:
- Create the team (unique name) and adjust its name, logo, and bio.
- Add members from the organization's staff roster — only organization members can join; adding twice is harmless (idempotent).
- Remove members (the person stays in the organization) or let someone leave on their own — leaving removes only that person's own association and requires no administrative rights.
- Set the per-member roles in the popover on the members screen.
- Consult the ‘Responsible for’ section, which lists all the courses the team owns (
content.teamId).