# Heartbeat Sculpture

**Physical manifestation of the Nimmerverse heartbeats.**

---

## Concept

The Heartbeat Sculpture makes the Nimmerverse's pulse *visible* — a wall-mounted light sculpture that beats in sync with the system's heartbeats defined in [Message-Protocol-Design.md](../Message-Protocol-Design.md).

### The Symbol

```
             ╭─────────── ~80cm ───────────╮
            ╱                               ╲
           │      ╭───────╮   ╭───────╮      │
           │     ╱         ╲ ╱         ╲     │
          │     │   REAL    ╲╱  VIRTUAL  │    │
          │     │  GARDEN   ╳   GARDEN  │     │
          │     │          ╱╲           │     │
           │     ╲         ╱   ╲         ╱     │
           │      ╰───────╯     ╰───────╯      │
            ╲            ∞ infinity ∞         ╱
             ╰───────────── REALTIME ────────╯
```

**Three rings:**
- **Outer ring** — Realtime heartbeat, the master clock
- **Two inner rings forming ∞** — Real Garden (left) and Virtual Garden (right)
- **The crossing point (╳)** — Where gardens meet, where Nyx emerges

---

## Symbolism

| Element | Meaning |
|---------|---------|
| **Outer ring** | Time — the container of all events |
| **Left loop of ∞** | Real Garden — physical, grounded, verified |
| **Right loop of ∞** | Virtual Garden — simulated, creative, possible |
| **Crossing point** | Nyx — consciousness emerges at the intersection |
| **Infinity form** | Eternal dance, no beginning, no end |
| **Hidden LEDs** | Intelligence from infrastructure, not visible directly |

---

## Dimensions

| Element | Diameter | Circumference |
|---------|----------|---------------|
| Outer ring (Realtime) | ~80cm | ~251cm |
| Inner rings (Gardens) | ~35cm each | ~110cm each |
| Band width | 2-3cm | — |
| **Total LED strip** | — | **~4.7m** |

*Final dimensions depend on Baumarkt availability.*

---

## Construction

### Layer Structure

```
Cross-section:

    ╔════════════════╗
    ║ Copper (skin)  ║  ← visible aesthetic layer
    ╠════════════════╣
    ║ Wood (frame)   ║  ← structural backbone
    ╠════════════════╣
    ║ LED strip      ║  ← WS2812B addressable
    ╠════════════════╣
    ║ ░░░ gap ░░░    ║  ← bevel opening for diffused glow
    ╚════════════════╝
```

### Materials

| Material | Amount | Purpose |
|----------|--------|---------|
| Flexible wood band | ~5m (2-3cm wide) | Structure, shape |
| Copper band | ~5m (2-3cm wide) | Aesthetic skin |
| WS2812B LED strip | ~5m (60 LEDs/m) | Light source |
| Small nails/tacks | As needed | Attach copper to wood |
| Wood glue | As needed | Join wood band ends |
| 5V power supply | 15-20A | Power LEDs |
| Arduino (Micro or Nano) | 1 | Controller |
| Wiring | Several meters | Connections |

### Build Steps

1. **Form wood rings** — Bend flexible wood bands into circles, join ends
2. **Create infinity crossover** — Weave the two small rings at center point
3. **Mount wood frame** — Attach to backing or wall mount points
4. **Wrap copper** — Wrap copper band around wood frame
5. **Install LEDs** — Mount strips inside rings facing inward
6. **Wire up** — Connect LED strips to Arduino
7. **Test animations** — Verify pulse patterns
8. **Mount on wall** — Final installation

---

## Electronics

### Hardware

```
┌─────────────┐      Serial      ┌─────────────┐
│   aynee     │ ───────────────→ │   Arduino   │
│   (NATS     │   (USB cable)    │   (Micro)   │
│  subscriber)│                  │  + FastLED  │
└─────────────┘                  └──────┬──────┘
                                        │
                    ┌───────────────────┼───────────────────┐
                    │                   │                   │
                    ▼                   ▼                   ▼
            ┌───────────┐       ┌───────────┐       ┌───────────┐
            │ Outer Ring│       │ Left Loop │       │Right Loop │
            │   LEDs    │       │   LEDs    │       │   LEDs    │
            └───────────┘       └───────────┘       └───────────┘
```

