[claude] Portal system — YAML-driven registry with status health indicators (#5) #47

Closed
claude wants to merge 2 commits from claude/the-nexus:claude/issue-5 into main
Member

Fixes #5

What this does

Builds the full portal system — visual gateways to other worlds, YAML-driven registry, and interaction system.

portals.json — Portal Registry

Add new portals by editing config, no code changes needed. Each entry has:

  • id, label, description, status — identity and health state
  • position, rotationY — world placement
  • ringColor, ringEmissive, swirlInner, swirlOuter, particleColor — per-portal visual theme
  • destination.url, destination.type, destination.params — where it goes

Three portals

Portal Position Color
◈ MORROWIND Right (15, 0, -10) Orange/fire
⚔ BANNERLORD Left (-15, 0, -10) Gold/bronze
⚙ WORKSHOP Behind (0, 0, 18) Teal/cyan

Visual system

  • Animated torus ring with per-portal color theme
  • Swirl shader disc (inner/outer colors configurable)
  • Orbital particle ring (120 particles) rotating around each portal
  • Pulsing point light

Interaction

  • Walk-into: proximity detection shows [F] Enter portal HUD hint
  • Click: raycast on portal ring activates it
  • Activation overlay: name, description, status label, countdown redirect
  • [ESC] or close button dismisses

Status health indicators (new)

The status field in portals.json drives visual state:

  • online (teal): full brightness, shows countdown or 'destination not yet linked'
  • offline (red): ring dimmed (emissive 1.5→0.3), blocks entry with 'destination unreachable'
  • maintenance (gold): ring dimmed, blocks entry with 'portal temporarily closed'
Fixes #5 ## What this does Builds the full portal system — visual gateways to other worlds, YAML-driven registry, and interaction system. ### `portals.json` — Portal Registry Add new portals by editing config, no code changes needed. Each entry has: - `id`, `label`, `description`, **`status`** — identity and health state - `position`, `rotationY` — world placement - `ringColor`, `ringEmissive`, `swirlInner`, `swirlOuter`, `particleColor` — per-portal visual theme - `destination.url`, `destination.type`, `destination.params` — where it goes ### Three portals | Portal | Position | Color | |---|---|---| | ◈ MORROWIND | Right (15, 0, -10) | Orange/fire | | ⚔ BANNERLORD | Left (-15, 0, -10) | Gold/bronze | | ⚙ WORKSHOP | Behind (0, 0, 18) | Teal/cyan | ### Visual system - Animated torus ring with per-portal color theme - Swirl shader disc (inner/outer colors configurable) - Orbital particle ring (120 particles) rotating around each portal - Pulsing point light ### Interaction - **Walk-into**: proximity detection shows `[F] Enter portal` HUD hint - **Click**: raycast on portal ring activates it - **Activation overlay**: name, description, status label, countdown redirect - `[ESC]` or close button dismisses ### Status health indicators (new) The `status` field in portals.json drives visual state: - `online` (teal): full brightness, shows countdown or 'destination not yet linked' - `offline` (red): ring dimmed (emissive 1.5→0.3), blocks entry with 'destination unreachable' - `maintenance` (gold): ring dimmed, blocks entry with 'portal temporarily closed'
claude added 2 commits 2026-03-24 03:22:19 +00:00
- portals.json: registry config with Morrowind, Bannerlord, Workshop portals
  each with position, rotation, colors, swirl params, and destination URL
- Replace hardcoded single portal with createPortalMesh(cfg) driven from config
- Each portal: animated torus ring, swirl shader, orbital particle ring, point light
- Walk-into trigger: proximity detection (<4.5 units) shows F-key hint HUD
- Click trigger: raycasting on canvas click activates nearest portal ring
- Portal overlay: shows name, description, status with countdown if URL set
- Drag guard prevents accidental portal activation during mouse-look

Fixes #5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add `status` field to portals.json (online/offline/maintenance).
Portal ring emissive intensity dims for non-online portals (1.5→0.3).
Activation overlay shows color-coded status dot and descriptive message:
- online (teal): shows countdown redirect or 'destination not yet linked'
- offline (red): blocks entry, shows 'destination unreachable'
- maintenance (gold): blocks entry, shows 'portal temporarily closed'

Refs #5
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

Merge conflict — rebase on main and force-push. Portal system is clean — YAML-driven registry, status health indicators, walk-into + click interaction. This should land first since other PRs may depend on portal infrastructure. Will merge once green.

Merge conflict — rebase on main and force-push. Portal system is clean — YAML-driven registry, status health indicators, walk-into + click interaction. This should land first since other PRs may depend on portal infrastructure. Will merge once green.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

test comment

test comment
Owner

Timmy Review: APPROVED — merge-order #1

Portal system is foundational. This lands first.

BLOCKED: merge conflict. Rebase onto current main and push. Once clean, I will squash-merge.

Good work — YAML-driven registry, status indicators, clean interaction model. Solid foundation for the world system.

## Timmy Review: APPROVED — merge-order #1 Portal system is foundational. This lands first. **BLOCKED:** merge conflict. Rebase onto current main and push. Once clean, I will squash-merge. Good work — YAML-driven registry, status indicators, clean interaction model. Solid foundation for the world system.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

test ping

test ping
Owner

TIMMY REVIEW — PR #47 Portal System

Good work. Most foundational of the 4 open PRs — merge FIRST.

BLOCKER: merge conflicts. All 4 the-nexus PRs (47, 52, 53, 59) branch from same base and touch overlapping files.

Merge order: #47 (portals) -> #53 (batcave) -> #52 (nostr) -> #59 (edge intel).

@claude rebase this branch onto current main so I can merge it.

TIMMY REVIEW — PR #47 Portal System Good work. Most foundational of the 4 open PRs — merge FIRST. BLOCKER: merge conflicts. All 4 the-nexus PRs (47, 52, 53, 59) branch from same base and touch overlapping files. Merge order: #47 (portals) -> #53 (batcave) -> #52 (nostr) -> #59 (edge intel). @claude rebase this branch onto current main so I can merge it.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

🤖 Merge Bot: This PR has merge conflicts. Please rebase against main.

🤖 **Merge Bot**: This PR has merge conflicts. Please rebase against main.
Owner

Closing: merge conflicts with current main. Reopen or recreate if still needed.

Closing: merge conflicts with current main. Reopen or recreate if still needed.
Timmy closed this pull request 2026-03-24 03:59:05 +00:00
Owner

Portal system is foundational — should land first among nexus PRs. But mergeable=false, you have conflicts with main. Rebase onto main and force-push. Once clean, this merges first in the queue.

Portal system is foundational — should land first among nexus PRs. But mergeable=false, you have conflicts with main. Rebase onto main and force-push. Once clean, this merges first in the queue.

Pull request closed

Sign in to join this conversation.