diff --git a/src/lib/components/GatewaySummary.svelte b/src/lib/components/GatewaySummary.svelte
new file mode 100644
index 0000000..759002d
--- /dev/null
+++ b/src/lib/components/GatewaySummary.svelte
@@ -0,0 +1,50 @@
+
+
+{#each gateways as gateway}
+
+
+
+
+ {formatTemperature(gateway?.temperature)}°C
+
+
+ {sinceUpdate} s
+
+
+ {formatBattery(gateway?.battery_level)} V
+
+{/each}
diff --git a/src/lib/components/HiveSummary.svelte b/src/lib/components/HiveSummary.svelte
new file mode 100644
index 0000000..13aced7
--- /dev/null
+++ b/src/lib/components/HiveSummary.svelte
@@ -0,0 +1,56 @@
+
+
+{#each hives as hive}
+
+
+
+
+ {formatWeight(hive?.weight)}kg
+
+
+ {formatTemperature(hive?.temperature)}°C
+
+
+ {formatHumidity(hive?.humidity)}%
+
+{/each}
+
+
{sinceUpdate} s since last update
diff --git a/src/lib/store.ts b/src/lib/store.ts
new file mode 100644
index 0000000..c664e84
--- /dev/null
+++ b/src/lib/store.ts
@@ -0,0 +1,17 @@
+import { derived, writable } from 'svelte/store';
+import type { Writable } from 'svelte/store';
+import type IModal from '$lib/interfaces/IModal';
+import type { IGatewayTelemetry, IHiveTelemetry } from './interfaces/ITelemetry';
+
+// message queues
+export const hiveMessageQueue: Writable = writable();
+export const gatewayMessageQueue: Writable = writable();
+
+// setters
+export const addHiveMessage = (msg: IHiveTelemetry) => hiveMessageQueue.set(msg);
+export const addGatewayMessageQueue = (msg: IGatewayTelemetry) => gatewayMessageQueue.set(msg);
+
+// modal state
+export const modal: Writable = writable(null);
+export const modalOpen = derived(modal, ($modal) => $modal != null);
+export const resetModal = () => modal.set(null);