1experience "Immersive Gallery" { // one experience, defined start to finish
2 intent: "Guests move through a responsive gallery space that senses and shapes their emotional journey"
3 spec: "openxp/1.0"
4 version: "1.0"
5 locale: "en-GB"
6 realm: physical
7 accessibility { // needs ship with the experience (R225-R230)
8 navigational { wheelchair: true, step.free: true }
9 perceptual { audio.description: true, warning.photosensitive: false }
10 }
11
12 touchpoints {
13
14 // Sense the space
15 entry: sensor.beacon { zone: "entrance" }
16 bio: sensor.biometric {
17 sensor_type: "heart.rate" // sensor_type: config key (type + processing are reserved)
18 purpose: "Adapt scene pacing to guest excitement in the moment."
19 legal_basis: consent // legal_basis: key (dotted keys not allowed in config)
20 }
21
22 // Shape the space
23 spatial: output.audio { zones: 3 }
24 ceiling: output.led { pixels: 2400 }
25 lights: output.lighting { universe: 1 }
26
27 // Feel the space
28 warmth: perception.warmth { intent: "welcome", source: lights, range: [0.0, 1.0] }
29 wonder: perception.wonder { intent: "awe", source: ceiling, range: [0.0, 1.0] }
30 calm: perception.calm { intent: "reflect", source: spatial, range: [0.0, 1.0] }
31
32 // Guide the space
33 guide: actor.improvise { role: "facilitator", intent: "Improvise within the design policy" }
34
35 // Think with the space
36 curator: agent.deliberative { model: "claude", latency_sla: "5s", fallback: "advisory" }
37 }
38
39 journey "visitor" { // what one guest moves through — the emotional shape of the visit
40 intent: "Guide a single guest through an emotionally-responsive arrival sequence"
41 initial: arrive
42
43 phase "arrival" {
44 arc.phase: "arrival"
45
46 moment "welcome" {
47 perception.targets { warmth { min: 0.3, max: 0.6, ramp: "gentle" } }
48
49 state arrive {
50 on.enter { do: lights.cue("warm_amber_rise") }
51 on entry.detect -> immerse {
52 do: output.scene(name: "welcome_glow")
53 }
54 }
55
56 state immerse { }
57 }
58 }
59 }
60
61 safety { // guardrails the AI can never cross
62 comfort_first {
63 when: "bio.reading > 0.9"
64 ensure: warmth.reading < 0.6
65 response: stop
66 }
67 }
68}