PSEUDOCORP ENTERPRISE WHITEPAPER v0.9.1-beta

A wholly serious document about a fake company running a real homelab

PUBLIC DIRECTORY COPY // SIP & PBX REQUIRE LAN OR TAILSCALE

Hyper-Strategic Unified Communications & Agentic Mesh Platform

PSEUDOCORP delivers synergistic voice-to-code orchestration across a invite-only yggdrasil LAN overlay. This whitepaper aligns stakeholders on our paradigm-shifting SIP fabric, Docker-native agent runway, and executive secretary failover — with actual ports, IPs, and dialplan trees because buzzwords alone do not register Yealink phones.

"We don't just answer calls. We productise silence into Cursor jobs." — Hermes, Master Assistant, ext 111

1. Executive summary (for the board slide deck)

2. Network topology (actual LAN + overlay)

Real IPs from yggdrasil inventory. PSEUDOCORP traffic stays off the public internet.

flowchart TB
  subgraph WAN["Public internet (SIP blocked)"]
    CLOUD[Cloudflare / Linode VPSes]
  end
  subgraph TS["Tailscale overlay"]
    CELES_TS["CELES 100.97.254.30"]
    BMO_TS["BMO Smootin.smoot.fun subnet router"]
  end
  subgraph LAN["yggdrasil LAN 10.13.37.0/24"]
    GW["OPNsense 10.13.37.1"]
    DNS["Pi-hole 10.13.37.10"]
    CELES["CELES Pi5 10.13.37.37\nPBX + nginx + agents"]
    PHONE["Yealink ext100 10.13.37.15"]
    JF["ZealTower Jellyfin 10.13.37.5:8096"]
    NAS["LAIN NAS 10.13.37.11"]
    VEC["VECTOR scribe 10.13.37.60"]
  end
  GW --> DNS
  DNS --> CELES
  DNS --> JF
  DNS --> NAS
  PHONE -->|SIP UDP 5060| CELES
  CELES -->|HTTP scribe| VEC
  BMO_TS -->|SIP UDP 5060| CELES_TS
  CELES_TS --- CELES
  CLOUD -.->|no SIP| CELES
      

3. VoIP human extension failover (dialplan truth)

25-second ring timeout per hop, then secretary assistant with corporate memo pipeline.

flowchart LR
  subgraph ADAY["aday human lines"]
    D100["Dial 100 office"]
    D110["Dial 110 mobile"]
    D100 --> R100["Ring PJSIP/100"]
    R100 -->|no answer| R110a["Ring PJSIP/110"]
    R110a -->|no answer| SEC_A["aday-secretary IVR"]
    D110 --> R110["Ring PJSIP/110"]
    R110 -->|no answer| R100b["Ring PJSIP/100"]
    R100b -->|no answer| SEC_A
  end
  subgraph BMO["BMO human lines"]
    D101["Dial 101 desk"]
    D102["Dial 102 mobile"]
    D101 --> R101["Ring PJSIP/101"]
    R101 -->|no answer| R102a["Ring PJSIP/102"]
    R102a -->|no answer| SEC_B["bmo-secretary IVR"]
    D102 --> R102["Ring PJSIP/102"]
    R102 -->|no answer| R101b["Ring PJSIP/101"]
    R101b -->|no answer| SEC_B
  end
      
ExtRoleSIP registrarRTP
100aday office Yealinkpseudocorp.yggdrasil.aday.net.au (or pseudocorp.aday.net.au, 10.13.37.37)UDP 10000–10100
110aday mobileTailscale 100.97.254.30 when roamingsame
101/102BMO desk/mobileTailscale onlysame
111Hermes IVRdialplan virtual
117Composer voice agentdialplan virtual
112–115Grok live bridgesSIP localhost 5160–516440115+

4. Agent & scribe pipeline (voice → action)

sequenceDiagram
  participant H as Human phone
  participant A as Asterisk CELES
  participant V as VECTOR 10.13.37.60
  participant P as pbx-api :9101
  participant C as Cursor / Grok
  participant W as Workspace www + agent feeds
  H->>A: SIP call ext 111 or 117
  A->>H: IVR menu / beep
  H->>A: WAV to /opt/voip/recordings
  A->>P: hermes-queue / composer-reply
  P->>V: POST /hermes/scribe
  V-->>P: transcript + summary
  P->>C: async agent job
  C->>W: files, inbox JSON, bot-board
      

Hermes menu keys: 1 note · 2 spoken Q&A · 6 cross-executive memo · 0 memory reset (per-user isolation).

5. CELES Docker estate (live containers)

flowchart TB
  subgraph CELES_HOST["CELES 10.13.37.37 host"]
    NG["celes-nginx-1\npseudocorp + celes vhosts"]
    AST["celes-asterisk-1\nandrius/asterisk:22 host net"]
    HER["celes-hermes-1\nhermes-agent"]
    OW["celes-openwebui-1"]
    PT["celes-portainer-1"]
    GU["celes-guacamole stack"]
    PG["celes-postgres-1"]
  end
  NG -->|static /var/www/pseudocorp| WEB[pseudocorp site]
  NG -->|proxy /pbx/api| API[pbx-api systemd :9101]
  AST -->|System curl| API
  API --> HER
      

Asterisk uses network_mode: host — SIP UDP 5060 bound on CELES directly. Grok bridges run as systemd units celes-grok-voice@{112-115}, not in the Asterisk container.

6. Website & workspace sandboxes

flowchart LR
  subgraph WEBROOT["/var/www/pseudocorp"]
    IDX[index.html]
    WP[whitepaper.html]
    ST[call-stats.html]
    SB["/sandbox/aday|bmo|shared/"]
    AG[agents feeds]
    MAP[site-map.json]
  end
  subgraph WS["/opt/voip/workspaces"]
    O100[office-100/www]
    B101[bmo-101/www]
    SH[_shared/www]
  end
  NGINX[nginx alias + autoindex] --> SB
  WS --> SB
  WS --> AG
      

Executives vibe-code HTML/JS in workspace www/ folders. Secretary memos land in www/inbox/*.json and regenerate agent feeds via pbx-regenerate-web.sh.

7. Technical appendix — specifications

LayerSpec
SIP transportUDP 5060, PJSIP, G.711 ulaw/alaw, direct_media=no
RTPUDP 10000–10100 (phones), 40115+ (Grok bridges)
PBX APIPython http.server :9101 — hermes-reply, composer-reply, memory-reset
Scribe GPUVECTOR @ 10.13.37.60:8090/hermes/scribe
Recordings/opt/voip/recordings → nginx /pbx/recordings/ (auth)
Workspaces/opt/voip/workspaces/{office-100,mobile-110,bmo-101,hermes-111,composer-117,grok-NNN,_shared}
TLS sitepseudocorp.aday.net.au / pseudocorp.yggdrasil.aday.net.au — Let's Encrypt on CELES (intranet)
Memory isolationpbx-reset-memory.sh — callers cannot reset other exec workspaces

8. Forward-looking synergies (placeholder OKRs)

END OF WHITEPAPER — go dial 111 press 9 for help