SPECTRA is now AXIS

System Diagrams

AXIS© PlantUML Board

Live-rendered contract and app integration diagrams sourced from the local `.puml` files in `docs/diagrams`.

Monochrome Ops ViewPlantUML SVGLive From Repo Files
Operations · Diagram 1

Episode Sync Lifecycle

How the episode catalog becomes onchain event registry state.

/episode-sync-lifecycle

Diagrams are scaled to fit the screen without horizontal scroll. Use Open SVG to zoom and inspect every label on mobile.

Episode Sync Lifecycle
View PlantUML Source
@startuml
title Episode Catalog to Event Registry Sync

actor OwnerAdmin
participant "Owner Episodes Dashboard" as Dashboard
database "episodes.json" as Catalog
participant "Episode Sync Service" as SyncSvc
participant "SpectraEventAccessRegistry" as Registry

OwnerAdmin -> Dashboard : edit episode
Dashboard -> Catalog : save record

OwnerAdmin -> Dashboard : sync onchain
Dashboard -> SyncSvc : syncEpisodeToRegistry(slug)
SyncSvc -> Catalog : read episode
SyncSvc -> SyncSvc : build registry payload

alt registryEventId exists
  SyncSvc -> Registry : updateEvent(eventId, name, metadataURI, active)
else first sync
  SyncSvc -> Registry : createEvent(name, metadataURI)
  Registry --> SyncSvc : EventCreated(eventId)
  SyncSvc -> Catalog : persist registryEventId
end

SyncSvc --> Dashboard : action + tx hash + registryEventId

@enduml
Founder Flow · Diagram 2

Founder Mint Lifecycle

Submission approval and Season 1 founder membership mint lifecycle.

/founder-mint-lifecycle

Diagrams are scaled to fit the screen without horizontal scroll. Use Open SVG to zoom and inspect every label on mobile.

Founder Mint Lifecycle
View PlantUML Source
@startuml
title Founder Submission to Founder Mint

actor Applicant
actor Approver
participant "SpectraSubmissionRegistry" as Submission
participant "SpectraFounderSeason1_1155" as Founder1155

Applicant -> Submission : createSubmission(emailHash, metadataURI)
Submission --> Applicant : submissionId

Applicant -> Submission : updateSubmissionMetadata(submissionId, metadataURI)
Approver -> Submission : setSubmissionApproval(submissionId, true)

Applicant -> Founder1155 : mintFounder(submissionId)
Founder1155 -> Submission : getSubmission(submissionId)
Submission --> Founder1155 : submission data

Founder1155 -> Founder1155 : validate approved\nvalidate applicant\nvalidate not minted
Founder1155 -> Applicant : mint tokenId=submissionId
Founder1155 -> Submission : markMinted(submissionId, tokenId)
Submission --> Founder1155 : ok

@enduml
System Map · Diagram 3

Full Architecture

Top-level relationship map between the app, episode catalog, and all core contracts.

/full-architecture

Diagrams are scaled to fit the screen without horizontal scroll. Use Open SVG to zoom and inspect every label on mobile.

Full Architecture
View PlantUML Source
@startuml
title SPECTRA Full Contract + App Architecture

skinparam componentStyle rectangle
skinparam packageStyle rectangle

actor User
actor Applicant
actor OwnerAdmin as "Owner / Admin"
actor Agent as "AI Agent"

package "Next.js App" {
  [Episodes UI]
  [Owner Episodes Dashboard]
  [Admin Session API]
  [Episodes Metadata API]
  [Episode Sync Service]
  [Owner Session Service]
  database "episodes.json" as EpisodesJson
}

package "Contracts" {
  [SpectraSubmissionRegistry]
  [SpectraFounderSeason1_1155]
  [SpectraEventAccessRegistry]
  [SpectraOwnerAccess1155]
}

Applicant --> [Episodes UI]
Applicant --> [SpectraSubmissionRegistry] : createSubmission()
[SpectraFounderSeason1_1155] --> [SpectraSubmissionRegistry] : getSubmission()\nmarkMinted()

OwnerAdmin --> [Owner Episodes Dashboard]
[Owner Episodes Dashboard] --> [Admin Session API]
[Admin Session API] --> [Owner Session Service]
[Owner Session Service] --> [SpectraOwnerAccess1155] : balanceOf()

[Owner Episodes Dashboard] --> EpisodesJson : edit/save
[Episodes Metadata API] --> EpisodesJson : read
[Episode Sync Service] --> EpisodesJson : read/write registryEventId
[Episode Sync Service] --> [SpectraEventAccessRegistry] : createEvent()/updateEvent()

Agent --> [Admin Session API] : optional wallet auth
[Episodes UI] --> [Episodes Metadata API]

User --> [Episodes UI]
OwnerAdmin --> [SpectraOwnerAccess1155] : mint/revoke via ops scripts
OwnerAdmin --> [SpectraEventAccessRegistry] : event management

@enduml
Access Control · Diagram 4

Owner Auth Lifecycle

Wallet challenge, token verification, and owner dashboard session issuance.

/owner-auth-lifecycle

Diagrams are scaled to fit the screen without horizontal scroll. Use Open SVG to zoom and inspect every label on mobile.

Owner Auth Lifecycle
View PlantUML Source
@startuml
title Owner Dashboard Wallet Authentication

actor WalletHolder
participant "EpisodesAdminPanel" as Panel
participant "Admin Session API" as SessionApi
participant "Owner Session Service" as SessionSvc
participant "SpectraOwnerAccess1155" as Owner1155

WalletHolder -> Panel : connect wallet
Panel -> SessionApi : POST mode=challenge
SessionApi -> SessionSvc : createOwnerWalletChallenge(address)
SessionSvc --> SessionApi : challenge message
SessionApi --> Panel : challenge message

WalletHolder -> Panel : sign message
Panel -> SessionApi : POST mode=wallet\naddress + signature
SessionApi -> SessionSvc : verifyOwnerWalletSignature(...)
SessionApi -> SessionSvc : issueOwnerWalletSession(address)
SessionSvc -> Owner1155 : balanceOf(address, tokenId)
Owner1155 --> SessionSvc : balance > 0
SessionSvc --> SessionApi : session issued
SessionApi --> Panel : authenticated

@enduml