Initial Astro + Tailwind scaffold for Wohlruf landing page

- Astro static site generator with zero-JS default output
- Tailwind CSS for styling (consistent with main app stack)
- German-language landing page: hero, how-it-works, features, pricing, FAQ, CTA
- Placeholder pages for Impressum, Datenschutz, AGB
- Reusable Header/Footer/Base layout components
- FTP-deployable static output via `npm run build`
- README with content TODO list for CMO

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-03 04:43:35 +00:00
commit c031971815
17 changed files with 474 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
node_modules/
dist/
.astro/
.env
.env.*
!.env.example

4
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"recommendations": ["astro-build.astro-vscode"],
"unwantedRecommendations": []
}

11
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

48
README.md Normal file
View File

@@ -0,0 +1,48 @@
# wohlruf-website
Wohlruf marketing landing page — built with [Astro](https://astro.build) + Tailwind CSS.
## Stack
- **Astro** — static site generator, zero-JS by default
- **Tailwind CSS** — utility-first styling
- **Output**: pure static HTML/CSS/JS (`dist/`) — FTP-deployable
## Development
```bash
npm install
npm run dev # http://localhost:4321
```
## Build
```bash
npm run build # outputs to dist/
```
The `dist/` folder contains the complete static site ready for FTP upload.
## Deployment
Copy the contents of `dist/` to your webserver via FTP. No server-side runtime required.
## Content structure
| File | Purpose |
|------|---------|
| `src/pages/index.astro` | Main landing page — hero, how-it-works, features, pricing, FAQ, CTA |
| `src/pages/impressum.astro` | Impressum (legal) |
| `src/pages/datenschutz.astro` | Datenschutzerklärung (privacy policy) |
| `src/pages/agb.astro` | Allgemeine Geschäftsbedingungen (terms) |
| `src/layouts/Base.astro` | HTML shell with meta tags |
| `src/components/Header.astro` | Navigation |
| `src/components/Footer.astro` | Footer with links |
## TODO for CMO
- [ ] Finalize pricing tiers and replace `XX €` placeholders in `index.astro`
- [ ] Fill in Impressum, Datenschutz, and AGB pages
- [ ] Add actual logo/brand assets to `public/`
- [ ] Review and refine copy in all sections
- [ ] Add contact form or booking link once backend is ready

13
astro.config.mjs Normal file
View File

@@ -0,0 +1,13 @@
// @ts-check
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
// https://astro.build/config
export default defineConfig({
integrations: [tailwind()],
output: 'static',
i18n: {
defaultLocale: 'de',
locales: ['de'],
},
});

20
package.json Normal file
View File

@@ -0,0 +1,20 @@
{
"name": "wohlruf-website",
"type": "module",
"version": "0.1.0",
"description": "Wohlruf — KI-Sprachbegleiter für Senioren. Marketing landing page.",
"engines": {
"node": ">=22.12.0"
},
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/tailwind": "^5.1.3",
"astro": "^6.1.3",
"tailwindcss": "^3.4.17"
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

9
public/favicon.svg Normal file
View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
<style>
path { fill: #000; }
@media (prefers-color-scheme: dark) {
path { fill: #FFF; }
}
</style>
</svg>

After

Width:  |  Height:  |  Size: 749 B

View File

@@ -0,0 +1,31 @@
---
---
<footer class="bg-gray-50 border-t border-gray-200 mt-24">
<div class="max-w-5xl mx-auto px-6 py-12">
<div class="grid md:grid-cols-3 gap-8 text-sm text-gray-600">
<div>
<p class="font-bold text-gray-900 mb-2">Wohlruf</p>
<p>KI-Sprachbegleiter für Senioren.<br/>Einfach. Persönlich. Verlässlich.</p>
</div>
<div>
<p class="font-semibold text-gray-700 mb-2">Links</p>
<ul class="space-y-1">
<li><a href="#wie-es-funktioniert" class="hover:text-emerald-700">Wie es funktioniert</a></li>
<li><a href="#preise" class="hover:text-emerald-700">Preise</a></li>
<li><a href="#faq" class="hover:text-emerald-700">FAQ</a></li>
</ul>
</div>
<div>
<p class="font-semibold text-gray-700 mb-2">Rechtliches</p>
<ul class="space-y-1">
<li><a href="/impressum" class="hover:text-emerald-700">Impressum</a></li>
<li><a href="/datenschutz" class="hover:text-emerald-700">Datenschutz</a></li>
<li><a href="/agb" class="hover:text-emerald-700">AGB</a></li>
</ul>
</div>
</div>
<p class="mt-8 pt-6 border-t border-gray-200 text-xs text-gray-400 text-center">
© {new Date().getFullYear()} Wohlruf. Alle Rechte vorbehalten.
</p>
</div>
</footer>

View File

@@ -0,0 +1,18 @@
---
---
<header class="sticky top-0 z-50 bg-white/95 backdrop-blur border-b border-gray-100">
<div class="max-w-5xl mx-auto px-6 py-4 flex items-center justify-between">
<a href="/" class="text-xl font-bold text-emerald-700">Wohlruf</a>
<nav class="hidden md:flex items-center gap-8 text-sm font-medium text-gray-600">
<a href="#wie-es-funktioniert" class="hover:text-emerald-700 transition-colors">Wie es funktioniert</a>
<a href="#preise" class="hover:text-emerald-700 transition-colors">Preise</a>
<a href="#faq" class="hover:text-emerald-700 transition-colors">FAQ</a>
</nav>
<a
href="#preise"
class="bg-emerald-600 hover:bg-emerald-700 text-white text-sm font-semibold px-5 py-2 rounded-full transition-colors"
>
Jetzt buchen
</a>
</div>
</header>

30
src/layouts/Base.astro Normal file
View File

@@ -0,0 +1,30 @@
---
interface Props {
title: string;
description?: string;
}
const {
title,
description = 'Wohlruf gibt Ihren Eltern eine persönliche Telefonnummer mit einem einfühlsamen KI-Sprachbegleiter — buchbar als Monatsabo.',
} = Astro.props;
---
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="generator" content={Astro.generator} />
<meta name="description" content={description} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content="website" />
<title>{title}</title>
</head>
<body class="bg-white text-gray-900 antialiased">
<slot />
</body>
</html>

15
src/pages/agb.astro Normal file
View File

@@ -0,0 +1,15 @@
---
import Base from '../layouts/Base.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
---
<Base title="AGB — Wohlruf">
<Header />
<main class="max-w-2xl mx-auto px-6 py-16">
<h1 class="text-3xl font-bold text-gray-900 mb-8">Allgemeine Geschäftsbedingungen</h1>
<!-- TODO: CMO / legal to fill in terms of service -->
<p class="text-gray-500 italic">AGB werden noch ergänzt.</p>
</main>
<Footer />
</Base>

View File

@@ -0,0 +1,15 @@
---
import Base from '../layouts/Base.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
---
<Base title="Datenschutz — Wohlruf">
<Header />
<main class="max-w-2xl mx-auto px-6 py-16">
<h1 class="text-3xl font-bold text-gray-900 mb-8">Datenschutzerklärung</h1>
<!-- TODO: CMO / legal to fill in GDPR-compliant privacy policy -->
<p class="text-gray-500 italic">Datenschutzerklärung wird noch ergänzt.</p>
</main>
<Footer />
</Base>

15
src/pages/impressum.astro Normal file
View File

@@ -0,0 +1,15 @@
---
import Base from '../layouts/Base.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
---
<Base title="Impressum — Wohlruf">
<Header />
<main class="max-w-2xl mx-auto px-6 py-16">
<h1 class="text-3xl font-bold text-gray-900 mb-8">Impressum</h1>
<!-- TODO: CMO / legal to fill in company details -->
<p class="text-gray-500 italic">Impressum wird noch ergänzt.</p>
</main>
<Footer />
</Base>

222
src/pages/index.astro Normal file
View File

@@ -0,0 +1,222 @@
---
import Base from '../layouts/Base.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
---
<Base title="Wohlruf — KI-Sprachbegleiter für Senioren">
<Header />
<main>
<!-- Hero -->
<section class="bg-gradient-to-b from-emerald-50 to-white py-20 px-6">
<div class="max-w-3xl mx-auto text-center">
<p class="text-emerald-700 font-semibold text-sm uppercase tracking-widest mb-4">
Für Ihre Eltern. Von überall.
</p>
<h1 class="text-4xl md:text-5xl font-bold text-gray-900 leading-tight mb-6">
Eine persönliche Telefonnummer —<br class="hidden md:block" />
mit einem warmherzigen KI-Begleiter
</h1>
<p class="text-lg text-gray-600 max-w-xl mx-auto mb-10">
Wohlruf gibt Ihren Eltern eine feste Nummer zum Anrufen.
Die KI hört zu, erinnert sich und gibt Ihnen Bescheid —
ganz ohne Smartphone oder App.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="#preise"
class="bg-emerald-600 hover:bg-emerald-700 text-white font-semibold px-8 py-4 rounded-full text-lg transition-colors"
>
Jetzt für Ihre Eltern buchen
</a>
<a
href="#wie-es-funktioniert"
class="border border-gray-300 hover:border-emerald-500 text-gray-700 font-semibold px-8 py-4 rounded-full text-lg transition-colors"
>
Wie es funktioniert
</a>
</div>
</div>
</section>
<!-- Social proof / trust bar -->
<section class="py-8 bg-white border-y border-gray-100">
<div class="max-w-4xl mx-auto px-6 flex flex-wrap justify-center gap-8 text-sm text-gray-500 text-center">
<span>✓ Kein Smartphone nötig</span>
<span>✓ Daten bleiben in Deutschland</span>
<span>✓ DSGVO-konform</span>
<span>✓ Monatlich kündbar</span>
</div>
</section>
<!-- How it works -->
<section id="wie-es-funktioniert" class="py-20 px-6">
<div class="max-w-4xl mx-auto">
<h2 class="text-3xl font-bold text-center text-gray-900 mb-4">Wie es funktioniert</h2>
<p class="text-center text-gray-500 mb-14 max-w-xl mx-auto">
Drei Schritte — fertig. Kein Techniker, kein Gerät, keine Einrichtung vor Ort.
</p>
<div class="grid md:grid-cols-3 gap-10">
<div class="text-center">
<div class="w-14 h-14 rounded-full bg-emerald-100 text-emerald-700 text-xl font-bold flex items-center justify-center mx-auto mb-4">1</div>
<h3 class="font-semibold text-gray-800 mb-2">Sie buchen online</h3>
<p class="text-gray-500 text-sm">
Wählen Sie ein Abo, geben Sie den Namen und die Präferenzen Ihrer Eltern ein. Dauert 5 Minuten.
</p>
</div>
<div class="text-center">
<div class="w-14 h-14 rounded-full bg-emerald-100 text-emerald-700 text-xl font-bold flex items-center justify-center mx-auto mb-4">2</div>
<h3 class="font-semibold text-gray-800 mb-2">Ihre Eltern erhalten eine Karte</h3>
<p class="text-gray-500 text-sm">
Eine Kärtchen mit einer persönlichen Rufnummer — groß gedruckt, ans Telefon oder an die Küche.
</p>
</div>
<div class="text-center">
<div class="w-14 h-14 rounded-full bg-emerald-100 text-emerald-700 text-xl font-bold flex items-center justify-center mx-auto mb-4">3</div>
<h3 class="font-semibold text-gray-800 mb-2">Sie bleiben informiert</h3>
<p class="text-gray-500 text-sm">
Sie erhalten täglich oder wöchentlich eine Zusammenfassung. Bei auffälligen Themen sofort eine Benachrichtigung.
</p>
</div>
</div>
</div>
</section>
<!-- Features / Benefits -->
<section class="bg-gray-50 py-20 px-6">
<div class="max-w-4xl mx-auto">
<h2 class="text-3xl font-bold text-center text-gray-900 mb-14">Was Wohlruf leistet</h2>
<div class="grid md:grid-cols-2 gap-8">
<div class="bg-white rounded-2xl p-6 shadow-sm">
<p class="text-2xl mb-3">🤝</p>
<h3 class="font-semibold text-gray-800 mb-2">Echte Gesellschaft</h3>
<p class="text-gray-500 text-sm">
Der Begleiter erinnert sich an Gespräche, fragt nach dem Garten oder den Enkeln — und ist immer geduldig.
</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-sm">
<p class="text-2xl mb-3">🔔</p>
<h3 class="font-semibold text-gray-800 mb-2">Familie bleibt informiert</h3>
<p class="text-gray-500 text-sm">
Automatische Zusammenfassungen und Warnmeldungen — ohne Ihren Eltern zuzuhören oder ihre Privatsphäre zu verletzen.
</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-sm">
<p class="text-2xl mb-3">💊</p>
<h3 class="font-semibold text-gray-800 mb-2">Erinnerungen & Nachrichten</h3>
<p class="text-gray-500 text-sm">
Medikamentenerinnerungen, Arzttermine und Nachrichten von der Familie — direkt im Gespräch.
</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-sm">
<p class="text-2xl mb-3">🏥</p>
<h3 class="font-semibold text-gray-800 mb-2">Für Pflegedienste</h3>
<p class="text-gray-500 text-sm">
Pflegeprofis können Nachrichten hinterlassen und strukturierte Berichte abrufen — ohne extra App.
</p>
</div>
</div>
</div>
</section>
<!-- Pricing -->
<section id="preise" class="py-20 px-6">
<div class="max-w-3xl mx-auto">
<h2 class="text-3xl font-bold text-center text-gray-900 mb-4">Preise</h2>
<p class="text-center text-gray-500 mb-12">Einfach. Transparent. Monatlich kündbar.</p>
<!-- TODO: CMO to finalize pricing tiers -->
<div class="grid md:grid-cols-2 gap-6">
<div class="border-2 border-gray-200 rounded-2xl p-8">
<p class="text-sm font-semibold text-gray-500 uppercase tracking-wide mb-1">Basis</p>
<p class="text-4xl font-bold text-gray-900 mb-1">XX €<span class="text-base font-normal text-gray-400">/Monat</span></p>
<p class="text-sm text-gray-500 mb-6">Pro Senior</p>
<ul class="text-sm text-gray-600 space-y-2 mb-8">
<li>✓ Persönliche Rufnummer</li>
<li>✓ Unbegrenzte Gespräche</li>
<li>✓ Wöchentliche Zusammenfassung</li>
<li>✓ Warnmeldungen bei auffälligen Themen</li>
</ul>
<a href="#" class="block text-center border-2 border-emerald-600 text-emerald-700 font-semibold py-3 rounded-full hover:bg-emerald-50 transition-colors">
Auswählen
</a>
</div>
<div class="border-2 border-emerald-500 rounded-2xl p-8 relative">
<span class="absolute -top-3 left-1/2 -translate-x-1/2 bg-emerald-600 text-white text-xs font-bold px-4 py-1 rounded-full">Beliebt</span>
<p class="text-sm font-semibold text-emerald-600 uppercase tracking-wide mb-1">Familie Plus</p>
<p class="text-4xl font-bold text-gray-900 mb-1">XX €<span class="text-base font-normal text-gray-400">/Monat</span></p>
<p class="text-sm text-gray-500 mb-6">Pro Senior</p>
<ul class="text-sm text-gray-600 space-y-2 mb-8">
<li>✓ Alles aus Basis</li>
<li>✓ Tägliche Zusammenfassung</li>
<li>✓ Bis zu 5 Familienmitglieder</li>
<li>✓ Pflegedienst-Zugang</li>
<li>✓ Arzt-Bericht als PDF</li>
</ul>
<a href="#" class="block text-center bg-emerald-600 hover:bg-emerald-700 text-white font-semibold py-3 rounded-full transition-colors">
Jetzt starten
</a>
</div>
</div>
</div>
</section>
<!-- FAQ -->
<section id="faq" class="bg-gray-50 py-20 px-6">
<div class="max-w-2xl mx-auto">
<h2 class="text-3xl font-bold text-center text-gray-900 mb-12">Häufige Fragen</h2>
<div class="space-y-6">
<div>
<h3 class="font-semibold text-gray-800 mb-1">Brauchen meine Eltern ein Smartphone?</h3>
<p class="text-gray-500 text-sm">
Nein. Wohlruf funktioniert mit jedem normalen Telefon — auch mit dem Festnetz von 1985.
</p>
</div>
<div>
<h3 class="font-semibold text-gray-800 mb-1">Sind die Gespräche sicher und DSGVO-konform?</h3>
<p class="text-gray-500 text-sm">
Ja. Alle Daten werden auf deutschen Servern verarbeitet und gespeichert. Gesprächsmitschnitte sind verschlüsselt und werden nach 90 Tagen automatisch gelöscht.
</p>
</div>
<div>
<h3 class="font-semibold text-gray-800 mb-1">Weiß mein Elternteil, dass es eine KI ist?</h3>
<p class="text-gray-500 text-sm">
Der Begleiter ist warmherzig und persönlich. Wenn direkt gefragt, antwortet er ehrlich. Wir empfehlen, die Nutzung von Anfang an offen zu kommunizieren.
</p>
</div>
<div>
<h3 class="font-semibold text-gray-800 mb-1">Kann ich jederzeit kündigen?</h3>
<p class="text-gray-500 text-sm">
Ja, monatlich kündbar, jederzeit ohne Begründung.
</p>
</div>
<div>
<h3 class="font-semibold text-gray-800 mb-1">Was passiert, wenn mein Elternteil etwas Besorgniserregendes sagt?</h3>
<p class="text-gray-500 text-sm">
Bei Erwähnungen von Schmerzen, Stürzen oder Verwirrung erhalten Sie sofort eine Benachrichtigung. Der Begleiter reagiert dabei immer ruhig und fürsorglich — er alarmiert Ihren Angehörigen nicht.
</p>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="py-20 px-6 bg-emerald-700 text-white text-center">
<div class="max-w-2xl mx-auto">
<h2 class="text-3xl font-bold mb-4">Bereit, Ihren Eltern mehr Gesellschaft zu schenken?</h2>
<p class="text-emerald-100 mb-8">
Buchen Sie jetzt und Ihre Eltern können noch diese Woche anrufen.
</p>
<a
href="#preise"
class="inline-block bg-white text-emerald-700 font-bold px-10 py-4 rounded-full text-lg hover:bg-emerald-50 transition-colors"
>
Jetzt buchen
</a>
</div>
</section>
</main>
<Footer />
</Base>

12
tailwind.config.mjs Normal file
View File

@@ -0,0 +1,12 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
theme: {
extend: {
fontFamily: {
sans: ['system-ui', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'sans-serif'],
},
},
},
plugins: [],
};

5
tsconfig.json Normal file
View File

@@ -0,0 +1,5 @@
{
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist"]
}