@514sid/signagekit 0.0.0-stage → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +44 -0
  3. package/README.md +102 -2
  4. package/bin/signagekit.js +4 -0
  5. package/dist/chunks/chart-DT-Y4YWA.js +2 -0
  6. package/dist/chunks/empty--6iNLsra.js +2 -0
  7. package/dist/chunks/icon-paths-Dl0Rqja7.js +2 -0
  8. package/dist/chunks/lists-DYyvtVni.js +2 -0
  9. package/dist/chunks/measures-_ZIjSN7n.js +2 -0
  10. package/dist/chunks/media-DI-zWZSx.js +3 -0
  11. package/dist/chunks/qr-size-Dq23do6_.js +2 -0
  12. package/dist/chunks/ready-DI3QO8E5.js +2 -0
  13. package/dist/chunks/share-CtG_q4RM.js +2 -0
  14. package/dist/chunks/stat-DIAOyDND.js +2 -0
  15. package/dist/chunks/time-sq9LV8dr.js +2 -0
  16. package/dist/cli.js +10 -0
  17. package/dist/index.js +3 -0
  18. package/dist/style.css +2 -0
  19. package/dist/types/alert.d.ts +20 -0
  20. package/dist/types/binds.d.ts +6 -0
  21. package/dist/types/chart.d.ts +16 -0
  22. package/dist/types/check.d.ts +31 -0
  23. package/dist/types/checks.d.ts +30 -0
  24. package/dist/types/colors.d.ts +18 -0
  25. package/dist/types/components.d.ts +13 -0
  26. package/dist/types/cycle-fit.d.ts +6 -0
  27. package/dist/types/data.d.ts +19 -0
  28. package/dist/types/empty.d.ts +6 -0
  29. package/dist/types/fit.d.ts +3 -0
  30. package/dist/types/flow.d.ts +7 -0
  31. package/dist/types/icon-paths.d.ts +2 -0
  32. package/dist/types/icon.d.ts +7 -0
  33. package/dist/types/icons.d.ts +3 -0
  34. package/dist/types/index.d.ts +20 -0
  35. package/dist/types/lists.d.ts +28 -0
  36. package/dist/types/measure.d.ts +4 -0
  37. package/dist/types/measures.d.ts +22 -0
  38. package/dist/types/media.d.ts +15 -0
  39. package/dist/types/mount.d.ts +45 -0
  40. package/dist/types/parse.d.ts +11 -0
  41. package/dist/types/qr-size.d.ts +2 -0
  42. package/dist/types/ready.d.ts +3 -0
  43. package/dist/types/share.d.ts +33 -0
  44. package/dist/types/sizes.d.ts +15 -0
  45. package/dist/types/specs.d.ts +7 -0
  46. package/dist/types/stat.d.ts +38 -0
  47. package/dist/types/table-fit.d.ts +8 -0
  48. package/dist/types/table.d.ts +11 -0
  49. package/dist/types/time.d.ts +15 -0
  50. package/dist/types/trend-fit.d.ts +14 -0
  51. package/dist/types/type-scale.d.ts +10 -0
  52. package/dist/types/types.d.ts +271 -0
  53. package/dist/types/validate-layout.d.ts +2 -0
  54. package/dist/types/validate.d.ts +7 -0
  55. package/dist/types/version.d.ts +24 -0
  56. package/dist/types/views.d.ts +29 -0
  57. package/docs/api.md +106 -0
  58. package/docs/assistants.md +55 -0
  59. package/docs/format.md +183 -0
  60. package/docs/getting-started.md +77 -0
  61. package/docs/preview.md +84 -0
  62. package/examples/clinic-queue/data.json +17 -0
  63. package/examples/clinic-queue/layout.yml +43 -0
  64. package/examples/fire-alarm/data.yml +23 -0
  65. package/examples/fire-alarm/layout.yml +30 -0
  66. package/examples/gym-classes/data.yml +17 -0
  67. package/examples/gym-classes/layout.yml +47 -0
  68. package/examples/hotel-lobby/data.yml +2 -0
  69. package/examples/hotel-lobby/layout.yml +29 -0
  70. package/examples/lunch/data.yml +16 -0
  71. package/examples/lunch/layout.yml +43 -0
  72. package/examples/meeting-room/data.json +19 -0
  73. package/examples/meeting-room/layout.json +107 -0
  74. package/examples/noc-wall/data.yml +18 -0
  75. package/examples/noc-wall/layout.yml +63 -0
  76. package/examples/oee-line/data.yml +25 -0
  77. package/examples/oee-line/layout.yml +55 -0
  78. package/examples/office-air/data.yml +25 -0
  79. package/examples/office-air/layout.yml +71 -0
  80. package/examples/sales-today/data.json +28 -0
  81. package/examples/sales-today/layout.json +62 -0
  82. package/examples/snow-closure/data.yml +28 -0
  83. package/examples/snow-closure/layout.json +35 -0
  84. package/examples/station-departures/data.json +24 -0
  85. package/examples/station-departures/layout.json +34 -0
  86. package/examples/store-promo/data.yml +18 -0
  87. package/examples/store-promo/layout.yml +54 -0
  88. package/examples/storm-banner/data.json +20 -0
  89. package/examples/storm-banner/layout.json +33 -0
  90. package/examples/trading-floor/data.json +23 -0
  91. package/examples/trading-floor/layout.json +65 -0
  92. package/examples/warehouse/data.json +20 -0
  93. package/examples/warehouse/layout.json +50 -0
  94. package/package.json +100 -4
  95. package/schema.json +962 -0
