Fronting model
Draft v0.1
This page covers the shared fronting model. The goal is to accept different source app shapes without forcing every app into one representation.
How apps store fronting
| Source pattern | Examples | Best OpenPlural target |
|---|---|---|
| Switch events | PluralKit | front_events[] directly |
| Per-member intervals | Prism, Simply Plural, OpenSelves, Ampersand, PluralSpace | One FrontPeriod per interval with a single FrontAssignment |
| Grouped intervals | Sheaf | One FrontPeriod per row and one FrontAssignment per member |
| Tiered periods | Plural Star | One FrontPeriod with tiered front_role assignments |
Record shapes
FrontPeriod
A FrontPeriod is an interval during which one or more members were fronting.
{
"id": "front_01HV4Z...",
"system_id": "sys_01HV4Z...",
"started_at": "2026-04-29T12:00:00Z",
"ended_at": "2026-04-29T15:00:00Z",
"assignments": [
{ "member_id": "mem_01HV4Z...", "front_role": "primary" },
{ "member_id": "mem_01HV5A...", "front_role": "co_front" }
],
"status": null,
"note": null,
"source_kind": "tiered",
"source_refs": [{ "app": "plural_star", "collection": "front_periods", "id": "p_..." }],
"extensions": {}
}
Common fields:
idsystem_idstarted_atended_atassignmentsstatusnotesource_kindsource_refsextensions
FrontAssignment
A FrontAssignment records a single member's role within a specific fronting period.
Recommended front_role values:
primaryco_frontco_consciousinfluencingmembercustom_statusunknown
Common fields:
member_idfront_roleconfidencepresencemoodenergylocationnotesource_refs
FrontEvent
A FrontEvent is a point-in-time switch. This fits PluralKit switch logs well.
{
"id": "event_01HV4Z...",
"system_id": "sys_01HV4Z...",
"at": "2026-04-29T12:00:00Z",
"assignments": [{ "member_id": "mem_01HV4Z...", "front_role": "member" }],
"note": null,
"source_refs": [{ "app": "pluralkit", "collection": "switches", "id": "abcde" }],
"extensions": {}
}
FrontComment
A FrontComment is a comment anchored to a moment in time and optionally tied to a period or event.
Common fields:
idsystem_idfront_period_idfront_event_idtarget_timeauthor_member_idbodycreated_atedited_atsource_refsextensions
Conversion notes
- Sheaf exporters should emit
front_periods[]with one assignment per member andsource_kind: "grouped". - Prism exporters should emit
front_periods[]with single-member assignments and preserve overlapping periods when co-fronting exists. - PluralKit exporters should emit
front_events[]from the switch log and optionally derivefront_periods[]for importers that need durations. - Plural Star exporters should emit explicit
front_rolevalues for each tier. - Importers without per-period roles should prefer the
primaryassignment when present, otherwise the first assignment.
