diff --git a/docs/STATUS.md b/docs/STATUS.md
index 1dfcf23..5443396 100644
--- a/docs/STATUS.md
+++ b/docs/STATUS.md
@@ -1,5 +1,17 @@
# Projektstatus
+## Startseite nach der Installation: eine Baustellenseite statt einer Anleitung (16.09.2026)
+
+**Anlass:** Umut: „Kannst du bitte für die Erstseite bzw. nach der Installation eine schöne Erstseite erstellen – Under Construction oder so, ohne Details mit ‚melde dich an‘ usw. Am besten auch noch Logo von KantSites: ‚Hier entsteht eine neue Webpräsenz mit KantSites‘.“
+
+**Was los war.** `DemoContent::starterPage()` lieferte zwei Abschnitte mit Arbeitsanweisungen an die Betreiberin oder den Betreiber: „Melde dich an, öffne sie im Editor …“ und „Die nächsten Schritte“ mit Design, Menüs und Einstellungen. Das stand auf der einzigen Seite, die bis zum ersten Bearbeiten **öffentlich** erreichbar ist – gelesen hat es also der Besucher, nicht der Betreiber. Für den stehen dieselben Schritte längst auf dem letzten Installerbildschirm (`templates/install/done.html.twig`) und in der Verwaltung.
+
+**Neu.** Eine Baustellenseite, die genau das sagt und sonst nichts: das KantSites-Zeichen (`public/assets/kantsites-logo.svg`, dieselbe Form wie das Favicon), die Kleinzeile „In Arbeit“ in der Akzentfarbe, als einzige H1 der Name der Website, darunter „Hier entsteht eine neue Webpräsenz.“, ein kurzer Trennstrich und die Zeile „Erstellt mit KantSites“. Der Abschnitt ist ein Flex-Container mit `min-height: 70vh` und einem Verlauf von `@paper` nach `@mint`, stellt den Inhalt also mittig auf den Bildschirm; die Farben sind Palettenverweise und folgen jedem Designwechsel. Alles sind gewöhnliche Bausteine mit gewöhnlichen Stilwerten – im Editor also vollständig änder- und löschbar. Die Seitenbeschreibung ist jetzt ein echter Satz statt „NOCH AUSZUFÜLLEN“, damit eine frisch installierte Website in Suchergebnissen nicht mit einem Platzhalter steht.
+
+**Unverändert:** Kopf- und Fußbereich, die beiden Rechtsseiten als Gerüst mit markierten Pflichtangaben, Menüs.
+
+**Geprüft:** `tests/InstallFlowTest.php` (Installation über die sechs Bildschirme, danach liefert `/` die neue Seite), `php vendor/bin/phpunit` 579 von 579. Im Browser angesehen: eine frisch migrierte Datenbank mit dem Inhalt einer Neuinstallation, Desktop und 375 px.
+
## Fassung 1.21.0: Bildecken gehören dem Designbereich (16.09.2026)
**Anlass:** Umut zum Hero-Bild von DEEG: „Das sollte abgerundet sein, aber wurde von irgendwo gemacht, und die Ecken sehen komisch aus. Es gibt auch im Editor gar nicht Bildecken abrunden, oder?“
diff --git a/public/assets/kantsites-logo.svg b/public/assets/kantsites-logo.svg
new file mode 100644
index 0000000..2339b79
--- /dev/null
+++ b/public/assets/kantsites-logo.svg
@@ -0,0 +1 @@
+
diff --git a/src/Content/DemoContent.php b/src/Content/DemoContent.php
index f79ce96..b052806 100644
--- a/src/Content/DemoContent.php
+++ b/src/Content/DemoContent.php
@@ -122,34 +122,75 @@ final class DemoContent
];
}
- /**
- * The header and footer a fresh installation starts with. They are ordinary block documents:
- * everything in them can be changed, moved or removed in the editor. No main heading, because
- * every page brings its own.
- *
- * @return array
- */
/**
* The start page of a fresh installation - not demo content.
*
- * Short on purpose. Somebody who has just installed should find a page they can edit, not a
- * brochure about the CMS they have to delete first. Exactly one H1, as every page requires.
+ * A website that is already reachable but not yet written needs a page that says exactly that:
+ * the name of the site, the notice that something is being built here, and nothing else. No
+ * instructions for the owner - those stand on the last screen of the installer and in the
+ * admin area, not on a page every visitor sees. Exactly one H1, as every page requires.
*/
public static function starterPage(string $siteName): array
{
return [
- 'schemaVersion' => 16,
+ 'schemaVersion' => 24,
'title' => $siteName,
- 'description' => 'NOCH AUSZUFÜLLEN: ein Satz darüber, was es hier gibt. Er erscheint in Suchergebnissen.',
+ 'description' => 'Hier entsteht eine neue Webpräsenz. Diese Seite wird gerade eingerichtet.',
'blocks' => [
- self::section('start-hero', [
- self::heading('start-heading', $siteName, 1),
- self::text('start-intro', 'Diese Seite ist der Anfang. Melde dich an, öffne sie im Editor und ersetze diesen Text durch deinen eigenen.'),
- ], 'mint'),
- self::section('start-body', [
- self::heading('start-next-heading', 'Die nächsten Schritte', 2),
- self::text('start-next', "Impressum und Datenschutzerklärung sind bereits angelegt und müssen noch ausgefüllt werden – die Pflichtangaben sind darin markiert.\n\nUnter „Design“ legst du Farben, Schriften und die Breite fest, unter „Menüs“ die Navigation, unter „Einstellungen“ den Namen und die Angaben zum Unternehmen."),
- ], 'paper', 'narrow'),
+ [
+ 'id' => 'start-hero',
+ 'type' => 'section',
+ 'layout' => ['tone' => 'mint', 'width' => 'narrow'],
+ 'style' => [
+ // Eine Seite ohne Inhalt: der Abschnitt füllt den Bildschirm und stellt das
+ // Wenige, das dasteht, in die Mitte, statt es oben in eine Ecke zu setzen.
+ 'desktop' => [
+ 'display' => 'flex', 'alignItems' => 'center', 'justifyContent' => 'center',
+ 'minHeight' => '70vh', 'textAlign' => 'center',
+ 'padding' => ['top' => '96px', 'bottom' => '96px'],
+ 'gradientFrom' => '@paper', 'gradientTo' => '@mint', 'gradientAngle' => 165,
+ ],
+ 'mobile' => ['minHeight' => 'auto', 'padding' => ['top' => '64px', 'bottom' => '64px']],
+ ],
+ 'children' => [
+ [
+ 'id' => 'start-logo',
+ 'type' => 'image',
+ 'props' => ['src' => '/assets/kantsites-logo.svg', 'alt' => 'KantSites', 'decorative' => false, 'width' => 128, 'height' => 128],
+ 'style' => ['desktop' => ['maxWidth' => '86px', 'margin' => ['left' => 'auto', 'right' => 'auto', 'bottom' => '30px']]],
+ ],
+ [
+ 'id' => 'start-label',
+ 'type' => 'text',
+ 'props' => ['text' => 'In Arbeit'],
+ 'style' => ['desktop' => [
+ 'fontSize' => '13px', 'fontWeight' => '700', 'letterSpacing' => '2px',
+ 'textTransform' => 'uppercase', 'color' => '@accent', 'margin' => ['bottom' => '16px'],
+ ]],
+ ],
+ self::heading('start-heading', $siteName, 1),
+ [
+ 'id' => 'start-intro',
+ 'type' => 'text',
+ 'props' => ['text' => 'Hier entsteht eine neue Webpräsenz.'],
+ 'style' => ['desktop' => [
+ 'fontSize' => '21px', 'maxWidth' => '38ch',
+ 'margin' => ['left' => 'auto', 'right' => 'auto', 'bottom' => '0px'],
+ ]],
+ ],
+ [
+ 'id' => 'start-rule',
+ 'type' => 'divider',
+ 'style' => ['desktop' => ['width' => '72px', 'margin' => ['top' => '40px', 'right' => 'auto', 'bottom' => '22px', 'left' => 'auto']]],
+ ],
+ [
+ 'id' => 'start-note',
+ 'type' => 'text',
+ 'props' => ['text' => 'Erstellt mit KantSites'],
+ 'style' => ['desktop' => ['fontSize' => '14px', 'letterSpacing' => '0.4px', 'margin' => ['bottom' => '0px']]],
+ ],
+ ],
+ ],
],
];
}
@@ -164,6 +205,13 @@ final class DemoContent
return $areas;
}
+ /**
+ * The header and footer a fresh installation starts with. They are ordinary block documents:
+ * everything in them can be changed, moved or removed in the editor. No main heading, because
+ * every page brings its own.
+ *
+ * @return array
+ */
public static function areas(): array
{
$row = static fn (string $id, array $children): array => [
diff --git a/tests/InstallFlowTest.php b/tests/InstallFlowTest.php
index 7124402..c2f3aa7 100644
--- a/tests/InstallFlowTest.php
+++ b/tests/InstallFlowTest.php
@@ -98,7 +98,7 @@ final class InstallFlowTest extends TestCase
$home = $this->request('/');
self::assertSame(200, $home->getStatusCode());
self::assertStringContainsString('Beispiel GmbH', $home->getContent());
- self::assertStringContainsString('Diese Seite ist der Anfang.', $home->getContent());
+ self::assertStringContainsString('Hier entsteht eine neue Webpräsenz.', $home->getContent());
// The public page is still a public page: no script, and the header carries the name.
self::assertStringContainsString("script-src 'none'", (string) $home->headers->get('Content-Security-Policy'));
self::assertSame(200, $this->request('/impressum')->getStatusCode());