MyOwnLifeOS Ecosystem

Sovereign apps. Local-first. Native on macOS. Connected by consent.

← Back to MyOwnLifeOS 📃 Architecture History
%%{init: {"theme": "dark", "themeVariables": {"primaryColor": "#1a1a2e", "primaryTextColor": "#e0e0e0", "primaryBorderColor": "#e8a020", "lineColor": "#555570", "secondaryColor": "#16213e", "tertiaryColor": "#0f0f0f"}, "flowchart": {"useMaxWidth": true, "curve": "basis"}}}%%
graph TB
    subgraph Landing[" "]
        L["MyOwnLifeOS Landing
myownlifeos.example.com"]
    end

    subgraph Apps["MyOwnLifeOS App Suite - 11 Web Apps"]
        G["Gopher
gopher.example.net
Concierge + Identity Resolution"]
        I["inbox0
inbox0.example.net
Email Triage"]
        C["Code Reviewer
codereviewer.example.net
AI Code Review"]
        S["Scribe
ownscribe.example.net
Transcription"]
        D["DrawmaticAI
diagrams.example.net
Diagram Generation"]
        R["Summarizer
summarizer.example.net
Meeting Summaries"]
        W["Weekly
weekly.example.net
Weekly Synthesis"]
        T["TShirtize
tshirtize.example.net
Effort Sizing
Monday + GitHub + Text"]
        Cal["Almanac
almanac.example.net
Calendar Aggregator
Google Calendar + CalDAV"]
        Ch["Chatty
chatty.example.net
Document + Drive RAG
pgvector or ChromaDB"]
    end

    subgraph Desktop["Native Desktop - macOS"]
        IDesk["inbox0 Desktop
Mac App Store · Pending Review
Email Triage + MailMind"]
    end

    subgraph Identity["Identity and Auth"]
        O["Google OAuth 2.0
per-app user login"]
        JWT["Server-to-Server JWT
the shared signing key
suite-shared signing key"]
        SA["Superadmin
[email protected]"]
        CONSENT["Consent Router
opt-in per-user connections"]
        IDRES["Identity Resolver
groups accounts by shared
email / phone value
not login provider or app user ID"]
    end

    subgraph Intelligence["Local Intelligence"]
        LLM["Ollama
remote Mac Studio
qwen3.6 / gemma4"]
        RTX["Ollama
RTX A4500
qwen3.6 / gemma4"]
    end

    subgraph External["External Systems"]
        Immich["Immich
Photo Library"]
        NVR["UniFi Protect NVR
Cameras + LPR + Face ID"]
    end

    subgraph Persistence["Data Layer"]
        SQLite[("SQLite
Per-App Local DBs
default for most apps")]
        PG[("PostgreSQL
Gopher (mandatory)
optional backend elsewhere")]
        AuditAGG[("Singleton Audit Aggregator
Cross-App Timeline")]
    end

    subgraph Infrastructure["Infrastructure"]
        CF["Cloudflare Tunnels
one per public subdomain"]
        DOCKER["Docker Compose
per-app containers"]
    end

    L --> G
    L --> I
    L --> C
    L --> S
    L --> D
    L --> R
    L --> W
    L --> T
    L --> Cal
    L --> Ch
    L --> IDesk

    O -.->|OAuth callback| G
    O -.->|OAuth callback| I
    O -.->|OAuth callback| C
    O -.->|OAuth callback| S
    O -.->|OAuth callback| D
    O -.->|OAuth callback| R
    O -.->|OAuth callback| W
    O -.->|OAuth callback| T
    O -.->|OAuth callback| Cal
    O -.->|OAuth callback| Ch

    G -->|chat, tools, vision| LLM
    I -->|triage| LLM
    C -->|review| LLM
    S -->|whisper + summarize| LLM
    D -->|generate diagram| LLM
    R -->|summarize| LLM
    W -->|synthesize| LLM
    T -->|size work| LLM
    Ch -->|answer over retrieved chunks| LLM

    G <-->|inference, fuzzy account match| RTX
    I <-->|inference| RTX
    C <-->|inference| RTX
    S <-->|inference| RTX
    D <-->|inference| RTX
    R <-->|inference| RTX
    W <-->|inference| RTX
    T <-->|inference| RTX
    Ch <-->|embeddings + inference| RTX

    G -->|PostgreSQL| PG
    I --> SQLite
    C --> SQLite
    S --> SQLite
    D --> SQLite
    R --> SQLite
    W --> SQLite
    T --> SQLite
    Cal --> SQLite
    Ch -->|pgvector, or local ChromaDB| PG

    G -.->|identity / accounts| IDRES
    I -.->|identity / accounts| IDRES
    R -.->|identity / accounts| IDRES
    S -.->|identity / accounts| IDRES
    Cal -.->|identity / accounts| IDRES
    W -.->|identity / accounts| IDRES
    T -.->|identity / accounts| IDRES
    IDRES -->|identity contexts| G

    G -.->|signs / verifies| JWT
    I -.->|verifies incoming JWT| JWT
    R -.->|verifies incoming JWT| JWT
    S -.->|verifies incoming JWT| JWT
    Cal -.->|verifies incoming JWT| JWT
    W -.->|signs outgoing JWT| JWT
    T -.->|verifies incoming JWT
signs outbound link JWT| JWT
    C -.->|own JWT, not the shared signing key| JWT
    D -.->|own JWT, not the shared signing key| JWT
    Ch -.->|own signed session cookie, not the shared signing key| JWT

    W -->|"weekly context\noutstanding items\nidentity contexts\n(JWT, never calls other apps directly)"| G
    G -->|"OwnLifeOS tasks\nfocus context"| I
    G -->|"OwnLifeOS tasks"| R
    G -->|"weekly insights"| Cal
    G -->|"sizing stats + recent sizings\n(JWT)"| T
    T -->|"SSO launch\nlink callback\nOwnLifeOS app-token"| OwnOS
    I -->|"calendar context (JWT)"| Cal
    G <-->|tool calls, fuzzy account match| I
    G <-->|tool calls| R
    G <-->|tool calls| T
    G <-->|photo tools| Immich
    G <-->|"face + LPR + vehicle detections (stored in PG; sidecar decommissioned)"| NVR

    AuditEach["Per-App Audit Logs\nSQLite default,\nPostgreSQL optional via env"] -.->|poll audit stream| AuditAGG
    G -.-> AuditEach
    I -.-> AuditEach
    C -.-> AuditEach
    S -.-> AuditEach
    R -.-> AuditEach
    D -.-> AuditEach
    W -.-> AuditEach
    T -.-> AuditEach
    Cal -.-> AuditEach
    Ch -.-> AuditEach

    CF -->|tunnel| G
    CF -->|tunnel| I
    CF -->|tunnel| C
    CF -->|tunnel| S
    CF -->|tunnel| D
    CF -->|tunnel| R
    CF -->|tunnel| W
    CF -->|tunnel| T
    CF -->|tunnel| Cal
    CF -->|tunnel| Ch
    DOCKER -->|host| G
    DOCKER -->|host| I
    DOCKER -->|host| C
    DOCKER -->|host| S
    DOCKER -->|host| D
    DOCKER -->|host| R
    DOCKER -->|host| W
    DOCKER -->|host| T
    DOCKER -->|host| Cal
    DOCKER -->|host| Ch

    SA -.->|admin role| G
    SA -.->|admin role| I
    SA -.->|admin role| C
    SA -.->|admin role| S
    SA -.->|admin role| D
    SA -.->|admin role| R
    SA -.->|admin role| W
    SA -.->|admin role| T
    SA -.->|admin role| Cal
    SA -.->|admin role| Ch

    classDef landing fill:#1a1a2e,stroke:#e8a020,stroke-width:3px,color:#fff
    classDef app fill:#16213e,stroke:#e8a020,stroke-width:2px,color:#e0e0e0
    classDef desktop fill:#1a1a2e,stroke:#3ecf6e,stroke-width:2px,color:#e0e0e0
    classDef identity fill:#1a1a2e,stroke:#3ecf6e,stroke-width:2px,color:#e0e0e0
    classDef llm fill:#16213e,stroke:#64b5f6,stroke-width:2px,color:#e0e0e0
    classDef data fill:#1a1a2e,stroke:#e8a020,stroke-width:2px,color:#e0e0e0
    classDef audit fill:#16213e,stroke:#ff6b9d,stroke-width:2px,color:#e0e0e0
    classDef infra fill:#0f0f0f,stroke:#8888a8,stroke-width:1px,color:#8888a8
    classDef user fill:#1a1a2e,stroke:#e85555,stroke-width:2px,color:#e0e0e0
    classDef ext fill:#1a1a2e,stroke:#64b5f6,stroke-width:2px,color:#e0e0e0

    class L landing
    class G,I,C,S,D,R,W,T,Cal,Ch app
    class IDesk desktop
    class O,JWT,CONSENT,IDRES identity
    class LLM,RTX llm
    class PG,SQLite,AuditAGG data
    class AuditEach,AuditAGG audit
    class CF,DOCKER infra
    class SA user
    class Immich,NVR ext

Scroll to zoom · drag to pan · Fit to reset

11+
Apps
1
Native macOS App
6
Identity-Linked Apps
2
Ollama Hosts
1
Superadmin

App Types

Gopher - Cross-app concierge + identity resolution + UniFi Protect
inbox0 - Email Triage (web + native macOS)
Code Reviewer - AI Code Review (not identity-linked)
Scribe - Transcription
DrawmaticAI - Diagrams (not identity-linked)
Summarizer - Meeting Notes
Weekly - Weekly synthesis, queries only Gopher
TShirtize - Effort sizing for Monday.com, GitHub, and free text; exposes stats/sizings to Gopher and dashboard
Almanac - Calendar aggregator: Google Calendar + CalDAV
Chatty - Retrieval-augmented answers over uploaded files and Google Drive, citing the documents used (not identity-linked)
inbox0 Desktop - Native macOS app pending App Store review (Rust, Tauri v2, SQLCipher, Apple Metal)

Identity Resolution

Gopher discovers accounts via each app's GET identity / accounts
Linked apps: inbox0, Summarizer, OwnScribe, Almanac, Weekly, TShirtize
Accounts grouped by shared email or phone value, not by login provider or app-specific user ID
Code Reviewer, DrawmaticAI and Chatty do not expose identity endpoints

External Systems

Immich - Photo library (per-user credentials)
UniFi Protect - Cameras, LPR; detections stored in PostgreSQL tables but sidecar decommissioned (no face recognition, no InsightFace)
Per-App Audit Logs - SQLite by default, PostgreSQL optional via per app
Singleton Aggregator - Cross-app audit timeline polled via audit stream
Consent routing - opt-in, per-user app connections (link and unlink via OwnLifeOS API)

Auth and Identity

Google OAuth - per-app user-facing login
the shared signing key JWT - suite-shared signing key for server-to-server calls, distinct from user OAuth
Weekly signs outgoing JWTs to query Gopher; inbox0, Summarizer, OwnScribe, and Almanac verify incoming JWTs from Gopher
Admin Role - audit log access, gated by the admin allowlist

TShirtize's Data Flow

TShirtize verifies inbound OwnLifeOS JWTs and signs its outbound /api/link callback JWT with the shared suite secret
Gopher queries TShirtize for sizing stats and recent attempts via /api/ownlifeos/* endpoints
OwnLifeOS dashboard lists TShirtize as connected after the app calls /api/link on first SSO login

Weekly's Data Flow

Weekly calls only Gopher: weekly context, outstanding items, identity contexts
Weekly never calls inbox0, Summarizer, or Almanac directly
Gopher fans out to inbox0 (OwnLifeOS tasks, focus context), Summarizer (open meeting action items; completed items excluded), and Almanac (weekly insights)
inbox0 queries Almanac directly (signed JWT) for calendar-aware triage: email from someone you are about to meet is boosted in priority
Gopher aggregates the fan-out into one context bundle plus an outstanding-items list, which Weekly synthesizes via Ollama

Infrastructure

Ollama Host 1 — remote Mac Studio at the LAN, never localhost; qwen3.6, gemma4
Ollama Host 2 — RTX A4500; qwen3.6, gemma4
Cloudflare Tunnels - one per public subdomain, routed to docker bridge IPs
Docker Compose - per-app containerization
FastAPI - app framework across all 10 apps