feat(landing): add Presi landing page and improve Zitare landing

- Create complete Presi landing page with Astro + Tailwind
- Orange theme (#f97316) matching Presi branding
- Use shared-landing-ui components (HeroSection, FeatureSection, FAQSection, CTASection)
- Add "How it works" section with 4-step guide
- Fix Zitare landing styling with proper Tailwind config
- Add CSS custom properties for consistent theming
- Add deploy:landing:presi script and update deploy:landing:all
- Add dev:presi:landing script

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Till-JS 2025-12-02 13:06:38 +01:00
parent 29aaaec4fa
commit 623b1a21b1
20 changed files with 1582 additions and 256 deletions

View file

@ -0,0 +1,8 @@
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://presi.manacore.app',
integrations: [tailwind(), sitemap()],
});

View file

@ -0,0 +1,26 @@
{
"name": "@presi/landing",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro",
"type-check": "astro check"
},
"dependencies": {
"@astrojs/check": "^0.9.0",
"@astrojs/sitemap": "^3.2.1",
"@manacore/shared-landing-ui": "workspace:*",
"astro": "^5.16.0",
"typescript": "^5.0.0"
},
"devDependencies": {
"@astrojs/tailwind": "^6.0.0",
"@tailwindcss/typography": "^0.5.16",
"tailwindcss": "^3.4.17"
}
}

View file

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<rect width="100" height="100" rx="20" fill="#f97316"/>
<rect x="20" y="25" width="60" height="40" rx="4" fill="white"/>
<rect x="25" y="30" width="50" height="30" rx="2" fill="#0a0a0f"/>
<rect x="30" y="35" width="30" height="4" rx="1" fill="#f97316"/>
<rect x="30" y="42" width="40" height="2" rx="1" fill="#6b7280"/>
<rect x="30" y="47" width="35" height="2" rx="1" fill="#6b7280"/>
<rect x="30" y="52" width="25" height="2" rx="1" fill="#6b7280"/>
<circle cx="50" cy="75" r="5" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 583 B

View file

@ -0,0 +1,74 @@
---
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
---
<footer class="bg-background-card py-12 border-t border-border">
<Container>
<div class="grid md:grid-cols-4 gap-8 mb-8">
<!-- Brand -->
<div class="md:col-span-2">
<a href="/" class="flex items-center gap-2 text-xl font-bold text-text-primary mb-4">
<span class="text-2xl">🎬</span>
<span>Presi</span>
</a>
<p class="text-text-secondary text-sm max-w-md">
Erstelle beeindruckende Präsentationen in Minuten. Mit KI-Unterstützung, schönen Themes und einfacher Bedienung.
</p>
</div>
<!-- Links -->
<div>
<h4 class="text-text-muted text-xs uppercase tracking-wider mb-4">Produkt</h4>
<ul class="space-y-2">
<li>
<a href="#features" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Features
</a>
</li>
<li>
<a href="https://presi.manacore.app" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Web App
</a>
</li>
<li>
<a href="#download" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Mobile App
</a>
</li>
</ul>
</div>
<!-- Legal -->
<div>
<h4 class="text-text-muted text-xs uppercase tracking-wider mb-4">Rechtliches</h4>
<ul class="space-y-2">
<li>
<a href="/privacy" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Datenschutz
</a>
</li>
<li>
<a href="/terms" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
AGB
</a>
</li>
<li>
<a href="/imprint" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Impressum
</a>
</li>
</ul>
</div>
</div>
<!-- Copyright -->
<div class="pt-8 border-t border-border text-center">
<p class="text-text-muted text-sm">
© 2025 Presi. Alle Rechte vorbehalten.
</p>
<p class="text-text-muted text-xs mt-1">
Ein Produkt von <a href="https://manacore.ai" class="hover:text-primary transition-colors">ManaCore</a>
</p>
</div>
</Container>
</footer>

View file

