diff --git a/component-library/src/components/solenos/price-card.tsx b/component-library/src/components/solenos/price-card.tsx
index de03319..6f44fff 100644
--- a/component-library/src/components/solenos/price-card.tsx
+++ b/component-library/src/components/solenos/price-card.tsx
@@ -26,8 +26,8 @@ function PriceCard({
cadence: React.ReactNode
price: React.ReactNode
unit: React.ReactNode
- /** umlagefähig? tone drives soft-teal vs. soft-red pill */
- allocation: { label: React.ReactNode; tone: "positive" | "negative" }
+ /** optional legal cost-allocation note, shown only after review */
+ allocation?: { label: React.ReactNode; tone: "positive" | "negative" }
description: React.ReactNode
media?: React.ReactNode
className?: string
@@ -47,13 +47,15 @@ function PriceCard({
{price}
{unit}
-
- {allocation.tone === "positive" ? : }
- {allocation.label}
-
+ {allocation ? (
+
+ {allocation.tone === "positive" ? : }
+ {allocation.label}
+
+ ) : null}
{description}
diff --git a/component-library/src/components/solenos/site-footer.tsx b/component-library/src/components/solenos/site-footer.tsx
index faf0cc5..a2d9142 100644
--- a/component-library/src/components/solenos/site-footer.tsx
+++ b/component-library/src/components/solenos/site-footer.tsx
@@ -8,7 +8,7 @@ const COLUMNS: { title: string; links: { to: string; label: string }[] }[] = [
title: "Produkt",
links: [
{ to: "/produkte", label: "Produkte" },
- { to: "/produkte/uvi", label: "UVI" },
+ { to: "/produkte/uvi", label: "Verbrauchsinformation (UVI)" },
{ to: "/produkte/heizkostenabrechnung", label: "Heizkostenabrechnung" },
{ to: "/produkte/rauchwarnmelder", label: "Rauchwarnmelder" },
{
diff --git a/component-library/src/components/solenos/site-header.tsx b/component-library/src/components/solenos/site-header.tsx
index b93e53c..6f9f4ce 100644
--- a/component-library/src/components/solenos/site-header.tsx
+++ b/component-library/src/components/solenos/site-header.tsx
@@ -1,5 +1,5 @@
import * as React from "react"
-import { ChevronDown, Menu } from "lucide-react"
+import { Check, ChevronDown, Menu } from "lucide-react"
import { Link, NavLink, matchPath, useLocation } from "react-router-dom"
import { cn } from "@/lib/utils"
@@ -24,7 +24,7 @@ const AUDIENCES = [
/** mirrors the product registry in `@/pages/products/product-page` */
const PRODUCTS = [
- { to: "/produkte/uvi", label: "UVI" },
+ { to: "/produkte/uvi", label: "Verbrauchsinformation (UVI)" },
{ to: "/produkte/heizkostenabrechnung", label: "Heizkostenabrechnung" },
{ to: "/produkte/rauchwarnmelder", label: "Rauchwarnmelder" },
{
@@ -131,7 +131,33 @@ function useActivePill(activeKey: string | undefined) {
return { navRef, pill }
}
+function MenuLink({
+ to,
+ label,
+ pathname,
+}: {
+ to: string
+ label: string
+ pathname: string
+}) {
+ const current = Boolean(matchPath({ path: to, end: true }, pathname))
+
+ return (
+
+
+ {label}
+ {current ? : null}
+
+
+ )
+}
+
function NavMenu({ item, active }: { item: NavItem; active: boolean }) {
+ const { pathname } = useLocation()
+
return (
-
- Übersicht
-
+
- {item.menu?.map((a) => (
-
- {a.label}
-
+ {item.menu?.map((link) => (
+
))}
@@ -200,6 +222,8 @@ function DesktopNav() {
}
function MobileMenu() {
+ const { pathname } = useLocation()
+
return (
@@ -208,26 +232,25 @@ function MobileMenu() {
Menü öffnen
-
+
{NAV_ITEMS.map((item) =>
item.menu ? (
{item.label}
-
- Übersicht
-
- {item.menu.map((a) => (
-
- {a.label}
-
+
+ {item.menu.map((link) => (
+
))}
) : (
-
- {item.label}
-
+
)
)}
@@ -257,9 +280,6 @@ function SiteHeader() {
- {/*
- Preis berechnen
- */}
Login
diff --git a/component-library/src/components/solenos/trust-panel.tsx b/component-library/src/components/solenos/trust-panel.tsx
index b8973fc..8be9533 100644
--- a/component-library/src/components/solenos/trust-panel.tsx
+++ b/component-library/src/components/solenos/trust-panel.tsx
@@ -1,4 +1,6 @@
import * as React from "react"
+import { Link } from "react-router-dom"
+import { ArrowRight } from "lucide-react"
import { cn } from "@/lib/utils"
import { AssetRender, renders } from "@/components/solenos/site-assets"
@@ -6,6 +8,7 @@ import { AssetRender, renders } from "@/components/solenos/site-assets"
type TrustPanelItem = {
icon: React.ReactNode
label: React.ReactNode
+ to?: string
}
/**
@@ -14,6 +17,38 @@ type TrustPanelItem = {
* so the labels stay on one line next to the security render, with the
* follow-up link on the baseline underneath.
*/
+function TrustProperty({ item }: { item: TrustPanelItem }) {
+ const content = (
+ <>
+
+ {item.icon}
+
+
+ {item.label}
+
+ {item.to ? (
+
+ ) : null}
+ >
+ )
+ const className =
+ "flex items-center gap-4 rounded-xl bg-card px-5 py-3.5 shadow-card"
+
+ return item.to ? (
+
+ {content}
+
+ ) : (
+
{content}
+ )
+}
+
function TrustPanel({
title,
items,
@@ -44,17 +79,7 @@ function TrustPanel({
{items.map((item, i) => (
-
-
- {item.icon}
-
-
- {item.label}
-
-
+
))}
diff --git a/component-library/src/pages/audiences/audience-page.tsx b/component-library/src/pages/audiences/audience-page.tsx
index 8ef748a..a0695ed 100644
--- a/component-library/src/pages/audiences/audience-page.tsx
+++ b/component-library/src/pages/audiences/audience-page.tsx
@@ -29,6 +29,7 @@ function AudienceBreadcrumb({ current }: { current: string }) {
*/
function AudiencePage({
breadcrumb,
+ eyebrow,
title,
tagline,
lead,
@@ -40,6 +41,7 @@ function AudiencePage({
closing,
}: {
breadcrumb: string
+ eyebrow?: React.ReactNode
title: React.ReactNode
/** short bold subline under the H1 (e.g. "Bestellen. Montieren. Fertig.") */
tagline?: React.ReactNode
@@ -60,6 +62,7 @@ function AudiencePage({
<>
}
+ eyebrow={eyebrow}
title={title}
lead={
<>
diff --git a/component-library/src/pages/audiences/hauseigentuemer.tsx b/component-library/src/pages/audiences/hauseigentuemer.tsx
index b722ee2..ca35a21 100644
--- a/component-library/src/pages/audiences/hauseigentuemer.tsx
+++ b/component-library/src/pages/audiences/hauseigentuemer.tsx
@@ -110,9 +110,9 @@ const SELF_INSTALL_STEPS = [
media: (
),
- title: "Gebäude angeben",
+ title: "Gebäudedaten online erfassen",
description:
- "Daten zu Ihrem Gebäude und den Wohneinheiten in wenigen Schritten erfassen.",
+ "Daten zum Gebäude und zu den Wohneinheiten direkt online eingeben.",
},
{
media: (
@@ -121,29 +121,31 @@ const SELF_INSTALL_STEPS = [
>
),
- title: "Passende Ausstattung zusammenstellen",
- description: "Wir empfehlen die benötigte Ausstattung – Sie wählen aus.",
+ title: "Benötigte Ausstattung bestimmen lassen",
+ description:
+ "SolenOS ermittelt und konfiguriert aus den Objektdaten die passende notwendige beziehungsweise gesetzliche Mindestausstattung.",
},
{
media: (
),
title: "Vorkonfiguriert erhalten",
- description: "Ihre Technik kommt vorkonfiguriert und einsatzbereit an.",
+ description:
+ "SolenOS prüft die Ausstattung vor dem Versand und ordnet die Geräte den vorgesehenen Wohnungen zu.",
},
{
media: ,
title: "Montieren",
description:
- "Sie montieren mit Ihrem Handwerker oder selbst – flexibel und unkompliziert.",
+ "Sie montieren selbst oder gemeinsam mit Ihrem eigenen Handwerker.",
},
{
media: (
),
- title: "SolenOS übernimmt",
+ title: "Betrieb übernehmen lassen",
description:
- "Wir übernehmen Ablesung, Übertragung und Auswertung automatisch.",
+ "SolenOS übernimmt Einrichtung, Datenübertragung und laufenden Betrieb.",
},
]
@@ -165,13 +167,13 @@ const WHY_SOLENOS: BenefitGridItem[] = [
},
{
icon: ,
- title: "Alles an einem Ort",
- text: "UVI, Abrechnung, Geräte und weitere Gebäudedienstleistungen werden zentral verwaltet.",
+ title: "Getrennte Portalrechte",
+ text: "Sie sehen Gebäude, Wohnungen, Geräte, Status und Verbrauchswerte an einer Stelle. Bewohner sehen ausschließlich Daten ihrer eigenen Wohnung und ihres eigenen Nutzungszeitraums.",
},
{
icon: ,
- title: "Weniger laufender Aufwand",
- text: "Nach der Einrichtung werden Verbrauchsdaten automatisch erfasst und verarbeitet.",
+ title: "Keine regelmäßigen Ablesebesuche",
+ text: "Verbrauchsdaten werden fernabgelesen; Heizkostenabrechnungen werden im Portal erstellt und versandfertig bereitgestellt.",
},
]
@@ -187,7 +189,7 @@ const VARIANT_ROWS: ComparisonRow[] = [
label: "Installation",
cells: ["Kunde / eigener Fachbetrieb", "organisiert durch SolenOS"],
},
- { label: "Softwareeinrichtung", cells: ["vorbereitet durch SolenOS", "SolenOS"] },
+ { label: "Softwarekonfiguration vor Ort", cells: ["nicht erforderlich – durch SolenOS eingerichtet", "nicht erforderlich – durch SolenOS eingerichtet"] },
{ label: "Laufender Betrieb", cells: ["SolenOS", "SolenOS"] },
{
label: "Kosten",
@@ -199,12 +201,12 @@ const FAQS: FaqItem[] = [
{
question: "Kann ich die Geräte wirklich selbst installieren?",
answer:
- "Ja. Die Technik kommt vorkonfiguriert und objektbezogen bei Ihnen an. Montiert wird von Ihnen, Ihrem Handwerker oder – wenn Sie die Komplettlösung wählen – von SolenOS. Eine aufwendige Softwarekonfiguration vor Ort ist in keinem Fall erforderlich.",
+ "Ja. Die Technik kommt vorkonfiguriert und objektbezogen bei Ihnen an. Montiert wird von Ihnen, Ihrem Handwerker oder – bei der Komplettlösung – von SolenOS. Eine Softwarekonfiguration vor Ort ist in keinem Fall erforderlich.",
},
{
- question: "Was kostet SolenOS für mein Gebäude?",
+ question: "Wann erhalte ich den verbindlichen Gesamtpreis?",
answer:
- "Der Konfigurator gibt Ihnen mit wenigen Angaben zu Gebäude, Wohnungen und gewünschten Leistungen eine erste Preisindikation. Den genauen Preis erhalten Sie, sobald die tatsächlichen Gebäudedaten ergänzt sind.",
+ "Nach dem Schnellkonfigurator ergänzen Sie die Gebäudedetails und Fotos vorhandener Einbausituationen. SolenOS prüft die notwendige Ausstattung und erstellt anschließend das verbindliche Gesamtangebot.",
},
{
question: "Wer übernimmt Ablesung, Übertragung und Auswertung?",
@@ -214,7 +216,7 @@ const FAQS: FaqItem[] = [
{
question: "Was sehe ich im SolenOS Portal?",
answer:
- "Ihre Gebäude, Wohnungen und Geräte an einer Stelle – inklusive Status der Geräte und der laufenden Verbrauchswerte. Bewohner erhalten ihren eigenen Zugang zum Mieterportal.",
+ "Sie sehen Gebäude, Wohnungen, Geräte, Gerätestatus und Verbrauchswerte an einer Stelle. Bewohner erhalten einen eigenen Zugang und sehen ausschließlich Daten ihrer eigenen Wohnung und ihres eigenen Nutzungszeitraums. Heizkostenabrechnungen werden im Portal erstellt und versandfertig bereitgestellt.",
},
{
question: "Kann ich später weitere Gebäude oder Geräte ergänzen?",
@@ -227,15 +229,16 @@ export default function HauseigentuemerPage() {
return (
Messdienstleistungen für Ihr Mehrfamilienhaus. Einfach organisiert.
}
- lead="UVI, Heizkostenabrechnung und Rauchwarnmelder mit vorkonfigurierter Technik – selbst installieren oder als Komplettlösung beauftragen."
+ lead="Monatliche Verbrauchsinformation (UVI), Heizkostenabrechnung und Rauchwarnmelder mit vorkonfigurierter Technik – selbst installieren oder als Komplettlösung beauftragen."
actions={
- Preis für mein Gebäude berechnen
+ Konfiguration für mein Gebäude starten
}
visual={ }
@@ -267,12 +270,12 @@ export default function HauseigentuemerPage() {
}
title="Welche Lösung passt zu Ihrem Gebäude?"
- description="Mit wenigen Angaben zur ersten Preisindikation – oder direkt die Komplettlösung anfragen."
+ description="Leistungen und Gebäudedaten online erfassen – oder direkt die Komplettlösung anfragen."
actions={
<>
- Preis für mein Gebäude berechnen
+ Konfiguration für mein Gebäude starten
@@ -293,13 +296,7 @@ export default function HauseigentuemerPage() {
- Sie organisieren die Montage.
-
- SolenOS übernimmt den digitalen Betrieb.
- >
- }
+ takeaway="Sie montieren selbst oder mit Ihrem Handwerker. Sobald die Geräte installiert sind, übernimmt SolenOS Einrichtung, Datenübertragung und laufenden Betrieb."
visual={
- Preis berechnen
+ Konfiguration starten
}
/>
- Ein Ansprechpartner. Alles aus einer Hand.
-
- Komplettlösung mit voller Betreuung.
- >
- }
+ lead="SolenOS übernimmt Installation und Einrichtung – inklusive Service."
+ takeaway="Komplettlösung mit voller Betreuung."
visual={ }
action={
- Preis berechnen
+ Konfiguration starten
}
/>
diff --git a/component-library/src/pages/audiences/hausverwaltungen.tsx b/component-library/src/pages/audiences/hausverwaltungen.tsx
index 727f6fc..63ad3b9 100644
--- a/component-library/src/pages/audiences/hausverwaltungen.tsx
+++ b/component-library/src/pages/audiences/hausverwaltungen.tsx
@@ -67,9 +67,9 @@ const rolloutSteps = [
"Die Geräte werden passend zum jeweiligen Gebäude beziehungsweise zur jeweiligen Nutzungseinheit ausgeliefert.",
},
{
- title: "Bestehende Monteure installieren",
+ title: "Vor Ort nur montieren",
description:
- "Eigene Mitarbeiter, Hausmeister oder bestehende Installationspartner können die Montage übernehmen. Eine umfangreiche Softwarekonfiguration vor Ort ist nicht erforderlich.",
+ "Eigene Mitarbeiter, Hausmeister oder bestehende Installationspartner montieren ausschließlich die Geräte. SolenOS übernimmt die Softwarekonfiguration.",
},
{
title: "Bewohner einladen",
@@ -79,7 +79,7 @@ const rolloutSteps = [
]
const noEffortItems = [
- { icon: , title: "Keine aufwendige Gerätekonfiguration." },
+ { icon: , title: "Keine Softwarekonfiguration vor Ort." },
{ icon: , title: "Keine manuelle Anlage jedes einzelnen Gerätes." },
{
icon: ,
@@ -135,7 +135,7 @@ const faqs: FaqItem[] = [
{
question: "Wie viel Aufwand entsteht für unser Team?",
answer:
- "Die Gebäude- und Wohnungsdaten werden bei der Auftragserstellung einmal erfasst und anschließend weiterverwendet. Es entfällt die aufwendige Gerätekonfiguration und die manuelle Anlage jedes einzelnen Gerätes.",
+ "Die Gebäude- und Wohnungsdaten werden bei der Auftragserstellung einmal erfasst und anschließend weiterverwendet. Vor Ort werden nur die Geräte montiert; SolenOS übernimmt die Softwarekonfiguration und Geräteanlage.",
},
{
question: "Können unsere bestehenden Monteure installieren?",
@@ -188,12 +188,12 @@ export default function HausverwaltungenPage() {
- Portfolio kalkulieren
+ Portfolio konfigurieren
Rollout besprechen
@@ -204,11 +204,12 @@ export default function HausverwaltungenPage() {
features={[
{
icon: ,
- title: "Vorkonfigurierte Hardware",
+ title: "Zum Einbau vorkonfigurierte Messeinrichtungen",
},
{
icon: ,
- title: "Wenig Aufwand vor Ort",
+ title: "Vor Ort nur montieren",
+ sub: "Keine Softwarekonfiguration vor Ort",
},
{
icon: ,
@@ -216,7 +217,7 @@ export default function HausverwaltungenPage() {
},
{
icon: ,
- title: "Skalierbar für wachsende Portfolios",
+ title: "Für wachsende Portfolios",
},
]}
closing={
@@ -224,11 +225,11 @@ export default function HausverwaltungenPage() {
}
title="Wie sieht Ihr Portfolio aus?"
- description="Erhalten Sie zunächst mit wenigen Angaben eine Preisindikation für mehrere Gebäude – oder sprechen Sie mit uns über vorhandene Messtechnik und den geplanten Rollout."
+ description="Erfassen Sie Gebäude und Leistungen online – oder sprechen Sie mit uns über vorhandene Messtechnik und den geplanten Rollout."
actions={
<>
- Portfolio kalkulieren
+ Portfolio konfigurieren
Rollout besprechen
@@ -242,7 +243,7 @@ export default function HausverwaltungenPage() {
diff --git a/component-library/src/pages/audiences/installateure.tsx b/component-library/src/pages/audiences/installateure.tsx
index 52ff66f..37e03aa 100644
--- a/component-library/src/pages/audiences/installateure.tsx
+++ b/component-library/src/pages/audiences/installateure.tsx
@@ -21,7 +21,7 @@ import { AssetRender, renders, vectors } from "@/components/solenos/site-assets"
import { AudiencePage, AudienceClosing } from "@/pages/audiences/audience-page"
const KUNDEN_BEDARFE = [
- "UVI",
+ "Monatliche Verbrauchsinformation (UVI)",
"Heizkostenabrechnung",
"fernauslesbare Messtechnik",
"Rauchwarnmelder",
@@ -42,7 +42,7 @@ const KEINE_HUERDEN = [
},
{
icon: ,
- title: "Keine komplizierte Softwareeinrichtung auf der Baustelle",
+ title: "Keinerlei Softwarekonfiguration vor Ort",
},
]
@@ -81,7 +81,7 @@ const FAQS: FaqItem[] = [
{
question: "Muss ich vor Ort Software konfigurieren?",
answer:
- "Nein. Auf der Baustelle bleibt im Wesentlichen die Montage. Eine komplizierte Softwareeinrichtung am Gebäude ist nicht vorgesehen.",
+ "Nein. Vor Ort montieren Sie ausschließlich die vorgesehenen Geräte. Die gesamte Softwarekonfiguration übernimmt SolenOS.",
},
{
question: "Bleibt der Kunde mein Kunde?",
@@ -102,7 +102,7 @@ export default function InstallateurePage() {
>
}
tagline="Bestellen. Montieren. Fertig."
- lead="SolenOS für Ihre Kunden installieren – ohne Partnerprogramm, verpflichtende Zertifizierung oder aufwendige Softwarekonfiguration."
+ lead="SolenOS für Ihre Kunden installieren – ohne Partnerprogramm, verpflichtende Zertifizierung oder jegliche Softwarekonfiguration vor Ort."
actions={
Gebäude für meinen Kunden konfigurieren
@@ -140,12 +140,12 @@ export default function InstallateurePage() {
},
{
icon: ,
- title: "Vorkonfigurierte Hardware",
+ title: "Zum Einbau vorkonfigurierte Messeinrichtungen",
},
{
icon: ,
- title: "Einfache Installation",
- sub: "Keine Softwarekonfiguration",
+ title: "Vor Ort nur montieren",
+ sub: "Keinerlei Softwarekonfiguration vor Ort",
},
{
icon: ,
@@ -156,7 +156,7 @@ export default function InstallateurePage() {
closing={
diff --git a/component-library/src/pages/audiences/messdienstleister.tsx b/component-library/src/pages/audiences/messdienstleister.tsx
index 31daeeb..a4fbe0a 100644
--- a/component-library/src/pages/audiences/messdienstleister.tsx
+++ b/component-library/src/pages/audiences/messdienstleister.tsx
@@ -28,10 +28,10 @@ const platformRequirements = [
]
const whiteLabelItems = [
- "eigenes Branding",
+ "Optionen für Ihr eigenes Logo im abgestimmten Umfang",
"eigene Kundenbeziehung",
"mandantenfähige Verwaltung",
- "Endkundenportale",
+ "klar vereinbarte SolenOS- und Anbieterkennzeichnung",
"APIs und Datenexporte",
"Geräteverwaltung",
"technischer Support",
@@ -40,7 +40,7 @@ const whiteLabelItems = [
const platformCapabilities = [
{
title: "Gerätekompatibilität",
- sub: "Einbindung unterschiedlicher Zähler- und Gerätetypen auf Basis geeigneter Standards.",
+ sub: "OMS-kompatible Geräte verschiedener Hersteller einbinden.",
},
{
title: "Gateway-Infrastruktur",
@@ -63,8 +63,8 @@ const platformCapabilities = [
sub: "Kunden und Bestände getrennt innerhalb einer gemeinsamen Plattform verwalten.",
},
{
- title: "White Label",
- sub: "SolenOS-Infrastruktur unter der Marke des Messdienstleisters einsetzen.",
+ title: "Eigenmarken-Option",
+ sub: "Logo und Kennzeichnung im gemeinsam festgelegten Umfang einsetzen.",
},
]
@@ -73,7 +73,7 @@ const businessComponents = [
"Plattformgebühren",
"Mengenstaffeln",
"wiederkehrende Gebühren",
- "White-Label-Konditionen",
+ "Konditionen für Eigenmarken-Optionen",
"Support- und Servicelevel",
"mögliche Mindestmengen",
]
@@ -82,9 +82,9 @@ const stackFlow = ["Ihre Kunden", "Ihr Messdienst", "SolenOS Plattform"]
const faqs: FaqItem[] = [
{
- question: "Können wir SolenOS unter unserer eigenen Marke anbieten?",
+ question: "Können wir SolenOS mit unserem eigenen Logo anbieten?",
answer:
- "Ja. SolenOS ist als technische Grundlage für Dienstleistungen unter Ihrer Marke vorgesehen – mit eigenem Branding, mandantenfähiger Verwaltung und Endkundenportalen in Ihrem Auftritt.",
+ "Optional kann SolenOS mit Ihrem eigenen Logo beziehungsweise unter Ihrer Eigenmarke eingesetzt werden. Für welche Oberflächen das gilt und wie SolenOS dort gekennzeichnet wird, legen wir vorab gemeinsam fest.",
},
{
question: "Behalten wir die Kundenbeziehung?",
@@ -104,7 +104,7 @@ const faqs: FaqItem[] = [
{
question: "Wie werden die Konditionen festgelegt?",
answer:
- "Individuell beziehungsweise mengenabhängig – mit anderen Geschäftsmodellen, Mengenstaffeln und gegebenenfalls White-Label-Konditionen als im öffentlichen Preiskonfigurator. Die konkreten Konditionen werden nicht öffentlich dargestellt.",
+ "Die Konditionen werden passend zu Leistungsumfang, Bestandsgröße, Support und vereinbarten Eigenmarken-Optionen gemeinsam festgelegt. Unbestätigte Tarife oder Mindestmengen werden nicht vorab zugesagt.",
},
]
@@ -138,7 +138,7 @@ export default function MessdienstleisterPage() {
breadcrumb="Messdienstleister"
title="Für Messdienstleister"
tagline="Ihre Services. Unsere Plattform."
- lead="Nutzen Sie SolenOS als technische Grundlage für Ihren eigenen Messdienst – skalierbar und zuverlässig."
+ lead="Nutzen Sie SolenOS als technische Grundlage für Ihren eigenen Messdienst – für kleine Bestände und große Wohnungsportfolios."
actions={
<>
@@ -153,8 +153,8 @@ export default function MessdienstleisterPage() {
features={[
{
icon: ,
- title: "White Label",
- sub: "Ihr Branding, Ihre Kunden",
+ title: "Optional mit Ihrem eigenen Logo",
+ sub: "Unter Ihrer Eigenmarke im vereinbarten Umfang",
},
{
icon: ,
@@ -163,8 +163,8 @@ export default function MessdienstleisterPage() {
},
{
icon: ,
- title: "Skalierbare Plattform",
- sub: "Für jedes Geschäftsmodell",
+ title: "Für wachsende Bestände",
+ sub: "Von kleinen Beständen bis zu großen Wohnungsportfolios",
},
{
icon: ,
@@ -233,8 +233,8 @@ export default function MessdienstleisterPage() {
@@ -267,8 +267,8 @@ export default function MessdienstleisterPage() {
@@ -291,8 +291,8 @@ export default function MessdienstleisterPage() {
diff --git a/component-library/src/pages/configurator.tsx b/component-library/src/pages/configurator.tsx
index b81a30b..a2f7faf 100644
--- a/component-library/src/pages/configurator.tsx
+++ b/component-library/src/pages/configurator.tsx
@@ -1,6 +1,6 @@
import * as React from "react"
-import { useSearchParams } from "react-router-dom"
-import { Ban, Check, CircleCheck, Euro, Plus, X } from "lucide-react"
+import { Link, useSearchParams } from "react-router-dom"
+import { Check, Plus, X } from "lucide-react"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
@@ -22,7 +22,6 @@ import {
type RenderAsset,
} from "@/components/solenos/site-assets"
import { cn } from "@/lib/utils"
-import { useAnimatedNumber } from "@/lib/use-animated-number"
type Heat = "heizkoerper" | "fussbodenheizung" | "gemischt" | "unbekannt"
@@ -50,22 +49,6 @@ const INITIAL_BUILDING: Building = {
zimmer: 3,
}
-/** Grundpreise je Wohnung / Monat – Selbstmontage, wie in der Klarpreis-Liste. */
-const UVI_MONTHLY = 10.5
-const INSPECTION_MONTHLY = 2.2
-/** Aufschlag je Monatsposition, wenn SolenOS montiert – Platzhalter bis zum finalen Preismodell. */
-const INSTALL_MONTHLY_SURCHARGE = 2
-/** RWM-Hardware je Wohnung einmalig, inklusive Montage – wie in der Klarpreis-Liste. */
-const RWM_ONE_TIME_INSTALLED = 42
-/** Selbstmontage durch Kunde oder Fachbetrieb – Platzhalter bis zum finalen Preismodell. */
-const RWM_ONE_TIME_SELF = 30
-
-function formatEuro(value: number) {
- return value.toLocaleString("de-DE", {
- minimumFractionDigits: 2,
- maximumFractionDigits: 2,
- })
-}
/**
* Keeps a partially edited number field empty instead of snapping it to 0, so
@@ -90,13 +73,14 @@ function settle(value: number | "", min: number) {
/**
* Deep-link preset. Pages elsewhere on the site link into the configurator with
* parts of the form already answered, e.g. `/konfigurator?installation=0` for
- * the self-install route. Supported params: `installation`, `uvi`, `rwm`,
- * `adresse`, `heizung`, `wohnungen`, `zimmer`. Missing or unreadable values
- * keep the page defaults; numbers below the field minimum settle at it, just
- * as they do when typed into the form.
+ * the self-install route. Supported params: `installation`, `uvi`,
+ * `abrechnung`, `rwm`, `adresse`, `heizung`, `wohnungen`, `zimmer`. Missing or
+ * unreadable values keep the page defaults; numbers below the field minimum
+ * settle at it, just as they do when typed into the form.
*/
type Preset = {
uvi?: boolean
+ billing?: boolean
rwm?: boolean
install?: boolean
/** Seeds the single building the configurator starts with. */
@@ -149,6 +133,7 @@ function readPreset(params: URLSearchParams): Preset {
return {
uvi: presetFlag(params.get("uvi")),
+ billing: presetFlag(params.get("abrechnung")),
rwm: presetFlag(params.get("rwm")),
install: presetFlag(params.get("installation")),
building,
@@ -185,35 +170,61 @@ function StepCard({
* Selectable service tile (step 1) — the active option carries a brand border.
*/
function ServiceOption({
+ id,
checked,
onCheckedChange,
title,
description,
}: {
+ id: string
checked: boolean
onCheckedChange: (checked: boolean) => void
title: string
description: string
}) {
return (
-
- onCheckedChange(v === true)}
- className="mt-0.5"
- />
-
- {title}
- {description}
-
-
+
+
onCheckedChange(value === true)}
+ aria-describedby={`${id}-description ${id}-state`}
+ className="mt-0.5 size-6"
+ />
+
+
+
+ {title}
+
+
+ {checked ? "Enthalten · abwählbar" : "Hinzufügen"}
+
+
+
+ {description}
+
+
+
+
)
}
@@ -270,57 +281,21 @@ function PackageCard({
/>
{included ? null : (
- Leistung in Schritt 1 auswählen, um sie in den Preis aufzunehmen.
+ Leistung in Schritt 1 auswählen, um sie in den Leistungsumfang
+ aufzunehmen.
)}
)
}
-/**
- * One position of the price indication: figure, cadence and whether the
- * position can be passed on to tenants (umlagefähig). Wording follows the
- * Klarpreis price list.
- */
-function PriceRow({
- label,
- amount,
- unit,
- note,
- allocatable,
-}: {
- label: string
- amount: number
- unit: string
- note?: string
- allocatable: boolean
-}) {
- const shown = useAnimatedNumber(amount)
-
- return (
-
-
{label}
-
- ca. {formatEuro(shown)}
- {"\u00A0"}€
-
-
{unit}
- {note ? (
-
{note}
- ) : null}
-
- {allocatable ? : }
- {allocatable ? "Umlagefähig" : "Nicht umlagefähig"}
-
-
- )
-}
export default function ConfiguratorPage() {
const [searchParams] = useSearchParams()
const preset = React.useMemo(() => readPreset(searchParams), [searchParams])
const [uvi, setUvi] = React.useState(preset.uvi ?? true)
+ const [billing, setBilling] = React.useState(preset.billing ?? true)
const [rwm, setRwm] = React.useState(preset.rwm ?? true)
const [buildings, setBuildings] = React.useState
(() => [
{ ...INITIAL_BUILDING, ...preset.building },
@@ -338,6 +313,7 @@ export default function ConfiguratorPage() {
if (appliedPreset.current === preset) return
appliedPreset.current = preset
setUvi(preset.uvi ?? true)
+ setBilling(preset.billing ?? true)
setRwm(preset.rwm ?? true)
setInstall(preset.install ?? true)
setBuildings([{ ...INITIAL_BUILDING, ...preset.building }])
@@ -360,15 +336,6 @@ export default function ConfiguratorPage() {
}
const totalUnits = buildings.reduce((sum, b) => sum + (b.wohnungen || 0), 0)
- const installSurcharge = install ? INSTALL_MONTHLY_SURCHARGE : 0
- const uviMonthly = UVI_MONTHLY + installSurcharge
- const inspectionMonthly = INSPECTION_MONTHLY + installSurcharge
- const installNote = install
- ? `inklusive ${formatEuro(INSTALL_MONTHLY_SURCHARGE)}\u00A0€ Installationsanteil`
- : undefined
- const rwmRatePerUnit = install ? RWM_ONE_TIME_INSTALLED : RWM_ONE_TIME_SELF
- /* RWM hardware is billed once per Wohnung – the estimate is the sum. */
- const rwmOneTimeTotal = rwm ? rwmRatePerUnit * totalUnits : 0
return (
@@ -383,7 +350,7 @@ export default function ConfiguratorPage() {
/>
@@ -393,16 +360,25 @@ export default function ConfiguratorPage() {
+
@@ -414,29 +390,38 @@ export default function ConfiguratorPage() {
: "border-border bg-card"
)}
>
-
-
+
+
+ Montage durch SolenOS
+
+
+ {install ? "SolenOS montiert" : "Selbstmontage"}
+
+
+
- Installation durch SolenOS
-
-
{install
- ? "SolenOS organisiert die Montage – Geräte- und Monatspreise enthalten die Installation."
- : "Sie selbst, Ihr Hausmeister oder Ihr Fachbetrieb montiert die Geräte."}
+ ? "SolenOS übernimmt Montage und Softwarekonfiguration. Der geprüfte Gesamtpreis folgt mit dem verbindlichen Angebot."
+ : "Sie, Ihr Hausmeister oder Ihr Fachbetrieb montieren. Eine Softwarekonfiguration vor Ort ist nicht erforderlich."}
-
+
{buildings.map((b, i) => (
-
+
+
+
+ So geht es nach der E-Mail weiter
+
+
+
+ Wir speichern Ihre bisherige Auswahl und senden Ihnen einen
+ persönlichen Link.
+
+
+ Über den Link ergänzen Sie die Gebäudedetails und laden im
+ Portal Fotos vorhandener wasserführender Einbausituationen
+ hoch. Fotos ersetzen Maße und Typangaben, soweit sie eine
+ eindeutige Prüfung ermöglichen.
+
+
+ SolenOS prüft die Angaben und Fotos manuell, bestimmt die
+ endgültige Ausstattung und erstellt anschließend den genauen
+ Gesamtpreis beziehungsweise ein verbindliches Angebot.
+
+
+
+ Beispiel für spätere Detailfragen: Kinderzimmer und regelmäßig
+ genutzte Gästezimmer zählen als Schlafräume; ein dauerhaftes
+ Büro nicht.
+
+
- {/* Right column: sticky price indication */}
+ {/* Right column: sticky configuration summary */}
- Geschätzter Preis
+ Ihre Konfiguration
-
+
- {uvi || rwm ? (
-
- {uvi ? (
-
- ) : null}
- {rwm ? (
- <>
- {uvi ?
: null}
-
-
-
- >
- ) : null}
-
- ) : (
-
- Wählen Sie in Schritt 1 mindestens eine Leistung, um eine
- Preisindikation zu erhalten.
+
+ {buildings.length} Gebäude · {totalUnits}{" "}
+ {totalUnits === 1 ? "Wohnung" : "Wohnungen"}
+
+
+
+
+ Gewählte Leistungen
- )}
-
- {install
- ? "Preise inklusive Montage durch SolenOS. "
- : "Preise ohne Montage – Installation durch Sie oder Ihren Fachbetrieb. "}
- Die erste Berechnung ist eine unverbindliche Preisindikation.
- Der genaue Preis ergibt sich aus der vollständigen
- Objektkonfiguration.
+
+
+ {uvi ? (
+
+ ) : (
+
+ )}
+
+ Monatliche Verbrauchsinformation
+ {uvi ? " – enthalten" : " – nicht enthalten"}
+
+
+
+ {billing ? (
+
+ ) : (
+
+ )}
+
+ Heizkostenabrechnung
+ {billing ? " – enthalten" : " – nicht enthalten"}
+
+
+
+ {rwm ? (
+
+ ) : (
+
+ )}
+
+ Rauchwarnmelder
+ {rwm ? " – enthalten" : " – nicht enthalten"}
+
+
+
+
+
+ {install
+ ? "Montage durch SolenOS"
+ : "Montage durch Sie oder Ihren Fachbetrieb"}
+
+
+
+
+
+
+ Geprüfter Gesamtpreis nach Detailkonfiguration
+
+
+ Wir veröffentlichen keine ungeprüften Preiswerte. Nach der
+ manuellen Prüfung erhalten Sie ein verbindliches
+ Gesamtangebot mit der erforderlichen Gateway-Infrastruktur,
+ den gewählten Leistungen und der gewählten Montagevariante.
@@ -641,22 +695,30 @@ export default function ConfiguratorPage() {
- {/* Was ist in der Schätzung enthalten? */}
+ {/* Vollständiger Leistungsumfang des späteren Gesamtangebots */}
-
-
+
+
diff --git a/component-library/src/pages/for-whom.tsx b/component-library/src/pages/for-whom.tsx
index 0a1757c..f340b6f 100644
--- a/component-library/src/pages/for-whom.tsx
+++ b/component-library/src/pages/for-whom.tsx
@@ -62,11 +62,11 @@ const AUDIENCES: Record<
tab: "Hausverwaltungen",
tabIcon:
,
headline: "Viele Gebäude. Ein einfacher Rollout.",
- text: "Erfassen Sie Ihre Objekte einmal, erhalten Sie vorkonfigurierte Hardware und nutzen Sie bestehende Mitarbeiter oder Installationspartner für die Montage.",
+ text: "Erfassen Sie Ihre Objekte einmal, erhalten Sie vorkonfigurierte Messeinrichtungen und nutzen Sie bestehende Mitarbeiter oder Installationspartner ausschließlich für die Montage.",
bullets: [
"standardisierter Rollout",
"vorkonfigurierte Geräte",
- "wenig Softwarearbeit vor Ort",
+ "keine Softwarekonfiguration vor Ort",
"zentrale Portfolioverwaltung",
"geringer administrativer Aufwand",
"schnelle Erweiterung um weitere Gebäude",
@@ -79,14 +79,14 @@ const AUDIENCES: Record<
tab: "Messdienstleister",
tabIcon:
,
headline: "Ihre Messdienstleistung. Unsere Infrastruktur.",
- text: "Nutzen Sie SolenOS als technische Grundlage für Ihre eigenen Dienstleistungen – mit Hardware, Plattform, Gerätemanagement und optionalem White Label.",
+ text: "Nutzen Sie SolenOS als technische Grundlage für Ihre eigenen Dienstleistungen – mit Hardware, Plattform, Gerätemanagement und optional mit Ihrem eigenen Logo (White Label).",
bullets: [
"technische Plattform",
- "Gerätekompatibilität",
- "Skalierbarkeit",
+ "OMS-kompatible Geräte verschiedener Hersteller",
+ "für kleine Bestände und große Wohnungsportfolios",
"APIs und Integrationen",
- "White Label",
- "individuelles Geschäftsmodell",
+ "Optionen für eigenes Logo und Eigenmarke",
+ "individuell vereinbarte Konditionen",
],
cta: "SolenOS für Messdienstleister",
href: "/fuer-wen/messdienstleister",
@@ -100,8 +100,8 @@ const AUDIENCES: Record<
bullets: [
"kein verpflichtender Partnerstatus",
"keine Mindestabnahme",
- "vorkonfigurierte Hardware",
- "keine aufwendige Softwarekonfiguration",
+ "zum Einbau vorkonfigurierte Messeinrichtungen",
+ "keinerlei Softwarekonfiguration vor Ort",
"bestehende Kundenbeziehung bleibt erhalten",
],
cta: "SolenOS für Installateure",
diff --git a/component-library/src/pages/home.tsx b/component-library/src/pages/home.tsx
index 36a669e..828555f 100644
--- a/component-library/src/pages/home.tsx
+++ b/component-library/src/pages/home.tsx
@@ -104,11 +104,12 @@ const operationsScope: ExpandingCard[] = [
/>
),
title: "Heizkostenabrechnung",
- text: "Die erfassten Verbrauchsdaten bilden die Grundlage für die jährliche Heizkostenabrechnung.",
+ text: "Aus den erfassten Verbrauchsdaten wird die jährliche Heizkostenabrechnung im Online-Portal erstellt und bereitgestellt.",
points: [
"Verteilung der Wärme- und Warmwasserkosten nach HeizkostenV",
"Berücksichtigung von Nutzerwechseln und Leerständen",
- "Einzelabrechnung je Wohnung mit den Pflichtangaben nach § 6a Absatz 3",
+ "versandfertige Einzelabrechnung je Wohnung im Online-Portal",
+ "Pflichtangaben nach § 6a Absatz 3 HeizkostenV",
],
to: "/produkte/heizkostenabrechnung",
},
@@ -171,7 +172,7 @@ const operationsScope: ExpandingCard[] = [
title: "Gateway und Datenübertragung",
text: "Die Messdaten werden zentral gesammelt und an SolenOS übertragen.",
points: [
- "ein Gateway je Gebäude empfängt die Funkpakete aller angebundenen Geräte",
+ "die erforderliche Gateway-Infrastruktur wird passend zum Objekt bestimmt",
"Übertragung per Mobilfunk, ohne Internetanschluss im Gebäude",
"TLS-verschlüsselte Übertragung an die Plattform",
],
@@ -191,11 +192,11 @@ const operationsScope: ExpandingCard[] = [
/>
),
title: "Portale und Verwaltung",
- text: "Gebäude, Wohnungen, Geräte und Verbrauchsdaten werden zentral verwaltet. Bewohner erhalten Zugriff auf die für sie vorgesehenen Informationen.",
+ text: "Eigentümer betreuen Gebäude, Wohnungen, Geräte und Verbrauchsdaten zentral. Bewohner haben ihre persönliche Übersicht im Mieterportal.",
points: [
"Portalzugang für Eigentümer und Verwaltung",
- "Bewohner rufen ihre Information im Mieterportal ab",
- "rollenbasierte Zugriffsrechte",
+ "eigener Mieterportal-Zugang für jede Wohnung",
+ "ausschließlich Daten der eigenen Wohnung und des eigenen Nutzungszeitraums sichtbar",
],
},
]
@@ -203,52 +204,42 @@ const operationsScope: ExpandingCard[] = [
const processSteps = [
{
media:
,
- title: "Gebäude erfassen",
- description: "Adresse, Wohnungen und Heizart angeben.",
- },
- {
- media: (
- <>
-
-
- >
- ),
- title: "Ausstattung bestimmen",
- description: "SolenOS ermittelt passende Geräte und Mengen.",
+ title: "Gebäudedaten online erfassen",
+ description:
+ "Adresse, Wohnungen und Heizart online angeben. SolenOS ermittelt daraus die notwendige Ausstattung und prüft sie vor dem Versand.",
},
{
media: (
),
title: "Vorkonfiguriert erhalten",
- description: "Geräte bereits jeder Wohnung zugeordnet geliefert.",
+ description:
+ "Die geprüften Geräte werden bereits den vorgesehenen Wohnungen zugeordnet geliefert.",
},
{
media:
,
- title: "Geräte montieren",
- description: "Selbst installieren oder Montage beauftragen.",
+ title: "Vor Ort montieren",
+ description:
+ "Selbst, mit dem eigenen Fachbetrieb oder durch SolenOS montieren lassen. Eine Softwarekonfiguration vor Ort ist nicht erforderlich.",
},
{
media: (
),
- title: "Betrieb starten",
- description: "Bewohner einladen und digital verwalten.",
+ title: "Betrieb übernehmen lassen",
+ description:
+ "SolenOS übernimmt Einrichtung, Datenübertragung und laufenden Betrieb; Bewohner erhalten ihren Portalzugang.",
},
]
const lessEffort = [
{
- title: "Vorkonfigurierte Hardware",
- text: "Geräte werden passend zum jeweiligen Gebäude und zur vorgesehenen Nutzung vorbereitet.",
+ title: "Zum Einbau vorkonfigurierte Messeinrichtungen",
+ text: "SolenOS bestimmt die Ausstattung aus den Objektdaten, prüft sie und ordnet die Geräte vor dem Versand zu.",
},
{
- title: "Keine aufwendige Einrichtung auf der Baustelle",
- text: "Der Installateur kann sich auf die fachgerechte Montage konzentrieren.",
+ title: "Keine Softwarekonfiguration vor Ort",
+ text: "Vor Ort wird nur montiert. Eine Softwarekonfiguration ist nicht erforderlich.",
},
{
title: "Bestehende Fachbetriebe nutzen",
@@ -308,7 +299,7 @@ const audiences = [
"Ausstattung aus Gebäudedaten ermitteln",
"vorkonfigurierte Geräte erhalten",
"eigenen Fachbetrieb nutzen",
- "laufenden Messbetrieb digital verwalten",
+ "laufenden Messbetrieb digital betreuen",
],
cta: "SolenOS für Hauseigentümer",
to: "/fuer-wen/hauseigentuemer",
@@ -353,7 +344,7 @@ const audiences = [
"Geräte- und Verbrauchsdaten",
"UVI",
"Heizkostenabrechnungsprozesse",
- "White-Label-Optionen",
+ "Optionen für eigenes Logo und Eigenmarke",
],
cta: "SolenOS für Messdienstleister",
to: "/fuer-wen/messdienstleister",
@@ -409,11 +400,11 @@ const portfolioScopes = [
]
const priceFlow = [
- { title: "Wenige Angaben" },
- { title: "Erste Preisindikation" },
- { title: "Konfiguration speichern" },
- { title: "Gebäude vollständig konfigurieren" },
- { title: "Genauer Preis" },
+ { title: "Leistungen auswählen" },
+ { title: "Gebäudedaten online erfassen" },
+ { title: "Persönlichen Link erhalten" },
+ { title: "Details und Fotos im Portal ergänzen" },
+ { title: "Geprüftes Gesamtangebot erhalten" },
]
const faqs: FaqItem[] = [
@@ -429,19 +420,19 @@ const faqs: FaqItem[] = [
"In vielen Fällen kann ein vorhandener geeigneter Fachbetrieb eingesetzt werden. Welche Arbeiten erforderlich sind, hängt von der jeweiligen Messtechnik und Einbausituation ab.",
},
{
- question: "Muss vor Ort jedes Gerät einzeln in SolenOS eingerichtet werden?",
+ question: "Muss vor Ort Software konfiguriert werden?",
answer:
- "Die Geräte werden soweit vorgesehen bereits vor dem Versand dem Gebäude und den geplanten Einheiten zugeordnet. Dadurch reduziert sich die Softwareeinrichtung vor Ort deutlich.",
+ "Nein. SolenOS ordnet die Geräte vor dem Versand dem Gebäude und den vorgesehenen Einheiten zu. Vor Ort wird nur montiert; eine Softwarekonfiguration ist nicht erforderlich.",
},
{
- question: "Wie genau ist die erste Preisschätzung?",
+ question: "Wann erhalte ich den verbindlichen Gesamtpreis?",
answer:
- "Die erste Schätzung basiert auf wenigen Gebäudedaten und Annahmen zur benötigten Ausstattung. Die vollständige Gebäudekonfiguration bestimmt anschließend die konkreten Geräte und den finalen Preis.",
+ "Nach dem Schnellkonfigurator ergänzen Sie Gebäudedetails und Fotos vorhandener Einbausituationen im Portal. SolenOS prüft die Angaben manuell, bestimmt die konkrete Ausstattung und erstellt anschließend das verbindliche Gesamtangebot.",
},
{
- question: "Kann ich nur UVI buchen?",
+ question: "Welche Leistungen kann ich auswählen?",
answer:
- "Ja. UVI und Rauchwarnmelder sind einzeln oder gemeinsam wählbar. Das UVI-Paket umfasst die dafür benötigte Messtechnik und die zugehörigen digitalen Dienstleistungen; die Heizkostenabrechnung baut auf denselben erfassten Verbrauchsdaten auf. Rauchwarnmelder können auch später ergänzt werden – die bereits erfasste Gebäudestruktur wird dabei weiterverwendet.",
+ "Monatliche Verbrauchsinformation, Heizkostenabrechnung und Rauchwarnmelder lassen sich im Schnellkonfigurator unabhängig voneinander hinzufügen oder abwählen."
},
{
question: "Kann ich bestehende Messtechnik weiterverwenden?",
@@ -461,10 +452,27 @@ const faqs: FaqItem[] = [
]
const trustProperties = [
- { icon:
, label: "Hosting in Deutschland" },
- { icon:
, label: "AES-geschützte Messdaten" },
- { icon:
, label: "TLS-verschlüsselte Übertragung" },
- { icon:
, label: "Rollenbasierte Zugriffsrechte" },
+ {
+ icon:
,
+ label: "Daten ausschließlich in Deutschland gehostet",
+ to: "/wissen/datenschutz-sicherheit",
+ },
+ {
+ icon:
,
+ label: "AES-Verschlüsselung schützt gespeicherte Messdaten",
+ to: "/wissen/datenschutz-sicherheit",
+ },
+ {
+ icon:
,
+ label: "TLS schützt Daten während der Übertragung",
+ to: "/wissen/datenschutz-sicherheit",
+ },
+ {
+ icon:
,
+ label:
+ "Bewohner sehen nur Daten ihrer eigenen Wohnung und ihres eigenen Nutzungszeitraums",
+ to: "/wissen/datenschutz-sicherheit",
+ },
]
export default function HomePage() {
@@ -478,18 +486,18 @@ export default function HomePage() {
einfach gemacht.
>
}
- lead="Fernauslesbare Messtechnik, monatliche UVI, Heizkostenabrechnung und Rauchwarnmelder – vorkonfiguriert geliefert, digital verwaltet und auf Wunsch komplett installiert."
+ lead="Fernauslesbare Messtechnik, monatliche Verbrauchsinformation (UVI), Heizkostenabrechnung und Rauchwarnmelder – vorkonfiguriert geliefert, digital betreut und auf Wunsch komplett installiert."
actions={
<>
- Preis berechnen
+ Konfiguration starten
So funktioniert SolenOS
>
}
- note="Wenige Angaben · unverbindliche Kostenschätzung"
+ note="Wenige Angaben · vollständige Prüfung im Folgeprozess"
visual={
}
/>
@@ -529,7 +537,7 @@ export default function HomePage() {
align="center"
eyebrow="Das System"
title="Alles, was für den laufenden Messbetrieb benötigt wird"
- lead="SolenOS verbindet Messtechnik, Datenerfassung und Software zu einem durchgängigen System. Statt einzelne Komponenten selbst zusammenzustellen und miteinander zu verbinden, erhalten Sie eine Lösung, bei der Bestellung, Hardware, Konfiguration und laufender Betrieb zusammenspielen."
+ lead="SolenOS verbindet Messtechnik, Datenerfassung und Software in einem durchgängigen System. Bestellung, Hardware, Konfiguration und laufender Betrieb greifen dabei ineinander."
/>
@@ -553,8 +561,8 @@ export default function HomePage() {
{lessEffort.map((item) => (
@@ -670,11 +678,11 @@ export default function HomePage() {
- Für einen ersten Preis brauchen wir Grundlegende Informationen:
+ Für die erste Ermittlung der Ausstattung benötigen wir:
- Auf Basis dieser Angaben schätzt SolenOS die voraussichtlich
- benötigte Geräteanzahl und berechnet einen ungefähren Preis.
+ SolenOS bestimmt daraus den voraussichtlichen Gerätebedarf. Im
+ Folgeprozess ergänzen Sie Details und Fotos; danach erhalten Sie
+ den geprüften Gesamtpreis.
- Preis berechnen
+ Konfiguration starten
@@ -699,16 +708,16 @@ export default function HomePage() {
- In fünf Schritten zum genauen Preis
+ In fünf Schritten zum verbindlichen Gesamtangebot
- Die erste Berechnung ist eine unverbindliche Preisindikation.
- Die tatsächliche Ausstattung und der genaue Preis ergeben sich
- aus der vollständigen Objektkonfiguration.
+ SolenOS veröffentlicht keine ungeprüften Preiswerte. Das
+ Gesamtangebot enthält die gewählten Leistungen, erforderliche
+ Gateway-Infrastruktur und die gewählte Montagevariante.
@@ -787,7 +796,7 @@ export default function HomePage() {
actions={
<>
- Preis berechnen
+ Konfiguration starten
So funktioniert SolenOS
diff --git a/component-library/src/pages/how-it-works.tsx b/component-library/src/pages/how-it-works.tsx
index 7542185..7bed23a 100644
--- a/component-library/src/pages/how-it-works.tsx
+++ b/component-library/src/pages/how-it-works.tsx
@@ -30,9 +30,9 @@ const steps = [
),
- title: "Gebäude anlegen und bestellen",
+ title: "Gebäudedaten online erfassen",
description:
- "Bei der Konfiguration werden Gebäude, Wohnungen und die benötigten Leistungen erfasst. Auf Basis dieser Daten wird automatisch ermittelt, welche Messtechnik, Rauchwarnmelder und weiteren Komponenten benötigt werden.",
+ "Sie erfassen Gebäude, Wohnungen und Leistungen online. SolenOS ermittelt daraus die notwendige Ausstattung und prüft sie vor dem Versand.",
},
{
media: (
@@ -51,13 +51,12 @@ const steps = [
),
- title: "Geräte montieren",
+ title: "Vor Ort nur montieren",
description: (
<>
- Die Geräte müssen vor Ort im Wesentlichen nur noch fachgerecht montiert
- werden.{" "}
+ Die vorgesehenen Geräte werden vor Ort fachgerecht montiert.{" "}
- Keine aufwendige Softwarekonfiguration bei der Installation.
+ Eine Softwarekonfiguration vor Ort ist nicht erforderlich.
>
),
@@ -86,13 +85,15 @@ const steps = [
const journey = [
"Besucher versteht SolenOS",
"identifiziert seinen Anwendungsfall",
- "berechnet einen ungefähren Preis",
- "speichert seine Konfiguration",
- "ergänzt die tatsächlichen Gebäudedaten",
- "erhält den genauen Preis",
+ "wählt Leistungen aus",
+ "erfasst Gebäudedaten online",
+ "erhält einen persönlichen Link",
+ "ergänzt Details und Fotos",
+ "SolenOS prüft die Ausstattung",
+ "erhält ein verbindliches Gesamtangebot",
"erteilt den Auftrag",
"SolenOS bereitet Gebäude und Geräte vor",
- "vorkonfigurierte Hardware wird geliefert",
+ "vorkonfigurierte Technik wird geliefert",
"Montage vor Ort",
"automatischer laufender Betrieb",
]
@@ -101,22 +102,22 @@ const faqs: FaqItem[] = [
{
question: "Wo fange ich an?",
answer:
- "Im Konfigurator. Dort erfassen Sie Gebäude, Wohnungen und die benötigten Leistungen und erhalten eine erste Preisindikation. Aus denselben Daten wird anschließend der Auftrag aufgebaut.",
+ "Im Konfigurator. Dort wählen Sie Leistungen und erfassen Gebäude sowie Wohnungen online. Die Angaben werden in die anschließende Detailkonfiguration übernommen.",
},
{
- question: "Wie verbindlich ist der Preis aus dem Konfigurator?",
+ question: "Wann erhalte ich den verbindlichen Gesamtpreis?",
answer:
- "Er ist eine Preisschätzung auf Basis Ihrer Angaben. Den genauen Preis erhalten Sie, sobald die tatsächlichen Gebäudedaten ergänzt und geprüft sind – erst danach wird der Auftrag erteilt.",
+ "Nach dem Schnellkonfigurator ergänzen Sie Gebäudedetails und Fotos im Portal. SolenOS prüft die Einbausituationen und die notwendige Ausstattung manuell und erstellt anschließend das verbindliche Gesamtangebot.",
},
{
question: "Muss ich meine Gebäudedaten mehrfach erfassen?",
answer:
- "Nein. Die einmal eingegebenen Gebäudedaten werden durch den gesamten Prozess weiterverwendet: von der Preisschätzung über die Gerätevorbereitung bis in den laufenden Betrieb.",
+ "Nein. Die einmal eingegebenen Gebäudedaten werden von der ersten Online-Erfassung über Gerätevorbereitung und Montage bis in den laufenden Betrieb weiterverwendet.",
},
{
question: "Wer montiert die Geräte?",
answer:
- "Das entscheiden Sie: Sie selbst, Ihr Fachbetrieb oder SolenOS als Komplettlösung. Die Hardware kommt objektbezogen vorkonfiguriert an, eine aufwendige Softwarekonfiguration vor Ort entfällt.",
+ "Das entscheiden Sie: Sie selbst, Ihr Fachbetrieb oder SolenOS als Komplettlösung. Die Technik kommt objektbezogen vorkonfiguriert an; eine Softwarekonfiguration vor Ort ist nicht erforderlich.",
},
{
question: "Was passiert nach der Installation?",
@@ -182,8 +183,8 @@ export default function HowItWorksPage() {
sondern durch den gesamten Prozess weiterverwendet.
- Preisschätzung → Konfiguration → Bestellung → Gerätevorbereitung →
- Installation → Betrieb
+ Online-Erfassung → Detailkonfiguration → Gesamtangebot →
+ Gerätevorbereitung → Installation → Betrieb
@@ -194,7 +195,7 @@ export default function HowItWorksPage() {
align="center"
eyebrow="Häufige Fragen"
title="Fragen zum Ablauf"
- lead="Von der ersten Preisindikation bis zum laufenden Betrieb – die häufigsten Fragen zum SolenOS-Prozess."
+ lead="Von der Online-Erfassung bis zum laufenden Betrieb – die häufigsten Fragen zum SolenOS-Prozess."
/>
@@ -203,11 +204,11 @@ export default function HowItWorksPage() {
}
- title="Was kostet SolenOS für Ihr Gebäude?"
- description="Mit wenigen Angaben erhalten Sie eine erste Preisindikation."
+ title="Konfiguration für Ihr Gebäude starten"
+ description="Leistungen auswählen, Gebäudedaten online erfassen und die geprüfte Ausstattung vorbereiten."
actions={
- Preis berechnen
+ Konfiguration starten
}
/>
diff --git a/component-library/src/pages/klarpreis.tsx b/component-library/src/pages/klarpreis.tsx
index 501602e..f7bf053 100644
--- a/component-library/src/pages/klarpreis.tsx
+++ b/component-library/src/pages/klarpreis.tsx
@@ -13,9 +13,9 @@ import {
} from "@/components/solenos/illustrations"
const trustItems = [
- { icon: ClipboardCheck, label: ["Klare", "Vertragsstruktur"] },
- { icon: ShieldCheck, label: ["Keine versteckten", "Gebühren"] },
- { icon: Users2, label: ["Rabatte für", "große Objekte"] },
+ { icon: ClipboardCheck, label: ["Geprüfter", "Leistungsumfang"] },
+ { icon: ShieldCheck, label: ["Verbindliches", "Gesamtangebot"] },
+ { icon: Users2, label: ["Passend zum", "konkreten Objekt"] },
] as const
export default function KlarpreisPage() {
@@ -35,7 +35,7 @@ export default function KlarpreisPage() {
SolenOS Klarpreis
>
}
- lead="Drei sauber getrennte Leistungen. Einfache Preise. Keine Überraschungen."
+ lead="Ein vollständiger Leistungsumfang und ein verbindlicher Gesamtpreis nach Prüfung der konkreten Objektdaten."
extra={
@@ -57,20 +57,18 @@ export default function KlarpreisPage() {
}
/>
@@ -80,16 +78,11 @@ export default function KlarpreisPage() {
}
/>
- UVI-Komplettbetrieb
-
- }
- cadence="Monatlich"
- price="10,50 €"
- unit="je Wohnung / Monat"
- allocation={{ label: "Grundsätzlich umlagefähig", tone: "positive" }}
- description="Sensoren, Daten, Portal und Verbrauchsinformation inklusive."
+ title="Messbetrieb und Abrechnung"
+ cadence="Gesamtangebot"
+ price="Nach Prüfung"
+ unit="nach vollständiger Objektkonfiguration"
+ description="Je nach Auswahl: Messtechnik, erforderliche Gateway-Infrastruktur, Daten, Portale, Heizkostenabrechnung und monatliche Verbrauchsinformation (UVI)."
media={ }
/>
@@ -102,16 +95,13 @@ export default function KlarpreisPage() {
- Gesamtkosten laufend
-
-
-
- 12,70 €
-
-
- je Wohnung / Monat
-
+ Verbindlicher Gesamtpreis
+
+ Nach der vollständigen Objektkonfiguration und manuellen
+ Prüfung erhalten Sie ein Gesamtangebot statt ungeprüfter
+ Einzelpreise.
+
-
- Alle laufenden Leistungen klar gebündelt – ohne versteckte
- Zusatzkosten.
+
+ Gewählte Leistungen, erforderliche Gateway-Infrastruktur und
+ Montagevariante werden gemeinsam ausgewiesen.
diff --git a/component-library/src/pages/products/heizkostenabrechnung.tsx b/component-library/src/pages/products/heizkostenabrechnung.tsx
index 6e50360..6ca0b46 100644
--- a/component-library/src/pages/products/heizkostenabrechnung.tsx
+++ b/component-library/src/pages/products/heizkostenabrechnung.tsx
@@ -194,18 +194,18 @@ export default function HeizkostenabrechnungProductPage() {
eyebrow="Produkt"
title={<>Heizkostenabrechnung>}
tagline="Aus den Daten, die ohnehin laufen."
- lead="Die jährliche Abrechnung der Heiz- und Warmwasserkosten entsteht aus denselben fernabgelesenen Verbrauchswerten wie die monatliche UVI – verteilt nach den Maßstäben der Heizkostenverordnung, ohne Ablesetermin im Gebäude."
+ lead="Die jährliche Abrechnung der Heiz- und Warmwasserkosten entsteht aus denselben fernabgelesenen Verbrauchswerten wie die monatliche Verbrauchsinformation (UVI) – verteilt nach den Maßstäben der Heizkostenverordnung, ohne Ablesetermin im Gebäude."
actions={
<>
- Preis für mein Gebäude berechnen
+ Konfiguration für mein Gebäude starten
- UVI ansehen
+ Verbrauchsinformation ansehen
>
}
- note="Wenige Angaben · unverbindliche Kostenschätzung"
+ note="Wenige Angaben · vollständige Prüfung im Folgeprozess"
visual={ }
features={[
{
@@ -238,7 +238,7 @@ export default function HeizkostenabrechnungProductPage() {
actions={
<>
- Preis berechnen
+ Konfiguration starten
Kontakt aufnehmen
diff --git a/component-library/src/pages/products/index.tsx b/component-library/src/pages/products/index.tsx
index d873980..61a6e03 100644
--- a/component-library/src/pages/products/index.tsx
+++ b/component-library/src/pages/products/index.tsx
@@ -101,11 +101,11 @@ export default function ProductsPage() {
}
- title="Jetzt Preis für Ihr Gebäude berechnen"
- description="In wenigen Minuten zur ersten Preisindikation."
+ title="Ausstattung für Ihr Gebäude konfigurieren"
+ description="Leistungen auswählen, Gebäudedaten online erfassen und die Prüfung vorbereiten."
actions={
- Preis berechnen
+ Konfiguration starten
}
/>
diff --git a/component-library/src/pages/products/messtechnik-infrastruktur.tsx b/component-library/src/pages/products/messtechnik-infrastruktur.tsx
index d5839e4..1d59c83 100644
--- a/component-library/src/pages/products/messtechnik-infrastruktur.tsx
+++ b/component-library/src/pages/products/messtechnik-infrastruktur.tsx
@@ -100,7 +100,7 @@ const DATA_PATH = [
media: ,
title: "Gateway sammelt",
description:
- "Ein Gateway je Gebäude empfängt die Funkpakete aller angebundenen Geräte.",
+ "Die erforderliche Gateway-Infrastruktur empfängt die Funkpakete der angebundenen Geräte und wird von SolenOS passend zum Objekt bestimmt.",
},
{
media: (
@@ -167,7 +167,7 @@ const FAQS: FaqItem[] = [
{
question: "Was kostet die Messtechnik?",
answer:
- "Die für den Messbetrieb benötigten Sensoren sind im UVI-Komplettbetrieb enthalten: 10,50 € je Wohnung und Monat, grundsätzlich umlagefähig. Welche Geräte in welcher Anzahl erforderlich sind, ergibt sich aus der Gebäudekonfiguration.",
+ "SolenOS bestimmt die benötigten Sensoren und die erforderliche Gateway-Infrastruktur aus der vollständigen Gebäudekonfiguration. Beides wird im geprüften Gesamtangebot gemeinsam mit den gewählten Leistungen ausgewiesen; ungeprüfte Einzelpreise veröffentlichen wir nicht.",
},
{
question: "Kann ich vorhandene Zähler weiterverwenden?",
@@ -202,11 +202,11 @@ export default function MesstechnikProductPage() {
}
tagline="Die Grundlage für alles andere."
- lead="Zähler, Heizkostenverteiler und Gateway erfassen und übertragen die Werte, aus denen UVI und Heizkostenabrechnung entstehen – fernablesbar, interoperabel und objektbezogen vorkonfiguriert geliefert."
+ lead="Zähler, Heizkostenverteiler und Gateway erfassen und übertragen die Werte, aus denen monatliche Verbrauchsinformation (UVI) und Heizkostenabrechnung entstehen – fernablesbar, interoperabel und objektbezogen vorkonfiguriert geliefert."
actions={
<>
- Ausstattung und Preis ermitteln
+ Ausstattung ermitteln
@@ -215,7 +215,7 @@ export default function MesstechnikProductPage() {
>
}
- note="Wenige Angaben · unverbindliche Kostenschätzung"
+ note="Wenige Angaben · vollständige Prüfung im Folgeprozess"
visual={ }
features={[
{
diff --git a/component-library/src/pages/products/product-page.tsx b/component-library/src/pages/products/product-page.tsx
index 6e4c031..b45fa2e 100644
--- a/component-library/src/pages/products/product-page.tsx
+++ b/component-library/src/pages/products/product-page.tsx
@@ -30,9 +30,9 @@ type Product = {
const PRODUCTS: Product[] = [
{
to: "/produkte/uvi",
- label: "UVI",
- title: "UVI",
- sub: "Monatliche Verbrauchsinformation",
+ label: "Verbrauchsinformation (UVI)",
+ title: "Verbrauchsinformation (UVI)",
+ sub: "Monatlich für Bewohner",
summary:
"Verbrauchsdaten werden automatisch erfasst und die monatliche Verbrauchsinformation für die Bewohner erzeugt und bereitgestellt – ohne Ablesetermin in der Wohnung.",
icon: icons.uvi,
@@ -102,6 +102,7 @@ function ProductPage({
lead,
actions,
note,
+ extra,
visual,
features,
children,
@@ -116,6 +117,7 @@ function ProductPage({
lead?: React.ReactNode
actions?: React.ReactNode
note?: React.ReactNode
+ extra?: React.ReactNode
visual?: React.ReactNode
features: FeatureBandItem[]
/** the product's spec sections between feature band and closing */
@@ -140,6 +142,7 @@ function ProductPage({
}
actions={actions}
note={note}
+ extra={extra}
visual={visual}
/>
diff --git a/component-library/src/pages/products/rauchwarnmelder.tsx b/component-library/src/pages/products/rauchwarnmelder.tsx
index d44d799..c32a015 100644
--- a/component-library/src/pages/products/rauchwarnmelder.tsx
+++ b/component-library/src/pages/products/rauchwarnmelder.tsx
@@ -199,14 +199,14 @@ export default function RauchwarnmelderProductPage() {
actions={
<>
- Preis für mein Gebäude berechnen
+ Konfiguration für mein Gebäude starten
- Preise ansehen
+ Gesamtangebot ansehen
>
}
- note="Wenige Angaben · unverbindliche Kostenschätzung"
+ note="Wenige Angaben · vollständige Prüfung im Folgeprozess"
visual={ }
features={[
{
@@ -239,7 +239,7 @@ export default function RauchwarnmelderProductPage() {
actions={
<>
- Preis berechnen
+ Konfiguration starten
Kontakt aufnehmen
@@ -283,29 +283,24 @@ export default function RauchwarnmelderProductPage() {
}
/>
@@ -322,8 +317,8 @@ export default function RauchwarnmelderProductPage() {
variant="link"
className="mt-6 h-auto self-start p-0 font-bold"
>
-
- Alle Preise im SolenOS Klarpreis
+
+ Gesamtangebot konfigurieren
diff --git a/component-library/src/pages/products/uvi.tsx b/component-library/src/pages/products/uvi.tsx
index 013015d..4b6fa2f 100644
--- a/component-library/src/pages/products/uvi.tsx
+++ b/component-library/src/pages/products/uvi.tsx
@@ -149,11 +149,11 @@ const FAQS: FaqItem[] = [
export default function UviProductPage() {
return (
- Unterjährige Verbrauchsinformation
+ Unterjährige Verbrauchsinformation (UVI)
}
tagline="Monatlich. Automatisch. Nachweisbar."
@@ -161,7 +161,7 @@ export default function UviProductPage() {
actions={
<>
- Preis für mein Gebäude berechnen
+ Konfiguration für mein Gebäude starten
@@ -170,7 +170,45 @@ export default function UviProductPage() {
>
}
- note="Wenige Angaben · unverbindliche Kostenschätzung"
+ note="Wenige Angaben · vollständige Prüfung im Folgeprozess"
+ extra={
+
+
+
+
+
+ Bis zu 3 % Kürzungsrecht
+
+
+ Fehlt die monatliche Verbrauchsinformation oder ist sie
+ unvollständig, können Nutzer ihren Kostenanteil um 3 %
+ kürzen.
+
+
+
+
+
+ }
visual={ }
features={[
{
@@ -198,12 +236,12 @@ export default function UviProductPage() {
}
- title="Was kostet die UVI für Ihr Gebäude?"
- description="Mit wenigen Angaben zu Gebäude, Wohnungen und Wärmeverteilung erhalten Sie eine erste Preisindikation."
+ title="Verbrauchsinformation für Ihr Gebäude konfigurieren"
+ description="Gebäude und Leistungen online erfassen; SolenOS prüft anschließend Ausstattung und Gesamtpreis."
actions={
<>
- Preis berechnen
+ Konfiguration starten
Kontakt aufnehmen
@@ -302,19 +340,11 @@ export default function UviProductPage() {
- UVI-Komplettbetrieb
-
- }
- cadence="Monatlich"
- price="10,50 €"
- unit="je Wohnung / Monat"
- allocation={{
- label: "Grundsätzlich umlagefähig",
- tone: "positive",
- }}
- description="Sensoren, Daten, Portal und Verbrauchsinformation inklusive."
+ title="Monatliche Verbrauchsinformation (UVI)"
+ cadence="Gesamtangebot"
+ price="Nach Prüfung"
+ unit="nach vollständiger Objektkonfiguration"
+ description="Messtechnik, erforderliche Gateway-Infrastruktur, Daten, Portal und Verbrauchsinformation werden gemeinsam angeboten."
media={
-
- Alle Preise im SolenOS Klarpreis
+
+ Gesamtangebot konfigurieren
diff --git a/component-library/src/pages/wissen/datenschutz-sicherheit.tsx b/component-library/src/pages/wissen/datenschutz-sicherheit.tsx
index f92d60a..7ec04f3 100644
--- a/component-library/src/pages/wissen/datenschutz-sicherheit.tsx
+++ b/component-library/src/pages/wissen/datenschutz-sicherheit.tsx
@@ -101,7 +101,7 @@ export default function DatenschutzSicherheitPage() {
Kontakt aufnehmen
- Preis berechnen
+ Konfiguration starten
>
}
diff --git a/component-library/src/pages/wissen/gesetzliche-anforderungen.tsx b/component-library/src/pages/wissen/gesetzliche-anforderungen.tsx
index 06ff31e..2079bec 100644
--- a/component-library/src/pages/wissen/gesetzliche-anforderungen.tsx
+++ b/component-library/src/pages/wissen/gesetzliche-anforderungen.tsx
@@ -126,7 +126,7 @@ export default function GesetzlicheAnforderungenPage() {
Kontakt aufnehmen
- Preis berechnen
+ Konfiguration starten
>
}