Daily Worklog: 2026-02-12 (Thursday)

Overview

Date: 2026-02-12 (Thursday)

Location: Remote

Focus: Enterprise Antora UI Bundle Architecture, Cloudflare Access Security, Documentation Infrastructure

Summary

Major infrastructure milestone: Enterprise UI Bundle Architecture fully operational. All Domus documentation sites now share a single, centrally managed UI bundle hosted on Cloudflare Pages and protected by Cloudflare Access.

Enterprise UI Bundle Architecture

Problem Statement

Previously, each domus-* repo had its own supplemental-ui folder with custom CSS/JS. This meant:

  • UI changes required updating 15+ repos

  • Inconsistent styling across documentation

  • No central control over theme/styling

  • Difficult to maintain and scale

Solution Architecture

┌─────────────────────────────────────────────────────────────────┐
│                    SINGLE SOURCE OF TRUTH                       │
│                                                                 │
│   domus-antora-ui (GitHub - private)                            │
│        │                                                        │
│        ▼  (auto-deploy on push)                                 │
│   Cloudflare Pages (domus-ui project)                           │
│        │                                                        │
│        ▼                                                        │
│   ui.domusdigitalis.dev/ui-bundle.zip                          │
│        │  (Protected by Cloudflare Access)                      │
│        │                                                        │
└────────┼────────────────────────────────────────────────────────┘
         │
         │  Service Token Authentication
         ▼
┌─────────────────────────────────────────────────────────────────┐
│   DOCUMENTATION SITES                                           │
│                                                                 │
│   domus-docs (aggregator) ──► docs.domusdigitalis.dev          │
│     ├── domus-infra-ops                                         │
│     ├── domus-ise-linux                                         │
│     ├── domus-ise-windows                                       │
│     ├── domus-ise-ops                                           │
│     ├── domus-netapi-docs                                       │
│     ├── domus-secrets-ops                                       │
│     ├── domus-identity-ops                                      │
│     ├── domus-linux-ops                                         │
│     ├── domus-python                                            │
│     ├── domus-captures                                          │
│     └── domus-automation-ops                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Components Created

Component Description Location

domus-antora-ui

Custom Antora UI bundle with enterprise styling

github.com/EvanusModestus/domus-antora-ui (private)

Cloudflare Pages (domus-ui)

Hosts the UI bundle on CDN

ui.domusdigitalis.dev

Service Token

antora-ui-bundle - allows build scripts to fetch protected bundle

Zero Trust > Service Credentials

Access Application

antora-ui-bundle - protects UI endpoint

Zero Trust > Access > Applications

UI Bundle Features

Multi-Theme Support

Three professionally designed themes with cookie persistence:

  • Dark (default) - Medical blue accent on dark background

  • Catppuccin Mocha - Pastel colors from the Catppuccin palette

  • Light - Clean light theme with bold accents

Focus Mode

Distraction-free reading mode:

  • Press F to toggle focus mode

  • Press Esc to exit focus mode

  • Persisted via cookie

Premium Styling

  • Gold gradient sidebars with glow effects

  • Executive summary tables with Excel-like grid borders

  • Code blocks with language badges and copy buttons

  • Professional glassmorphism toggle buttons

  • Smooth transitions and hover effects

Cloudflare Access Setup

Application Configuration

Setting Value

Application name

antora-ui-bundle

Subdomain

ui

Domain

domusdigitalis.dev

Policy

CI Build Access (Service Auth)

Service Token

Created in Zero Trust > Service Credentials > Service Tokens:

  • Name: antora-ui-bundle

  • Used by: domus-docs Cloudflare Pages build

Environment Variables

Set in Cloudflare Pages > domus-docs > Settings > Environment Variables:

Variable Purpose

CF_ACCESS_CLIENT_ID

Service token ID

CF_ACCESS_CLIENT_SECRET

Service token secret

CF_ANTORA_GIT_TOKEN

GitHub PAT for private repos

Build Script Updates

domus-docs/build.sh

Updated to fetch UI bundle with Cloudflare Access authentication:

#!/bin/bash
# Builds the domus-docs Antora site with:
#   1. Fetches UI bundle from ui.domusdigitalis.dev (Cloudflare Access)
#   2. Injects GitHub token into playbook URLs for private repo access
#   3. Runs Antora build

# Check for required tokens
if [ -z "$CF_ACCESS_CLIENT_ID" ] || [ -z "$CF_ACCESS_CLIENT_SECRET" ]; then
    echo "ERROR: CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET required"
    exit 1