@ -0,0 +1,36 @@
---
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
import Button from '@manacore/shared-landing-ui/atoms/Button.astro';
---
<nav class="fixed top-0 left-0 right-0 z-50 bg-background-page/80 backdrop-blur-lg border-b border-border">
<Container>
<div class="flex items-center justify-between h-16">
<!-- Logo -->
<a href="/" class="flex items-center gap-2 text-xl font-bold text-text-primary">
<span class="text-2xl">🎬</span>
<span>Presi</span>
</a>
<!-- Desktop Navigation -->
<div class="hidden md:flex items-center gap-8">
<a href="#features" class="text-text-secondary hover:text-text-primary transition-colors">
Features
</a>
<a href="#how-it-works" class="text-text-secondary hover:text-text-primary transition-colors">
So funktioniert's
</a>
<a href="#faq" class="text-text-secondary hover:text-text-primary transition-colors">
FAQ
</a>
</div>
<!-- CTA -->
<div class="flex items-center gap-4">
<Button href="https://presi.manacore.app" variant="primary" size="sm">
App öffnen
</Button>
</div>
</div>
</Container>
</nav>

View file

@ -0,0 +1,50 @@
---
import '../styles/global.css';
interface Props {
title: string;
description?: string;
}
const {
title,
description = 'Presi - Erstelle beeindruckende Präsentationen mit KI-Unterstützung',
} = Astro.props;
---
<!doctype html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content={description} />
<meta name="generator" content={Astro.generator} />
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<!-- Open Graph -->
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content="website" />
<meta property="og:locale" content="de_DE" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<title>{title}</title>
</head>
<body class="min-h-screen bg-background-page text-text-primary antialiased">
<slot />
</body>
</html>

View file