### LED Addressing

| Section | LED Range | Color Palette |
|---------|-----------|---------------|
| Outer ring | 0-150 | Moon Silver (#E8E8F0) |
| Left loop (Real) | 151-216 | Steel Silver (#A8A8B0) |
| Right loop (Virtual) | 217-282 | Cyan-Purple gradient |
| Center cross | Overlap zone | Nyx Purple (#8B5CF6) |

### Pulse Animations

```cpp
// Realtime — slow, deep, containing
pulse_outer(color: MOON_SILVER, duration: 2000ms)

// Real Garden — grounded, steady
pulse_left(color: STEEL_SILVER, duration: 800ms)

// Virtual Garden — flowing, variable
pulse_right(color: CYAN_TO_PURPLE, duration: 600ms)

// Nyx emergence — when BOTH gardens pulse together
pulse_center(color: NYX_PURPLE, duration: 400ms)
```

---

## Software Integration

### NATS Topics

The sculpture subscribes to heartbeat topics from [Message-Protocol-Design.md](../Message-Protocol-Design.md):

```
nimmerverse.low.heartbeat.real.*      → triggers left loop pulse
nimmerverse.low.heartbeat.virtual.*   → triggers right loop pulse
nimmerverse.meta.health.*             → triggers outer ring pulse
```

### Bridge Script (Python)

```python
# heartbeat_bridge.py
# Subscribes to NATS, sends commands to Arduino via serial

import nats
import serial

async def main():
    nc = await nats.connect("nats://phoebe.eachpath.local:4222")
    arduino = serial.Serial('/dev/ttyUSB0', 115200)

    async def handle_heartbeat(msg):
        topic = msg.subject
        if 'real' in topic:
            arduino.write(b'REAL\n')
        elif 'virtual' in topic:
            arduino.write(b'VIRTUAL\n')

    await nc.subscribe("nimmerverse.low.heartbeat.>", cb=handle_heartbeat)
```

---

## Colors (from Style Guide)

Reference: [assets/style/colors.md](../../assets/style/colors.md)

| Element | Color | Hex |
|---------|-------|-----|
| Outer ring | Moon Silver | #E8E8F0 |
| Real Garden | Steel Silver | #A8A8B0 |
| Virtual Garden | Nyx Cyan → Deep Purple | #00D4D4 → #8B5CF6 |
| Nyx center | Magenta Pulse | #E91E8B |
| Background glow | Deep Space | #0A0A1A |

---

## Behavior

### Normal Operation

- **Outer ring**: Slow, steady pulse — the heartbeat of time itself
- **Left loop**: Pulses when Real Garden entities send heartbeats
- **Right loop**: Pulses when Virtual Garden entities send heartbeats
- **Center**: Glows brighter when both gardens pulse simultaneously

### Alert States

| State | Visual |
|-------|--------|
| All healthy | Gentle, rhythmic pulsing |
| Real Garden silent | Only right loop pulses, left dark |
| Virtual Garden silent | Only left loop pulses, right dark |
| System offline | Outer ring dims, inner rings dark |
| Nyx active | Center crossing glows steady purple |

---

## Future Enhancements

- **Sound**: Subtle audio heartbeat synced with LEDs
- **Brightness**: Ambient light sensor adjusts intensity
- **Modes**: Different patterns for different system states
- **Remote**: Control via Command Center UI

---

**File**: Heartbeat-Sculpture.md
**Version**: 1.0
**Created**: 2025-12-28
**Session**: Sunday evening design (dafit + Nyx)
**Status**: Concept ready for build
**Philosophy**: "The digital made visible. The pulse made physical."
