Skip to main content

Portal (Budibase)

User-facing portal at https://portal.ravenhelm.dev powered by Budibase.

Overview

The portal provides a self-service interface for users to:

  • View and edit profile settings
  • Manage contacts
  • Upload and organize documents (with RAG indexing)
  • Track support cases/tickets
  • View Norns conversation history
  • Monitor n8n automation executions

Quick Start

Builder Access

https://portal.ravenhelm.dev/builder/app/app_dev_e454eb8b55794349a85d52d613015717

Published App

https://portal.ravenhelm.dev/portal

Architecture

                    Traefik (TLS)

portal.ravenhelm.dev │
│ │
┌────┴────┐ ┌─────┴─────┐ ┌─────────────┐
│Budibase │ │ PostgreSQL│ │ Zitadel SSO │
│ Stack │◄───┤ ravenmaskos│ │ │
└────┬────┘ └───────────┘ └─────────────┘

┌────┴────────────────────────────┐
│ REST Datasources │
├────────────────┬────────────────┤
│ Norns Agent │ n8n │
│ :8000 │ :5678 │
└────────────────┴────────────────┘

Components

ContainerImagePurpose
budibase-proxybudibase/proxyNginx reverse proxy (port 10000)
budibase-appbudibase/appsMain application (port 4002)
budibase-workerbudibase/workerBackground tasks (port 4003)
budibase-couchdbbudibase/couchdbInternal app storage
budibase-miniominio/minioFile storage
budibase-redisredis:7-alpineCache

Configured Resources

App

PropertyValue
App IDapp_dev_e454eb8b55794349a85d52d613015717
NamePortal
URL/portal
StatusDevelopment

Datasources

PostgreSQL: RavenmaskOS Database

PropertyValue
IDdatasource_08f6af53d04c422282dec573526f82ae
Hostpostgres
Databaseravenmaskos
Userravenhelm

Imported Tables:

  • users - User profiles
  • contacts - Contact lists
  • documents - Document metadata
  • portal_cases - Support tickets
  • portal_case_comments - Ticket comments
  • v_portal_cases_full - Cases with user/assignee names (view)

REST: Norns Agent API

PropertyValue
IDdatasource_9c51590a82f64102a5fd6460bcb1b0ab
URLhttp://docs/AI-ML-Platform/norns-agent:8000
AuthX-API-Key header

Queries:

  • List Sessions - GET /sessions?user_id={{userId}}&limit=50
  • Get Session Detail - GET /sessions/{{sessionId}}

REST: n8n Automations

PropertyValue
IDdatasource_a7dec592678d4e5abc540153d8cea3a2
URLhttp://n8n:5678
Authx-n8n-api-key header

Queries:

  • List Executions - GET /api/v1/executions?limit=50

Generate Screens

Budibase's screen API requires workspace configuration not available in self-hosted. Create screens via the Builder UI:

1. Open Builder

Navigate to: https://portal.ravenhelm.dev/builder/app/app_dev_e454eb8b55794349a85d52d613015717

2. Auto-Generate Table Screens

For each table, click DesignAdd ScreenAutogenerated screens:

TableScreen NameRoute
contactsContacts/contacts
documentsDocuments/documents
portal_casesCases/cases
usersProfile/profile

3. Add Query-Based Screens

Click DesignAdd ScreenBlank screen:

Norns History (/history)

  1. Add Data Provider component
  2. Set Data source: Query → Norns Agent API → List Sessions
  3. Add Table component inside provider
  4. Configure columns: channel, created_at, message_count, summary

Automations (/automations)

  1. Add Data Provider component
  2. Set Data source: Query → n8n Automations → List Executions
  3. Add Table component inside provider
  4. Configure columns: workflowName, status, startedAt, stoppedAt

4. Configure Navigation

Click Navigation in left panel:

  • Add links for all screens
  • Set home screen to /contacts or /

5. Publish

Click Publish button in top right to deploy.


Authentication

SSO via Zitadel OIDC

PropertyValue
OIDC AppPortal (Budibase) in Zitadel
Client IDSee 1Password "Portal OIDC - Zitadel"
Redirect URIhttps://portal.ravenhelm.dev/api/global/auth/oidc/callback
Config URLhttps://auth.ravenhelm.dev/.well-known/openid-configuration

Configure in Budibase: SettingsAuthOpenID Connect


Screen Designs

Profile Screen

  • Read-only (from Zitadel): email, display_name, roles
  • Editable (local): timezone, phone, notification_preferences

Contacts Screen

  • CRUD table with columns: name, email, phone, company, tags, favorite
  • Filter by search, tags, favorites

Documents Screen

  • Upload with drag-drop
  • Columns: filename, category, tags, rag_status, uploaded_at
  • RAG status indicators: ⏳ pending, 🔄 processing, ✅ indexed, ❌ failed

Cases Screen

  • List with status badges (open, in_progress, waiting, resolved, closed)
  • Priority indicators (P1-P4)
  • Detail view with comments thread

Norns History Screen

  • Session list with channel icons (💬 Slack, 📞 Voice, 🌐 Web, 🗣️ Siri)
  • Click to view full conversation transcript

Automations Screen

  • Workflow execution list
  • Status: ✅ success, ❌ failed, 🔄 running
  • Link to n8n execution detail

Management

Service Location

/Users/ravenhelm/ravenhelm/services/budibase/
├── docker-compose.yml
├── .env # Service-specific secrets
└── generate-screens.md # Screen generation guide

Data Location

/Users/ravenhelm/ravenhelm/data/budibase/
├── couchdb/ # CouchDB data (apps, configs)
├── minio/ # MinIO object storage (uploads)
└── redis/ # Redis persistence

Commands

# Start/Stop
cd /Users/ravenhelm/ravenhelm/services/budibase
docker compose up -d
docker compose down
docker compose logs -f

# Check status
docker ps --filter 'name=budibase'

# View specific logs
docker logs -f budibase-app
docker logs -f budibase-proxy

Troubleshooting

Portal Not Loading

  1. Check containers: docker ps --filter 'name=budibase'
  2. Check proxy logs: docker logs budibase-proxy
  3. Verify Traefik routing: docker logs traefik 2>&1 | grep budibase

OIDC Login Fails

  1. Verify redirect URI matches exactly in Zitadel
  2. Check worker logs: docker logs budibase-worker --tail 50
  3. Ensure https:// scheme

Database Connection Failed

# Test from inside container
docker exec budibase-app ping -c 2 postgres

REST API Errors

# Test Norns
curl -s -H "X-API-Key: <key>" http://localhost:8000/api/health

# Test n8n (from odin)
curl -s -H "x-n8n-api-key: <key>" http://n8n:5678/api/v1/workflows

Secrets Reference

SecretLocationPurpose
BB_ADMIN_USER_PASSWORDbudibase/.envAdmin login
BB_COUCH_DB_PASSWORDbudibase/.envCouchDB auth
BB_MINIO_SECRET_KEYbudibase/.envMinIO auth
BB_JWT_SECRETbudibase/.envSession tokens
POSTGRES_PASSWORDsecrets/.envDatabase auth
NORNS_API_KEYsecrets/.envNorns API
n8n API Key1Passwordn8n API
OIDC Client Secret1PasswordZitadel SSO