@ -0,0 +1,224 @@
---
import Layout from '../layouts/Layout.astro';
import Navigation from '../components/Navigation.astro';
import Footer from '../components/Footer.astro';
// Shared components
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
// Feature data
const features = [
{
icon: '🎨',
title: 'Schöne Themes',
description: 'Wähle aus professionellen Themes oder erstelle dein eigenes Design.',
},
{
icon: '📱',
title: 'Überall verfügbar',
description: 'Native Apps für iOS, Android und Web - deine Präsentationen sind immer dabei.',
},
{
icon: '🔗',
title: 'Einfach teilen',
description: 'Teile Präsentationen per Link - ohne Download oder Account nötig.',
},
{
icon: '🖥️',
title: 'Präsentationsmodus',
description: 'Vollbild-Präsentation mit Tastatursteuerung und Timer.',
},
{
icon: '📝',
title: 'Verschiedene Layouts',
description: 'Titel, Inhalt, Bilder, Split-Views - für jeden Zweck das richtige Layout.',
},
{
icon: '☁️',
title: 'Cloud-Sync',
description: 'Automatische Synchronisierung auf allen Geräten.',
},
];
// How it works steps
const steps = [
{
number: '1',
title: 'Deck erstellen',
description: 'Starte mit einem leeren Deck oder wähle ein Template.',
},
{
number: '2',
title: 'Slides hinzufügen',
description: 'Füge Titel, Text, Bilder und Bullet Points hinzu.',
},
{
number: '3',
title: 'Theme wählen',
description: 'Wähle ein professionelles Theme für deine Präsentation.',
},
{
number: '4',
title: 'Präsentieren & Teilen',
description: 'Präsentiere im Vollbild oder teile per Link.',
},
];
// FAQ data
const faqs = [
{
question: 'Ist Presi kostenlos?',
answer: 'Ja, Presi ist kostenlos nutzbar. Du kannst unbegrenzt Präsentationen erstellen, teilen und präsentieren.',
},
{
question: 'Kann ich Präsentationen offline bearbeiten?',
answer: 'Mit der mobilen App kannst du deine Präsentationen auch offline bearbeiten. Änderungen werden synchronisiert, sobald du wieder online bist.',
},
{
question: 'Wie teile ich eine Präsentation?',
answer: 'Klicke auf "Teilen" und erstelle einen Link. Jeder mit dem Link kann die Präsentation ansehen - ohne Account oder Download.',
},
{
question: 'Welche Slide-Typen gibt es?',
answer: 'Presi unterstützt Titel-Slides, Content-Slides mit Text und Bullet Points, Bild-Slides und Split-Views mit Text und Bild nebeneinander.',
},
{
question: 'Kann ich eigene Themes erstellen?',
answer: 'Aktuell bieten wir vorgefertigte Themes. Custom Themes sind für zukünftige Versionen geplant.',
},
];
---
<Layout title="Presi - Präsentationen erstellen leicht gemacht">
<Navigation />
<main class="pt-16">
<!-- Hero Section -->
<HeroSection
title="Präsentationen erstellen leicht gemacht"
subtitle="Erstelle beeindruckende Präsentationen in Minuten. Mit schönen Themes, einfacher Bedienung und überall verfügbar."
variant="centered"
primaryCta={{
text: 'Kostenlos starten',
href: 'https://presi.manacore.app',
}}
secondaryCta={{
text: 'Features ansehen',
href: '#features',
variant: 'secondary',
}}
trustBadges={[
{ icon: '🎨', text: 'Schöne Themes' },
{ icon: '🆓', text: '100% Kostenlos' },
{ icon: '📱', text: 'iOS & Android' },
]}
/>
<!-- How it works Section -->
<section id="how-it-works" class="py-20 bg-background-card">
<Container>
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold text-text-primary mb-4">
So einfach geht's
</h2>
<p class="text-text-secondary text-lg max-w-2xl mx-auto">
In vier Schritten zur perfekten Präsentation
</p>
</div>
<div class="grid md:grid-cols-4 gap-6">
{steps.map((step, index) => (
<div class="relative">
<div class="bg-background-page rounded-2xl p-6 border border-border hover:border-primary/30 transition-all duration-300 h-full">
<div class="w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center mb-4">
<span class="text-primary font-bold text-xl">{step.number}</span>
</div>
<h3 class="text-text-primary font-semibold text-lg mb-2">{step.title}</h3>
<p class="text-text-secondary text-sm">{step.description}</p>
</div>
{index < steps.length - 1 && (
<div class="hidden md:block absolute top-1/2 -right-3 transform -translate-y-1/2 text-text-muted">
</div>
)}
</div>
))}
</div>
</Container>
</section>
<!-- Features Section -->
<FeatureSection
id="features"
title="Alles was du für großartige Präsentationen brauchst"
subtitle="Presi vereint einfache Bedienung mit professionellen Features"
features={features}
columns={3}
variant="cards"
/>
<!-- Preview Section -->
<section class="py-20 bg-background-card">
<Container size="md">
<div class="text-center">
<h2 class="text-3xl md:text-4xl font-bold text-text-primary mb-6">
Präsentiere wie ein Profi
</h2>
<p class="text-text-secondary text-lg mb-8 leading-relaxed">
Der Präsentationsmodus bietet alles was du brauchst: Vollbild-Ansicht,
Tastaturnavigation mit Pfeiltasten, Timer für perfektes Timing und
Speaker Notes für deine Notizen.
</p>
<div class="bg-background-page rounded-2xl p-8 border border-border">
<div class="flex flex-wrap justify-center gap-4 text-sm text-text-secondary">
<div class="flex items-center gap-2">
<kbd class="px-2 py-1 bg-background-card rounded border border-border">←</kbd>
<kbd class="px-2 py-1 bg-background-card rounded border border-border">→</kbd>
<span>Navigation</span>
</div>
<div class="flex items-center gap-2">
<kbd class="px-2 py-1 bg-background-card rounded border border-border">F</kbd>
<span>Vollbild</span>
</div>
<div class="flex items-center gap-2">
<kbd class="px-2 py-1 bg-background-card rounded border border-border">ESC</kbd>
<span>Beenden</span>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- FAQ Section -->
<FAQSection
id="faq"
title="Häufig gestellte Fragen"
subtitle="Alles was du über Presi wissen musst"
faqs={faqs}
/>
<!-- CTA Section -->
<CTASection
id="download"
title="Bereit für bessere Präsentationen?"
subtitle="Starte jetzt kostenlos und erstelle deine erste Präsentation in Minuten."
primaryCta={{
text: 'Web App öffnen',
href: 'https://presi.manacore.app',
}}
secondaryCta={{
text: 'Mobile App laden',
href: '#',
variant: 'secondary',
}}
variant="highlighted"
/>
</main>
<Footer />
</Layout>

View file

