{{-- The public front page. Rebuilt, not recoloured — the first attempt kept the old page's skeleton (eight numbered sections, a split hero, a comparison matrix) and only changed the palette, which is why it still read as the old site. What the page does now, in order: show the product, say what is in it, say how it arrives, show the evidence, answer the obvious objection, quote the price, take the questions, and ask for the call. --}} {{-- ════ Hero ═══════════════════════════════════════════════════════════ Centred and quiet, with the product directly underneath. The old hero described the product beside a table of facts; a visitor had to read two columns before seeing anything. --}}
{{-- One warm bloom behind the headline, drawn as a blurred shape rather than a radial-gradient so the colour comes from the token instead of a literal rgba() nobody would think to update. --}}
Serverstandort EU · täglich gesichert · monatlich getestet

Ihre firmeneigene Cloud.

Eine eigene, isolierte Instanz — eingerichtet, täglich gesichert und laufend überwacht. Was wir tun, können Sie nachweisen: mit Protokoll, Prüfbericht und AV-Vertrag.

{{-- Straight to the sign-in, not to a booking page behind auth. The difference matters: /order redirects an anonymous visitor to the login anyway, but through a middleware redirect that leaves them on a page they never asked for. Buying happens in the panel, where everything already works — the website's job is to get them there. Every path on this page used to end in "anfragen" instead: a mailto: link and an afternoon of somebody's time per customer, for a product whose whole point is that the machine does the work. --}}
Jetzt buchen Preise ansehen

Fixer Preis pro Firma · keine Abrechnung pro Kopf

{{-- The product itself, cropped by the section below it. Built from the same tokens as the real console, because it is a picture of the real console — a mock in a different design language would be a promise the first sign-in breaks. --}}
cloud.kanzlei-berger.at

Übersicht

Alle Dienste aktiv EU
@foreach ([ ['Speicher', '235', 'von 500 GB', 47], ['Benutzer', '8', 'von 25 Plätzen', 32], ['Verfügbarkeit', '99,98', '% letzte 30 Tage', 100], ] as [$label, $value, $sub, $fill])

{{ $label }}

{{ $value }}

{{ $sub }}

@endforeach

Heute erledigt

@foreach ([ ['Sicherung verschlüsselt & geprüft', '03:12'], ['Sicherheitsupdates eingespielt', '04:05'], ['8 Benutzer synchronisiert', '07:30'], ] as [$done, $when])
{{ $done }}
@endforeach
{{-- ════ The quiet number line ══════════════════════════════════════════ --}}
@foreach ([ ['99,95', '99.95', 2, '% Verfügbarkeit'], ['365', '365', 0, 'Sicherungen pro Jahr'], ['12', '12', 0, 'Wiederherstellungstests'], ['0', '0', 0, 'Termine bis zum Start'], ['0', '0', 0, 'Datenverluste'], ] as [$shown, $target, $decimals, $label])
{{ $shown }} {{ $label }}
@endforeach
{{-- ════ What is in it — one asymmetric grid ════════════════════════════ Six equal cards in two rows was the old page's answer to every section. Tiles of different weight let the important thing be bigger than the rest, which is the whole point of having a layout. --}}

Was enthalten ist

Für Ihr Team ist es firmeneigene Software. Wir betreiben sie nur.

Ihre Adresse, Ihr Logo, Ihre Ordnerstruktur.

Eigene Domain, eigenes Erscheinungsbild, und eine Ablage, die nach Branchenvorlage schon steht, bevor die erste Datei hochgeladen wird.

@foreach ([ ['cloud', 'Dateien & Synchronisation'], ['file-text', 'Office im Browser'], ['calendar', 'Kalender, Kontakte, Aufgaben'], ['users', 'Videokonferenz & Chat'], ['external-link', 'Freigabelinks mit Ablauf'], ['rotate-ccw', 'Versionierung & Papierkorb'], ] as [$icon, $feature])
{!! $feature !!}
@endforeach

Getrennt von allen anderen.

Eine eigene virtuelle Maschine je Kunde. Keine geteilte Datenbank, kein gemeinsamer Speicher.

@foreach (['Instanz' => 'dediziert', 'Standort' => 'EU', 'Transfer' => 'kein Drittland'] as $k => $v)
{{ $k }}
{{ $v }}
@endforeach

Ein Preis. Für die Firma.

Kein Aufpreis für die vierzehnte Kollegin. Wächst das Team, bleibt die Rechnung gleich.

Zubuchbare Module

jederzeit, ohne Umzug
@foreach ([ ['Vaultwarden', 'Team-Passwörter', true], ['Paperless-ngx', 'Dokumentenarchiv', true], ['Digitale Signatur', 'in Vorbereitung', false], ] as [$module, $what, $ready])
{{ $module }} {{ $what }}
@endforeach

Jemand, den Sie anrufen.

Auf Deutsch, mit Antwort am selben Werktag. Kein Callcenter, keine Warteschleife.

{{-- The industries, dense. Six cards saying almost the same thing was repetition; what a visitor actually looks for is their own trade. --}}

Ordnerstruktur nach Branchenvorlage

ab dem ersten Tag, änderbar
@foreach ([ ['Steuerberatung', 'Mandanten / Jahresabschluss / Belege'], ['Rechtsanwälte', 'Akten / Schriftsätze / Fristen'], ['Ärzte & Therapeuten', 'Verwaltung / Befunde / Abrechnung'], ['Architektur & Planung', 'Projekte / Pläne / Freigaben'], ['Handwerk & Bau', 'Baustellen / Aufmaß / Abnahme'], ['Immobilienverwaltung', 'Objekte / Verträge / Abrechnung'], ] as $i => [$trade, $template])
{!! $trade !!} {{ $template }}
@endforeach
{{-- ════ The dark hinge — how it arrives ════════════════════════════════ --}}
{{-- No clock anywhere in this section any more. "In 20 Minuten betriebsbereit", a log with minute marks down the side, "betriebsbereit in unter 20 Minuten" — three promises about a duration nobody controls. A provisioning run waits on a hypervisor, on a certificate authority and on DNS propagating; when it is done it is done, and a customer who once waited forty minutes has been told something untrue by their supplier. What replaces it is the thing that IS promised and IS kept: the order of the steps, and a message when it is ready. Nobody has to sit and watch. --}}

Ohne Termin, ohne Warten

Nur der erste Schritt ist Ihrer.

    @foreach ([ ['Sie', 'Paket wählen', 'Ein Formular online. Unmittelbar danach beginnt die Instanz von selbst zu entstehen — Sie müssen nichts weiter tun und auf nichts warten.'], ['Wir', 'Einrichtung', 'Benutzer und Rechte, Ordnerstruktur, Ihr Logo, Ihre Domain. Auf Wunsch übernehmen wir Bestandsdaten aus Dropbox, OneDrive oder vom alten Server — mit schriftlichem Übernahmeprotokoll.'], ['Gemeinsam', 'Einschulung', '45 Minuten für Ihr Team per Videokonferenz, Kurzanleitung als PDF mit Ihren eigenen Screenshots.'], ] as $i => [$who, $what, $body])
  1. {{ $i + 1 }} @if ($i < 2) @endif {{ $who }}

    {{ $what }}

    {{ $body }}

  2. @endforeach
{{-- self-start: a grid cell stretches by default, and the empty dark space under the last line reads as a panel that failed to load rather than as breathing room. --}}
Bereitstellungsprotokoll Beispiel
{{-- The steps in order, ticked as they pass. The column that held minute marks now holds a number: WHAT happens and in which order is a promise that can be kept. --}} @foreach ([ 'Instanz erstellt und gestartet', 'Verschlüsselung und Firewall aktiv', 'Domain verbunden, Zertifikat ausgestellt', 'Erste Sicherung angelegt und geprüft', 'Logo und Farben hinterlegt', ] as $i => $what)
{{ $what }} {{ $i + 1 }}/5
@endforeach

Fertig. Sie bekommen eine E-Mail mit Adresse und Zugangsdaten, sobald Ihre Cloud bereit ist — Sie müssen nicht danebensitzen.

{{-- ════ Evidence ═══════════════════════════════════════════════════════ A three-column table was the old page's version of this. What a visitor needs from it is the pairing — measure, rhythm, and the piece of paper they can hand to somebody — so the pairing is what the row shows. --}}

Sicherheit & Nachweis

Jede Maßnahme hat einen Nachweis.

Sie bekommen sie schriftlich — für Ihre eigene Dokumentation, Ihre Prüfung, Ihre Versicherung.

@foreach ([ ['shield', 'Eigene isolierte Instanz', 'Eine virtuelle Maschine je Kunde, strikt getrennt von allen anderen.', 'dauerhaft', 'Instanzkennung im Kundenbereich'], ['database', 'Verschlüsselte Sicherung', 'Clientseitig verschlüsselt, getrennt vom Produktivsystem gelagert.', 'täglich', 'Sicherungsprotokoll mit Zeitstempel'], ['rotate-ccw', 'Wiederherstellungstest', 'Eine Sicherung wird tatsächlich zurückgespielt — nicht nur geprüft.', 'monatlich', 'Testbericht mit Ergebnis'], ['refresh', 'Sicherheitsupdates', 'Betriebssystem und Anwendung, eingespielt außerhalb Ihrer Arbeitszeit.', 'laufend', 'Wartungsprotokoll'], ['activity', 'Überwachung', 'Erreichbarkeit, Speicher und Dienste — Alarm, bevor Sie es merken.', 'rund um die Uhr', 'Verfügbarkeitsbericht'], ['globe', 'Serverstandort EU', 'Kein Transfer in Drittländer, keine Abhängigkeit von US-Anbietern.', 'vertraglich', 'AV-Vertrag & TOM-Dokumentation'], ] as [$icon, $measure, $detail, $rhythm, $proof])
{{ $measure }} {{ $detail }}
{{ $rhythm }}
{!! $proof !!}
@endforeach
{{-- The other half of "Sicherheit", and the half somebody looks for after they have already clicked something. It was only in the footer, in the mail footers and under the sign-in form — none of which is where a person goes when they think "is this really them?". They go to the section called Sicherheit. --}} Echte Adressen erkennen Welche Domains uns gehören — und was zu tun ist, wenn Sie Ihr Passwort woanders eingegeben haben.
{{-- ════ The objection ══════════════════════════════════════════════════ --}}

Der ehrliche Vergleich

Warum nicht einfach …?

Berechtigte Frage — samt der Punkte, die gegen uns sprechen.

@foreach ([ ['Bei der US-Cloud bleiben', 'Dropbox, OneDrive & Co.', false, [ [true, 'Bequem und sofort verfügbar'], [false, 'Daten bei US-Konzernen — Drittlandtransfer als Dauerthema Ihrer Dokumentation'], [false, 'Preis pro Kopf: Jeder neue Mitarbeiter erhöht die Rechnung'], [false, 'Support über ein Ticketsystem in Übersee'], ]], ['Einen eigenen Server', 'Selbst betreiben', false, [ [true, 'Volle Kontrolle über alles'], [false, 'Updates, Sicherung und Ausfälle sind Ihr Problem — auch am Wochenende'], [false, 'Braucht dauerhaft echtes IT-Wissen im Haus'], [false, 'Ein vergessenes Update kann sehr teuer werden'], ]], ['CluPilot Cloud', 'Ihre Cloud, von uns betrieben', true, [ [true, 'Eigene isolierte Instanz, Standort EU, AV-Vertrag inklusive'], [true, 'Fixer Firmenpreis, unabhängig von der Kopfzahl'], [true, 'Betrieb, Sicherung und Überwachung nachweislich durch uns'], {{-- With the figure, and only while there is one. An installation that charges no setup fee must not carry a card admitting to a cost it does not have. --}} ...($setup ? [[false, 'Einrichtung kostet einmalig '.$setup['gross'].' — wir richten wirklich ein, statt nur freizuschalten']] : []), ]], ] as $i => [$option, $subtitle, $ours, $points])
$ours, 'border-line bg-surface/60' => ! $ours, ])>

{{ $option }}

@if ($ours) Wir @endif
{{ $subtitle }}
    @foreach ($points as [$good, $point])
  • {{ $point }}
  • @endforeach
@endforeach
{{-- ════ Price ══════════════════════════════════════════════════════════ Cards, with the matrix folded away underneath. The matrix was the first thing a visitor met on the old page: twelve rows of ticks before a single price was legible. --}} {{-- Wider than the rest of the page, and only here. Four packages side by side in 1120px left each card 202px of text — narrow enough that "Bereitstellung in 2-3 Werktagen" broke over two lines and every card looked crammed against its neighbours. The reading columns elsewhere are narrow on purpose; a price sheet is four columns that must be comparable at a glance, which is a different problem. --}}

Preise

Ein fixer Preis pro Firma.

Alle Preise inklusive {{ $vat['label'] }} % Umsatzsteuer. Keine Staffelung nach Benutzern, keine Nachverrechnung bei Zuwachs.

{{-- Said once, here, rather than as a footnote per card: a consumer must never be quoted a figure that grows at checkout, and a business needs to know the net one is on the invoice. --}}

Als Unternehmen ziehen Sie die Umsatzsteuer über die Rechnung wieder ab — den Nettobetrag finden Sie unter jedem Preis.

@if (empty($plans)) {{-- The catalogue could not be read. Showing a number we might not honour would be worse than showing none. --}}

Preise derzeit auf Anfrage

Die Paketübersicht steht gerade nicht zur Verfügung. Wir nennen Ihnen die aktuellen Konditionen gerne direkt.

Preise anfragen {{-- Still "anfragen" here, and only here: with no catalogue there is nothing to put in a checkout. --}}
@else @php // Written out rather than interpolated: Tailwind builds its // stylesheet by reading these files as text, so a class name // assembled at render time is a class name that was never compiled. $planColumns = ['lg:grid-cols-1', 'lg:grid-cols-2', 'lg:grid-cols-3', 'lg:grid-cols-4'][min(count($plans), 4) - 1]; @endphp {{-- Stretched, not items-start: the cards carry different numbers of features, and four "anfragen" buttons at four different heights is the first thing the eye picks up on a price sheet. --}}
@foreach ($plans as $i => $plan)
$plan['recommended'], 'border-line bg-surface shadow-xs' => ! $plan['recommended'], ])>

{{ $plan['name'] }}

@if ($plan['recommended']) Empfohlen @endif
{{-- A plan can exist before its copy is written — the empty string renders nothing rather than an empty paragraph with margin above it and nothing in it. --}} @if ($plan['audience'])

{{ $plan['audience'] }}

@endif

{{ $plan['price'] }} /Monat

{{-- The net figure under the gross one, not instead of it. A private customer pays what is written large; a business needs the other number for its books, and printing only one of the two was wrong for one of the two readers whichever we picked. --}}

inkl. {{ $vat['label'] }} % MwSt. · netto {{ $plan['price_net'] }}

{{-- Named, or not mentioned. "zzgl. einmaliger Einrichtung" without a figure told a visitor only that there is a cost — the worst of both. Zero on the Finance page removes the line entirely. --}} @if ($setup)

zzgl. Einrichtung einmalig {{ $setup['gross'] }}

@endif {{-- Read from the estate, not written down: where a host has room this rolls out on its own, and where none has, a machine has to be bought first. Saying "sofort" in that second case is a promise the buyer catches us breaking on day one. --}}
@foreach ([ 'Speicher' => $plan['storage'], 'Datenvolumen' => $plan['traffic'], 'Benutzer' => 'bis '.$plan['seats'], ] as $term => $value)
{{ $term }}
{{ $value }}
@endforeach
{{-- Six, then a pointer to the table. A card listing eleven features is a table with worse alignment. --}}
    @foreach (array_slice($plan['features'], 0, 6) as $feature)
  • {{ $feature }}
  • @endforeach @if (count($plan['features']) > 6)
  • und {{ count($plan['features']) - 6 }} weitere Merkmale
  • @endif
{{-- To the sign-in, not to an inbox. Booking happens in the panel: the account has to exist and its address has to be confirmed before money moves, because that address is where the finished cloud's credentials are sent. --}} {{ $plan['name'] }} buchen
@endforeach
{{-- The baseline, said once and said first. Four of these were rows of ticks running straight down every column of the table below, and the same promises were repeated in a prose line under it — a visitor read the comparison twice to learn the two places where it compared nothing. The address is shown as the address, not as the phrase "eigene Subdomain": what is worth knowing about it is its shape. --}}

In jedem Paket enthalten

ohne Aufpreis, ab dem ersten Tag
@foreach ($baseline as $item)
{{ $item['label'] }} $item['mono'] ?? false, ])>{{ $item['detail'] }}
@endforeach
{{-- Only what differs, and three answers instead of two. A dash used to mean both "you cannot have this" and "you can have this for nine euros", which is how a page that sells five modules came to mention none of them. --}} @if (! empty($comparison))
Was die Pakete unterscheidet {{-- The table keeps its own scroll. Four columns of prose cells do not fit a phone, and a page that scrolls sideways as a whole loses its header and its margins with it. --}}
@foreach ($plans as $plan) @endforeach @foreach ($comparison as $row) @foreach ($plans as $plan) @php($cell = $row['cells'][$plan['key']] ?? ['state' => 'absent']) @endforeach @endforeach
Was die Pakete unterscheidet
Merkmal{{ $plan['name'] }}
{{ $row['label'] }} @switch($cell['state']) @case('included') inklusive @break @case('optional') optional · {{ $cell['price'] }} @break @case('level') {{ $cell['text'] }} @if ($cell['note']) {{ $cell['note'] }} @endif @break @default @endswitch

„optional“ heißt: in diesem Paket nicht enthalten, aber jederzeit zubuchbar — brutto pro Monat, monatlich kündbar. „—“ heißt: in diesem Paket nicht verfügbar.

@endif {{-- What costs extra, with the price it costs. The modules were on sale the whole time and the page named none of them; the owner's complaint was simply that nothing on it said so. --}} @if (! empty($addons))

Optional dazubuchbar

zu jedem Paket, monatlich kündbar
@foreach ($addons as $addon)
{{ $addon['name'] }} {{ $addon['body'] }} +{{ $addon['price'] }}/Monat
@endforeach
@endif @endif
{{-- ════ Questions ══════════════════════════════════════════════════════ --}}

Häufige Fragen

Klare Antworten.

Steht Ihre Frage nicht dabei, schreiben Sie uns — wir antworten am selben Werktag.

office@clupilot.com
@foreach ([ ['Was passiert mit unseren Daten, wenn wir kündigen?', 'Sie erhalten vor Vertragsende einen vollständigen Export in offenen Standardformaten. Ihre Cloud basiert auf Open-Source-Software — Sie sind nie eingesperrt. Nach der Übergabe löschen wir Instanz und Sicherungen und bestätigen das schriftlich.'], ['Ersetzt das Microsoft 365?', 'Es ersetzt den Dateiteil. Viele Kunden behalten Microsoft für E-Mail und nutzen die Cloud als zentrale, sichere Ablage statt OneDrive oder Dropbox — zum fixen Firmenpreis statt pro Benutzer.'], ['Wie lange dauert die Einrichtung?', 'Die Instanz entsteht unmittelbar nach der Bestellung von selbst; Sie bekommen eine E-Mail, sobald sie bereit ist. Eine Dauer nennen wir bewusst nicht — sie hängt an Dingen, die wir nicht allein in der Hand haben. Die vollständige Einrichtung — Benutzer und Rechte, Ordnerstruktur nach Branchenvorlage, Ihr Logo, Ihre Domain und die Einschulung — ist in drei bis sieben Werktagen abgeschlossen. Die Übernahme Ihrer Bestandsdaten aus Dropbox, OneDrive oder vom alten Server bieten wir gesondert an, inklusive schriftlichem Übernahmeprotokoll.'], ['Was, wenn jemand versehentlich Dateien löscht?', 'Papierkorb und Versionierung fangen den Alltag ab. Darüber hinaus gibt es tägliche Sicherungen mit 30 Tagen Aufbewahrung: Ein Anruf genügt, wir stellen den gewünschten Stand wieder her.'], ['Brauchen wir eigene IT-Kenntnisse?', 'Nein. Bedienen kann es jeder, der mit Ordnern und Dateien umgeht — dafür gibt es die Einschulung. Alles Technische übernehmen wir dauerhaft.'], ['Mit wem spreche ich bei Fragen?', 'Direkt mit uns, per E-Mail oder Telefon, auf Deutsch, mit Antwort am selben Werktag. Kein Callcenter, keine Warteschleife.'], ['Wo genau stehen die Server?', 'In Rechenzentren innerhalb der EU. Es findet kein Transfer in Drittländer statt. Den Standort Ihrer Instanz halten wir im AV-Vertrag fest.'], ] as [$question, $answer])
{{ $question }}

{{ $answer }}

@endforeach
{{-- ════ Close ══════════════════════════════════════════════════════════ The one large accent area. Orange appears in few places on this page, and this is allowed to be all of it. --}}
{{-- The old headline asked who you call when a folder is missing on a Monday morning. It promised the wrong thing: what happens inside a customer's own Nextcloud is their own house — the recycle bin and the version history are right there, and a provider presenting itself as the first call for somebody else's user error is offering a service it does not run. What is actually sold is the opposite: the part they would have to do themselves and would rather not. The comparison section already says it in the operator's own words — "Updates, Sicherung und Ausfälle sind Ihr Problem, auch am Wochenende" — so the closing question asks exactly that. --}}

Loslegen

Wer kümmert sich um Updates, Sicherung und Ausfälle?

{{-- The old version promised "danach wissen Sie … wie Ihre Daten sicher umziehen". We do not know where a visitor's data is, what shape it is in, or whether it can be moved at all — that is a promise made before seeing the thing it is about. What is said here instead is what we actually control: the cloud itself is built by the machine, and a migration is looked at first and quoted afterwards. --}}

Bei uns: wir — nachweislich, mit Protokoll. Konto anlegen, Paket wählen, bezahlen: Ihre Cloud entsteht automatisch, ohne Termin und ohne Wartezeit auf eine Antwort.

{{-- Named, because it is the one thing this page cannot promise and the one thing a visitor with an existing system will ask about. --}}

Daten aus einem bestehenden System übernehmen? Das hängt davon ab, woher sie kommen — schreiben Sie uns kurz, was Sie einsetzen. Wir sehen es uns an und sagen Ihnen ehrlich, ob und wie es geht, bevor irgendetwas kostet.

@foreach ([ 'Antwortzeit' => 'selber Werktag', 'Sprache' => 'Deutsch', 'Sitz' => 'Österreich', 'Gespräch' => 'unverbindlich', ] as $term => $value)
{{ $term }}
{{ $value }}
@endforeach