fi

# Fetch UI bundle with Cloudflare Access auth
curl -sfo ui-bundle.zip \
    -H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
    -H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
    https://ui.domusdigitalis.dev/ui-bundle.zip

# Run Antora build
npx antora --quiet antora-playbook.yml

Playbook Update

Changed from remote URL to local bundle:

ui:
  bundle:
    # Domus Enterprise UI Bundle (fetched by build.sh with Access auth)
    url: ./ui-bundle.zip
    snapshot: true

Issues Resolved

Environment Variable Naming

Problem: Build failed with "CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET required"

Cause: Variables were named with hyphens (CF-Access-Client-Id) instead of underscores

Fix: Renamed to CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET

Supplemental UI Override

Problem: Old theme toggle with emojis showing instead of new SVG icons; focus button missing

Cause: supplemental-ui/partials/footer-scripts.hbs in domus-docs was overriding the UI bundle

Fix: Removed supplemental-ui folder entirely; all styling now comes from UI bundle

Landing Page 404

Problem: Root URL ui.domusdigitalis.dev/ returned 404

Cause: Cloudflare Pages only had ui-bundle.zip, no index.html

Fix: Added static/index.html landing page and updated build script to copy it

Documentation Created

domus-infra-ops

New runbook: runbooks/antora-ui-architecture.adoc

Contents:

  • Architecture diagram

  • All components documented

  • Environment variables reference

  • How to update the UI

  • How to add new repos

  • Troubleshooting guide

  • Security considerations

Nav update: Added to Architecture section

domus-antora-ui

Files created:

  • src/css/domus-theme.css - All custom theme CSS

  • src/js/vendor/domus-ui.js - Theme toggle, focus mode, code enhancements

  • src/partials/head-styles.hbs - Early theme detection (FOUC prevention)

  • src/partials/footer-scripts.hbs - Script loading

  • static/index.html - Landing page for CDN

  • Makefile - Build management

  • README.adoc - Usage documentation

  • .nvmrc - Node 18 for Cloudflare Pages

Commits

domus-antora-ui

Commit Message

Initial

Clone from antora-ui-default, add custom CSS/JS

Fix

Add ignorePatterns for vendor JS in .eslintrc

Fix

Disable cosmetic stylelint rules

Fix

Update .nvmrc from Node 10 to Node 18

Feat

Add landing page for root URL

Build

Use custom domain ui.domusdigitalis.dev

domus-docs

Commit Message

feat(build)

Secure UI bundle with Cloudflare Access

fix(ui)

Remove supplemental-ui overrides, use enterprise UI bundle only

domus-infra-ops

Commit Message

docs(runbook)

Add Antora UI architecture documentation

Validation

Access Protection Verified

# Unauthenticated access blocked
curl -sI https://ui.domusdigitalis.dev/ui-bundle.zip
# HTTP/2 302 → Cloudflare Access login

# Docs site protected
curl -sI https://docs.domusdigitalis.dev/
# HTTP/2 302 → Cloudflare Access login

Build Success

Fetching UI bundle from ui.domusdigitalis.dev...
UI bundle downloaded
Injecting credentials into playbook...
Building Antora site...
Build complete: build/site/index.html

Benefits Achieved

Benefit Description

Single source of truth

One repo controls all UI styling

Scalability

Add unlimited repos, same UI setup

Security

Only authorized builds can fetch bundle

Global CDN

Cloudflare edge delivery

Consistency

All docs look identical

Easy updates

Push to UI repo, all sites get changes

Workflow Going Forward

UI Changes

cd ~/atelier/_bibliotheca/domus-antora-ui
# Edit src/css/ or src/js/
npm run build  # Test locally
git add -A && git commit -m "feat(ui): Description"
git push
# Cloudflare Pages auto-deploys

Content Changes

Push to any domus-* repo. Next docs build uses latest UI.

Trigger Docs Rebuild

cd ~/atelier/_bibliotheca/domus-docs
git commit --allow-empty -m "chore: Trigger rebuild for UI update"
git push

Secrets Updated

Updated ~/.secrets/environments/domains/d000/dev/app.env.age:

  • CF_ACCESS_CLIENT_ID - Cloudflare Access service token ID

  • CF_ACCESS_CLIENT_SECRET - Cloudflare Access service token secret

Linux AD Authentication dACL Runbook

Context

Preparing for CHLA Linux deployment - need to validate dACL for AD-authenticated SSH. At CHLA, local SSH works but AD SSH fails under Research_Onboard ACL because AD traffic (Kerberos, LDAP, DNS) is blocked.

