Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SpeakerOps

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.

Code of Conduct

All contributors and users are expected to follow the Strict Accountability Policy.

Bounded Contexts

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.

Integration Diagram

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")
Loading

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.

Why these boundaries

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.

Naming

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.

Prior Art

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.

About

Domain model and integration strategy for presentation authoring, talk portfolios, conference submissions, and publishing.

Topics

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors