From f1cb4ef2cc62265b811df1ecaf509e76834b7396 Mon Sep 17 00:00:00 2001 From: 1elle1 Date: Fri, 30 Jan 2026 14:45:52 +0100 Subject: [PATCH] feat: Implement initial website structure with core pages, layout, and reusable UI components, alongside ESLint configuration and SEO setup. --- app/aktuelles/page.tsx | 242 ++ app/layout.tsx | 38 +- app/leistungen/page.tsx | 227 ++ app/page.tsx | 253 +- app/studio/page.tsx | 222 ++ app/über-uns/page.tsx | 231 ++ components/layout/Footer.tsx | 97 + components/layout/Header.tsx | 97 + components/sections/FaqSection.tsx | 99 + components/ui/Button.tsx | 45 + components/ui/Card.tsx | 15 + components/ui/ContactForm.tsx | 171 + components/ui/Container.tsx | 20 + components/ui/FadeIn.tsx | 23 + components/ui/SectionHeading.tsx | 31 + eslint.config.mjs | 22 + package-lock.json | 4904 +++++++++++++++++++++++++++- package.json | 16 +- public/robots.txt | 4 + theme/stylesheet.css | 62 +- 20 files changed, 6800 insertions(+), 19 deletions(-) create mode 100644 app/aktuelles/page.tsx create mode 100644 app/leistungen/page.tsx create mode 100644 app/studio/page.tsx create mode 100644 app/über-uns/page.tsx create mode 100644 components/layout/Footer.tsx create mode 100644 components/layout/Header.tsx create mode 100644 components/sections/FaqSection.tsx create mode 100644 components/ui/Button.tsx create mode 100644 components/ui/Card.tsx create mode 100644 components/ui/ContactForm.tsx create mode 100644 components/ui/Container.tsx create mode 100644 components/ui/FadeIn.tsx create mode 100644 components/ui/SectionHeading.tsx create mode 100644 eslint.config.mjs create mode 100644 public/robots.txt diff --git a/app/aktuelles/page.tsx b/app/aktuelles/page.tsx new file mode 100644 index 0000000..52e9897 --- /dev/null +++ b/app/aktuelles/page.tsx @@ -0,0 +1,242 @@ +import { Container } from "@/components/ui/Container"; +import { Button } from "@/components/ui/Button"; +import { Card } from "@/components/ui/Card"; +import { FadeIn } from "@/components/ui/FadeIn"; +import { Calendar, ArrowRight } from "lucide-react"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Aktuelles", + description: + "Bleiben Sie auf dem Laufenden über Neuigkeiten, Events und Angebote bei Sportbox Reutte.", + openGraph: { + title: "Aktuelles | Sportbox Reutte", + description: + "Neuigkeiten, Events und Angebote bei Sportbox Reutte – Ihrem Fitnessstudio in Reutte, Tirol.", + url: "https://sportbox-reutte.at/aktuelles", + }, +}; + +const BLOG_POSTS = [ + { + title: "5 Tipps für den perfekten Trainingsstart", + excerpt: + "Sie möchten mit dem Training beginnen, wissen aber nicht wo? Unsere Experten teilen ihre besten Tipps für Einsteiger.", + date: "2026-01-15", + category: "Tipps", + }, + { + title: "Neue Gruppenkurse ab Februar", + excerpt: + "Ab Februar erweitern wir unser Kursangebot: HIIT, Functional Training und Pilates neu im Programm.", + date: "2026-01-10", + category: "Neuigkeiten", + }, + { + title: "Ernährung und Training: Was wirklich zählt", + excerpt: + "Unsere Ernährungsberaterin Lisa Mayer erklärt, wie Sie Ihre Ernährung optimal auf Ihr Training abstimmen.", + date: "2026-01-05", + category: "Ernährung", + }, + { + title: "Rückblick: Community Workout im Dezember", + excerpt: + "Über 40 Teilnehmer beim letzten Community Workout – ein Rückblick auf einen großartigen Abend.", + date: "2025-12-20", + category: "Events", + }, + { + title: "Krafttraining für Anfänger: Der richtige Einstieg", + excerpt: + "Thomas Huber zeigt die wichtigsten Grundübungen und erklärt, worauf Anfänger achten sollten.", + date: "2025-12-15", + category: "Training", + }, + { + title: "Yoga und Fitness: Die perfekte Kombination", + excerpt: + "Warum Yoga die ideale Ergänzung zu Ihrem Krafttraining ist und wie Sie beide Disziplinen verbinden können.", + date: "2025-12-10", + category: "Yoga", + }, +] as const; + +const EVENTS = [ + { + title: "Community Workout – Open Air", + date: "15. März 2026", + time: "10:00 – 12:00 Uhr", + description: "Gemeinsames Training im Freien für alle Fitnesslevel.", + }, + { + title: "Ernährungs-Workshop", + date: "22. März 2026", + time: "14:00 – 16:00 Uhr", + description: + "Lernen Sie, wie Sie Ihre Mahlzeiten optimal für Ihre Ziele planen.", + }, + { + title: "Fitness-Challenge: 30 Tage", + date: "1. April 2026", + time: "Start: jederzeit", + description: + "30 Tage, 30 Challenges – machen Sie mit und erreichen Sie neue Bestleistungen.", + }, +] as const; + +function formatDate(dateString: string): string { + return new Date(dateString).toLocaleDateString("de-AT", { + day: "numeric", + month: "long", + year: "numeric", + }); +} + +export default function AktuellesPage() { + return ( +
+ {/* Hero */} +
+ + +

+ Aktuelles +

+
+ +

+ Neuigkeiten & Events +

+
+ +

+ Bleiben Sie auf dem Laufenden über Neuigkeiten, Events und + Angebote in unserem Fitnessstudio. +

+
+
+
+ + {/* Blog Posts */} +
+ + +

+ Beiträge +

+

+ Tipps, Neuigkeiten und Wissenswertes rund um Fitness und Gesundheit. +

+
+
+ {BLOG_POSTS.map((post, index) => ( + +
+ +
+ + {post.category} + + + {formatDate(post.date)} + +
+

{post.title}

+

{post.excerpt}

+
+ Weiterlesen +
+
+
+
+ ))} +
+
+
+ + {/* Events */} +
+ + +

+ Kommende Events +

+

+ Workshops, Community-Events und mehr – seien Sie dabei. +

+
+
+ {EVENTS.map((event, index) => ( + + +
+
+
+
+

{event.title}

+

{event.description}

+
+
+
+
+ ))} +
+
+
+ + {/* CTA */} +
+ + +

+ Nichts verpassen +

+

+ Kontaktieren Sie uns für aktuelle Informationen zu Events und + Angeboten. +

+ +
+
+
+
+ ); +} diff --git a/app/layout.tsx b/app/layout.tsx index e900ab0..11a3323 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,9 +1,33 @@ import type { Metadata, Viewport } from "next"; +import { Inter } from "next/font/google"; import "@/theme/globals.css"; +import "@/theme/stylesheet.css"; +import { Header } from "@/components/layout/Header"; +import { Footer } from "@/components/layout/Footer"; + +const inter = Inter({ + subsets: ["latin"], + display: "swap", + variable: "--font-inter", +}); export const metadata: Metadata = { - title: "Website", - description: "Generated website", + title: { + default: "Sportbox Reutte – Dein Fitnessstudio in Reutte", + template: "%s | Sportbox Reutte", + }, + description: + "Willkommen bei Sportbox Reutte – Ihr Fitnessstudio für individuelle Trainingspläne und persönliche Betreuung in Reutte, Tirol.", + metadataBase: new URL("https://sportbox-reutte.at"), + openGraph: { + type: "website", + locale: "de_AT", + url: "https://sportbox-reutte.at", + siteName: "Sportbox Reutte", + title: "Sportbox Reutte – Dein Fitnessstudio in Reutte", + description: + "Ihr Fitnessstudio für individuelle Trainingspläne und persönliche Betreuung in Reutte, Tirol.", + }, robots: { index: true, follow: true, @@ -13,7 +37,7 @@ export const metadata: Metadata = { export const viewport: Viewport = { width: "device-width", initialScale: 1, - themeColor: "#ffffff", + themeColor: "#000000", }; export default function RootLayout({ @@ -22,8 +46,12 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - {children} + + +
+ {children} +