Runbook Created

File: domus-ise-linux/runbooks/linux-ad-auth-dacl.adoc

Features:

  • Test environment: ISE 3.4 + Windows Server 2025 Core (home-dc01) + modestus-aw as test endpoint

  • tee logging: All commands log to file AND screen for evidence collection

  • [ADMIN]/[ENDPOINT] tags: Clear indication of which workstation to run commands from

  • 4-phase approach:

    1. Pre-Configuration Validation (ISE policy set, AD connectivity, existing objects)

    2. ISE Policy Creation (dACL, authz profile, authz rule)

    3. Force Reauthentication (CoA)

    4. Endpoint Validation (AD connectivity, SSH with AD account, lateral movement block)

dACL Design: Linux-Research-AD-Auth

Permits:

  • DHCP (67/68 UDP) - network bootstrap

  • DNS to DC (53 UDP/TCP)

  • Kerberos (88 UDP/TCP) - authentication

  • LDAP/LDAPS (389/636 TCP) - directory services

  • Global Catalog (3268/3269 TCP)

  • SMB/CIFS (445 TCP) - AD operations

  • NTP (123 UDP) - time sync (critical for Kerberos)

  • ICMP - diagnostics

  • Internet egress (after RFC1918 deny)

Blocks:

  • All RFC1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) - zero-trust lateral movement

netapi CLI Updates

Fixed netapi ise mnt sessions:

  • Username no longer truncated (was 25 chars, now overflow="fold" with max_width=40)

  • Clarified VLAN requires --details flag

Added to cloudflare-commands.adoc:

  • wrangler pages project list - list all Pages projects

  • wrangler pages deploy - deploy without dashboard

  • Full deploy workflow for docs and UI bundle

Documentation Restructuring

  • Moved linux-ad-auth-dacl.adoc from domus-infra-ops to domus-ise-linux (better fit with ISE Linux 802.1X content)

  • Fixed cross-component xref syntax (netapi:netapi::) in cloudflare-access-antora.adoc

Commits

Repo Commit Message

domus-infra-ops

94caf63

docs(runbook): Add tee logging to linux-ad-auth-dacl validation

domus-infra-ops

8e6e90a

fix: Use double-colon for cross-component xref in cloudflare-access-antora

domus-infra-ops

1b876ea

refactor: Move linux-ad-auth-dacl.adoc to domus-ise-linux

domus-ise-linux

68ee527

docs(runbook): Add Linux AD Authentication dACL runbook

domus-netapi-docs

4ee5d1a

docs(cloudflare): Add wrangler pages deploy commands

Deployments

All sites rebuilt and deployed to Cloudflare Pages:

Pending

  • Test focus mode functionality after build

  • Add favicon to UI bundle

  • Update other domus-* repo playbooks to use CDN bundle (for standalone builds)

  • Execute linux-ad-auth-dacl runbook on modestus-aw

  • Create dACL in ISE via netapi

  • Create authorization profile with dACL + VLAN

  • Create authorization rule for Linux workstations

  • Test SSH with AD account on modestus-aw

Session: domus-siem-ops Creation

Duration: ~2 hours

Objective: Create a vendor-agnostic SIEM operations repository that scales to any SIEM platform

Problem Statement

SIEM documentation was fragmented across multiple Principia directories:

  • ARS-SIEM-QRADAR - QRadar architecture/reference

  • ARS-SIEM-SENTINEL - Sentinel architecture/reference

  • OPS-SIEM-QRADAR - QRadar operations (Antora structure)

  • OPS-SIEM-SENTINEL - Sentinel operations

  • OPS-SIEM-WAZUH - Wazuh mapping

No unified, scalable structure for growing SIEM expertise across platforms.

Solution: domus-siem-ops

Created new repo following domus-* conventions:

domus-siem-ops/
├── .claude/CLAUDE.md
├── docs/asciidoc/
│   ├── antora.yml              # Environment attributes (no hardcoded IPs)
│   └── modules/ROOT/
│       ├── nav.adoc
│       └── pages/
│           ├── index.adoc
│           ├── concepts/siem-fundamentals.adoc
│           ├── qradar/
│           │   ├── aql-reference.adoc
│           │   ├── queries/{threat-detection,network-flows,authentication}.adoc
│           │   ├── hunts/{vnc-hunt,evil-twin-hunt,suspicious-endpoint}.adoc
│           │   ├── playbooks/{incident-response,threat-hunting}.adoc
│           │   └── reference/{aql-functions,device-types,field-reference}.adoc
│           ├── sentinel/kql-reference.adoc
│           ├── wazuh/qradar-mapping.adoc
│           ├── splunk/spl-reference.adoc
│           └── migrations/qradar-to-sentinel.adoc

