SpeakerOps is the umbrella term for the set of bounded contexts that together support conference speaker operations: authoring presentations, publishing them, cataloging talk ideas, and managing conference submissions. It is a conceptual/organizational label, not necessarily a single deployable product or domain name.
All contributors and users are expected to follow the Strict Accountability Policy.
| Context | Repo | Responsibility |
|---|---|---|
| LiquidVictor | LiquidVictor / LiquidVictorDatabases |
Build a presentation: SlideDeck, Slide, IncludeBlock, ContentItem. Owns deck structure, rendering, delivery mechanics (theme, transitions, aspect ratio). |
| SlideFed | SlideFed |
Publish a built presentation to the Fediverse via ActivityPub/ActivityStreams. |
| TalkFolio | TalkFolio |
The talk as a concept: title, abstract, elevator pitch, short version, target audience, alternate titles, tags, category, presentation family grouping, concept-level lifecycle (Ideation → Active → Retired). |
| TalkCircuit | TalkCircuit |
The talk in motion: conferences, CFPs, submission tracking, delivery history, and conference-circuit decision rules. |
C4-style context diagram (also saved standalone at docs/diagrams/Integration-Overview.mmd):
C4Context
title SpeakerOps Integration Overview
Boundary(users, "Users") {
Person(speaker, "Speaker", "Builds, catalogs, submits, and delivers talks")
Person_Ext(fediUser, "Fediverse Users", "Follow presenters and view live/async sessions")
}
Boundary(externalDomains, "External Domains") {
System_Ext(conference, "Conferences / CFPs", "Publish calls for presentations; accept or reject submissions")
System_Ext(relatedContentSources, "RelatedContent Sources", "External sources of companion articles, videos, and other supporting material")
System_Ext(taskManagement, "Task Management", "Receives tasks created by SpeakerOps tools for the Speaker")
System_Ext(calendaring, "Calendaring", "Speaker calendar and conference-related schedule")
}
System_Boundary(speakerOps, "SpeakerOps") {
System(liquidVictor, "LiquidVictor", "Builds presentations: decks, slides, content items")
System(slideFed, "SlideFed", "Publishes decks to the Fediverse via ActivityPub/ActivityStreams")
System(talkFolio, "TalkFolio", "Catalogs talk concepts: pitch, audience, tags, family, concept lifecycle")
System(talkCircuit, "TalkCircuit", "Tracks conference submissions, bookings, and delivery history")
}
Rel(speaker, liquidVictor, "Authors decks")
Rel(speaker, talkFolio, "Curates talk ideas")
Rel(speaker, talkCircuit, "Reviews and manages submissions")
Rel(talkFolio, liquidVictor, "References built SlideDeck.Id (once a deck exists)")
Rel(talkCircuit, talkFolio, "References the Talk being submitted")
Rel(talkCircuit, liquidVictor, "References SlideDeck.Id fulfilling an accepted booking")
Rel(talkCircuit, conference, "Submits proposals; tracks CFP status")
Rel(conference, talkCircuit, "Accept / reject notifications")
Rel(talkFolio, relatedContentSources, "References companion content when available")
Rel(liquidVictor, taskManagement, "Pushes tasks for the Speaker")
Rel(slideFed, taskManagement, "Pushes tasks for the Speaker")
Rel(talkFolio, taskManagement, "Pushes tasks for the Speaker")
Rel(talkCircuit, taskManagement, "Pushes tasks for the Speaker")
Rel(taskManagement, speaker, "Assigns tasks")
Rel(talkCircuit, calendaring, "Updates calendar at submission and acceptance/rejection")
Rel(liquidVictor, slideFed, "Publishes a built deck")
Rel(slideFed, fediUser, "Federates slides and sessions via ActivityPub")
Rel(fediUser, slideFed, "Follows a presenter or session")
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
Note: all cross-context references point from the more specialized context back to the more foundational one (TalkFolio/TalkCircuit reference LiquidVictor's SlideDeck.Id, never the reverse) — see docs/Integration-Strategy.md for the full rule.
Each context has a distinct reason to change:
- LiquidVictor changes when the mechanics of building a deck change (new slide layout, new content type).
- SlideFed changes when Fediverse publishing/interaction semantics change.
- TalkFolio changes when how a talk idea is described, classified, or pitched changes.
- TalkCircuit changes when the conference-submission workflow or rules change.
Mixing these (e.g. putting Category/Tags/Abstract/LifecycleStatus directly on LiquidVictor's SlideDeck) was considered and rejected — it would conflate "build a deck" with "manage a speaking portfolio," which are genuinely different domains with different rates and reasons for change. The same separation applies to companion content: TalkFolio stores only lightweight references to material owned by external RelatedContent Sources. See docs/Integration-Strategy.md for the cross-context reference rules and the reasoning trail that led here.
These are internal/repo code names, not necessarily public branding. If any of these contexts get a true public release, the names should be revisited.
CfpPrep (repo CfpPrep) is prior art for TalkCircuit's conference/CFP modeling and recommendation workflow. TalkCircuit's domain-specific documentation and future implementation work live in the TalkCircuit repository. See docs/Integration-Strategy.md for the cross-context reference rules.