matterbridge 3.2.1-dev-20250806-8a31d91 → 3.2.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.
- package/CHANGELOG.md +3 -2
- package/dist/cli.d.ts +26 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +91 -2
- package/dist/cli.js.map +1 -0
- package/dist/cliEmitter.d.ts +34 -0
- package/dist/cliEmitter.d.ts.map +1 -0
- package/dist/cliEmitter.js +30 -0
- package/dist/cliEmitter.js.map +1 -0
- package/dist/clusters/export.d.ts +2 -0
- package/dist/clusters/export.d.ts.map +1 -0
- package/dist/clusters/export.js +2 -0
- package/dist/clusters/export.js.map +1 -0
- package/dist/defaultConfigSchema.d.ts +28 -0
- package/dist/defaultConfigSchema.d.ts.map +1 -0
- package/dist/defaultConfigSchema.js +24 -0
- package/dist/defaultConfigSchema.js.map +1 -0
- package/dist/deviceManager.d.ts +112 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +94 -1
- package/dist/deviceManager.js.map +1 -0
- package/dist/devices/batteryStorage.d.ts +48 -0
- package/dist/devices/batteryStorage.d.ts.map +1 -0
- package/dist/devices/batteryStorage.js +48 -1
- package/dist/devices/batteryStorage.js.map +1 -0
- package/dist/devices/dishwasher.d.ts +91 -0
- package/dist/devices/dishwasher.d.ts.map +1 -0
- package/dist/devices/dishwasher.js +78 -3
- package/dist/devices/dishwasher.js.map +1 -0
- package/dist/devices/evse.d.ts +75 -0
- package/dist/devices/evse.d.ts.map +1 -0
- package/dist/devices/evse.js +74 -10
- package/dist/devices/evse.js.map +1 -0
- package/dist/devices/export.d.ts +11 -0
- package/dist/devices/export.d.ts.map +1 -0
- package/dist/devices/export.js +2 -0
- package/dist/devices/export.js.map +1 -0
- package/dist/devices/extractorHood.d.ts +46 -0
- package/dist/devices/extractorHood.d.ts.map +1 -0
- package/dist/devices/extractorHood.js +42 -0
- package/dist/devices/extractorHood.js.map +1 -0
- package/dist/devices/heatPump.d.ts +47 -0
- package/dist/devices/heatPump.d.ts.map +1 -0
- package/dist/devices/heatPump.js +50 -2
- package/dist/devices/heatPump.js.map +1 -0
- package/dist/devices/laundryDryer.d.ts +87 -0
- package/dist/devices/laundryDryer.d.ts.map +1 -0
- package/dist/devices/laundryDryer.js +83 -6
- package/dist/devices/laundryDryer.js.map +1 -0
- package/dist/devices/laundryWasher.d.ts +242 -0
- package/dist/devices/laundryWasher.d.ts.map +1 -0
- package/dist/devices/laundryWasher.js +91 -7
- package/dist/devices/laundryWasher.js.map +1 -0
- package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
- package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
- package/dist/devices/roboticVacuumCleaner.js +93 -7
- package/dist/devices/roboticVacuumCleaner.js.map +1 -0
- package/dist/devices/solarPower.d.ts +40 -0
- package/dist/devices/solarPower.d.ts.map +1 -0
- package/dist/devices/solarPower.js +38 -0
- package/dist/devices/solarPower.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +111 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +82 -2
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/dgram/coap.d.ts +205 -0
- package/dist/dgram/coap.d.ts.map +1 -0
- package/dist/dgram/coap.js +126 -13
- package/dist/dgram/coap.js.map +1 -0
- package/dist/dgram/dgram.d.ts +140 -0
- package/dist/dgram/dgram.d.ts.map +1 -0
- package/dist/dgram/dgram.js +113 -2
- package/dist/dgram/dgram.js.map +1 -0
- package/dist/dgram/mb_coap.d.ts +24 -0
- package/dist/dgram/mb_coap.d.ts.map +1 -0
- package/dist/dgram/mb_coap.js +41 -3
- package/dist/dgram/mb_coap.js.map +1 -0
- package/dist/dgram/mb_mdns.d.ts +24 -0
- package/dist/dgram/mb_mdns.d.ts.map +1 -0
- package/dist/dgram/mb_mdns.js +51 -13
- package/dist/dgram/mb_mdns.js.map +1 -0
- package/dist/dgram/mdns.d.ts +288 -0
- package/dist/dgram/mdns.d.ts.map +1 -0
- package/dist/dgram/mdns.js +298 -137
- package/dist/dgram/mdns.js.map +1 -0
- package/dist/dgram/multicast.d.ts +65 -0
- package/dist/dgram/multicast.d.ts.map +1 -0
- package/dist/dgram/multicast.js +60 -1
- package/dist/dgram/multicast.js.map +1 -0
- package/dist/dgram/unicast.d.ts +56 -0
- package/dist/dgram/unicast.d.ts.map +1 -0
- package/dist/dgram/unicast.js +54 -0
- package/dist/dgram/unicast.js.map +1 -0
- package/dist/frontend.d.ts +313 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +451 -24
- package/dist/frontend.js.map +1 -0
- package/dist/globalMatterbridge.d.ts +59 -0
- package/dist/globalMatterbridge.d.ts.map +1 -0
- package/dist/globalMatterbridge.js +47 -0
- package/dist/globalMatterbridge.js.map +1 -0
- package/dist/helpers.d.ts +48 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +53 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -1
- package/dist/index.js.map +1 -0
- package/dist/logger/export.d.ts +2 -0
- package/dist/logger/export.d.ts.map +1 -0
- package/dist/logger/export.js +1 -0
- package/dist/logger/export.js.map +1 -0
- package/dist/matter/behaviors.d.ts +2 -0
- package/dist/matter/behaviors.d.ts.map +1 -0
- package/dist/matter/behaviors.js +2 -0
- package/dist/matter/behaviors.js.map +1 -0
- package/dist/matter/clusters.d.ts +2 -0
- package/dist/matter/clusters.d.ts.map +1 -0
- package/dist/matter/clusters.js +2 -0
- package/dist/matter/clusters.js.map +1 -0
- package/dist/matter/devices.d.ts +2 -0
- package/dist/matter/devices.d.ts.map +1 -0
- package/dist/matter/devices.js +2 -0
- package/dist/matter/devices.js.map +1 -0
- package/dist/matter/endpoints.d.ts +2 -0
- package/dist/matter/endpoints.d.ts.map +1 -0
- package/dist/matter/endpoints.js +2 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +3 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +3 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +3 -0
- package/dist/matter/types.js.map +1 -0
- package/dist/matterbridge.d.ts +462 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +789 -50
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +42 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +36 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +1351 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +65 -5
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +709 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +579 -15
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +42 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +36 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1354 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +1220 -54
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +407 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +345 -12
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +324 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +250 -0
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/matterbridgeTypes.d.ts +198 -0
- package/dist/matterbridgeTypes.d.ts.map +1 -0
- package/dist/matterbridgeTypes.js +25 -0
- package/dist/matterbridgeTypes.js.map +1 -0
- package/dist/pluginManager.d.ts +270 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +249 -3
- package/dist/pluginManager.js.map +1 -0
- package/dist/shelly.d.ts +174 -0
- package/dist/shelly.d.ts.map +1 -0
- package/dist/shelly.js +168 -7
- package/dist/shelly.js.map +1 -0
- package/dist/storage/export.d.ts +2 -0
- package/dist/storage/export.d.ts.map +1 -0
- package/dist/storage/export.js +1 -0
- package/dist/storage/export.js.map +1 -0
- package/dist/update.d.ts +75 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +69 -0
- package/dist/update.js.map +1 -0
- package/dist/utils/colorUtils.d.ts +99 -0
- package/dist/utils/colorUtils.d.ts.map +1 -0
- package/dist/utils/colorUtils.js +97 -2
- package/dist/utils/colorUtils.js.map +1 -0
- package/dist/utils/commandLine.d.ts +59 -0
- package/dist/utils/commandLine.d.ts.map +1 -0
- package/dist/utils/commandLine.js +54 -0
- package/dist/utils/commandLine.js.map +1 -0
- package/dist/utils/copyDirectory.d.ts +33 -0
- package/dist/utils/copyDirectory.d.ts.map +1 -0
- package/dist/utils/copyDirectory.js +38 -1
- package/dist/utils/copyDirectory.js.map +1 -0
- package/dist/utils/createDirectory.d.ts +34 -0
- package/dist/utils/createDirectory.d.ts.map +1 -0
- package/dist/utils/createDirectory.js +33 -0
- package/dist/utils/createDirectory.js.map +1 -0
- package/dist/utils/createZip.d.ts +39 -0
- package/dist/utils/createZip.d.ts.map +1 -0
- package/dist/utils/createZip.js +47 -2
- package/dist/utils/createZip.js.map +1 -0
- package/dist/utils/deepCopy.d.ts +32 -0
- package/dist/utils/deepCopy.d.ts.map +1 -0
- package/dist/utils/deepCopy.js +39 -0
- package/dist/utils/deepCopy.js.map +1 -0
- package/dist/utils/deepEqual.d.ts +54 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +72 -1
- package/dist/utils/deepEqual.js.map +1 -0
- package/dist/utils/error.d.ts +44 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +41 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/export.d.ts +12 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +1 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/utils/hex.d.ts +89 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +124 -0
- package/dist/utils/hex.js.map +1 -0
- package/dist/utils/isvalid.d.ts +103 -0
- package/dist/utils/isvalid.d.ts.map +1 -0
- package/dist/utils/isvalid.js +101 -0
- package/dist/utils/isvalid.js.map +1 -0
- package/dist/utils/network.d.ts +84 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +91 -5
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/spawn.d.ts +33 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +40 -0
- package/dist/utils/spawn.js.map +1 -0
- package/dist/utils/wait.d.ts +54 -0
- package/dist/utils/wait.d.ts.map +1 -0
- package/dist/utils/wait.js +60 -8
- package/dist/utils/wait.js.map +1 -0
- package/frontend/build/static/js/main.b4cc32cf.js.map +1 -1
- package/npm-shrinkwrap.json +5 -5
- package/package.json +2 -2
- package/docs/404.html +0 -107
- package/docs/HomeAssistant.svg +0 -2
- package/docs/README-DEV.md +0 -377
- package/docs/README-DOCKER.md +0 -208
- package/docs/README-NGINX.md +0 -235
- package/docs/README-PODMAN.md +0 -109
- package/docs/README-SERVICE.md +0 -212
- package/docs/README.md +0 -618
- package/docs/Shelly.svg +0 -1
- package/docs/Somfy.svg +0 -1
- package/docs/Zigbee2MQTT.svg +0 -1
- package/docs/_config.yml +0 -86
- package/docs/bmc-button.svg +0 -22
- package/docs/index.html +0 -774
- package/docs/matterbridge.svg +0 -50
- package/docs/robots.txt +0 -4
package/docs/index.html
DELETED
|
@@ -1,774 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Matterbridge - Matter Plugin Manager</title>
|
|
7
|
-
<meta name="description" content="Matterbridge is a Matter plugin manager that allows you to have all your Matter devices up and running in minutes.">
|
|
8
|
-
<link rel="icon" type="image/svg+xml" href="matterbridge.svg">
|
|
9
|
-
|
|
10
|
-
<!-- Open Graph / Social Media Meta Tags -->
|
|
11
|
-
<meta property="og:type" content="website">
|
|
12
|
-
<meta property="og:title" content="Matterbridge - Matter Plugin Manager">
|
|
13
|
-
<meta property="og:description" content="Matterbridge is a Matter plugin manager that allows you to have all your Matter devices up and running in minutes.">
|
|
14
|
-
<meta property="og:image" content="https://luligu.github.io/matterbridge/matterbridge.svg">
|
|
15
|
-
<meta property="og:url" content="https://luligu.github.io/matterbridge/">
|
|
16
|
-
|
|
17
|
-
<!-- Twitter Meta Tags -->
|
|
18
|
-
<meta name="twitter:card" content="summary_large_image">
|
|
19
|
-
<meta name="twitter:title" content="Matterbridge - Matter Plugin Manager">
|
|
20
|
-
<meta name="twitter:description" content="Matterbridge is a Matter plugin manager that allows you to have all your Matter devices up and running in minutes.">
|
|
21
|
-
<meta name="twitter:image" content="https://luligu.github.io/matterbridge/matterbridge.svg">
|
|
22
|
-
|
|
23
|
-
<style>
|
|
24
|
-
:root {
|
|
25
|
-
--primary-color: #2563eb;
|
|
26
|
-
--secondary-color: #1e40af;
|
|
27
|
-
--accent-color: #3b82f6;
|
|
28
|
-
--text-primary: #1f2937;
|
|
29
|
-
--text-secondary: #6b7280;
|
|
30
|
-
--background: #ffffff;
|
|
31
|
-
--surface: #f8fafc;
|
|
32
|
-
--border: #e5e7eb;
|
|
33
|
-
--success: #10b981;
|
|
34
|
-
--warning: #f59e0b;
|
|
35
|
-
--error: #ef4444;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
* {
|
|
39
|
-
margin: 0;
|
|
40
|
-
padding: 0;
|
|
41
|
-
box-sizing: border-box;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
body {
|
|
45
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
46
|
-
line-height: 1.6;
|
|
47
|
-
color: var(--text-primary);
|
|
48
|
-
background-color: var(--background);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.container {
|
|
52
|
-
max-width: 1200px;
|
|
53
|
-
margin: 0 auto;
|
|
54
|
-
padding: 0 2rem;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Header */
|
|
58
|
-
header {
|
|
59
|
-
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
|
60
|
-
color: white;
|
|
61
|
-
padding: 2rem 0;
|
|
62
|
-
position: relative;
|
|
63
|
-
overflow: hidden;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
header::before {
|
|
67
|
-
content: '';
|
|
68
|
-
position: absolute;
|
|
69
|
-
top: 0;
|
|
70
|
-
left: 0;
|
|
71
|
-
right: 0;
|
|
72
|
-
bottom: 0;
|
|
73
|
-
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle cx="50" cy="50" r="2" fill="rgba(255,255,255,0.1)"/></svg>') repeat;
|
|
74
|
-
opacity: 0.3;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.hero {
|
|
78
|
-
text-align: center;
|
|
79
|
-
position: relative;
|
|
80
|
-
z-index: 1;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.logo-container {
|
|
84
|
-
display: flex;
|
|
85
|
-
align-items: center;
|
|
86
|
-
justify-content: center;
|
|
87
|
-
gap: 1rem;
|
|
88
|
-
margin-bottom: 2rem;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.logo {
|
|
92
|
-
width: 80px;
|
|
93
|
-
height: 80px;
|
|
94
|
-
filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.hero h1 {
|
|
98
|
-
font-size: 3.5rem;
|
|
99
|
-
font-weight: 700;
|
|
100
|
-
margin-bottom: 1rem;
|
|
101
|
-
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.hero .subtitle {
|
|
105
|
-
font-size: 1.25rem;
|
|
106
|
-
margin-bottom: 2rem;
|
|
107
|
-
opacity: 0.9;
|
|
108
|
-
max-width: 600px;
|
|
109
|
-
margin-left: auto;
|
|
110
|
-
margin-right: auto;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.hero-buttons {
|
|
114
|
-
display: flex;
|
|
115
|
-
gap: 1rem;
|
|
116
|
-
justify-content: center;
|
|
117
|
-
flex-wrap: wrap;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.btn {
|
|
121
|
-
display: inline-flex;
|
|
122
|
-
align-items: center;
|
|
123
|
-
gap: 0.5rem;
|
|
124
|
-
padding: 0.75rem 1.5rem;
|
|
125
|
-
border-radius: 0.5rem;
|
|
126
|
-
text-decoration: none;
|
|
127
|
-
font-weight: 600;
|
|
128
|
-
transition: all 0.2s ease;
|
|
129
|
-
border: 2px solid transparent;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
.btn-primary {
|
|
133
|
-
background: white;
|
|
134
|
-
color: var(--primary-color);
|
|
135
|
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.btn-primary:hover {
|
|
139
|
-
transform: translateY(-2px);
|
|
140
|
-
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.btn-secondary {
|
|
144
|
-
background: transparent;
|
|
145
|
-
color: white;
|
|
146
|
-
border-color: white;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.btn-secondary:hover {
|
|
150
|
-
background: white;
|
|
151
|
-
color: var(--primary-color);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/* Navigation */
|
|
155
|
-
nav {
|
|
156
|
-
background: var(--surface);
|
|
157
|
-
border-bottom: 1px solid var(--border);
|
|
158
|
-
padding: 1rem 0;
|
|
159
|
-
position: sticky;
|
|
160
|
-
top: 0;
|
|
161
|
-
z-index: 100;
|
|
162
|
-
backdrop-filter: blur(10px);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.nav-container {
|
|
166
|
-
display: flex;
|
|
167
|
-
justify-content: center;
|
|
168
|
-
flex-wrap: wrap;
|
|
169
|
-
gap: 2rem;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.nav-link {
|
|
173
|
-
color: var(--text-primary);
|
|
174
|
-
text-decoration: none;
|
|
175
|
-
font-weight: 500;
|
|
176
|
-
padding: 0.5rem 1rem;
|
|
177
|
-
border-radius: 0.375rem;
|
|
178
|
-
transition: all 0.2s ease;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
.nav-link:hover {
|
|
182
|
-
background: var(--primary-color);
|
|
183
|
-
color: white;
|
|
184
|
-
transform: translateY(-1px);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/* Main Content */
|
|
188
|
-
main {
|
|
189
|
-
padding: 4rem 0;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.section {
|
|
193
|
-
margin-bottom: 4rem;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.section h2 {
|
|
197
|
-
font-size: 2.5rem;
|
|
198
|
-
font-weight: 700;
|
|
199
|
-
margin-bottom: 1rem;
|
|
200
|
-
color: var(--primary-color);
|
|
201
|
-
text-align: center;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
.section p {
|
|
205
|
-
font-size: 1.125rem;
|
|
206
|
-
color: var(--text-secondary);
|
|
207
|
-
text-align: center;
|
|
208
|
-
max-width: 800px;
|
|
209
|
-
margin: 0 auto 2rem;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/* Features Grid */
|
|
213
|
-
.features-grid {
|
|
214
|
-
display: grid;
|
|
215
|
-
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
216
|
-
gap: 2rem;
|
|
217
|
-
margin-top: 3rem;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.feature-card {
|
|
221
|
-
background: var(--surface);
|
|
222
|
-
padding: 2rem;
|
|
223
|
-
border-radius: 1rem;
|
|
224
|
-
border: 1px solid var(--border);
|
|
225
|
-
transition: all 0.3s ease;
|
|
226
|
-
text-align: center;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
.feature-card:hover {
|
|
230
|
-
transform: translateY(-4px);
|
|
231
|
-
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
|
|
232
|
-
border-color: var(--primary-color);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.feature-icon {
|
|
236
|
-
width: 60px;
|
|
237
|
-
height: 60px;
|
|
238
|
-
background: linear-gradient(135deg, var(--primary-color), var(--accent-color));
|
|
239
|
-
border-radius: 50%;
|
|
240
|
-
display: flex;
|
|
241
|
-
align-items: center;
|
|
242
|
-
justify-content: center;
|
|
243
|
-
margin: 0 auto 1rem;
|
|
244
|
-
font-size: 1.5rem;
|
|
245
|
-
color: white;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.feature-card h3 {
|
|
249
|
-
font-size: 1.25rem;
|
|
250
|
-
font-weight: 600;
|
|
251
|
-
margin-bottom: 0.5rem;
|
|
252
|
-
color: var(--text-primary);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
.feature-card p {
|
|
256
|
-
color: var(--text-secondary);
|
|
257
|
-
text-align: left;
|
|
258
|
-
font-size: 1rem;
|
|
259
|
-
margin: 0;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/* Stats Section */
|
|
263
|
-
.stats {
|
|
264
|
-
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
|
265
|
-
color: white;
|
|
266
|
-
padding: 4rem 0;
|
|
267
|
-
text-align: center;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.stats-grid {
|
|
271
|
-
display: grid;
|
|
272
|
-
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
273
|
-
gap: 2rem;
|
|
274
|
-
margin-top: 2rem;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
.stat-item h3 {
|
|
278
|
-
font-size: 2.5rem;
|
|
279
|
-
font-weight: 700;
|
|
280
|
-
margin-bottom: 0.5rem;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
.stat-item p {
|
|
284
|
-
opacity: 0.9;
|
|
285
|
-
font-size: 1rem;
|
|
286
|
-
margin: 0;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/* Plugins Section */
|
|
290
|
-
.plugins-grid {
|
|
291
|
-
display: grid;
|
|
292
|
-
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
293
|
-
gap: 1.5rem;
|
|
294
|
-
margin-top: 3rem;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
.plugin-card {
|
|
298
|
-
background: white;
|
|
299
|
-
border: 1px solid var(--border);
|
|
300
|
-
border-radius: 0.75rem;
|
|
301
|
-
overflow: hidden;
|
|
302
|
-
transition: all 0.3s ease;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
.plugin-card:hover {
|
|
306
|
-
transform: translateY(-2px);
|
|
307
|
-
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.plugin-header {
|
|
311
|
-
padding: 1.5rem;
|
|
312
|
-
background: var(--surface);
|
|
313
|
-
display: flex;
|
|
314
|
-
align-items: center;
|
|
315
|
-
gap: 1rem;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
.plugin-logo {
|
|
319
|
-
width: 40px;
|
|
320
|
-
height: 40px;
|
|
321
|
-
border-radius: 0.5rem;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
.plugin-content {
|
|
325
|
-
padding: 1.5rem;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
.plugin-content h3 {
|
|
329
|
-
font-size: 1.125rem;
|
|
330
|
-
font-weight: 600;
|
|
331
|
-
margin-bottom: 0.5rem;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
.plugin-content p {
|
|
335
|
-
color: var(--text-secondary);
|
|
336
|
-
font-size: 0.875rem;
|
|
337
|
-
margin-bottom: 1rem;
|
|
338
|
-
text-align: left;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/* Installation Section */
|
|
342
|
-
.installation {
|
|
343
|
-
background: var(--surface);
|
|
344
|
-
padding: 4rem 0;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
.code-block {
|
|
348
|
-
background: #1f2937;
|
|
349
|
-
color: #f9fafb;
|
|
350
|
-
padding: 1.5rem;
|
|
351
|
-
border-radius: 0.5rem;
|
|
352
|
-
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
353
|
-
font-size: 0.875rem;
|
|
354
|
-
overflow-x: auto;
|
|
355
|
-
margin: 1rem 0;
|
|
356
|
-
position: relative;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
.code-block::before {
|
|
360
|
-
content: '$ ';
|
|
361
|
-
color: #10b981;
|
|
362
|
-
font-weight: bold;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
/* Footer */
|
|
366
|
-
footer {
|
|
367
|
-
background: var(--text-primary);
|
|
368
|
-
color: white;
|
|
369
|
-
padding: 3rem 0 2rem;
|
|
370
|
-
text-align: center;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
.footer-content {
|
|
374
|
-
display: grid;
|
|
375
|
-
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
376
|
-
gap: 2rem;
|
|
377
|
-
margin-bottom: 2rem;
|
|
378
|
-
text-align: left;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
.footer-section h3 {
|
|
382
|
-
font-size: 1.125rem;
|
|
383
|
-
font-weight: 600;
|
|
384
|
-
margin-bottom: 1rem;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
.footer-section a {
|
|
388
|
-
color: #d1d5db;
|
|
389
|
-
text-decoration: none;
|
|
390
|
-
display: block;
|
|
391
|
-
margin-bottom: 0.5rem;
|
|
392
|
-
transition: color 0.2s ease;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
.footer-section a:hover {
|
|
396
|
-
color: white;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
.footer-bottom {
|
|
400
|
-
border-top: 1px solid #374151;
|
|
401
|
-
padding-top: 2rem;
|
|
402
|
-
text-align: center;
|
|
403
|
-
color: #9ca3af;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/* Responsive Design */
|
|
407
|
-
@media (max-width: 768px) {
|
|
408
|
-
.container {
|
|
409
|
-
padding: 0 1rem;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
.hero h1 {
|
|
413
|
-
font-size: 2.5rem;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
.nav-container {
|
|
417
|
-
gap: 1rem;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
.hero-buttons {
|
|
421
|
-
flex-direction: column;
|
|
422
|
-
align-items: center;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
.features-grid,
|
|
426
|
-
.plugins-grid {
|
|
427
|
-
grid-template-columns: 1fr;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/* Animations */
|
|
432
|
-
@keyframes fadeInUp {
|
|
433
|
-
from {
|
|
434
|
-
opacity: 0;
|
|
435
|
-
transform: translateY(30px);
|
|
436
|
-
}
|
|
437
|
-
to {
|
|
438
|
-
opacity: 1;
|
|
439
|
-
transform: translateY(0);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
.feature-card,
|
|
444
|
-
.plugin-card {
|
|
445
|
-
animation: fadeInUp 0.6s ease forwards;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
.feature-card:nth-child(2) { animation-delay: 0.1s; }
|
|
449
|
-
.feature-card:nth-child(3) { animation-delay: 0.2s; }
|
|
450
|
-
.feature-card:nth-child(4) { animation-delay: 0.3s; }
|
|
451
|
-
</style>
|
|
452
|
-
</head>
|
|
453
|
-
<body>
|
|
454
|
-
<header>
|
|
455
|
-
<div class="container">
|
|
456
|
-
<div class="hero">
|
|
457
|
-
<div class="logo-container">
|
|
458
|
-
<img src="matterbridge.svg" alt="Matterbridge Logo" class="logo">
|
|
459
|
-
<h1>Matterbridge</h1>
|
|
460
|
-
</div>
|
|
461
|
-
<p class="subtitle">
|
|
462
|
-
A Matter plugin manager that allows you to have all your Matter devices up and running in minutes without dealing with complex pairing processes.
|
|
463
|
-
</p>
|
|
464
|
-
<div class="hero-buttons">
|
|
465
|
-
<a href="https://github.com/Luligu/matterbridge" class="btn btn-primary">
|
|
466
|
-
🚀 Get Started
|
|
467
|
-
</a>
|
|
468
|
-
<a href="README.md" class="btn btn-secondary">
|
|
469
|
-
📖 Documentation
|
|
470
|
-
</a>
|
|
471
|
-
<a href="https://www.npmjs.com/package/matterbridge" class="btn btn-secondary">
|
|
472
|
-
📦 NPM Package
|
|
473
|
-
</a>
|
|
474
|
-
<a href="https://discord.gg/QX58CDe6hd" class="btn btn-secondary">
|
|
475
|
-
💬 Join Discord
|
|
476
|
-
</a>
|
|
477
|
-
</div>
|
|
478
|
-
</div>
|
|
479
|
-
</div>
|
|
480
|
-
</header>
|
|
481
|
-
|
|
482
|
-
<nav>
|
|
483
|
-
<div class="container">
|
|
484
|
-
<div class="nav-container">
|
|
485
|
-
<a href="#features" class="nav-link">Features</a>
|
|
486
|
-
<a href="#installation" class="nav-link">Installation</a>
|
|
487
|
-
<a href="#plugins" class="nav-link">Plugins</a>
|
|
488
|
-
<a href="README-DEV.md" class="nav-link">Development</a>
|
|
489
|
-
<a href="README-DOCKER.md" class="nav-link">Docker</a>
|
|
490
|
-
<a href="README-SERVICE.md" class="nav-link">Service</a>
|
|
491
|
-
<a href="https://discord.gg/QX58CDe6hd" class="nav-link">Discord</a>
|
|
492
|
-
<a href="https://github.com/Luligu/matterbridge/discussions" class="nav-link">Support</a>
|
|
493
|
-
</div>
|
|
494
|
-
</div>
|
|
495
|
-
</nav>
|
|
496
|
-
|
|
497
|
-
<main>
|
|
498
|
-
<section id="features" class="section">
|
|
499
|
-
<div class="container">
|
|
500
|
-
<h2>Why Choose Matterbridge?</h2>
|
|
501
|
-
<p>Matterbridge simplifies Matter device management with powerful features designed for both developers and users.</p>
|
|
502
|
-
|
|
503
|
-
<div class="features-grid">
|
|
504
|
-
<div class="feature-card">
|
|
505
|
-
<div class="feature-icon">🔌</div>
|
|
506
|
-
<h3>Easy Plugin System</h3>
|
|
507
|
-
<p>Simply pair Matterbridge once, and it will load all your registered plugins. No need to pair each device individually.</p>
|
|
508
|
-
</div>
|
|
509
|
-
|
|
510
|
-
<div class="feature-card">
|
|
511
|
-
<div class="feature-icon">🏠</div>
|
|
512
|
-
<h3>Universal Compatibility</h3>
|
|
513
|
-
<p>Works with Apple Home, Google Home, Amazon Alexa, Home Assistant, SmartThings, and any Matter-compatible platform.</p>
|
|
514
|
-
</div>
|
|
515
|
-
|
|
516
|
-
<div class="feature-card">
|
|
517
|
-
<div class="feature-icon">⚡</div>
|
|
518
|
-
<h3>Lightweight & Fast</h3>
|
|
519
|
-
<p>Runs on machines with as little as 512MB RAM. Perfect for Raspberry Pi and other low-power devices.</p>
|
|
520
|
-
</div>
|
|
521
|
-
|
|
522
|
-
<div class="feature-card">
|
|
523
|
-
<div class="feature-icon">🌐</div>
|
|
524
|
-
<h3>Web Frontend</h3>
|
|
525
|
-
<p>Manage your devices through an intuitive web interface. Monitor logs, configure settings, and control devices easily.</p>
|
|
526
|
-
</div>
|
|
527
|
-
|
|
528
|
-
<div class="feature-card">
|
|
529
|
-
<div class="feature-icon">🔧</div>
|
|
530
|
-
<h3>Developer Friendly</h3>
|
|
531
|
-
<p>Built on matter.js with comprehensive APIs. Easily port Homebridge plugins or create new ones from scratch.</p>
|
|
532
|
-
</div>
|
|
533
|
-
|
|
534
|
-
<div class="feature-card">
|
|
535
|
-
<div class="feature-icon">🐳</div>
|
|
536
|
-
<h3>Docker Ready</h3>
|
|
537
|
-
<p>Full Docker support with official images. Deploy easily with docker-compose or run natively on any platform.</p>
|
|
538
|
-
</div>
|
|
539
|
-
</div>
|
|
540
|
-
</div>
|
|
541
|
-
</section>
|
|
542
|
-
|
|
543
|
-
<div class="stats">
|
|
544
|
-
<div class="container">
|
|
545
|
-
<h2>Trusted by the Community</h2>
|
|
546
|
-
<div class="stats-grid">
|
|
547
|
-
<div class="stat-item">
|
|
548
|
-
<h3>15K+</h3>
|
|
549
|
-
<p>NPM Downloads</p>
|
|
550
|
-
</div>
|
|
551
|
-
<div class="stat-item">
|
|
552
|
-
<h3>1.2K+</h3>
|
|
553
|
-
<p>GitHub Stars</p>
|
|
554
|
-
</div>
|
|
555
|
-
<div class="stat-item">
|
|
556
|
-
<h3>10+</h3>
|
|
557
|
-
<p>Official Plugins</p>
|
|
558
|
-
</div>
|
|
559
|
-
<div class="stat-item">
|
|
560
|
-
<h3>24/7</h3>
|
|
561
|
-
<p>Active Development</p>
|
|
562
|
-
</div>
|
|
563
|
-
</div>
|
|
564
|
-
</div>
|
|
565
|
-
</div>
|
|
566
|
-
|
|
567
|
-
<section id="installation" class="installation">
|
|
568
|
-
<div class="container">
|
|
569
|
-
<h2>Quick Installation</h2>
|
|
570
|
-
<p>Get Matterbridge running in minutes with these simple commands.</p>
|
|
571
|
-
|
|
572
|
-
<h3 style="text-align: center; margin: 2rem 0 1rem; color: var(--primary-color);">NPM Installation</h3>
|
|
573
|
-
<div class="code-block">npm install -g matterbridge --omit=dev</div>
|
|
574
|
-
|
|
575
|
-
<h3 style="text-align: center; margin: 2rem 0 1rem; color: var(--primary-color);">Docker Installation</h3>
|
|
576
|
-
<div class="code-block">docker run -it --name matterbridge -v matterbridge:/root/.matterbridge -p 8283:8283 --network host luligu/matterbridge:latest</div>
|
|
577
|
-
|
|
578
|
-
<div style="text-align: center; margin-top: 2rem;">
|
|
579
|
-
<a href="README.md" class="btn btn-primary">📖 Full Installation Guide</a>
|
|
580
|
-
</div>
|
|
581
|
-
</div>
|
|
582
|
-
</section>
|
|
583
|
-
|
|
584
|
-
<section id="plugins" class="section">
|
|
585
|
-
<div class="container">
|
|
586
|
-
<h2>Popular Plugins</h2>
|
|
587
|
-
<p>Extend Matterbridge with our growing collection of official and community plugins.</p>
|
|
588
|
-
|
|
589
|
-
<div class="plugins-grid">
|
|
590
|
-
<div class="plugin-card">
|
|
591
|
-
<div class="plugin-header">
|
|
592
|
-
<img src="Shelly.svg" alt="Shelly" class="plugin-logo">
|
|
593
|
-
<h3>Shelly Plugin</h3>
|
|
594
|
-
</div>
|
|
595
|
-
<div class="plugin-content">
|
|
596
|
-
<p>Automatically discover and control all Shelly Gen 1, 2, 3, and 4 devices. Supports battery-powered devices, BLU devices, and sleep mode.</p>
|
|
597
|
-
<a href="https://github.com/Luligu/matterbridge-shelly" class="btn btn-primary">Learn More</a>
|
|
598
|
-
</div>
|
|
599
|
-
</div>
|
|
600
|
-
|
|
601
|
-
<div class="plugin-card">
|
|
602
|
-
<div class="plugin-header">
|
|
603
|
-
<img src="Zigbee2MQTT.svg" alt="Zigbee2MQTT" class="plugin-logo">
|
|
604
|
-
<h3>Zigbee2MQTT Plugin</h3>
|
|
605
|
-
</div>
|
|
606
|
-
<div class="plugin-content">
|
|
607
|
-
<p>Expose all your Zigbee2MQTT devices and groups to Matter. Production-level plugin with comprehensive device support.</p>
|
|
608
|
-
<a href="https://github.com/Luligu/matterbridge-zigbee2mqtt" class="btn btn-primary">Learn More</a>
|
|
609
|
-
</div>
|
|
610
|
-
</div>
|
|
611
|
-
|
|
612
|
-
<div class="plugin-card">
|
|
613
|
-
<div class="plugin-header">
|
|
614
|
-
<img src="HomeAssistant.svg" alt="Home Assistant" class="plugin-logo">
|
|
615
|
-
<h3>Home Assistant Plugin</h3>
|
|
616
|
-
</div>
|
|
617
|
-
<div class="plugin-content">
|
|
618
|
-
<p>Connect your Home Assistant devices and entities to Matter. Perfect companion for the official HA add-on.</p>
|
|
619
|
-
<a href="https://github.com/Luligu/matterbridge-hass" class="btn btn-primary">Learn More</a>
|
|
620
|
-
</div>
|
|
621
|
-
</div>
|
|
622
|
-
|
|
623
|
-
<div class="plugin-card">
|
|
624
|
-
<div class="plugin-header">
|
|
625
|
-
<img src="Somfy.svg" alt="Somfy" class="plugin-logo">
|
|
626
|
-
<h3>Somfy Tahoma Plugin</h3>
|
|
627
|
-
</div>
|
|
628
|
-
<div class="plugin-content">
|
|
629
|
-
<p>Control your Somfy Tahoma screen devices through Matter. Seamless integration with your smart home ecosystem.</p>
|
|
630
|
-
<a href="https://github.com/Luligu/matterbridge-somfy-tahoma" class="btn btn-primary">Learn More</a>
|
|
631
|
-
</div>
|
|
632
|
-
</div>
|
|
633
|
-
|
|
634
|
-
<div class="plugin-card">
|
|
635
|
-
<div class="plugin-header">
|
|
636
|
-
<img src="matterbridge.svg" alt="Matterbridge Webhooks" class="plugin-logo">
|
|
637
|
-
<h3>Webhooks Plugin</h3>
|
|
638
|
-
</div>
|
|
639
|
-
<div class="plugin-content">
|
|
640
|
-
<p>Expose any webhooks to Matter. Create virtual devices that can be controlled through HTTP requests, perfect for custom integrations.</p>
|
|
641
|
-
<a href="https://github.com/Luligu/matterbridge-webhooks" class="btn btn-primary">Learn More</a>
|
|
642
|
-
</div>
|
|
643
|
-
</div>
|
|
644
|
-
|
|
645
|
-
<div class="plugin-card">
|
|
646
|
-
<div class="plugin-header">
|
|
647
|
-
<img src="matterbridge.svg" alt="Matterbridge BTHome" class="plugin-logo">
|
|
648
|
-
<h3>BTHome Plugin</h3>
|
|
649
|
-
</div>
|
|
650
|
-
<div class="plugin-content">
|
|
651
|
-
<p>Expose BTHome devices to Matter using native Bluetooth. Works on all platforms with comprehensive device discovery and storage.</p>
|
|
652
|
-
<a href="https://github.com/Luligu/matterbridge-bthome" class="btn btn-primary">Learn More</a>
|
|
653
|
-
</div>
|
|
654
|
-
</div>
|
|
655
|
-
</div>
|
|
656
|
-
|
|
657
|
-
<div style="text-align: center; margin-top: 3rem;">
|
|
658
|
-
<a href="README.md#plugins" class="btn btn-primary">🔌 View All Plugins</a>
|
|
659
|
-
<a href="README-DEV.md" class="btn btn-secondary">🛠️ Create Your Own</a>
|
|
660
|
-
</div>
|
|
661
|
-
</div>
|
|
662
|
-
</section>
|
|
663
|
-
</main>
|
|
664
|
-
|
|
665
|
-
<footer>
|
|
666
|
-
<div class="container">
|
|
667
|
-
<div class="footer-content">
|
|
668
|
-
<div class="footer-section">
|
|
669
|
-
<h3>Documentation</h3>
|
|
670
|
-
<a href="README.md">Getting Started</a>
|
|
671
|
-
<a href="README-DEV.md">Development Guide</a>
|
|
672
|
-
<a href="README-DOCKER.md">Docker Setup</a>
|
|
673
|
-
<a href="README-SERVICE.md">Service Configuration</a>
|
|
674
|
-
<a href="README-NGINX.md">Nginx Setup</a>
|
|
675
|
-
</div>
|
|
676
|
-
|
|
677
|
-
<div class="footer-section">
|
|
678
|
-
<h3>Community</h3>
|
|
679
|
-
<a href="https://github.com/Luligu/matterbridge">GitHub Repository</a>
|
|
680
|
-
<a href="https://github.com/Luligu/matterbridge/discussions">Discussions</a>
|
|
681
|
-
<a href="https://github.com/Luligu/matterbridge/issues">Issue Tracker</a>
|
|
682
|
-
<a href="https://discord.gg/QX58CDe6hd">Discord Server</a>
|
|
683
|
-
</div>
|
|
684
|
-
|
|
685
|
-
<div class="footer-section">
|
|
686
|
-
<h3>Resources</h3>
|
|
687
|
-
<a href="https://www.npmjs.com/package/matterbridge">NPM Package</a>
|
|
688
|
-
<a href="https://hub.docker.com/r/luligu/matterbridge">Docker Hub</a>
|
|
689
|
-
<a href="https://codecov.io/gh/Luligu/matterbridge">Code Coverage</a>
|
|
690
|
-
<a href="https://www.buymeacoffee.com/luligugithub">Support Development</a>
|
|
691
|
-
</div>
|
|
692
|
-
|
|
693
|
-
<div class="footer-section">
|
|
694
|
-
<h3>Connect</h3>
|
|
695
|
-
<a href="https://www.youtube.com/watch?v=goNB9Cgh_Fk">YouTube Demo</a>
|
|
696
|
-
<a href="https://matter-smarthome.de/en/interview/an-alternative-to-the-official-matter-sdk/">Press Coverage</a>
|
|
697
|
-
<a href="https://www.matteralpha.com/how-to/how-to-configure-an-open-source-matter-bridge-at-home">Reviews</a>
|
|
698
|
-
</div>
|
|
699
|
-
</div>
|
|
700
|
-
|
|
701
|
-
<div class="footer-bottom">
|
|
702
|
-
<p>© 2025 Matterbridge. Licensed under Apache-2.0. Built with ❤️ by <a href="https://github.com/Luligu" style="color: #3b82f6;">Luligu</a>.</p>
|
|
703
|
-
</div>
|
|
704
|
-
</div>
|
|
705
|
-
</footer>
|
|
706
|
-
|
|
707
|
-
<script>
|
|
708
|
-
// Smooth scrolling for anchor links
|
|
709
|
-
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
710
|
-
anchor.addEventListener('click', function (e) {
|
|
711
|
-
e.preventDefault();
|
|
712
|
-
const target = document.querySelector(this.getAttribute('href'));
|
|
713
|
-
if (target) {
|
|
714
|
-
target.scrollIntoView({
|
|
715
|
-
behavior: 'smooth',
|
|
716
|
-
block: 'start'
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
|
-
});
|
|
720
|
-
});
|
|
721
|
-
|
|
722
|
-
// Add scroll effect to navigation
|
|
723
|
-
window.addEventListener('scroll', function() {
|
|
724
|
-
const nav = document.querySelector('nav');
|
|
725
|
-
if (window.scrollY > 100) {
|
|
726
|
-
nav.style.background = 'rgba(248, 250, 252, 0.95)';
|
|
727
|
-
} else {
|
|
728
|
-
nav.style.background = 'var(--surface)';
|
|
729
|
-
}
|
|
730
|
-
});
|
|
731
|
-
|
|
732
|
-
// Animate stats when they come into view
|
|
733
|
-
const observerOptions = {
|
|
734
|
-
threshold: 0.5,
|
|
735
|
-
rootMargin: '0px 0px -50px 0px'
|
|
736
|
-
};
|
|
737
|
-
|
|
738
|
-
const observer = new IntersectionObserver((entries) => {
|
|
739
|
-
entries.forEach(entry => {
|
|
740
|
-
if (entry.isIntersecting) {
|
|
741
|
-
const statItems = entry.target.querySelectorAll('.stat-item h3');
|
|
742
|
-
statItems.forEach((item, index) => {
|
|
743
|
-
const finalValue = item.textContent;
|
|
744
|
-
const isNumeric = finalValue.match(/\d+/);
|
|
745
|
-
if (isNumeric) {
|
|
746
|
-
animateNumber(item, parseInt(isNumeric[0]), finalValue);
|
|
747
|
-
}
|
|
748
|
-
});
|
|
749
|
-
observer.unobserve(entry.target);
|
|
750
|
-
}
|
|
751
|
-
});
|
|
752
|
-
}, observerOptions);
|
|
753
|
-
|
|
754
|
-
const statsSection = document.querySelector('.stats');
|
|
755
|
-
if (statsSection) {
|
|
756
|
-
observer.observe(statsSection);
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
function animateNumber(element, target, suffix) {
|
|
760
|
-
let current = 0;
|
|
761
|
-
const increment = target / 30;
|
|
762
|
-
const timer = setInterval(() => {
|
|
763
|
-
current += increment;
|
|
764
|
-
if (current >= target) {
|
|
765
|
-
element.textContent = suffix;
|
|
766
|
-
clearInterval(timer);
|
|
767
|
-
} else {
|
|
768
|
-
element.textContent = Math.floor(current) + suffix.replace(/\d+/, '');
|
|
769
|
-
}
|
|
770
|
-
}, 50);
|
|
771
|
-
}
|
|
772
|
-
</script>
|
|
773
|
-
</body>
|
|
774
|
-
</html>
|