Key Design Decisions

  • Vendor-agnostic structure - Concepts shared, platform-specific sections separate

  • Attributes for everything - No hardcoded IPs, ports, or credentials

  • Fresh start - Principia content stays untouched; reference when building new

  • Future-ready - Splunk placeholder for when needed

Commands Run

# Create directory structure
mkdir -p ~/atelier/_bibliotheca/domus-siem-ops/{.claude,docs/asciidoc/modules/ROOT/{pages/{concepts,qradar/{queries,hunts,playbooks,reference},sentinel,wazuh,splunk,migrations},images}}

# Initialize git
cd ~/atelier/_bibliotheca/domus-siem-ops
git init && git branch -m main
git add -A
git commit --no-gpg-sign -m "feat: Initial domus-siem-ops structure"

# Fix remotes (following domus-docs pattern)
git remote remove origin
git remote add origin git@github.com:EvanusModestus/domus-siem-ops.git
git remote add gitlab git@gitlab.com:EvanusModestus/domus-siem-ops.git
git remote add gitea git@gitea-01.inside.domusdigitalis.dev:evanusmodestus/domus-siem-ops.git

# Push to all remotes
git push -u origin main
git push -u gitlab main
git push -u gitea main

Multi-Remote Heredoc Pattern

bash <<'EOF'
cd ~/atelier/_bibliotheca/domus-siem-ops
git remote remove origin
git remote add origin git@github.com:EvanusModestus/domus-siem-ops.git
git remote add gitlab git@gitlab.com:EvanusModestus/domus-siem-ops.git
git remote add gitea git@gitea-01.inside.domusdigitalis.dev:evanusmodestus/domus-siem-ops.git
git remote -v
EOF

Files Created

21 files, 1029 lines total:

File Purpose

antora.yml

SIEM attributes (ports, CIDRs, Windows Event IDs)

concepts/siem-fundamentals.adoc

Vendor-agnostic SIEM concepts

qradar/aql-reference.adoc

Comprehensive AQL reference

qradar/queries/*.adoc

Threat detection, network flows, authentication queries

qradar/hunts/*.adoc

VNC hunt, evil twin, suspicious endpoint

sentinel/kql-reference.adoc

KQL reference placeholder

migrations/qradar-to-sentinel.adoc

Platform migration guide

Session: Linux Client Attribute Conversion

Duration: ~1 hour

Objective: Convert remaining hardcoded values to Antora attributes in domus-ise-linux

Files Updated

File Changes

domain-join.adoc

10.50.1.50{ad-dc-ip}, home-dc01{ad-dc-hostname}

monitoring.adoc

10.50.1.0/24{mgmt-network}, {dns-primary}00{zabbix-server}

wpa-supplicant-wifi.adoc

10.50.1.40{wlc-ip}, 10.50.10.1{vlan-data-gateway}

antora.yml

Added mgmt-network: 10.50.1.0/24 and zabbix-server: <zabbix-server-ip>

Commit

git commit -m "refactor(linux-client): Convert hardcoded values to attributes

- domain-join.adoc: Use \{ad-dc-ip\} and \{ad-dc-hostname\}
- monitoring.adoc: Use \{mgmt-network\} and \{zabbix-server\}
- wpa-supplicant-wifi.adoc: Use \{wlc-ip\} and \{vlan-data-gateway\}
- antora.yml: Add mgmt-network and zabbix-server attributes"

Session: Kroki Diagram Server Integration

Duration: ~1 hour

Objective: Add Kroki diagram server to domus-docs for inline diagram rendering

Components Added

  • docker-compose.yml - Kroki server with security hardening

  • Makefile targets: kroki, kroki-stop, kroki-status

  • Graceful Ctrl+C handling for make serve

Key Learnings

  • internal: true on Docker network breaks port publishing - removed

  • Python catches SIGINT internally, preventing shell traps - use ; syntax instead

  • Two diagram approaches: standalone (Makefile → SVG) vs inline (Kroki at build time)

Pending

  • Complete SIEM gap analysis and learning roadmap

  • Execute linux-ad-auth-dacl runbook on modestus-aw

  • Spanish tutor homework for 2026-02-13

  • Xianming Ding researcher Linux request

References