From a63400267f91e371215deb3049ebbf08eba909f3 Mon Sep 17 00:00:00 2001 From: Medicopter117 Date: Tue, 20 Jan 2026 17:46:59 +0100 Subject: [PATCH] UPDATED --- src/bot/__init__.py => __init__.py | 0 index.html | 2 +- src/bot/cogs/user/stats.py | 7 +- src/site/components/FAQ.tsx | 104 ----------- src/site/components/Footer.tsx | 140 --------------- src/site/components/Testimonials.tsx | 168 ------------------ src/site/pages/Datenschutz.tsx | 129 -------------- src/site/pages/Impressum.tsx | 79 -------- src/site/pages/NotFound.tsx | 24 --- src/site/pages/Nutzungsbedingungen.tsx | 107 ----------- src/{site => web}/App.css | 0 src/{site => web}/App.tsx | 0 components.json => src/web/components.json | 4 +- src/{site => web}/components/CTA.tsx | 6 +- src/web/components/FAQ.tsx | 122 +++++++++++++ src/{site => web}/components/FeatureCard.tsx | 0 src/{site => web}/components/Features.tsx | 0 src/web/components/Footer.tsx | 119 +++++++++++++ src/{site => web}/components/Hero.tsx | 23 ++- src/{site => web}/components/NavLink.tsx | 0 src/{site => web}/components/Navbar.tsx | 0 src/web/components/Testimonials.tsx | 129 ++++++++++++++ src/{site => web}/components/ui/accordion.tsx | 0 .../components/ui/alert-dialog.tsx | 0 src/{site => web}/components/ui/alert.tsx | 0 .../components/ui/aspect-ratio.tsx | 0 src/{site => web}/components/ui/avatar.tsx | 0 src/{site => web}/components/ui/badge.tsx | 0 .../components/ui/breadcrumb.tsx | 0 src/{site => web}/components/ui/button.tsx | 0 src/{site => web}/components/ui/calendar.tsx | 0 src/{site => web}/components/ui/card.tsx | 0 src/{site => web}/components/ui/carousel.tsx | 0 src/{site => web}/components/ui/chart.tsx | 0 src/{site => web}/components/ui/checkbox.tsx | 0 .../components/ui/collapsible.tsx | 0 src/{site => web}/components/ui/command.tsx | 0 .../components/ui/context-menu.tsx | 0 src/{site => web}/components/ui/dialog.tsx | 0 src/{site => web}/components/ui/drawer.tsx | 0 .../components/ui/dropdown-menu.tsx | 0 src/{site => web}/components/ui/form.tsx | 0 .../components/ui/hover-card.tsx | 0 src/{site => web}/components/ui/input-otp.tsx | 0 src/{site => web}/components/ui/input.tsx | 0 src/{site => web}/components/ui/label.tsx | 0 src/{site => web}/components/ui/menubar.tsx | 0 .../components/ui/navigation-menu.tsx | 0 .../components/ui/pagination.tsx | 0 src/{site => web}/components/ui/popover.tsx | 0 src/{site => web}/components/ui/progress.tsx | 0 .../components/ui/radio-group.tsx | 0 src/{site => web}/components/ui/resizable.tsx | 0 .../components/ui/scroll-area.tsx | 0 src/{site => web}/components/ui/select.tsx | 0 src/{site => web}/components/ui/separator.tsx | 0 src/{site => web}/components/ui/sheet.tsx | 0 src/{site => web}/components/ui/sidebar.tsx | 0 src/{site => web}/components/ui/skeleton.tsx | 0 src/{site => web}/components/ui/slider.tsx | 0 src/{site => web}/components/ui/sonner.tsx | 0 src/{site => web}/components/ui/switch.tsx | 0 src/{site => web}/components/ui/table.tsx | 0 src/{site => web}/components/ui/tabs.tsx | 0 src/{site => web}/components/ui/textarea.tsx | 0 src/{site => web}/components/ui/toast.tsx | 0 src/{site => web}/components/ui/toaster.tsx | 0 .../components/ui/toggle-group.tsx | 0 src/{site => web}/components/ui/toggle.tsx | 0 src/{site => web}/components/ui/tooltip.tsx | 0 src/{site => web}/components/ui/use-toast.ts | 0 eslint.config.js => src/web/eslint.config.js | 0 src/{site => web}/hooks/use-mobile.tsx | 0 src/{site => web}/hooks/use-toast.ts | 0 src/{site => web}/index.css | 0 src/{site => web}/lib/utils.ts | 0 src/{site => web}/main.tsx | 0 src/web/pages/Datenschutz.tsx | 148 +++++++++++++++ src/web/pages/Impressum.tsx | 105 +++++++++++ src/{site => web}/pages/Index.tsx | 0 src/web/pages/NotFound.tsx | 110 ++++++++++++ src/web/pages/Nutzungsbedingungen.tsx | 132 ++++++++++++++ src/{site => web}/test/example.test.ts | 0 src/{site => web}/test/setup.ts | 0 .../web/tsconfig.app.json | 2 +- tsconfig.json => src/web/tsconfig.json | 2 +- .../web/tsconfig.node.json | 0 src/{site => web}/vite-env.d.ts | 0 vitest.config.ts => src/web/vitest.config.ts | 2 +- tailwind.config.ts | 14 +- vite.config.ts | 5 +- 91 files changed, 900 insertions(+), 783 deletions(-) rename src/bot/__init__.py => __init__.py (100%) delete mode 100644 src/site/components/FAQ.tsx delete mode 100644 src/site/components/Footer.tsx delete mode 100644 src/site/components/Testimonials.tsx delete mode 100644 src/site/pages/Datenschutz.tsx delete mode 100644 src/site/pages/Impressum.tsx delete mode 100644 src/site/pages/NotFound.tsx delete mode 100644 src/site/pages/Nutzungsbedingungen.tsx rename src/{site => web}/App.css (100%) rename src/{site => web}/App.tsx (100%) rename components.json => src/web/components.json (91%) rename src/{site => web}/components/CTA.tsx (95%) create mode 100644 src/web/components/FAQ.tsx rename src/{site => web}/components/FeatureCard.tsx (100%) rename src/{site => web}/components/Features.tsx (100%) create mode 100644 src/web/components/Footer.tsx rename src/{site => web}/components/Hero.tsx (88%) rename src/{site => web}/components/NavLink.tsx (100%) rename src/{site => web}/components/Navbar.tsx (100%) create mode 100644 src/web/components/Testimonials.tsx rename src/{site => web}/components/ui/accordion.tsx (100%) rename src/{site => web}/components/ui/alert-dialog.tsx (100%) rename src/{site => web}/components/ui/alert.tsx (100%) rename src/{site => web}/components/ui/aspect-ratio.tsx (100%) rename src/{site => web}/components/ui/avatar.tsx (100%) rename src/{site => web}/components/ui/badge.tsx (100%) rename src/{site => web}/components/ui/breadcrumb.tsx (100%) rename src/{site => web}/components/ui/button.tsx (100%) rename src/{site => web}/components/ui/calendar.tsx (100%) rename src/{site => web}/components/ui/card.tsx (100%) rename src/{site => web}/components/ui/carousel.tsx (100%) rename src/{site => web}/components/ui/chart.tsx (100%) rename src/{site => web}/components/ui/checkbox.tsx (100%) rename src/{site => web}/components/ui/collapsible.tsx (100%) rename src/{site => web}/components/ui/command.tsx (100%) rename src/{site => web}/components/ui/context-menu.tsx (100%) rename src/{site => web}/components/ui/dialog.tsx (100%) rename src/{site => web}/components/ui/drawer.tsx (100%) rename src/{site => web}/components/ui/dropdown-menu.tsx (100%) rename src/{site => web}/components/ui/form.tsx (100%) rename src/{site => web}/components/ui/hover-card.tsx (100%) rename src/{site => web}/components/ui/input-otp.tsx (100%) rename src/{site => web}/components/ui/input.tsx (100%) rename src/{site => web}/components/ui/label.tsx (100%) rename src/{site => web}/components/ui/menubar.tsx (100%) rename src/{site => web}/components/ui/navigation-menu.tsx (100%) rename src/{site => web}/components/ui/pagination.tsx (100%) rename src/{site => web}/components/ui/popover.tsx (100%) rename src/{site => web}/components/ui/progress.tsx (100%) rename src/{site => web}/components/ui/radio-group.tsx (100%) rename src/{site => web}/components/ui/resizable.tsx (100%) rename src/{site => web}/components/ui/scroll-area.tsx (100%) rename src/{site => web}/components/ui/select.tsx (100%) rename src/{site => web}/components/ui/separator.tsx (100%) rename src/{site => web}/components/ui/sheet.tsx (100%) rename src/{site => web}/components/ui/sidebar.tsx (100%) rename src/{site => web}/components/ui/skeleton.tsx (100%) rename src/{site => web}/components/ui/slider.tsx (100%) rename src/{site => web}/components/ui/sonner.tsx (100%) rename src/{site => web}/components/ui/switch.tsx (100%) rename src/{site => web}/components/ui/table.tsx (100%) rename src/{site => web}/components/ui/tabs.tsx (100%) rename src/{site => web}/components/ui/textarea.tsx (100%) rename src/{site => web}/components/ui/toast.tsx (100%) rename src/{site => web}/components/ui/toaster.tsx (100%) rename src/{site => web}/components/ui/toggle-group.tsx (100%) rename src/{site => web}/components/ui/toggle.tsx (100%) rename src/{site => web}/components/ui/tooltip.tsx (100%) rename src/{site => web}/components/ui/use-toast.ts (100%) rename eslint.config.js => src/web/eslint.config.js (100%) rename src/{site => web}/hooks/use-mobile.tsx (100%) rename src/{site => web}/hooks/use-toast.ts (100%) rename src/{site => web}/index.css (100%) rename src/{site => web}/lib/utils.ts (100%) rename src/{site => web}/main.tsx (100%) create mode 100644 src/web/pages/Datenschutz.tsx create mode 100644 src/web/pages/Impressum.tsx rename src/{site => web}/pages/Index.tsx (100%) create mode 100644 src/web/pages/NotFound.tsx create mode 100644 src/web/pages/Nutzungsbedingungen.tsx rename src/{site => web}/test/example.test.ts (100%) rename src/{site => web}/test/setup.ts (100%) rename tsconfig.app.json => src/web/tsconfig.app.json (95%) rename tsconfig.json => src/web/tsconfig.json (91%) rename tsconfig.node.json => src/web/tsconfig.node.json (100%) rename src/{site => web}/vite-env.d.ts (100%) rename vitest.config.ts => src/web/vitest.config.ts (88%) diff --git a/src/bot/__init__.py b/__init__.py similarity index 100% rename from src/bot/__init__.py rename to __init__.py diff --git a/index.html b/index.html index 0632865..e00b723 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,6 @@
- + diff --git a/src/bot/cogs/user/stats.py b/src/bot/cogs/user/stats.py index 99c35a6..3c638f3 100644 --- a/src/bot/cogs/user/stats.py +++ b/src/bot/cogs/user/stats.py @@ -26,6 +26,7 @@ def __init__(self, bot: commands.Bot): logger.info("Enhanced StatsCog initialized") stats = SlashCommandGroup("stats", "Statistiken") + gb = stats.create_subgroup("global") def cog_unload(self): """Called when the cog is unloaded.""" @@ -208,8 +209,8 @@ async def stats_command( ) await ctx.followup.send(embed=error_embed, ephemeral=True) - @stats.command( - name="globalstats", + @gb.command( + name="stats", description="Zeige deine globalen Level-Statistiken über alle Server an" ) async def global_stats_command( @@ -505,7 +506,7 @@ async def achievements_command( await ctx.followup.send(embed=error_embed, ephemeral=True) @stats.command( - name="stats_info", + name="info", description="Informationen über das erweiterte Statistik-System" ) async def stats_info_command(self, ctx: discord.ApplicationContext): diff --git a/src/site/components/FAQ.tsx b/src/site/components/FAQ.tsx deleted file mode 100644 index 780ff24..0000000 --- a/src/site/components/FAQ.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { memo } from "react"; -import { motion } from "framer-motion"; -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from "@/components/ui/accordion"; -import { HelpCircle, Sparkles } from "lucide-react"; - -const faqs = [ - { - question: "Wie füge ich ManagerX zu meinem Server hinzu?", - answer: "Klicke einfach auf den 'Zum Server hinzufügen' Button oben auf der Seite. Du wirst zu Discord weitergeleitet, wo du den Server auswählen kannst, auf dem du ManagerX installieren möchtest. Stelle sicher, dass du Administrator-Rechte auf diesem Server hast." - }, - { - question: "Ist ManagerX kostenlos?", - answer: "Ja! ManagerX ist vollständig kostenlos nutzbar. Alle Kernfunktionen wie Moderation, Levelsystem, Globalchat und mehr stehen dir ohne Einschränkungen zur Verfügung." - }, - { - question: "Wie funktioniert das Levelsystem?", - answer: "Das Levelsystem vergibt automatisch XP für Nachrichten und Voice-Chat-Aktivität. Du kannst XP-Raten, Level-Rollen und Benachrichtigungen vollständig anpassen. Server-weite und globale Leaderboards zeigen die aktivsten Mitglieder." - }, - { - question: "Was ist der Globalchat?", - answer: "Der Globalchat verbindet deinen Server mit anderen ManagerX-Servern in Echtzeit. Nachrichten werden moderiert und gefiltert. Du hast volle Kontrolle über Blacklists und kannst User blockieren oder reporten." - }, - { - question: "Wie kann ich Support erhalten?", - answer: "Tritt unserem Support-Server bei! Dort findest du eine aktive Community und unser Team, das dir bei allen Fragen hilft. Du kannst auch die Dokumentation und FAQ auf unserer Website nutzen." - }, - { - question: "Kann ich die Bot-Befehle anpassen?", - answer: "Absolut! Du kannst Präfixe ändern, Befehle aktivieren/deaktivieren, Berechtigungen für bestimmte Rollen festlegen und vieles mehr. Die meisten Einstellungen sind über das Dashboard oder Slash-Commands konfigurierbar." - }, -]; - -export const FAQ = memo(function FAQ() { - return ( -
- {/* Simple Background */} -
- -
- {/* Section Header */} - -
- - Häufige Fragen -
- -

- Hast du - - Fragen - - - ? -

-

- Hier findest du Antworten auf die häufigsten Fragen zu ManagerX. -

-
- - {/* FAQ Accordion */} - - - {faqs.map((faq, index) => ( - - - - - {index + 1} - - {faq.question} - - - - {faq.answer} - - - ))} - - -
-
- ); -}); diff --git a/src/site/components/Footer.tsx b/src/site/components/Footer.tsx deleted file mode 100644 index 72e435d..0000000 --- a/src/site/components/Footer.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { memo } from "react"; -import { Link } from "react-router-dom"; -import { motion } from "framer-motion"; -import { Shield, Heart, Github, MessageCircle, ExternalLink } from "lucide-react"; - -const socialLinks = [ - { icon: Github, href: "https://github.com", label: "GitHub" }, - { icon: MessageCircle, href: "https://discord.gg", label: "Discord" }, -]; - -const footerLinks = [ - { label: "Features", href: "#features" }, - { label: "Commands", href: "#commands" }, - { label: "Dokumentation", href: "https://docs.oppro-network.de", external: true }, - { label: "Support", href: "#support" }, -]; - -const legalLinks = [ - { label: "Datenschutz", href: "/datenschutz" }, - { label: "Impressum", href: "/impressum" }, - { label: "Nutzungsbedingungen", href: "/nutzungsbedingungen" }, -]; - -export const Footer = memo(function Footer() { - return ( - - ); -}); \ No newline at end of file diff --git a/src/site/components/Testimonials.tsx b/src/site/components/Testimonials.tsx deleted file mode 100644 index 2dca055..0000000 --- a/src/site/components/Testimonials.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import { memo } from "react"; -import { motion } from "framer-motion"; -import { Star, MessageSquare, Users } from "lucide-react"; - -const testimonials = [ - { - name: "Max Mustermann", - role: "Server Admin", - server: "Gaming Community DE", - members: "15.000+", - avatar: "M", - rating: 5, - text: "ManagerX hat unseren Server komplett transformiert. Das Levelsystem motiviert unsere Mitglieder unglaublich und die Moderation ist ein Traum!", - }, - { - name: "Sarah Schmidt", - role: "Community Manager", - server: "Creative Hub", - members: "8.000+", - avatar: "S", - rating: 5, - text: "Der Globalchat verbindet uns mit anderen Communities - das ist einzigartig! Und der Support ist super schnell und hilfsbereit.", - }, - { - name: "Tom Weber", - role: "Gründer", - server: "Tech Talk Germany", - members: "25.000+", - avatar: "T", - rating: 5, - text: "Wir haben viele Bots getestet, aber ManagerX ist der beste. Alle Features funktionieren perfekt zusammen und die Konfiguration ist super einfach.", - }, - { - name: "Lisa Müller", - role: "Moderatorin", - server: "Anime World", - members: "12.000+", - avatar: "L", - rating: 5, - text: "Das Anti-Spam System und die Moderations-Tools machen meinen Job so viel einfacher. Endlich ein Bot, der wirklich durchdacht ist!", - }, - { - name: "Jan Hoffmann", - role: "Server Owner", - server: "Music Lounge", - members: "5.000+", - avatar: "J", - rating: 5, - text: "Die Temporary Voice Channels sind genial! Unsere Mitglieder lieben es, eigene Räume erstellen zu können. Absolute Empfehlung!", - }, - { - name: "Emma Fischer", - role: "Admin Team Lead", - server: "Study Together", - members: "20.000+", - avatar: "E", - rating: 5, - text: "ManagerX ist stabil, schnell und hat alles was wir brauchen. Das Dashboard ist übersichtlich und die Docs sind hervorragend.", - }, -]; - -const TestimonialCard = memo(({ testimonial, index }: { testimonial: typeof testimonials[0]; index: number }) => ( - - {/* Stars */} -
- {[...Array(testimonial.rating)].map((_, i) => ( - - ))} -
- - {/* Text */} -

- "{testimonial.text}" -

- - {/* Author */} -
-
- {testimonial.avatar} -
-
-
{testimonial.name}
-
{testimonial.role}
-
-
- - {/* Server Info */} -
- {testimonial.server} - - - {testimonial.members} - -
-
-)); - -TestimonialCard.displayName = "TestimonialCard"; - -export const Testimonials = memo(function Testimonials() { - return ( -
- {/* Simple Background */} -
- -
- {/* Section Header */} - -
- - Testimonials -
- -

- Was unsere - Community - sagt -

-

- Tausende Server-Admins vertrauen ManagerX. Hier sind ihre Erfahrungen. -

-
- - {/* Testimonials Grid */} -
- {testimonials.map((testimonial, index) => ( - - ))} -
- - {/* Stats Bar */} - - {[ - { value: "4.9/5", label: "Durchschnittliche Bewertung", icon: Star }, - { value: "10.000+", label: "Zufriedene Server", icon: Users }, - { value: "99%", label: "Würden uns empfehlen", icon: MessageSquare }, - ].map((stat, index) => ( -
-
- - {stat.value} -
- {stat.label} -
- ))} -
-
-
- ); -}); diff --git a/src/site/pages/Datenschutz.tsx b/src/site/pages/Datenschutz.tsx deleted file mode 100644 index d1ad04d..0000000 --- a/src/site/pages/Datenschutz.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { memo } from "react"; -import { Link } from "react-router-dom"; -import { ArrowLeft, Shield, Mail } from "lucide-react"; -import { Navbar } from "@/components/Navbar"; -import { Footer } from "@/components/Footer"; - -const sections = [ - { - title: "1. Verantwortliche Stelle", - content: ( -
-

Lenny Steiger

-

- E-Mail:{" "} - - contact@oppro-network.de - -

-

Verantwortlich für die Datenverarbeitung im Rahmen der Nutzung von ManagerX.

-
- ), - }, - { - title: "2. Erhobene Daten", - content: ( -
-

ManagerX verarbeitet personenbezogene Daten nur soweit nötig für die Funktionsfähigkeit des Bots. Dazu gehören insbesondere:

- -
- ), - }, - { - title: "3. Zweck der Datenverarbeitung", - content: "Die Daten werden ausschließlich verwendet, um Funktionen des Bots bereitzustellen, Statistiken zu führen, Moderationsaktionen nachzuvollziehen und Fehlerdiagnosen zu ermöglichen. Eine Weitergabe an Dritte erfolgt nicht.", - }, - { - title: "4. Rechtsgrundlage", - content: ( -
-

Die Verarbeitung erfolgt gemäß DSGVO:

- -
- ), - }, - { - title: "5. Speicherdauer", - content: "Daten werden so lange gespeichert, wie sie für die Funktion des Servers notwendig sind oder gesetzliche Aufbewahrungsfristen bestehen. Allgemeine Einstellungen bleiben gespeichert, solange der Bot auf dem Server aktiv ist.", - }, - { - title: "6. Rechte der Nutzer", - content: "Du hast das Recht auf Auskunft, Berichtigung, Löschung und Widerspruch bezüglich deiner Daten. Kontaktiere uns hierzu bitte unter der unten angegebenen E-Mail.", - }, - { - title: "7. Datensicherheit", - content: "ManagerX speichert Daten in SQLite-Datenbanken, die lokal auf dem Server liegen. Es werden angemessene technische Maßnahmen ergriffen, um deine Daten vor unbefugtem Zugriff zu schützen.", - }, - { - title: "8. Änderungen", - content: "Diese Erklärung kann bei neuen Funktionen angepasst werden. Nutzer werden über Discord oder Bot-Kommunikation über Änderungen informiert.", - }, -]; - -const Datenschutz = memo(function Datenschutz() { - return ( -
- - -
- - - Zurück zur Startseite - - -
-
- -

- Datenschutzerklärung -

-
-

Gültig für den Discord-Bot ManagerX

- -
- {sections.map((section, index) => ( -
-

{section.title}

-
- {section.content} -
-
- ))} - -
-

Datenschutz-Anfrage

-

- Hast du Fragen zu deinen gespeicherten Daten oder möchtest eine Löschung beantragen? -

- - - contact@oppro-network.de - -
-
-
-
- -
-
- ); -}); - -export default Datenschutz; diff --git a/src/site/pages/Impressum.tsx b/src/site/pages/Impressum.tsx deleted file mode 100644 index e6a8ba5..0000000 --- a/src/site/pages/Impressum.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { memo } from "react"; -import { Link } from "react-router-dom"; -import { ArrowLeft, Mail, MapPin, User } from "lucide-react"; -import { Navbar } from "@/components/Navbar"; -import { Footer } from "@/components/Footer"; - -const Impressum = memo(function Impressum() { - return ( -
- - -
- - - Zurück zur Startseite - - -
-

- Impressum -

-

Angaben gemäß § 5 TMG

- -
-
-
-
- -
-

Verantwortlich

-
-
-

Lenny Steiger

-
-
- -
-
-
- -
-

Anschrift

-
-
-

Eulauer Str. 24

-

04523 Pegau

-

Deutschland

-
-
- -
-
-
- -
-

Kontakt

-
- -
-
-
-
- -
-
- ); -}); - -export default Impressum; diff --git a/src/site/pages/NotFound.tsx b/src/site/pages/NotFound.tsx deleted file mode 100644 index 7bc2234..0000000 --- a/src/site/pages/NotFound.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { useLocation } from "react-router-dom"; -import { useEffect } from "react"; - -const NotFound = () => { - const location = useLocation(); - - useEffect(() => { - console.error("404 Error: User attempted to access non-existent route:", location.pathname); - }, [location.pathname]); - - return ( -
-
-

404

-

Oops! Page not found

- - Return to Home - -
-
- ); -}; - -export default NotFound; diff --git a/src/site/pages/Nutzungsbedingungen.tsx b/src/site/pages/Nutzungsbedingungen.tsx deleted file mode 100644 index e00daad..0000000 --- a/src/site/pages/Nutzungsbedingungen.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { memo } from "react"; -import { Link } from "react-router-dom"; -import { ArrowLeft, FileText, Mail } from "lucide-react"; -import { Navbar } from "@/components/Navbar"; -import { Footer } from "@/components/Footer"; - -const sections = [ - { - title: "1. Geltungsbereich", - content: "Diese Nutzungsbedingungen regeln die Verwendung des Discord-Bots ManagerX, betrieben von OPPRO.NET Network. Mit der Nutzung des Bots erklärst du dich mit diesen Bedingungen einverstanden.", - }, - { - title: "2. Nutzung des Bots", - content: ( - - ), - }, - { - title: "3. Funktionsumfang", - content: "ManagerX bietet Funktionen wie Moderation (Warnungen, Kicks, Bans), Welcome-System, Temp Voice Channels, Statistiken und weitere Tools. Der Betreiber von ManagerX behält sich das Recht vor, Funktionen zu ändern, hinzuzufügen oder zu entfernen.", - }, - { - title: "4. Haftung", - content: "ManagerX Development übernimmt keine Haftung für Schäden, die direkt oder indirekt durch die Nutzung des Bots entstehen. Dies umfasst insbesondere Datenverlust, Serverprobleme oder Einschränkungen durch Discord.", - }, - { - title: "5. Datenschutz", - content: ( -

- Alle gesammelten Daten werden gemäß der{" "} - - Datenschutzerklärung - {" "} - von ManagerX verarbeitet. Du bist dafür verantwortlich, die Mitglieder deines Servers über die Nutzung des Bots und die Datenverarbeitung zu informieren. -

- ), - }, - { - title: "6. Rechte an Inhalten", - content: "Alle von ManagerX bereitgestellten Funktionen, Codes und Datenbanken sind Eigentum von ManagerX Development. Du darfst diese nur im Rahmen der Bot-Nutzung verwenden und nicht für eigene kommerzielle Projekte weitergeben oder kopieren.", - }, - { - title: "7. Änderungen der Nutzungsbedingungen", - content: "ManagerX Development kann diese Nutzungsbedingungen jederzeit ändern. Änderungen werden auf den Discord-Servern oder per Bot-Kommunikation bekanntgegeben. Die fortgesetzte Nutzung von ManagerX gilt als Zustimmung zu den geänderten Bedingungen.", - }, -]; - -const Nutzungsbedingungen = memo(function Nutzungsbedingungen() { - return ( -
- - -
- - - Zurück zur Startseite - - -
-
- -

- Nutzungsbedingungen -

-
-

Gültig für den Discord-Bot ManagerX

- -
- {sections.map((section, index) => ( -
-

{section.title}

-
- {section.content} -
-
- ))} - -
-

8. Kontakt

-

- Bei Fragen zu den Nutzungsbedingungen oder Problemen mit dem Bot: -

- - - development@oppro-network.de - -
-
-
-
- -
-
- ); -}); - -export default Nutzungsbedingungen; diff --git a/src/site/App.css b/src/web/App.css similarity index 100% rename from src/site/App.css rename to src/web/App.css diff --git a/src/site/App.tsx b/src/web/App.tsx similarity index 100% rename from src/site/App.tsx rename to src/web/App.tsx diff --git a/components.json b/src/web/components.json similarity index 91% rename from components.json rename to src/web/components.json index 295891d..62e1011 100644 --- a/components.json +++ b/src/web/components.json @@ -5,7 +5,7 @@ "tsx": true, "tailwind": { "config": "tailwind.config.ts", - "css": "src/site/index.css", + "css": "src/index.css", "baseColor": "slate", "cssVariables": true, "prefix": "" @@ -17,4 +17,4 @@ "lib": "@/lib", "hooks": "@/hooks" } -} \ No newline at end of file +} diff --git a/src/site/components/CTA.tsx b/src/web/components/CTA.tsx similarity index 95% rename from src/site/components/CTA.tsx rename to src/web/components/CTA.tsx index d5b5923..aca8ddb 100644 --- a/src/site/components/CTA.tsx +++ b/src/web/components/CTA.tsx @@ -4,9 +4,9 @@ import { Button } from "@/components/ui/button"; import { ArrowRight, Sparkles } from "lucide-react"; const stats = [ - { label: "Aktive Server", value: "10K+" }, - { label: "Befehle ausgeführt", value: "1M+" }, - { label: "Zufriedene User", value: "50K+" }, + { label: "Aktive Server", value: "10+" }, + { label: "Befehle ausgeführt", value: "1000+" }, + { label: "Zufriedene User", value: "300+" }, ]; export const CTA = memo(function CTA() { diff --git a/src/web/components/FAQ.tsx b/src/web/components/FAQ.tsx new file mode 100644 index 0000000..f0a2b0e --- /dev/null +++ b/src/web/components/FAQ.tsx @@ -0,0 +1,122 @@ +import { memo } from "react"; +import { motion } from "framer-motion"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { HelpCircle, Sparkles, Terminal, ShieldCheck, Github, Layout } from "lucide-react"; + +const faqs = [ + { + question: "Warum V2.0.0 und was hat sich geändert?", + answer: "Die V2 ist ein kompletter Rewrite der Kern-Architektur. Wir haben das System auf 90 hochperformante Slash-Commands optimiert, um Redundanzen zu vermeiden. Das Ergebnis ist ein sauberer Sync mit der Discord-API ohne doppelte Befehle oder Verzögerungen." + }, + { + question: "Ist ManagerX Open Source und welche Lizenz wird genutzt?", + answer: "Ja! ManagerX ist vollständig Open Source und wird transparent auf GitHub unter 'ManagerX Development' entwickelt. Das Projekt steht unter der GPL-3.0 Lizenz, was bedeutet, dass der Code frei bleibt und die Rechte der Community dauerhaft geschützt sind." + }, + { + question: "Kann man ManagerX selbst hosten?", + answer: "Absolut. Dank der ressourcensparenden V2-Architektur läuft ManagerX extrem effizient. Er kann problemlos auf kleinen Instanzen oder sogar Free-Hosting-Servern betrieben werden, ohne an Performance bei den 90 Commands einzubüßen." + }, + { + question: "Wie steht es um die Sicherheit?", + answer: "Sicherheit ist in der V2 fest verankert. Durch die ausschließliche Nutzung von Slash-Commands können Berechtigungen direkt über die Discord-Integration verwaltet werden. Da der Code Open Source ist, kann zudem jeder die Sicherheitsstandards im Repository einsehen." + }, + { + question: "Ist ManagerX kostenlos?", + answer: "Ja, ManagerX ist und bleibt kostenlos. Sowohl die Nutzung unseres öffentlichen Bots als auch der Zugriff auf den Quellcode für das Self-Hosting sind ohne Kosten verbunden." + }, + { + question: "Wie funktioniert das Levelsystem in der V2?", + answer: "Das XP-System wurde für die V2 komplett optimiert. Es trackt Text- und Voice-Aktivität zuverlässiger und bietet eine stabile Basis für serverübergreifende Leaderboards, die aktuell im Rahmen der V2-Entwicklung ausgebaut werden." + }, + { + question: "Wo finde ich Hilfe oder Support?", + answer: "Mit aktuell 16 Servern bieten wir sehr persönlichen Support. Du kannst unserem Discord-Server beitreten oder direkt im GitHub-Repository unter 'ManagerX-Development/ManagerX' Issues erstellen, falls du technische Fragen hast." + } +]; + +export const FAQ = memo(function FAQ() { + return ( +
+ {/* Background Decor */} +
+ +
+ {/* Section Header */} + +
+ + + V2.0.0 • 90 Commands • GPL-3.0 + +
+ +

+ Häufige Fragen +

+

+ Alles Wissenswerte über die Open-Source-Entwicklung, das Self-Hosting und die neue V2-Architektur von ManagerX. +

+
+ + {/* FAQ Accordion */} + + + {faqs.map((faq, index) => ( + + + + {index === 1 ? ( + + ) : ( + + )} + {faq.question} + + + + {faq.answer} + + + ))} + + + + {/* Technical Footer Info */} + +
+ Core: EzCord 0.7.4 +
+
+ Repo: ManagerX-Development +
+
+ License: GPL-3.0 +
+
+
+
+ ); +}); \ No newline at end of file diff --git a/src/site/components/FeatureCard.tsx b/src/web/components/FeatureCard.tsx similarity index 100% rename from src/site/components/FeatureCard.tsx rename to src/web/components/FeatureCard.tsx diff --git a/src/site/components/Features.tsx b/src/web/components/Features.tsx similarity index 100% rename from src/site/components/Features.tsx rename to src/web/components/Features.tsx diff --git a/src/web/components/Footer.tsx b/src/web/components/Footer.tsx new file mode 100644 index 0000000..4b12f1b --- /dev/null +++ b/src/web/components/Footer.tsx @@ -0,0 +1,119 @@ +import { memo } from "react"; +import { Link } from "react-router-dom"; +import { motion } from "framer-motion"; +import { Shield, Heart, Github, MessageCircle, ExternalLink, Terminal, Sparkles } from "lucide-react"; + +const socialLinks = [ + { icon: Github, href: "https://github.com/dein-github", label: "GitHub" }, + { icon: MessageCircle, href: "https://discord.gg/dein-link", label: "Discord Support" }, +]; + +export const Footer = memo(function Footer() { + return ( + + ); +}); \ No newline at end of file diff --git a/src/site/components/Hero.tsx b/src/web/components/Hero.tsx similarity index 88% rename from src/site/components/Hero.tsx rename to src/web/components/Hero.tsx index 37cf158..9845027 100644 --- a/src/site/components/Hero.tsx +++ b/src/web/components/Hero.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Shield, Users, MessageCircle, Sparkles } from "lucide-react"; const stats = [ - { label: "Server", value: "10,000+", icon: Users }, + { label: "Server", value: "10+", icon: Users }, { label: "Befehle", value: "90+", icon: MessageCircle }, { label: "Uptime", value: "99.9%", icon: Sparkles }, ]; @@ -29,14 +29,14 @@ StatCard.displayName = "StatCard"; export const Hero = memo(function Hero() { return (
- {/* Static Background - no blur for performance */} + {/* Static Background */}
- {/* Simple gradient orbs without blur */} + {/* Simple gradient orbs */}
- {/* Grid Pattern - static */} + {/* Grid Pattern */}
- Version 2.0 jetzt verfügbar + Version 2.0 in Work @@ -88,17 +88,16 @@ export const Hero = memo(function Hero() { X - {/* Description */} + {/* DER NEUE SLOGAN (Ersetzt die alte Description) */} - Der ultimative Discord Bot für{" "} - Moderation,{" "} - Levelsystem,{" "} - Globalchat und mehr. + Sicher + Schnell + Open Source {/* CTA Buttons */} @@ -132,4 +131,4 @@ export const Hero = memo(function Hero() {
); -}); +}); \ No newline at end of file diff --git a/src/site/components/NavLink.tsx b/src/web/components/NavLink.tsx similarity index 100% rename from src/site/components/NavLink.tsx rename to src/web/components/NavLink.tsx diff --git a/src/site/components/Navbar.tsx b/src/web/components/Navbar.tsx similarity index 100% rename from src/site/components/Navbar.tsx rename to src/web/components/Navbar.tsx diff --git a/src/web/components/Testimonials.tsx b/src/web/components/Testimonials.tsx new file mode 100644 index 0000000..d2203d7 --- /dev/null +++ b/src/web/components/Testimonials.tsx @@ -0,0 +1,129 @@ +import { memo } from "react"; +import { motion } from "framer-motion"; +import { Star, MessageSquare, Users, TrendingUp } from "lucide-react"; + +const testimonials = [ + { + name: "Lukas", + role: "Server Owner", + server: "Small Talk Central", + members: "42", + avatar: "L", + rating: 5, + text: "Einer der ersten 10 Server zu sein hat Vorteile! Der Entwickler hört direkt auf Feedback. Das Levelsystem ist schon jetzt besser als bei den großen Bots.", + }, + { + name: "Marcel", + role: "Admin", + server: "Dev Corner", + members: "112", + avatar: "M", + rating: 5, + text: "ManagerX ist zwar noch jung, aber extrem stabil. Endlich mal kein überladener Bot, sondern Fokus auf das, was wir wirklich brauchen.", + }, + { + name: "Svenja", + role: "Moderatorin", + server: "Chill & Game", + members: "85", + avatar: "S", + rating: 4, + text: "Wir nutzen ManagerX für unsere Temporary Voice Channels. Funktioniert super intuitiv und das Setup war in 2 Minuten erledigt.", + }, +]; + +const TestimonialCard = memo(({ testimonial, index }: { testimonial: typeof testimonials[0]; index: number }) => ( + +
+ {[...Array(testimonial.rating)].map((_, i) => ( + + ))} +
+ +

+ "{testimonial.text}" +

+ +
+
+ {testimonial.avatar} +
+
+
{testimonial.name}
+
{testimonial.role}
+
+
+ +
+ {testimonial.server} + + + {testimonial.members} Member + +
+
+)); + +export const Testimonials = memo(function Testimonials() { + return ( +
+
+ +
+ +
+ + Early Access Feedback +
+ +

+ Stimmen der Ersten Stunde +

+

+ Wir wachsen langsam, aber stetig. Das sagen die Admins, die ManagerX von Anfang an begleiten. +

+
+ +
+ {testimonials.map((testimonial, index) => ( + + ))} +
+ + {/* Reale Statistiken */} + +
+
+
16
+
Aktive Server
+
+
+
~300
+
Nutzer
+
+
+
100%
+
Leidenschaft
+
+
+
+
+
+ ); +}); \ No newline at end of file diff --git a/src/site/components/ui/accordion.tsx b/src/web/components/ui/accordion.tsx similarity index 100% rename from src/site/components/ui/accordion.tsx rename to src/web/components/ui/accordion.tsx diff --git a/src/site/components/ui/alert-dialog.tsx b/src/web/components/ui/alert-dialog.tsx similarity index 100% rename from src/site/components/ui/alert-dialog.tsx rename to src/web/components/ui/alert-dialog.tsx diff --git a/src/site/components/ui/alert.tsx b/src/web/components/ui/alert.tsx similarity index 100% rename from src/site/components/ui/alert.tsx rename to src/web/components/ui/alert.tsx diff --git a/src/site/components/ui/aspect-ratio.tsx b/src/web/components/ui/aspect-ratio.tsx similarity index 100% rename from src/site/components/ui/aspect-ratio.tsx rename to src/web/components/ui/aspect-ratio.tsx diff --git a/src/site/components/ui/avatar.tsx b/src/web/components/ui/avatar.tsx similarity index 100% rename from src/site/components/ui/avatar.tsx rename to src/web/components/ui/avatar.tsx diff --git a/src/site/components/ui/badge.tsx b/src/web/components/ui/badge.tsx similarity index 100% rename from src/site/components/ui/badge.tsx rename to src/web/components/ui/badge.tsx diff --git a/src/site/components/ui/breadcrumb.tsx b/src/web/components/ui/breadcrumb.tsx similarity index 100% rename from src/site/components/ui/breadcrumb.tsx rename to src/web/components/ui/breadcrumb.tsx diff --git a/src/site/components/ui/button.tsx b/src/web/components/ui/button.tsx similarity index 100% rename from src/site/components/ui/button.tsx rename to src/web/components/ui/button.tsx diff --git a/src/site/components/ui/calendar.tsx b/src/web/components/ui/calendar.tsx similarity index 100% rename from src/site/components/ui/calendar.tsx rename to src/web/components/ui/calendar.tsx diff --git a/src/site/components/ui/card.tsx b/src/web/components/ui/card.tsx similarity index 100% rename from src/site/components/ui/card.tsx rename to src/web/components/ui/card.tsx diff --git a/src/site/components/ui/carousel.tsx b/src/web/components/ui/carousel.tsx similarity index 100% rename from src/site/components/ui/carousel.tsx rename to src/web/components/ui/carousel.tsx diff --git a/src/site/components/ui/chart.tsx b/src/web/components/ui/chart.tsx similarity index 100% rename from src/site/components/ui/chart.tsx rename to src/web/components/ui/chart.tsx diff --git a/src/site/components/ui/checkbox.tsx b/src/web/components/ui/checkbox.tsx similarity index 100% rename from src/site/components/ui/checkbox.tsx rename to src/web/components/ui/checkbox.tsx diff --git a/src/site/components/ui/collapsible.tsx b/src/web/components/ui/collapsible.tsx similarity index 100% rename from src/site/components/ui/collapsible.tsx rename to src/web/components/ui/collapsible.tsx diff --git a/src/site/components/ui/command.tsx b/src/web/components/ui/command.tsx similarity index 100% rename from src/site/components/ui/command.tsx rename to src/web/components/ui/command.tsx diff --git a/src/site/components/ui/context-menu.tsx b/src/web/components/ui/context-menu.tsx similarity index 100% rename from src/site/components/ui/context-menu.tsx rename to src/web/components/ui/context-menu.tsx diff --git a/src/site/components/ui/dialog.tsx b/src/web/components/ui/dialog.tsx similarity index 100% rename from src/site/components/ui/dialog.tsx rename to src/web/components/ui/dialog.tsx diff --git a/src/site/components/ui/drawer.tsx b/src/web/components/ui/drawer.tsx similarity index 100% rename from src/site/components/ui/drawer.tsx rename to src/web/components/ui/drawer.tsx diff --git a/src/site/components/ui/dropdown-menu.tsx b/src/web/components/ui/dropdown-menu.tsx similarity index 100% rename from src/site/components/ui/dropdown-menu.tsx rename to src/web/components/ui/dropdown-menu.tsx diff --git a/src/site/components/ui/form.tsx b/src/web/components/ui/form.tsx similarity index 100% rename from src/site/components/ui/form.tsx rename to src/web/components/ui/form.tsx diff --git a/src/site/components/ui/hover-card.tsx b/src/web/components/ui/hover-card.tsx similarity index 100% rename from src/site/components/ui/hover-card.tsx rename to src/web/components/ui/hover-card.tsx diff --git a/src/site/components/ui/input-otp.tsx b/src/web/components/ui/input-otp.tsx similarity index 100% rename from src/site/components/ui/input-otp.tsx rename to src/web/components/ui/input-otp.tsx diff --git a/src/site/components/ui/input.tsx b/src/web/components/ui/input.tsx similarity index 100% rename from src/site/components/ui/input.tsx rename to src/web/components/ui/input.tsx diff --git a/src/site/components/ui/label.tsx b/src/web/components/ui/label.tsx similarity index 100% rename from src/site/components/ui/label.tsx rename to src/web/components/ui/label.tsx diff --git a/src/site/components/ui/menubar.tsx b/src/web/components/ui/menubar.tsx similarity index 100% rename from src/site/components/ui/menubar.tsx rename to src/web/components/ui/menubar.tsx diff --git a/src/site/components/ui/navigation-menu.tsx b/src/web/components/ui/navigation-menu.tsx similarity index 100% rename from src/site/components/ui/navigation-menu.tsx rename to src/web/components/ui/navigation-menu.tsx diff --git a/src/site/components/ui/pagination.tsx b/src/web/components/ui/pagination.tsx similarity index 100% rename from src/site/components/ui/pagination.tsx rename to src/web/components/ui/pagination.tsx diff --git a/src/site/components/ui/popover.tsx b/src/web/components/ui/popover.tsx similarity index 100% rename from src/site/components/ui/popover.tsx rename to src/web/components/ui/popover.tsx diff --git a/src/site/components/ui/progress.tsx b/src/web/components/ui/progress.tsx similarity index 100% rename from src/site/components/ui/progress.tsx rename to src/web/components/ui/progress.tsx diff --git a/src/site/components/ui/radio-group.tsx b/src/web/components/ui/radio-group.tsx similarity index 100% rename from src/site/components/ui/radio-group.tsx rename to src/web/components/ui/radio-group.tsx diff --git a/src/site/components/ui/resizable.tsx b/src/web/components/ui/resizable.tsx similarity index 100% rename from src/site/components/ui/resizable.tsx rename to src/web/components/ui/resizable.tsx diff --git a/src/site/components/ui/scroll-area.tsx b/src/web/components/ui/scroll-area.tsx similarity index 100% rename from src/site/components/ui/scroll-area.tsx rename to src/web/components/ui/scroll-area.tsx diff --git a/src/site/components/ui/select.tsx b/src/web/components/ui/select.tsx similarity index 100% rename from src/site/components/ui/select.tsx rename to src/web/components/ui/select.tsx diff --git a/src/site/components/ui/separator.tsx b/src/web/components/ui/separator.tsx similarity index 100% rename from src/site/components/ui/separator.tsx rename to src/web/components/ui/separator.tsx diff --git a/src/site/components/ui/sheet.tsx b/src/web/components/ui/sheet.tsx similarity index 100% rename from src/site/components/ui/sheet.tsx rename to src/web/components/ui/sheet.tsx diff --git a/src/site/components/ui/sidebar.tsx b/src/web/components/ui/sidebar.tsx similarity index 100% rename from src/site/components/ui/sidebar.tsx rename to src/web/components/ui/sidebar.tsx diff --git a/src/site/components/ui/skeleton.tsx b/src/web/components/ui/skeleton.tsx similarity index 100% rename from src/site/components/ui/skeleton.tsx rename to src/web/components/ui/skeleton.tsx diff --git a/src/site/components/ui/slider.tsx b/src/web/components/ui/slider.tsx similarity index 100% rename from src/site/components/ui/slider.tsx rename to src/web/components/ui/slider.tsx diff --git a/src/site/components/ui/sonner.tsx b/src/web/components/ui/sonner.tsx similarity index 100% rename from src/site/components/ui/sonner.tsx rename to src/web/components/ui/sonner.tsx diff --git a/src/site/components/ui/switch.tsx b/src/web/components/ui/switch.tsx similarity index 100% rename from src/site/components/ui/switch.tsx rename to src/web/components/ui/switch.tsx diff --git a/src/site/components/ui/table.tsx b/src/web/components/ui/table.tsx similarity index 100% rename from src/site/components/ui/table.tsx rename to src/web/components/ui/table.tsx diff --git a/src/site/components/ui/tabs.tsx b/src/web/components/ui/tabs.tsx similarity index 100% rename from src/site/components/ui/tabs.tsx rename to src/web/components/ui/tabs.tsx diff --git a/src/site/components/ui/textarea.tsx b/src/web/components/ui/textarea.tsx similarity index 100% rename from src/site/components/ui/textarea.tsx rename to src/web/components/ui/textarea.tsx diff --git a/src/site/components/ui/toast.tsx b/src/web/components/ui/toast.tsx similarity index 100% rename from src/site/components/ui/toast.tsx rename to src/web/components/ui/toast.tsx diff --git a/src/site/components/ui/toaster.tsx b/src/web/components/ui/toaster.tsx similarity index 100% rename from src/site/components/ui/toaster.tsx rename to src/web/components/ui/toaster.tsx diff --git a/src/site/components/ui/toggle-group.tsx b/src/web/components/ui/toggle-group.tsx similarity index 100% rename from src/site/components/ui/toggle-group.tsx rename to src/web/components/ui/toggle-group.tsx diff --git a/src/site/components/ui/toggle.tsx b/src/web/components/ui/toggle.tsx similarity index 100% rename from src/site/components/ui/toggle.tsx rename to src/web/components/ui/toggle.tsx diff --git a/src/site/components/ui/tooltip.tsx b/src/web/components/ui/tooltip.tsx similarity index 100% rename from src/site/components/ui/tooltip.tsx rename to src/web/components/ui/tooltip.tsx diff --git a/src/site/components/ui/use-toast.ts b/src/web/components/ui/use-toast.ts similarity index 100% rename from src/site/components/ui/use-toast.ts rename to src/web/components/ui/use-toast.ts diff --git a/eslint.config.js b/src/web/eslint.config.js similarity index 100% rename from eslint.config.js rename to src/web/eslint.config.js diff --git a/src/site/hooks/use-mobile.tsx b/src/web/hooks/use-mobile.tsx similarity index 100% rename from src/site/hooks/use-mobile.tsx rename to src/web/hooks/use-mobile.tsx diff --git a/src/site/hooks/use-toast.ts b/src/web/hooks/use-toast.ts similarity index 100% rename from src/site/hooks/use-toast.ts rename to src/web/hooks/use-toast.ts diff --git a/src/site/index.css b/src/web/index.css similarity index 100% rename from src/site/index.css rename to src/web/index.css diff --git a/src/site/lib/utils.ts b/src/web/lib/utils.ts similarity index 100% rename from src/site/lib/utils.ts rename to src/web/lib/utils.ts diff --git a/src/site/main.tsx b/src/web/main.tsx similarity index 100% rename from src/site/main.tsx rename to src/web/main.tsx diff --git a/src/web/pages/Datenschutz.tsx b/src/web/pages/Datenschutz.tsx new file mode 100644 index 0000000..457a5b7 --- /dev/null +++ b/src/web/pages/Datenschutz.tsx @@ -0,0 +1,148 @@ +import { memo } from "react"; +import { Link } from "react-router-dom"; +import { motion } from "framer-motion"; +import { ArrowLeft, Shield, Mail, Lock, Database } from "lucide-react"; +import { Navbar } from "../components/Navbar"; +import { Footer } from "../components/Footer"; + +export const Datenschutz = memo(function Datenschutz() { + const sections = [ + { + title: "1. Verantwortliche Stelle", + content: ( +
+

Lenny Steiger

+

+ E-Mail:{" "} + + contact@oppro-network.de + +

+

Verantwortlich für die Datenverarbeitung im Rahmen der Nutzung von ManagerX.

+
+ ), + }, + { + title: "2. Erhobene Daten", + content: ( +
+

ManagerX verarbeitet personenbezogene Daten nur soweit nötig. Dazu gehören:

+ +
+ ), + }, + { + title: "3. Zweck der Verarbeitung", + content: "Die Daten dienen ausschließlich der Bereitstellung der Bot-Funktionen, der Nachvollziehbarkeit von Moderationsaktionen und der Fehlerdiagnose. Eine Weitergabe an Dritte erfolgt nicht.", + }, + { + title: "4. Rechtsgrundlage", + content: ( +
+

Art. 6 Abs. 1 lit. f DSGVO – berechtigtes Interesse am Bot-Betrieb.

+

Art. 6 Abs. 1 lit. b DSGVO – Erfüllung spezifischer Funktionen.

+
+ ), + }, + { + title: "5. Speicherdauer & Sicherheit", + content: "Daten werden gespeichert, solange der Bot auf dem Server aktiv ist oder gesetzliche Fristen dies erfordern. Die Speicherung erfolgt in SQLite-Datenbanken mit angemessenen technischen Schutzmaßnahmen.", + }, + { + title: "6. Rechte der Nutzer", + content: "Du hast jederzeit das Recht auf Auskunft, Berichtigung oder Löschung deiner Daten. Anfragen können direkt per E-Mail an uns gestellt werden.", + }, + ]; + + return ( +
+ + +
+
+ {/* Back Link */} + + + + Zurück zur Startseite + + + +
+
+
+ +
+
+

+ Datenschutz +

+
+ DSGVO Konform + + SQLite Secure +
+
+
+
+ +
+ {sections.map((section, index) => ( + +

+ + {section.title} +

+
+ {section.content} +
+
+ ))} + + {/* Kontakt Footer */} + +
+ +
+

Datenschutz-Anfrage

+

+ Möchtest du eine Auskunft über deine Daten oder eine vollständige Löschung beantragen? +

+ + + Anfrage senden + +
+
+
+
+ +
+
+ ); +}); + +export default Datenschutz; \ No newline at end of file diff --git a/src/web/pages/Impressum.tsx b/src/web/pages/Impressum.tsx new file mode 100644 index 0000000..d5bf363 --- /dev/null +++ b/src/web/pages/Impressum.tsx @@ -0,0 +1,105 @@ +import { memo } from "react"; +import { Link } from "react-router-dom"; +import { motion } from "framer-motion"; +import { ArrowLeft, Mail, MapPin, User, ShieldCheck } from "lucide-react"; +import { Navbar } from "../components/Navbar"; +import { Footer } from "../components/Footer"; + +export const Impressum = memo(function Impressum() { + return ( +
+ + +
+
+ {/* Back Button */} + + + + Zurück zur Startseite + + + +
+
+
+ +
+
+

+ Impressum +

+

+ Angaben gemäß § 5 TMG +

+
+
+
+ + + {/* Verantwortlich */} +
+
+ +
+
+

Verantwortlich

+

Lenny Steiger

+
+
+ + {/* Anschrift */} +
+
+ +
+
+

Anschrift

+
+

Eulauer Str. 24

+

04523 Pegau

+

Deutschland

+
+
+
+ + {/* Kontakt */} +
+
+ +
+ +
+
+ + {/* Optional Footer Disclaimer */} +

+ Dieses Impressum gilt auch für unsere Social-Media-Präsenzen und den Discord-Bot ManagerX. +

+
+
+ +
+
+ ); +}); + +export default Impressum; \ No newline at end of file diff --git a/src/site/pages/Index.tsx b/src/web/pages/Index.tsx similarity index 100% rename from src/site/pages/Index.tsx rename to src/web/pages/Index.tsx diff --git a/src/web/pages/NotFound.tsx b/src/web/pages/NotFound.tsx new file mode 100644 index 0000000..e30229e --- /dev/null +++ b/src/web/pages/NotFound.tsx @@ -0,0 +1,110 @@ +import { useLocation, Link } from "react-router-dom"; +import { useEffect } from "react"; +import { motion } from "framer-motion"; +import { Shield, Sparkles, Home, Terminal } from "lucide-react"; +import { Button } from "@/components/ui/button"; + +const NotFound = () => { + const location = useLocation(); + + useEffect(() => { + console.error("404 Error: User attempted to access non-existent route:", location.pathname); + }, [location.pathname]); + + return ( +
+ {/* --- ORIGINAL HERO BACKGROUND --- */} +
+ + {/* Simple gradient orbs */} +
+
+ + {/* Grid Pattern */} +
+ +
+
+ + {/* --- ORIGINAL HERO LOGO --- */} + +
+
+ +
+
+ 404 +
+
+
+ + {/* --- ORIGINAL HERO TITLE STYLE --- */} + + Error + 404 + + + {/* --- DESCRIPTION --- */} + + Dieser Pfad ist im ManagerX Netzwerk nicht registriert. Kehre zurück zur Zentrale. + + + {/* --- CTA BUTTON (HERO STYLE) --- */} + + + + + {/* --- TERMINAL FOOTER --- */} + + + Path: {location.pathname} + | + Status: 404_NOT_FOUND + +
+
+ + {/* Bottom Gradient Overlay */} +
+
+ ); +}; + +export default NotFound; \ No newline at end of file diff --git a/src/web/pages/Nutzungsbedingungen.tsx b/src/web/pages/Nutzungsbedingungen.tsx new file mode 100644 index 0000000..3a18f60 --- /dev/null +++ b/src/web/pages/Nutzungsbedingungen.tsx @@ -0,0 +1,132 @@ +import { memo } from "react"; +import { Link } from "react-router-dom"; +import { motion } from "framer-motion"; +import { ArrowLeft, FileText, Mail, Github, Shield } from "lucide-react"; +import { Navbar } from "../components/Navbar"; +import { Footer } from "../components/Footer"; + +const legalSections = [ + { + title: "1. Geltungsbereich", + content: "Diese Nutzungsbedingungen regeln die Verwendung des Discord-Bots ManagerX. Mit der Nutzung des Bots oder des bereitgestellten Quellcodes erklärst du dich mit diesen Bedingungen einverstanden.", + }, + { + title: "2. Nutzung des Bots", + content: "ManagerX darf auf Discord-Servern genutzt werden, sofern die erforderlichen Administrations-Rechte vorliegen. Die Nutzung muss den Discord-Richtlinien entsprechen. Missbrauch für Spam oder Belästigung führt zum Ausschluss von der Nutzung.", + }, + { + title: "3. Funktionsumfang", + content: "Der Funktionsumfang von ManagerX umfasst Tools zur Moderation, Community-Verwaltung und Statistiken. Der Betreiber behält sich vor, Funktionen anzupassen oder zu optimieren, um die Stabilität des Systems zu gewährleisten.", + }, + { + title: "4. Haftungsausschluss", + content: "ManagerX Development übernimmt keine Haftung für Schäden oder Datenverluste, die durch die Nutzung des Bots oder fehlerhafte Konfigurationen entstehen könnten.", + }, + { + title: "5. Open Source", + content: "Der Quellcode von ManagerX ist öffentlich zugänglich. Die Nutzung, Modifikation und Weiterverbreitung ist im Rahmen der Lizenzbestimmungen gestattet.", + }, + { + title: "6. Änderungen der Bedingungen", + content: "Diese Bedingungen können bei Bedarf angepasst werden. Die aktuelle Fassung ist jederzeit auf dieser Webseite einsehbar.", + }, +]; + +export const Nutzungsbedingungen = memo(function Nutzungsbedingungen() { + return ( +
+ + +
+
+ {/* Zurück Button mit dezentem Hover */} + + + + Zurück zur Startseite + + + +
+
+
+ +
+
+

+ Nutzungsbedingungen +

+
+ Global v2.0.0 + + GPL-3.0 +
+
+
+
+ +
+ {legalSections.map((section, index) => ( + +

+ 0{index + 1} + {section.title} +

+

+ {section.content} +

+
+ ))} + + {/* Kontakt Bereich - dezent gehalten */} + +
+

Noch Fragen?

+

Kontaktiere das Development-Team.

+
+ +
+
+
+
+ +
+ ); +}); + +export default Nutzungsbedingungen; \ No newline at end of file diff --git a/src/site/test/example.test.ts b/src/web/test/example.test.ts similarity index 100% rename from src/site/test/example.test.ts rename to src/web/test/example.test.ts diff --git a/src/site/test/setup.ts b/src/web/test/setup.ts similarity index 100% rename from src/site/test/setup.ts rename to src/web/test/setup.ts diff --git a/tsconfig.app.json b/src/web/tsconfig.app.json similarity index 95% rename from tsconfig.app.json rename to src/web/tsconfig.app.json index a2d0db5..3add82f 100644 --- a/tsconfig.app.json +++ b/src/web/tsconfig.app.json @@ -24,7 +24,7 @@ "baseUrl": ".", "paths": { - "@/*": ["./src/site/*"] + "@/*": ["./src/*"] } }, "include": ["src"] diff --git a/tsconfig.json b/src/web/tsconfig.json similarity index 91% rename from tsconfig.json rename to src/web/tsconfig.json index 1d1f7fb..2518773 100644 --- a/tsconfig.json +++ b/src/web/tsconfig.json @@ -4,7 +4,7 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@/*": ["./src/site/*"] + "@/*": ["./src/*"] }, "noImplicitAny": false, "noUnusedParameters": false, diff --git a/tsconfig.node.json b/src/web/tsconfig.node.json similarity index 100% rename from tsconfig.node.json rename to src/web/tsconfig.node.json diff --git a/src/site/vite-env.d.ts b/src/web/vite-env.d.ts similarity index 100% rename from src/site/vite-env.d.ts rename to src/web/vite-env.d.ts diff --git a/vitest.config.ts b/src/web/vitest.config.ts similarity index 88% rename from vitest.config.ts rename to src/web/vitest.config.ts index 9daf125..fefe05a 100644 --- a/vitest.config.ts +++ b/src/web/vitest.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ test: { environment: "jsdom", globals: true, - setupFiles: ["./src/site/test/setup.ts"], + setupFiles: ["./src/test/setup.ts"], include: ["src/**/*.{test,spec}.{ts,tsx}"], }, resolve: { diff --git a/tailwind.config.ts b/tailwind.config.ts index 76dd66d..076c26f 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,8 +1,12 @@ -import type { Config } from "tailwindcss"; - -export default { +/** @type {import('tailwindcss').Config} */ +module.exports = { darkMode: ["class"], - content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/site/**/*.{ts,tsx}"], + content: [ + "./index.html", + "./src/web/**/*.{ts,tsx,js,jsx}", + "./src/web/components/**/*.{ts,tsx}", + "./src/web/pages/**/*.{ts,tsx}", + ], prefix: "", theme: { container: { @@ -92,4 +96,4 @@ export default { }, }, plugins: [require("tailwindcss-animate")], -} satisfies Config; +}; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 0933e6f..f88ba0a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,7 +3,6 @@ import react from "@vitejs/plugin-react-swc"; import path from "path"; import { componentTagger } from "lovable-tagger"; -// https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ server: { host: "::", @@ -15,7 +14,7 @@ export default defineConfig(({ mode }) => ({ plugins: [react(), mode === "development" && componentTagger()].filter(Boolean), resolve: { alias: { - "@": path.resolve(__dirname, "./src/site"), + "@": path.resolve(__dirname, "./src/web"), }, }, -})); +})); \ No newline at end of file