Skip to content

System Overview

System MOC

This page is the map of content for the System architecture fold. Use it to jump directly to the contract page you need, instead of scanning all architecture docs linearly.

Quick Router (System Fold)

If you need to understand... Start here
Event-state ownership and mutation authority EventCache Contract
In-memory indexing and identifier mapping Event Storage and Identifiers
OFCEvent <-> FullCalendar conversion boundary FullCalendar Interop
External plugin API design and authorization API Architecture
How to integrate another plugin via API API Integration Blueprint
Runtime flow (load, mutate, external sync, tick/reminders) Data Flow
Core subsystem contracts and invariants Core Systems
Event-domain architecture scope Events Architecture
Safe extension workflow Extending the Plugin
Verification policy and docs-test alignment Testing and Validation

Layer Model (At a Glance)

Layer Responsibility Must Not Own
UI Layer Capture user intent and render current state through views/modals. Canonical state mutation rules.
Presentation Layer Apply workspace/view shaping and display-level overrides. Provider I/O and persistence logic.
Core Layer Own event lifecycle, indexing, normalization, recurrence, and time-aware behavior. Provider-specific protocol details.
Provider Layer Translate shared contracts into local/remote source reads and writes. UI-specific decision making.
Adapter Layer Isolate Obsidian APIs behind testable abstractions. Cross-module business rules.
graph TD
    subgraph UI ["UI Layer"]
        View["CalendarView + React UI"]
    end

    subgraph Presentation ["Presentation Layer"]
        VE["ViewEnhancer (Filtering/VM)"]
    end

    subgraph Core ["Core Layer (Single Source of Truth)"]
        EC["EventCache (Orchestrator)"]
        ES["EventStore (In-Memory Index)"]
        EE["EventEnhancer (Data Transformer)"]
    end

    subgraph Provider ["Provider Layer"]
        PR["ProviderRegistry (I/O Hub)"]
        LP["Local Providers"]
        RP["Remote Providers"]
    end

    subgraph Adapter ["Adapter Layer"]
        OA["ObsidianAdapter"]
    end

    subgraph External ["External Systems"]
        Vault["Obsidian Vault APIs"]
        Net["Internet (Google/CalDAV)"]
    end

    %% Flow: User Action
    View -- "CRUD Ops" --> EC
    EC -- "Query/Index" --> ES
    EC -- "Normalize" --> EE
    EC -- "Dispatch I/O" --> PR

    %% Flow: Storage
    PR --> LP
    PR --> RP
    LP -- "File Ops" --> OA
    OA -- "Sync" --> Vault
    RP -- "Remote Sync" --> Net

    %% Flow: Notifications
    EC -. "Pub/Sub Update" .-> VE
    VE -. "Reactive Refresh" .-> View

    classDef core fill:#f9f,stroke:#333,stroke-width:2px;
    classDef provider fill:#bbf,stroke:#333,stroke-width:1px;
    class EC,ES,EE core;
    class PR,LP,RP provider;

Stable Entry Points

Bootstrap and composition: src/main.ts
State owner and orchestration: src/core/EventCache.ts
Storage and indexing: src/core/EventStore.ts
Provider routing: src/providers/ProviderRegistry.ts
Workspace/view shaping: src/core/ViewEnhancer.ts