@@ -0,0 +1,23 @@
1
+ hours:
2
+ - [Maternity, '14:00 - 20:00']
3
+ - [Surgical, '15:00 - 19:00']
4
+ - [Paediatrics, '10:00 - 20:00']
5
+ - [Cardiology, '14:00 - 18:00']
6
+ notices:
7
+ - Two visitors per bed
8
+ - Use the hand gel at every ward door
9
+ - Parking validation at Reception
10
+
11
+ alert:
12
+ level: danger
13
+ icon: fire
14
+ title: Fire alarm
15
+ message: 'Fire reported on Level 2, East Wing. Leave the building by the nearest exit.'
16
+ steps:
17
+ - Do not use the lifts
18
+ - Follow the green exit signs
19
+ - Staff will guide patients and visitors
20
+ - Gather in Car Park B, away from the entrance
21
+ footer: 'Do not re-enter until a fire officer gives the all clear. Updated 14:32'
22
+ mode: takeover
23
+ until: '2026-11-15T00:00:00Z'
@@ -0,0 +1,30 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # St. Mary's Hospital main entrance: visitor information, with a fire alarm
3
+ # takeover bound to /alert. Clear the alert by setting /alert to null.
4
+ colors:
5
+ scheme: light
6
+ accent: '#0b5cad'
7
+
8
+ layout:
9
+ design: landscape
10
+ flow:
11
+ - { zone: head, span: 9, height: 170px }
12
+ - { zone: clock, span: 3, height: 170px }
13
+ - { zone: hours, span: 7, height: 2 }
14
+ - { zone: info, span: 5, height: 2 }
15
+
16
+ zones:
17
+ head: { type: heading, text: Welcome to St. Mary's }
18
+ clock: { type: clock, surface: raised, show_date: true }
19
+ hours:
20
+ type: table
21
+ title: Visiting hours
22
+ columns: [Ward, Hours]
23
+ align: [start, end]
24
+ rows: { bind: /hours }
25
+ info:
26
+ type: list
27
+ title: Visitor notices
28
+ items: { bind: /notices }
29
+
30
+ alert: { bind: /alert }
@@ -0,0 +1,17 @@
1
+ # Leeds is on GMT in November, so Z matches local time.
2
+ next_at: '2026-11-14T14:00:00Z'
3
+ next_label: Spin Power, Studio 1
4
+ spots_left: 3
5
+ spots_label: Book in the app
6
+ classes:
7
+ - ['14:00', Spin Power, Studio 1, Dani, 3 left]
8
+ - ['14:30', Yoga Flow, Studio 2, Mei, 8 left]
9
+ - ['15:15', HIIT 45, Studio 1, Marcus, 11 left]
10
+ - ['16:00', Pilates Core, Studio 2, Sofia, Full]
11
+ - ['17:00', Boxfit, Studio 3, Jayden, 6 left]
12
+ - ['17:30', Spin Endurance, Studio 1, Dani, 9 left]
13
+ - ['18:00', Stretch and Restore, Studio 2, Mei, 14 left]
14
+ messages:
15
+ - Towels at the front desk
16
+ - Late cancellations after 2 hours are charged
17
+ - Sauna closed for cleaning 15:00 to 15:30
@@ -0,0 +1,47 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # Pulse Fitness Leeds, reception wall. Landscape, dark with a hot accent.
3
+ colors:
4
+ scheme: dark
5
+ accent: '#f97316'
6
+
7
+ layout:
8
+ design: landscape
9
+ flow:
10
+ - { zone: head, span: 8, height: 170px }
11
+ - { zone: clock, span: 4, height: 170px }
12
+ - { zone: classes, span: 8, height: 4 }
13
+ - { zone: next, span: 4, height: 4 }
14
+ - { zone: ticker, height: 110px }
15
+
16
+ zones:
17
+ head: { type: heading, text: Classes today }
18
+ clock: { type: clock, surface: raised, hour12: false }
19
+ classes:
20
+ type: table
21
+ columns: [Time, Class, Studio, Coach, Spots]
22
+ align: [start, start, start, start, end]
23
+ widths: [1.1, 2.6, 1.4, 1.8, 1.3]
24
+ page_rows: 7
25
+ seconds: 12
26
+ rows: { bind: /classes }
27
+ next:
28
+ type: stack
29
+ items:
30
+ - type: countdown
31
+ weight: 2
32
+ title: Next class
33
+ label: { bind: /next_label }
34
+ to: { bind: /next_at }
35
+ done: Starting now
36
+ - type: stat
37
+ weight: 2
38
+ title: Studio 1 spots
39
+ value: { bind: /spots_left }
40
+ unit: left
41
+ thresholds: { warning: 5, danger: 2 }
42
+ label: { bind: /spots_label }
43
+ ticker:
44
+ type: cycle
45
+ surface: raised
46
+ seconds: 8
47
+ items: { bind: /messages }
@@ -0,0 +1,2 @@
1
+ guest_url: https://guest.harborhouse.example
2
+ desk_note: Front desk is staffed 24 hours. Dial 0 from any room phone for anything you need, including a late checkout or a taxi.
@@ -0,0 +1,29 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # Sparse lobby screen: four zones, light scheme, landscape.
3
+ colors:
4
+ scheme: light
5
+ accent: '#0f5132'
6
+
7
+ layout:
8
+ design: landscape
9
+ flow:
10
+ - { zone: head, span: 12, height: 200px }
11
+ - { zone: time, span: 4, height: 1 }
12
+ - { zone: guide, span: 4, height: 1 }
13
+ - { zone: desk, span: 4, height: 1 }
14
+
15
+ zones:
16
+ head: { type: heading, title: Lobby, text: Welcome to Harbor House, align: start }
17
+ time: { type: clock, title: Local time, surface: raised, show_date: true, hour12: false }
18
+ guide:
19
+ type: qr
20
+ title: Guest guide
21
+ value: { bind: /guest_url }
22
+ label: Wi-Fi, room service and checkout
23
+ desk:
24
+ type: text
25
+ title: Front desk
26
+ surface: accent
27
+ text: { bind: /desk_note }
28
+ fit: true
29
+ align: start
@@ -0,0 +1,16 @@
1
+ # Every value in YAML data is read as text, so 4.50 stays "4.50".
2
+ menu:
3
+ - [Tomato soup, VG, 4.50]
4
+ - [Chicken curry, GF, 8.90]
5
+ - [Mushroom risotto, V, 8.20]
6
+ - [Fish and chips, '', 9.50]
7
+ - [Falafel wrap, VG, 6.80]
8
+ wait: 6
9
+ seats: 42
10
+ notices:
11
+ - 'Fire drill Thursday at 10:00'
12
+ - New vegan station opens Monday
13
+ messages:
14
+ - 'Coffee bar open until 16:00'
15
+ - 'Card payments only after 14:00'
16
+ - Reusable cups get 20p off
@@ -0,0 +1,43 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # A canteen screen: the menu, wait time, free seats and notices. Designed for
3
+ # landscape; on a portrait screen the zones move onto rows of their own.
4
+ colors:
5
+ scheme: dark
6
+ accent: '#2563eb'
7
+
8
+ layout:
9
+ design: landscape
10
+ flow:
11
+ - { zone: head, span: 9, height: 170px }
12
+ - { zone: clock, span: 3, height: 170px }
13
+ - { zone: menu, span: 6, height: 2 }
14
+ - { zone: info, span: 6, height: 2 }
15
+ - { zone: news, height: 110px }
16
+
17
+ zones:
18
+ head: { type: heading, text: Today's lunch }
19
+ clock: { type: clock, surface: raised, show_date: true }
20
+ menu:
21
+ type: table
22
+ title: Menu
23
+ columns: [Dish, Diet, Price]
24
+ align: [start, start, end]
25
+ rows: { bind: /menu }
26
+ info:
27
+ type: stack
28
+ items:
29
+ - type: stack
30
+ direction: row
31
+ items:
32
+ - { type: stat, title: Wait time, value: { bind: /wait }, unit: min }
33
+ - { type: stat, title: Seats free, value: { bind: /seats } }
34
+ - type: stack
35
+ direction: row
36
+ items:
37
+ - { type: list, title: Notices, items: { bind: /notices } }
38
+ - type: text
39
+ surface: accent
40
+ title: Allergens
41
+ fit: true
42
+ text: Ask at the counter for allergen information.
43
+ news: { type: cycle, surface: raised, items: { bind: /messages }, seconds: 8 }
@@ -0,0 +1,19 @@
1
+ {
2
+ "room": {
3
+ "name": "Ada Lovelace",
4
+ "floor": "Floor 3, east wing",
5
+ "book_url": "https://rooms.northwind.example/r/ada-lovelace"
6
+ },
7
+ "status": {
8
+ "text": "In use",
9
+ "label": "Busy until 15:00",
10
+ "state": "danger",
11
+ "ends_at": "2026-11-14T15:00:00Z"
12
+ },
13
+ "agenda": [
14
+ { "start": "13:00", "end": "15:00", "title": "Pricing review", "detail": "Organiser: M. Oyelaran" },
15
+ { "start": "15:00", "end": "15:30", "title": "Interview debrief" },
16
+ { "start": "15:30", "end": "16:30", "title": "Sprint planning, Payments squad", "detail": "Organiser: J. Whitcombe-Tarasova" },
17
+ { "start": "17:00", "end": "17:30", "title": "1:1 Priya / Daniel" }
18
+ ]
19
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "version": 1,
3
+ "colors": {
4
+ "scheme": "dark",
5
+ "accent": "#f59e0b"
6
+ },
7
+ "layout": {
8
+ "design": "portrait",
9
+ "flow": [
10
+ {
11
+ "zone": "room",
12
+ "span": 8,
13
+ "height": "200px"
14
+ },
15
+ {
16
+ "zone": "clock",
17
+ "span": 4,
18
+ "height": "200px"
19
+ },
20
+ {
21
+ "zone": "status",
22
+ "span": 12,
23
+ "height": 2
24
+ },
25
+ {
26
+ "zone": "ends",
27
+ "span": 6,
28
+ "height": 1.2
29
+ },
30
+ {
31
+ "zone": "book",
32
+ "span": 6,
33
+ "height": 1.2
34
+ },
35
+ {
36
+ "zone": "agenda",
37
+ "span": 12,
38
+ "height": 4
39
+ },
40
+ {
41
+ "zone": "rules",
42
+ "span": 12,
43
+ "height": "150px"
44
+ }
45
+ ]
46
+ },
47
+ "zones": {
48
+ "room": {
49
+ "type": "heading",
50
+ "title": "Meeting room",
51
+ "text": {
52
+ "bind": "/room/name"
53
+ }
54
+ },
55
+ "clock": {
56
+ "type": "clock",
57
+ "surface": "raised",
58
+ "hour12": false
59
+ },
60
+ "status": {
61
+ "type": "stat",
62
+ "title": {
63
+ "bind": "/room/floor"
64
+ },
65
+ "value": {
66
+ "bind": "/status/text"
67
+ },
68
+ "label": {
69
+ "bind": "/status/label"
70
+ },
71
+ "state": {
72
+ "bind": "/status/state"
73
+ }
74
+ },
75
+ "ends": {
76
+ "type": "countdown",
77
+ "surface": "raised",
78
+ "title": "Current meeting",
79
+ "to": {
80
+ "bind": "/status/ends_at"
81
+ },
82
+ "label": "left"
83
+ },
84
+ "book": {
85
+ "type": "qr",
86
+ "title": "Book this room",
87
+ "value": {
88
+ "bind": "/room/book_url"
89
+ },
90
+ "label": "Scan to book"
91
+ },
92
+ "agenda": {
93
+ "type": "schedule",
94
+ "title": "Next up",
95
+ "rows": 6,
96
+ "items": {
97
+ "bind": "/agenda"
98
+ }
99
+ },
100
+ "rules": {
101
+ "type": "text",
102
+ "surface": "accent",
103
+ "text": "Seats 10. Please wipe the whiteboard and take your cups when you leave.",
104
+ "fit": true
105
+ }
106
+ }
107
+ }
@@ -0,0 +1,18 @@
1
+ alert: ''
2
+ kpi:
3
+ error_rate: 0.31
4
+ error_state: warning
5
+ p99: 412
6
+ p99_spark: [530, 510, 498, 470, 455, 430, 412]
7
+ svc:
8
+ cdn: good
9
+ auth: good
10
+ api: warning
11
+ payments: good
12
+ db: warning
13
+ vpn: danger
14
+ incidents:
15
+ - [SEV2, VPN ams-02 saturated, 41 m]
16
+ - [SEV3, eu-west API over SLO, 36 m]
17
+ - [SEV3, Replica lag on pg-replica-04, 22 m]
18
+ - [SEV4, Certificate expires in 9 days, 3 d]
@@ -0,0 +1,63 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # Network operations wall: six zones, dark.
3
+ colors:
4
+ scheme: dark
5
+
6
+ layout:
7
+ flow:
8
+ - { zone: head, span: 8, height: 120px }
9
+ - { zone: clock, span: 4, height: 120px }
10
+ - { zone: err, span: 3, height: 1 }
11
+ - { zone: p99, span: 3, height: 1 }
12
+ - { zone: svc, span: 6, height: 1 }
13
+ - { zone: inc, span: 12, height: 1 }
14
+
15
+ alert:
16
+ text: { bind: /alert }
17
+ title: Major incident
18
+ state: danger
19
+
20
+ zones:
21
+ head:
22
+ type: heading
23
+ title: Network operations
24
+ text: Global edge and core
25
+ clock:
26
+ type: clock
27
+ surface: raised
28
+ show_date: true
29
+ hour12: false
30
+ err:
31
+ type: stat
32
+ title: Error rate
33
+ value: { bind: /kpi/error_rate }
34
+ unit: '%'
35
+ state: { bind: /kpi/error_state }
36
+ trend: up
37
+ delta: '+0.04'
38
+ good_when: down
39
+ p99:
40
+ type: stat
41
+ title: p99 latency
42
+ value: { bind: /kpi/p99 }
43
+ unit: ms
44
+ trend: down
45
+ delta: -18 ms
46
+ good_when: down
47
+ spark: { bind: /kpi/p99_spark }
48
+ svc:
49
+ type: status
50
+ title: Services
51
+ items:
52
+ - { label: Edge CDN, state: { bind: /svc/cdn } }
53
+ - { label: Sign-in, state: { bind: /svc/auth } }
54
+ - { label: Core API, state: { bind: /svc/api }, note: eu-west slow }
55
+ - { label: Payments, state: { bind: /svc/payments } }
56
+ - { label: Postgres, state: { bind: /svc/db }, note: lag 4 s }
57
+ - { label: Office VPN, state: { bind: /svc/vpn }, note: down }
58
+ inc:
59
+ type: table
60
+ title: Open incidents
61
+ columns: [Sev, Incident, Age]
62
+ align: [start, start, end]
63
+ rows: { bind: /incidents }
@@ -0,0 +1,25 @@
1
+ # Every value is read as text.
2
+ oee:
3
+ value: 78.4
4
+ state: warning
5
+ trend: up
6
+ delta: +1.6 pts
7
+ spark: [71, 73, 72, 75, 77, 76, 78.4]
8
+ hourly: [74, 76, 72, 79, 81, 77, 78]
9
+ target: [85, 85, 85, 85, 85, 85, 85]
10
+ hours: ['06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00']
11
+ lines:
12
+ - { label: Line 1 PET 0.5 L, value: 412, max: 480, state: good }
13
+ - { label: Line 2 PET 1.5 L, value: 301, max: 360, state: good }
14
+ - { label: Line 3 glass, value: 188, max: 300, state: warning }
15
+ - { label: Line 4 cans, value: 0, max: 600, state: danger }
16
+ downtime:
17
+ - { label: Changeover, value: 52 }
18
+ - { label: Glue pump, value: 41 }
19
+ - { label: No preforms, value: 27 }
20
+ - { label: Micro stops, value: 19 }
21
+ - { label: CIP cleaning, value: 15 }
22
+ messages:
23
+ - 'Changeover on Line 3 at 13:00, bring format parts'
24
+ - 'Forklift route B closed until 15:00'
25
+ - 'QA sample every 30 min, record on tablet'
@@ -0,0 +1,55 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # OEE board for a bottling plant floor, landscape.
3
+ colors:
4
+ scheme: dark
5
+ accent: '#0ea5e9'
6
+
7
+ layout:
8
+ design: landscape
9
+ gap: 2
10
+ flow:
11
+ - { zone: head, span: 9, height: 120px }
12
+ - { zone: clock, span: 3, height: 120px }
13
+ - { zone: oee, span: 4, height: 2 }
14
+ - { zone: trend, span: 8, height: 2 }
15
+ - { zone: lines, span: 6, height: 3 }
16
+ - { zone: downtime, span: 6, height: 3 }
17
+ - { zone: news, height: 100px }
18
+
19
+ zones:
20
+ head: { type: heading, text: Filling hall 2 OEE, surface: raised }
21
+ clock: { type: clock, surface: raised }
22
+ oee:
23
+ type: stat
24
+ title: OEE today
25
+ value: { bind: /oee/value }
26
+ unit: '%'
27
+ state: { bind: /oee/state }
28
+ trend: { bind: /oee/trend }
29
+ delta: { bind: /oee/delta }
30
+ good_when: up
31
+ spark: { bind: /oee/spark }
32
+ trend:
33
+ type: chart
34
+ kind: line
35
+ title: OEE by hour vs target
36
+ labels: { bind: /hours }
37
+ series:
38
+ - { name: OEE, values: { bind: /oee/hourly } }
39
+ - { name: Target, values: { bind: /oee/target } }
40
+ lines:
41
+ type: meters
42
+ title: Line speed
43
+ unit: bpm
44
+ items: { bind: /lines }
45
+ downtime:
46
+ type: bars
47
+ title: Downtime today
48
+ unit: min
49
+ limit: 5
50
+ items: { bind: /downtime }
51
+ news:
52
+ type: cycle
53
+ surface: raised
54
+ seconds: 6
55
+ items: { bind: /messages }
@@ -0,0 +1,25 @@
1
+ # Readings from the floor sensors. Every value in YAML data is read as text.
2
+ floor: Floor 3, east wing
3
+ co2:
4
+ now: 742
5
+ trend: down
6
+ delta: -58 since 10:00
7
+ label: Fresh
8
+ temp:
9
+ now: 21.8
10
+ label: Comfortable
11
+ state: good
12
+ humidity: 46
13
+ rooms:
14
+ - { label: Harbour, value: 1180, max: 1600 }
15
+ - { label: Lighthouse, value: 960, max: 1600 }
16
+ - { label: Quay, value: 812, max: 1600 }
17
+ - { label: Dockside, value: 655, max: 1600 }
18
+ - { label: Pier, value: 540, max: 1600 }
19
+ day:
20
+ hours: ['08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00']
21
+ co2: [520, 690, 800, 940, 1080, 870, 742]
22
+ tips:
23
+ - Harbour is getting stuffy, open the window or take a break
24
+ - Windows on the south side open with the grey handle
25
+ - Plants on this floor are watered on Mondays and Thursdays
@@ -0,0 +1,71 @@
1
+ # yaml-language-server: $schema=https://signagekit.514sid.com/schema.json
2
+ # Air quality on an office floor, for the screen by the kitchen.
3
+ version: 1
4
+ colors:
5
+ scheme: dark
6
+ accent: '#0ea5e9'
7
+
8
+ layout:
9
+ flow:
10
+ - { zone: head, span: 9, height: 130px }
11
+ - { zone: clock, span: 3, height: 130px }
12
+ - { zone: co2, span: 4, height: 2 }
13
+ - { zone: temp, span: 4, height: 2 }
14
+ - { zone: humidity, span: 4, height: 2 }
15
+ - { zone: rooms, span: 5, height: 3 }
16
+ - { zone: today, span: 7, height: 3 }
17
+ - { zone: tips, height: 100px }
18
+
19
+ zones:
20
+ head:
21
+ type: heading
22
+ title: Air quality
23
+ text: { bind: /floor }
24
+ clock:
25
+ type: clock
26
+ surface: raised
27
+ show_date: true
28
+ co2:
29
+ type: stat
30
+ title: CO₂, open plan
31
+ value: { bind: /co2/now }
32
+ unit: ppm
33
+ thresholds: { warning: 1000, danger: 1400 }
34
+ trend: { bind: /co2/trend }
35
+ delta: { bind: /co2/delta }
36
+ good_when: down
37
+ label: { bind: /co2/label }
38
+ temp:
39
+ type: stat
40
+ title: Temperature
41
+ value: { bind: /temp/now }
42
+ unit: °C
43
+ label: { bind: /temp/label }
44
+ state: { bind: /temp/state }
45
+ humidity:
46
+ type: meter
47
+ title: Humidity
48
+ value: { bind: /humidity }
49
+ max: 100
50
+ unit: '%'
51
+ thresholds: { warning: 60, danger: 70 }
52
+ rooms:
53
+ type: meters
54
+ title: CO₂ by meeting room, ppm
55
+ items: { bind: /rooms }
56
+ thresholds: { warning: 1000, danger: 1400 }
57
+ today:
58
+ type: chart
59
+ kind: area
60
+ title: CO₂ today, open plan
61
+ labels: { bind: /day/hours }
62
+ series:
63
+ - name: CO₂
64
+ values: { bind: /day/co2 }
65
+ target: 1000
66
+ target_label: Open a window above 1000
67
+ tips:
68
+ type: cycle
69
+ surface: raised
70
+ items: { bind: /tips }
71
+ seconds: 8
@@ -0,0 +1,28 @@
1
+ {
2
+ "kpi": {
3
+ "revenue": 134210,
4
+ "vs_target": 105,
5
+ "target_label": "Day target 128K",
6
+ "state": "good",
7
+ "trend": "up",
8
+ "delta": "+2.4 pts"
9
+ },
10
+ "hourly": {
11
+ "labels": ["09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00"],
12
+ "revenue": [9.1, 12.4, 14.8, 16.2, 17.5, 19.9, 21.3, 23.0]
13
+ },
14
+ "reps": [
15
+ { "label": "Dana Reyes", "value": 31.2 },
16
+ { "label": "Marcus Okafor", "value": 28.4 },
17
+ { "label": "Lena Brandt", "value": 26.9 },
18
+ { "label": "Sam Whitfield", "value": 22.1 },
19
+ { "label": "Aiko Tanaka", "value": 19.7 },
20
+ { "label": "Joel Mensah", "value": 17.4 }
21
+ ],
22
+ "regions": [
23
+ { "label": "North", "value": 104 },
24
+ { "label": "East", "value": 97 },
25
+ { "label": "South", "value": 78 },
26
+ { "label": "West", "value": 62 }
27
+ ]
28
+ }