@ -0,0 +1,101 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
/* Primary colors - Orange */
--color-primary: #f97316;
--color-primary-hover: #fb923c;
--color-primary-glow: rgba(249, 115, 22, 0.3);
/* Background colors - Dark theme */
--color-background-page: #0a0a0f;
--color-background-card: #141419;
--color-background-card-hover: #1c1c24;
/* Text colors */
--color-text-primary: #f9fafb;
--color-text-secondary: #d1d5db;
--color-text-muted: #6b7280;
/* Border colors */
--color-border: #27272a;
--color-border-hover: #3f3f46;
}
/* Apply CSS custom properties to Tailwind classes */
.bg-primary {
background-color: var(--color-primary);
}
.bg-primary\/10 {
background-color: rgba(249, 115, 22, 0.1);
}
.bg-background-page {
background-color: var(--color-background-page);
}
.bg-background-card {
background-color: var(--color-background-card);
}
.text-primary {
color: var(--color-primary);
}
.text-text-primary {
color: var(--color-text-primary);
}
.text-text-secondary {
color: var(--color-text-secondary);
}
.text-text-muted {
color: var(--color-text-muted);
}
.border-border {
border-color: var(--color-border);
}
.border-primary {
border-color: var(--color-primary);
}
.border-primary\/30 {
border-color: rgba(249, 115, 22, 0.3);
}
/* Smooth scrolling */
html {
scroll-behavior: smooth;
}
/* Custom animations */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fade-in {
animation: fadeIn 0.5s ease-out forwards;
}
/* Button hover effects */
.btn-primary {
background: linear-gradient(135deg, var(--color-primary) 0%, #ea580c 100%);
transition: all 0.3s ease;
}
.btn-primary:hover {
box-shadow: 0 0 30px var(--color-primary-glow);
transform: translateY(-2px);
}
/* Card hover effects */
.card-hover {
transition: all 0.3s ease;
}
.card-hover:hover {
border-color: rgba(249, 115, 22, 0.3);
box-shadow: 0 0 40px rgba(249, 115, 22, 0.1);
}

View file

@ -0,0 +1,36 @@
/** @type {import('tailwindcss').Config} */
export default {
content: [
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
'../../../../packages/shared-landing-ui/src/**/*.{astro,html,js,jsx,ts,tsx}',
],
theme: {
extend: {
colors: {
primary: {
DEFAULT: '#f97316',
hover: '#fb923c',
glow: 'rgba(249, 115, 22, 0.3)',
},
background: {
page: '#0a0a0f',
card: '#141419',
'card-hover': '#1c1c24',
},
text: {
primary: '#f9fafb',
secondary: '#d1d5db',
muted: '#6b7280',
},
border: {
DEFAULT: '#27272a',
hover: '#3f3f46',
},
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
},
plugins: [],
};

View file

@ -0,0 +1,9 @@
{
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}

View file

@ -0,0 +1,3 @@
name = "presi-landing"
compatibility_date = "2024-12-01"
pages_build_output_dir = "dist"

View file

@ -9,6 +9,7 @@
"astro": "astro"
},
"dependencies": {
"@manacore/shared-landing-ui": "workspace:*",
"astro": "^5.3.4"
},
"devDependencies": {

View file

@ -0,0 +1,74 @@
---
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
---
<footer class="bg-background-card py-12 border-t border-border">
<Container>
<div class="grid md:grid-cols-4 gap-8 mb-8">
<!-- Brand -->
<div class="md:col-span-2">
<a href="/" class="flex items-center gap-2 text-xl font-bold text-text-primary mb-4">
<span class="text-2xl">📖</span>
<span>Zitare</span>
</a>
<p class="text-text-secondary text-sm max-w-md">
Deine tägliche Quelle für Inspiration und Weisheit. Entdecke über 1000 Zitate von den größten Denkern der Geschichte.
</p>
</div>
<!-- Links -->
<div>
<h4 class="text-text-muted text-xs uppercase tracking-wider mb-4">Produkt</h4>
<ul class="space-y-2">
<li>
<a href="#features" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Features
</a>
</li>
<li>
<a href="https://zitare.manacore.app" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Web App
</a>
</li>
<li>
<a href="#download" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Mobile App
</a>
</li>
</ul>
</div>
<!-- Legal -->
<div>
<h4 class="text-text-muted text-xs uppercase tracking-wider mb-4">Rechtliches</h4>
<ul class="space-y-2">
<li>
<a href="/privacy" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Datenschutz
</a>
</li>
<li>
<a href="/terms" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
AGB
</a>
</li>
<li>
<a href="/imprint" class="text-text-secondary hover:text-text-primary text-sm transition-colors">
Impressum
</a>
</li>
</ul>
</div>
</div>
<!-- Copyright -->
<div class="pt-8 border-t border-border text-center">
<p class="text-text-muted text-sm">
© 2025 Zitare. Alle Rechte vorbehalten.
</p>
<p class="text-text-muted text-xs mt-1">
Ein Produkt von <a href="https://manacore.ai" class="hover:text-primary transition-colors">ManaCore</a>
</p>
</div>
</Container>
</footer>

View file

@ -0,0 +1,36 @@
---
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
import Button from '@manacore/shared-landing-ui/atoms/Button.astro';
---
<nav class="fixed top-0 left-0 right-0 z-50 bg-background-page/80 backdrop-blur-lg border-b border-border">
<Container>
<div class="flex items-center justify-between h-16">
<!-- Logo -->
<a href="/" class="flex items-center gap-2 text-xl font-bold text-text-primary">
<span class="text-2xl">📖</span>
<span>Zitare</span>
</a>
<!-- Desktop Navigation -->
<div class="hidden md:flex items-center gap-8">
<a href="#features" class="text-text-secondary hover:text-text-primary transition-colors">
Features
</a>
<a href="#quotes" class="text-text-secondary hover:text-text-primary transition-colors">
Zitate
</a>
<a href="#about" class="text-text-secondary hover:text-text-primary transition-colors">
Über uns
</a>
</div>
<!-- CTA -->
<div class="flex items-center gap-4">
<Button href="https://zitare.manacore.app" variant="primary" size="sm">
App öffnen
</Button>
</div>
</div>
</Container>
</nav>

View file

@ -1,75 +1,50 @@
---
import '../styles/global.css';
interface Props {
title: string;
description?: string;
}
const { title, description = 'Discover inspiring quotes from great minds' } = Astro.props;
const {
title,
description = 'Zitare - Inspirierende Zitate von großen Denkern',
} = Astro.props;
---
<!doctype html>
<html lang="en">
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content={description} />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<!-- Open Graph -->
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content="website" />
<meta property="og:locale" content="de_DE" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Merriweather:ital,wght@0,400;1,400&display=swap"
rel="stylesheet"
/>
<title>{title}</title>
</head>
<body>
<nav class="bg-gradient-to-r from-purple-600 to-indigo-600 text-white">
<div class="container mx-auto px-6 py-4">
<div class="flex items-center justify-between">
<a href="/" class="text-2xl font-bold">📖 Quotes</a>
<div class="flex gap-6">
<a href="/#features" class="hover:opacity-80">Features</a>
<a href="/#about" class="hover:opacity-80">About</a>
<a
href="/app"
class="bg-white text-purple-600 px-4 py-2 rounded-lg font-semibold hover:opacity-90"
>
Open App
</a>
</div>
</div>
</div>
</nav>
<body class="min-h-screen bg-background-page text-text-primary antialiased">
<slot />
<footer class="bg-gray-900 text-white py-12">
<div class="container mx-auto px-6 text-center">
<p>&copy; 2025 Quotes App. All rights reserved.</p>
<div class="mt-4 flex justify-center gap-6">
<a href="/privacy" class="hover:opacity-80">Privacy</a>
<a href="/terms" class="hover:opacity-80">Terms</a>
<a href="/contact" class="hover:opacity-80">Contact</a>
</div>
</div>
</footer>
</body>
</html>
<style is:global>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-family: system-ui, sans-serif;
background: #ffffff;
}
body {
min-height: 100vh;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
</style>

View file

@ -1,122 +1,196 @@
---
import Layout from '../layouts/Layout.astro';
import Navigation from '../components/Navigation.astro';
import Footer from '../components/Footer.astro';
// Shared components
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
// Feature data
const features = [
{
icon: '📱',
title: 'Mobile App',
description: 'Native iOS und Android App mit Offline-Unterstützung und elegantem Design.',
},
{
icon: '🌐',
title: 'Web-Zugang',
description: 'Greife von jedem Browser auf deine Lieblingszitate zu - überall und jederzeit.',
},
{
icon: '📚',
title: '1000+ Zitate',
description: 'Kuratierte Sammlung von Philosophen, Wissenschaftlern und Vordenkern.',
},
{
icon: '⭐',
title: 'Favoriten',
description: 'Speichere deine Lieblingszitate und greife sofort darauf zu.',
},
{
icon: '🔍',
title: 'Suche & Filter',
description: 'Finde Zitate nach Autor, Kategorie oder Stichwort.',
},
{
icon: '🎨',
title: 'Schönes Design',
description: 'Elegante Oberfläche, die den Inhalt in den Vordergrund stellt.',
},
];
// Sample quotes for display
const sampleQuotes = [
{
text: 'Das Leben ist das, was passiert, während du beschäftigt bist, andere Pläne zu machen.',
author: 'John Lennon',
},
{
text: 'Der einzige Weg, großartige Arbeit zu leisten, ist zu lieben, was du tust.',
author: 'Steve Jobs',
},
{
text: 'Es ist nicht wichtig, wie langsam du gehst, solange du nicht stehen bleibst.',
author: 'Konfuzius',
},
];
// FAQ data
const faqs = [
{
question: 'Ist Zitare kostenlos?',
answer: 'Ja, Zitare ist kostenlos nutzbar. Du hast Zugriff auf alle Zitate und Features ohne Abo oder versteckte Kosten.',
},
{
question: 'Welche Autoren sind in der Sammlung?',
answer: 'Unsere Sammlung umfasst über 1000 Zitate von Philosophen wie Sokrates und Nietzsche, Wissenschaftlern wie Einstein und Curie, sowie modernen Denkern und Führungspersönlichkeiten.',
},
{
question: 'Kann ich Zitate offline lesen?',
answer: 'Ja, mit der mobilen App werden deine Lieblingszitate lokal gespeichert. So hast du auch ohne Internetverbindung Zugriff auf Inspiration.',
},
{
question: 'Wie kann ich Zitate teilen?',
answer: 'Jedes Zitat kann direkt aus der App geteilt werden - per WhatsApp, Instagram, E-Mail oder als Bild für Social Media.',
},
{
question: 'Werden neue Zitate hinzugefügt?',
answer: 'Ja, wir erweitern unsere Sammlung regelmäßig mit neuen, sorgfältig ausgewählten Zitaten aus verschiedenen Epochen und Kulturen.',
},
];
---
<Layout title="Quotes - Inspiring Words from Great Minds">
<main>
<Layout title="Zitare - Inspirierende Zitate von großen Denkern">
<Navigation />
<main class="pt-16">
<!-- Hero Section -->
<section class="bg-gradient-to-br from-purple-50 to-indigo-100 py-20">
<div class="container mx-auto px-6 text-center">
<h1 class="text-5xl md:text-6xl font-bold text-gray-900 mb-6">Discover Inspiring Quotes</h1>
<p class="text-xl md:text-2xl text-gray-700 mb-8 max-w-2xl mx-auto">
Explore wisdom from history's greatest thinkers. Available on mobile, web, and everywhere
you need inspiration.
</p>
<div class="flex gap-4 justify-center flex-wrap">
<a
href="/app"
class="bg-purple-600 text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-purple-700 transition"
>
Open Web App
</a>
<a
href="#features"
class="bg-white text-purple-600 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-50 transition border-2 border-purple-600"
>
Learn More
</a>
<HeroSection
title="Entdecke inspirierende Zitate"
subtitle="Tauche ein in die Weisheit der größten Denker der Geschichte. Verfügbar auf Mobile, Web und überall wo du Inspiration brauchst."
variant="centered"
primaryCta={{
text: 'Jetzt entdecken',
href: 'https://zitare.manacore.app',
}}
secondaryCta={{
text: 'Features ansehen',
href: '#features',
variant: 'secondary',
}}
trustBadges={[
{ icon: '📚', text: '1000+ Zitate' },
{ icon: '🆓', text: '100% Kostenlos' },
{ icon: '📱', text: 'iOS & Android' },
]}
/>
<!-- Sample Quotes Section -->
<section id="quotes" class="py-20 bg-background-card">
<Container>
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold text-text-primary mb-4">
Lass dich inspirieren
</h2>
<p class="text-text-secondary text-lg max-w-2xl mx-auto">
Jeden Tag ein neues Zitat - Weisheit die bewegt
</p>
</div>
</div>
<div class="grid md:grid-cols-3 gap-6">
{sampleQuotes.map((quote) => (
<div class="bg-background-page rounded-2xl p-8 border border-border hover:border-primary/30 transition-all duration-300 group">
<div class="text-4xl text-primary/30 mb-4 group-hover:text-primary/50 transition-colors">"</div>
<p class="quote-text text-text-primary text-lg mb-6 leading-relaxed">
{quote.text}
</p>
<p class="text-text-muted text-sm">— {quote.author}</p>
</div>
))}
</div>
</Container>
</section>
<!-- Features Section -->
<section id="features" class="py-20">
<div class="container mx-auto px-6">
<h2 class="text-4xl font-bold text-center mb-12 text-gray-900">Features</h2>
<div class="grid md:grid-cols-3 gap-8">
<div class="text-center p-6">
<div class="text-5xl mb-4">📱</div>
<h3 class="text-xl font-bold mb-2">Mobile App</h3>
<p class="text-gray-600">
Native iOS and Android app with offline support and beautiful design.
</p>
</div>
<div class="text-center p-6">
<div class="text-5xl mb-4">🌐</div>
<h3 class="text-xl font-bold mb-2">Web Access</h3>
<p class="text-gray-600">Access your favorite quotes from any browser, anywhere.</p>
</div>
<div class="text-center p-6">
<div class="text-5xl mb-4">📚</div>
<h3 class="text-xl font-bold mb-2">1000+ Quotes</h3>
<p class="text-gray-600">
Curated collection from philosophers, scientists, and leaders.
</p>
</div>
<div class="text-center p-6">
<div class="text-5xl mb-4">⭐</div>
<h3 class="text-xl font-bold mb-2">Favorites</h3>
<p class="text-gray-600">Save your favorite quotes and access them instantly.</p>
</div>
<div class="text-center p-6">
<div class="text-5xl mb-4">🔍</div>
<h3 class="text-xl font-bold mb-2">Search & Filter</h3>
<p class="text-gray-600">Find quotes by author, category, or keyword.</p>
</div>
<div class="text-center p-6">
<div class="text-5xl mb-4">🎨</div>
<h3 class="text-xl font-bold mb-2">Beautiful Design</h3>
<p class="text-gray-600">Elegant interface that puts content first.</p>
</div>
</div>
</div>
</section>
<FeatureSection
id="features"
title="Alles was du für tägliche Inspiration brauchst"
subtitle="Zitare verbindet klassische Weisheit mit moderner Technologie"
features={features}
columns={3}
variant="cards"
/>
<!-- About Section -->
<section id="about" class="bg-gray-50 py-20">
<div class="container mx-auto px-6">
<div class="max-w-3xl mx-auto text-center">
<h2 class="text-4xl font-bold mb-6 text-gray-900">About Quotes</h2>
<p class="text-xl text-gray-700 mb-6">
Quotes is your daily source of inspiration and wisdom. We've carefully curated over 1000
quotes from history's most influential thinkers, philosophers, scientists, and leaders.
<section id="about" class="py-20 bg-background-card">
<Container size="md">
<div class="text-center">
<h2 class="text-3xl md:text-4xl font-bold text-text-primary mb-6">
Über Zitare
</h2>
<p class="text-text-secondary text-lg mb-6 leading-relaxed">
Zitare ist deine tägliche Quelle für Inspiration und Weisheit. Wir haben über 1000 Zitate
von den einflussreichsten Denkern, Philosophen, Wissenschaftlern und Führungspersönlichkeiten
der Geschichte sorgfältig zusammengestellt.
</p>
<p class="text-lg text-gray-600">
Whether you're looking for motivation, wisdom, or just a moment of reflection, Quotes
brings you timeless words that inspire and enlighten.
<p class="text-text-secondary text-lg leading-relaxed">
Ob du Motivation suchst, nach Weisheit strebst oder einfach einen Moment der Reflexion
brauchst - Zitare bringt dir zeitlose Worte, die inspirieren und erleuchten.
</p>
</div>
</div>
</Container>
</section>
<!-- FAQ Section -->
<FAQSection
id="faq"
title="Häufig gestellte Fragen"
subtitle="Alles was du über Zitare wissen musst"
faqs={faqs}
/>
<!-- CTA Section -->
<section class="bg-gradient-to-r from-purple-600 to-indigo-600 text-white py-20">
<div class="container mx-auto px-6 text-center">
<h2 class="text-4xl font-bold mb-6">Ready to Get Inspired?</h2>
<p class="text-xl mb-8 max-w-2xl mx-auto">
Start exploring thousands of inspiring quotes today.
</p>
<div class="flex gap-4 justify-center flex-wrap">
<a
href="/app"
class="bg-white text-purple-600 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 transition"
>
Launch Web App
</a>
<a
href="#"
class="bg-purple-800 text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-purple-900 transition"
>
Download Mobile App
</a>
</div>
</div>
</section>
<CTASection
id="download"
title="Bereit für tägliche Inspiration?"
subtitle="Starte jetzt und entdecke die Weisheit der größten Denker. Kostenlos und ohne Anmeldung."
primaryCta={{
text: 'Web App öffnen',
href: 'https://zitare.manacore.app',
}}
secondaryCta={{
text: 'Mobile App laden',
href: '#',
variant: 'secondary',
}}
variant="highlighted"
/>
</main>
<Footer />
</Layout>

View file

@ -0,0 +1,99 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Zitare Theme CSS Variables - Purple/Indigo */
:root {
/* Primary colors - Zitare Purple */
--color-primary: #8b5cf6;
--color-primary-hover: #a78bfa;
--color-primary-glow: rgba(139, 92, 246, 0.3);
/* Text colors */
--color-text-primary: #f9fafb;
--color-text-secondary: #d1d5db;
--color-text-muted: #6b7280;
/* Background colors */
--color-background-page: #0f0d1a;
--color-background-card: #1a1625;
--color-background-card-hover: #252033;
/* Border colors */
--color-border: #2d2640;
--color-border-hover: #3d3555;
}
/* Base styles */
html {
scroll-behavior: smooth;
}
body {
font-family: 'Inter', system-ui, sans-serif;
background-color: var(--color-background-page);
color: var(--color-text-primary);
line-height: 1.6;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-background-card);
}
::-webkit-scrollbar-thumb {
background: var(--color-border);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-border-hover);
}
/* Selection */
::selection {
background-color: var(--color-primary);
color: white;
}
/* Focus styles */
:focus-visible {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}
/* Gradient text */
.text-gradient {
background: linear-gradient(135deg, #8b5cf6 0%, #a78bfa 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Animation utilities */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fadeIn {
animation: fadeIn 0.6s ease-out forwards;
}
/* Quote styling */
.quote-text {
font-family: 'Merriweather', Georgia, serif;
font-style: italic;
line-height: 1.8;
}

View file

@ -0,0 +1,38 @@
/** @type {import('tailwindcss').Config} */
export default {
content: [
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
'../../../../packages/shared-landing-ui/src/**/*.{astro,html,js,jsx,ts,tsx}',
],
theme: {
extend: {
colors: {
// Zitare Purple/Indigo Theme
primary: {
DEFAULT: '#8b5cf6',
hover: '#a78bfa',
glow: 'rgba(139, 92, 246, 0.3)',
},
background: {
page: '#0f0d1a',
card: '#1a1625',
'card-hover': '#252033',
},
text: {
primary: '#f9fafb',
secondary: '#d1d5db',
muted: '#6b7280',
},
border: {
DEFAULT: '#2d2640',
hover: '#3d3555',
},
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
serif: ['Merriweather', 'Georgia', 'serif'],
},
},
},
plugins: [],
};