diff --git a/.replit b/.replit index e59a85e..006b1e0 100644 --- a/.replit +++ b/.replit @@ -37,3 +37,7 @@ author = "agent" task = "shell.exec" args = "npm run dev:client" waitForPort = 5000 + +[agent] +stack = "MOCKUP_JS" +mockupState = "MOCKUP" diff --git a/client/index.html b/client/index.html index 126e0b3..af2bc56 100644 --- a/client/index.html +++ b/client/index.html @@ -1,23 +1,28 @@ - + - - + NeveTime Team | Minecraft Development + + + + - + + - - - - + + + + + - +
diff --git a/client/public/hero-bg.png b/client/public/hero-bg.png new file mode 100644 index 0000000..88e79e1 Binary files /dev/null and b/client/public/hero-bg.png differ diff --git a/client/public/opengraph.jpg b/client/public/opengraph.jpg new file mode 100644 index 0000000..73bc846 Binary files /dev/null and b/client/public/opengraph.jpg differ diff --git a/client/src/App.tsx b/client/src/App.tsx index b4c5b9e..f86c957 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -4,13 +4,12 @@ import { QueryClientProvider } from "@tanstack/react-query"; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; import NotFound from "@/pages/not-found"; +import Home from "@/pages/home"; function Router() { return ( - {/* Add pages below */} - {/* */} - {/* Fallback to 404 */} + ); diff --git a/client/src/components/footer.tsx b/client/src/components/footer.tsx new file mode 100644 index 0000000..5b0c780 --- /dev/null +++ b/client/src/components/footer.tsx @@ -0,0 +1,61 @@ +import { Code2, Twitter, MessageSquare, Mail } from "lucide-react"; + +export function Footer() { + return ( + + ); +} diff --git a/client/src/components/hero.tsx b/client/src/components/hero.tsx new file mode 100644 index 0000000..2932cd6 --- /dev/null +++ b/client/src/components/hero.tsx @@ -0,0 +1,106 @@ +import { motion } from "framer-motion"; +import { Button } from "@/components/ui/button"; +import { ArrowRight, Terminal } from "lucide-react"; + +export function Hero() { + return ( +
+ {/* Background Image & Overlay */} +
+ Abstract Minecraft Tech Background +
+
+
+ +
+ +
+ + + + + Available for new projects +
+ +

+ Crafting the
+ + Future + of Minecraft +

+ +

+ We are NeveTime Team. A collective of expert developers building high-performance mods, plugins, and custom server solutions. +

+ +
+ + +
+
+ + {/* Floating holographic card effect */} + +
+
+
+
+
+
+
+
+
server_log.txt
+
+ +
+
+ {">"} + Initializing NeveTime Core... +
+
+ {">"} + Loading modules: [Mods, Plugins, Web] +
+
+ {">"} + Success! System ready. +
+
+ {">"} + +
+
+ +
+ {[1, 2, 3].map((i) => ( +
+
+
+ ))} +
+
+ +
+
+ ); +} diff --git a/client/src/components/navbar.tsx b/client/src/components/navbar.tsx new file mode 100644 index 0000000..d7bcd47 --- /dev/null +++ b/client/src/components/navbar.tsx @@ -0,0 +1,77 @@ +import { Link } from "wouter"; +import { Menu, X, Code2 } from "lucide-react"; +import { useState } from "react"; +import { Button } from "@/components/ui/button"; +import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; + +export function Navbar() { + const [isOpen, setIsOpen] = useState(false); + + const navItems = [ + { label: "Home", href: "#home" }, + { label: "Services", href: "#services" }, + { label: "Portfolio", href: "#portfolio" }, + { label: "About", href: "#about" }, + ]; + + return ( + + ); +} diff --git a/client/src/components/portfolio.tsx b/client/src/components/portfolio.tsx new file mode 100644 index 0000000..bdc7214 --- /dev/null +++ b/client/src/components/portfolio.tsx @@ -0,0 +1,110 @@ +import { motion } from "framer-motion"; +import { Badge } from "@/components/ui/badge"; +import { Github, ExternalLink } from "lucide-react"; +import { Button } from "@/components/ui/button"; + +const projects = [ + { + title: "Aetheria RPG", + category: "Full Server Core", + description: "A complete custom core for an MMORPG server handling 500+ concurrent players. Features custom skills, classes, and quest systems.", + tags: ["Java", "Paper API", "Redis", "SQL"], + image: "https://images.unsplash.com/photo-1605901309584-818e25960b8f?q=80&w=2000&auto=format&fit=crop" + }, + { + title: "TechReborn Addon", + category: "Fabric Mod", + description: "An industrial tech mod adding complex machinery, power systems, and automation tools to the game.", + tags: ["Fabric", "Mixin", "Java"], + image: "https://images.unsplash.com/photo-1550745165-9bc0b252726f?q=80&w=2000&auto=format&fit=crop" + }, + { + title: "SkyBlock Eco", + category: "Economy Plugin", + description: "Advanced economy system with dynamic pricing, stock markets, and player shops.", + tags: ["Spigot", "Vault", "Economy"], + image: "https://images.unsplash.com/photo-1614726365723-49cfae92782f?q=80&w=2000&auto=format&fit=crop" + } +]; + +export function Portfolio() { + return ( +
+
+
+
+

+ Featured Projects +

+

+ A selection of our finest work in the Minecraft development space. +

+
+ +
+ +
+ {projects.map((project, index) => ( + +
+
+ {project.title} +
+ + {project.category} + +
+
+ +
+

+ {project.title} +

+

+ {project.description} +

+ +
+ {project.tags.map((tag) => ( + + {tag} + + ))} +
+ +
+ + +
+
+ + ))} +
+ +
+ +
+
+
+ ); +} diff --git a/client/src/components/services.tsx b/client/src/components/services.tsx new file mode 100644 index 0000000..aefb509 --- /dev/null +++ b/client/src/components/services.tsx @@ -0,0 +1,79 @@ +import { motion } from "framer-motion"; +import { Code, Box, Cpu, Server, Wrench, Globe } from "lucide-react"; + +const services = [ + { + icon: Box, + title: "Custom Mods", + description: "Tailor-made modifications for Fabric and Forge. New items, blocks, mechanics, and dimensions." + }, + { + icon: Code, + title: "Spigot/Paper Plugins", + description: "High-performance server-side plugins. From mini-games to complex economy systems." + }, + { + icon: Server, + title: "Server Setup", + description: "Complete server architecture, optimization, and security configuration for large scale networks." + }, + { + icon: Globe, + title: "Web Integration", + description: "Connect your Minecraft server to the web. Leaderboards, stores, and ban lists." + }, + { + icon: Cpu, + title: "Performance Optimization", + description: "Deep analysis and optimization of server performance to eliminate lag." + }, + { + icon: Wrench, + title: "Maintenance", + description: "Ongoing support and updates for your existing codebase." + } +]; + +export function Services() { + return ( +
+
+ +
+
+

+ Our Services +

+

+ We provide end-to-end development solutions for the Minecraft ecosystem. +

+
+ +
+ {services.map((service, index) => ( + +
+ +
+
+ +
+

{service.title}

+

+ {service.description} +

+
+ + ))} +
+
+
+ ); +} diff --git a/client/src/index.css b/client/src/index.css index 9574371..3211464 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -8,33 +8,35 @@ --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); + --color-background: hsl(var(--background)); --color-foreground: hsl(var(--foreground)); + --color-card: hsl(var(--card)); --color-card-foreground: hsl(var(--card-foreground)); + --color-popover: hsl(var(--popover)); --color-popover-foreground: hsl(var(--popover-foreground)); + --color-primary: hsl(var(--primary)); --color-primary-foreground: hsl(var(--primary-foreground)); + --color-secondary: hsl(var(--secondary)); --color-secondary-foreground: hsl(var(--secondary-foreground)); + --color-muted: hsl(var(--muted)); --color-muted-foreground: hsl(var(--muted-foreground)); + --color-accent: hsl(var(--accent)); --color-accent-foreground: hsl(var(--accent-foreground)); + --color-destructive: hsl(var(--destructive)); --color-destructive-foreground: hsl(var(--destructive-foreground)); + --color-border: hsl(var(--border)); - --color-primary-border: hsl(var(--primary-border)); - --color-accent-border: hsl(var(--accent-border)); - --color-card-border: hsl(var(--card-border)); --color-input: hsl(var(--input)); --color-ring: hsl(var(--ring)); - --color-chart-1: hsl(var(--chart-1)); - --color-chart-2: hsl(var(--chart-2)); - --color-chart-3: hsl(var(--chart-3)); - --color-chart-4: hsl(var(--chart-4)); - --color-chart-5: hsl(var(--chart-5)); + --color-sidebar: hsl(var(--sidebar)); --color-sidebar-foreground: hsl(var(--sidebar-foreground)); --color-sidebar-primary: hsl(var(--sidebar-primary)); @@ -44,228 +46,51 @@ --color-sidebar-border: hsl(var(--sidebar-border)); --color-sidebar-ring: hsl(var(--sidebar-ring)); - /* Automatically computed borders: They're already hsl() wrapped. That's okay. - * The only reason you don't want to wrap them in hsl() in theme tokens is so that - * tailwind can create opacity utilities based on them, which is not important for - * borders usually. */ - --color-sidebar-primary-border: var(--sidebar-primary-border); - - --color-sidebar-accent-border: var(--sidebar-accent-border); - - --color-primary-border: var(--primary-border); - - --color-secondary-border: var(--secondary-border); - - --color-muted-border: var(--muted-border); - - --color-accent-border: var(--accent-border); - - --color-destructive-border: var(--destructive-border); - -} - -/* LIGHT MODE */ -:root { - --button-outline: rgba(0,0,0, .10); - --badge-outline: rgba(0,0,0, .05); - - /* Automatic computation of border around primary / danger buttons */ - --opaque-button-border-intensity: -8; /* In terms of percentages */ - - /* Backgrounds applied on top of other backgrounds when hovered/active */ - --elevate-1: rgba(0,0,0, .03); - --elevate-2: rgba(0,0,0, .08); - - --background: red; /*replace with H S L */ - - --foreground: red; /*replace with H S L */ - - --border: red; /*replace with H S L */ - - --card: red; /*replace with H S L */ - - --card-foreground: red; /*replace with H S L */ - - --card-border: red; /*replace with H S L */ - - --sidebar: red; /*replace with H S L */ - - --sidebar-foreground: red; /*replace with H S L */ - - --sidebar-border: red; /*replace with H S L */ - - --sidebar-primary: red; /*replace with H S L */ - - --sidebar-primary-foreground: red; /*replace with H S L */ - - --sidebar-accent: red; /*replace with H S L */ - - --sidebar-accent-foreground: red; /*replace with H S L */ - - --sidebar-ring: red; /*replace with H S L */ - - --popover: red; /*replace with H S L */ - - --popover-foreground: red; /*replace with H S L */ - - --popover-border: red; /*replace with H S L */ - - --primary: red; /*replace with H S L */ - - --primary-foreground: red; /*replace with H S L */ - - --secondary: red; /*replace with H S L */ - - --secondary-foreground: red; /*replace with H S L */ - - --muted: red; /*replace with H S L */ - - --muted-foreground: red; /*replace with H S L */ - - --accent: red; /*replace with H S L */ - - --accent-foreground: red; /*replace with H S L */ - - --destructive: red; /*replace with H S L */ - - --destructive-foreground: red; /*replace with H S L */ - - --input: red; /*replace with H S L */ - --ring: red; /*replace with H S L */ - --chart-1: red; /*replace with H S L */ - --chart-2: red; /*replace with H S L */ - --chart-3: red; /*replace with H S L */ - --chart-4: red; /*replace with H S L */ - --chart-5: red; /*replace with H S L */ - --font-sans: 'Inter', sans-serif; - --font-serif: Georgia, serif; - --font-mono: Menlo, monospace; - --radius: .5rem; /* 8px */ - --shadow-2xs: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); /*replace with H S L */ - --shadow-xs: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); /*replace with H S L */ - --shadow-sm: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 1px 2px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 1px 2px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-md: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 2px 4px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-lg: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 4px 6px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-xl: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 8px 10px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-2xl: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); - --tracking-normal: 0em; - --spacing: 0.25rem; - - /* Automatically computed borders - intensity can be controlled by the user by the --opaque-button-border-intensity setting */ - - /* Fallback for older browsers */ - --sidebar-primary-border: hsl(var(--sidebar-primary)); - --sidebar-primary-border: hsl(from hsl(var(--sidebar-primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --sidebar-accent-border: hsl(var(--sidebar-accent)); - --sidebar-accent-border: hsl(from hsl(var(--sidebar-accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --primary-border: hsl(var(--primary)); - --primary-border: hsl(from hsl(var(--primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --secondary-border: hsl(var(--secondary)); - --secondary-border: hsl(from hsl(var(--secondary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --muted-border: hsl(var(--muted)); - --muted-border: hsl(from hsl(var(--muted)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --accent-border: hsl(var(--accent)); - --accent-border: hsl(from hsl(var(--accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); - - /* Fallback for older browsers */ - --destructive-border: hsl(var(--destructive)); - --destructive-border: hsl(from hsl(var(--destructive)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); + --font-heading: 'Space Grotesk', sans-serif; + --font-mono: 'JetBrains Mono', monospace; } -.dark { - --button-outline: rgba(255,255,255, .10); - --badge-outline: rgba(255,255,255, .05); +:root { + /* Dark Green Theme - "NeveTime" */ + --background: 160 30% 5%; /* Very dark green/black */ + --foreground: 150 20% 90%; /* Off-white green tint */ - --opaque-button-border-intensity: 9; /* In terms of percentages */ + --card: 160 25% 8%; + --card-foreground: 150 20% 90%; - /* Backgrounds applied on top of other backgrounds when hovered/active */ - --elevate-1: rgba(255,255,255, .04); - --elevate-2: rgba(255,255,255, .09); + --popover: 160 25% 8%; + --popover-foreground: 150 20% 90%; - --background: red; /*replace with H S L */ + --primary: 150 100% 35%; /* Vibrant Green */ + --primary-foreground: 0 0% 100%; - --foreground: red; /*replace with H S L */ + --secondary: 160 20% 15%; /* Deep green surface */ + --secondary-foreground: 150 20% 90%; - --border: red; /*replace with H S L */ + --muted: 160 20% 12%; + --muted-foreground: 150 10% 60%; - --card: red; /*replace with H S L */ + --accent: 150 100% 35%; /* Same as primary for hover effects, or slightly lighter */ + --accent-foreground: 0 0% 100%; - --card-foreground: red; /*replace with H S L */ + --destructive: 0 62% 30%; + --destructive-foreground: 0 0% 100%; - --card-border: red; /*replace with H S L */ - - --sidebar: red; /*replace with H S L */ - - --sidebar-foreground: red; /*replace with H S L */ - - --sidebar-border: red; /*replace with H S L */ - - --sidebar-primary: red; /*replace with H S L */ - - --sidebar-primary-foreground: red; /*replace with H S L */ - - --sidebar-accent: red; /*replace with H S L */ - - --sidebar-accent-foreground: red; /*replace with H S L */ - - --sidebar-ring: red; /*replace with H S L */ - - --popover: red; /*replace with H S L */ - - --popover-foreground: red; /*replace with H S L */ - - --popover-border: red; /*replace with H S L */ - - --primary: red; /*replace with H S L */ - - --primary-foreground: red; /*replace with H S L */ - - --secondary: red; /*replace with H S L */ - - --secondary-foreground: red; /*replace with H S L */ - - --muted: red; /*replace with H S L */ - - --muted-foreground: red; /*replace with H S L */ - - --accent: red; /*replace with H S L */ - - --accent-foreground: red; /*replace with H S L */ - - --destructive: red; /*replace with H S L */ - - --destructive-foreground: red; /*replace with H S L */ - - /* Used as the border around inputs. Dark mode: Should be a border that is light enough to have high contrast when rendered on a --card background. More contrast than standard --border */ - --input: red; /*replace with H S L */ - --ring: red; /*replace with H S L */ - --chart-1: red; /*replace with H S L */ - --chart-2: red; /*replace with H S L */ - --chart-3: red; /*replace with H S L */ - --chart-4: red; /*replace with H S L */ - --chart-5: red; /*replace with H S L */ - - --shadow-2xs: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-xs: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-sm: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 1px 2px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 1px 2px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-md: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 2px 4px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-lg: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 4px 6px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-xl: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00), 0px 8px 10px -1px hsl(202.8169 89.1213% 53.1373% / 0.00); - --shadow-2xl: 0px 2px 0px 0px hsl(202.8169 89.1213% 53.1373% / 0.00); + --border: 160 20% 15%; + --input: 160 20% 15%; + --ring: 150 100% 35%; + --radius: 0.5rem; + + --sidebar: 160 25% 8%; + --sidebar-foreground: 150 20% 90%; + --sidebar-primary: 150 100% 35%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 160 20% 15%; + --sidebar-accent-foreground: 150 20% 90%; + --sidebar-border: 160 20% 15%; + --sidebar-ring: 150 100% 35%; } @layer base { @@ -275,116 +100,22 @@ body { @apply font-sans antialiased bg-background text-foreground; } + h1, h2, h3, h4, h5, h6 { + @apply font-heading tracking-tight; + } } -/** - * Using the elevate system. - * Automatic contrast adjustment. - * - * - * - * - * // Using the tailwind utility when a data attribute is "on" - * - * // Or manually controlling the toggle state - * - * - * Elevation systems have to handle many states. - * - not-hovered, vs. hovered vs. active (three mutually exclusive states) - * - toggled or not - * - focused or not (this is not handled with these utilities) - * - * Even without handling focused or not, this is six possible combinations that - * need to be distinguished from eachother visually. - */ @layer utilities { - - /* Hide ugly search cancel button in Chrome until we can style it properly */ - input[type="search"]::-webkit-search-cancel-button { - @apply hidden; + .text-glow { + text-shadow: 0 0 20px hsla(150, 100%, 35%, 0.5); } - - /* Placeholder styling for contentEditable div */ - [contenteditable][data-placeholder]:empty::before { - content: attr(data-placeholder); - color: hsl(var(--muted-foreground)); - pointer-events: none; + .glass-card { + @apply bg-black/40 backdrop-blur-md border border-white/10; } - - /* .no-default-hover-elevate/no-default-active-elevate is an escape hatch so consumers of - * buttons/badges can remove the automatic brightness adjustment on interactions - * and program their own. */ - .no-default-hover-elevate {} - - .no-default-active-elevate {} - - - /** - * Toggleable backgrounds go behind the content. Hoverable/active goes on top. - * This way they can stack/compound. Both will overlap the parent's borders! - * So borders will be automatically adjusted both on toggle, and hover/active, - * and they will be compounded. - */ - .toggle-elevate::before, - .toggle-elevate-2::before { - content: ""; - pointer-events: none; - position: absolute; - inset: 0px; - /*border-radius: inherit; match rounded corners */ - border-radius: inherit; - z-index: -1; - /* sits behind content but above backdrop */ - } - - .toggle-elevate.toggle-elevated::before { - background-color: var(--elevate-2); - } - - /* If there's a 1px border, adjust the inset so that it covers that parent's border */ - .border.toggle-elevate::before { - inset: -1px; - } - - /* Does not work on elements with overflow:hidden! */ - .hover-elevate:not(.no-default-hover-elevate), - .active-elevate:not(.no-default-active-elevate), - .hover-elevate-2:not(.no-default-hover-elevate), - .active-elevate-2:not(.no-default-active-elevate) { - position: relative; - z-index: 0; - } - - .hover-elevate:not(.no-default-hover-elevate)::after, - .active-elevate:not(.no-default-active-elevate)::after, - .hover-elevate-2:not(.no-default-hover-elevate)::after, - .active-elevate-2:not(.no-default-active-elevate)::after { - content: ""; - pointer-events: none; - position: absolute; - inset: 0px; - /*border-radius: inherit; match rounded corners */ - border-radius: inherit; - z-index: 999; - /* sits in front of content */ - } - - .hover-elevate:hover:not(.no-default-hover-elevate)::after, - .active-elevate:active:not(.no-default-active-elevate)::after { - background-color: var(--elevate-1); - } - - .hover-elevate-2:hover:not(.no-default-hover-elevate)::after, - .active-elevate-2:active:not(.no-default-active-elevate)::after { - background-color: var(--elevate-2); - } - - /* If there's a 1px border, adjust the inset so that it covers that parent's border */ - .border.hover-elevate:not(.no-hover-interaction-elevate)::after, - .border.active-elevate:not(.no-active-interaction-elevate)::after, - .border.hover-elevate-2:not(.no-hover-interaction-elevate)::after, - .border.active-elevate-2:not(.no-active-interaction-elevate)::after, - .border.hover-elevate:not(.no-hover-interaction-elevate)::after { - inset: -1px; + .grid-pattern { + background-size: 40px 40px; + background-image: + linear-gradient(to right, rgba(16, 185, 129, 0.05) 1px, transparent 1px), + linear-gradient(to bottom, rgba(16, 185, 129, 0.05) 1px, transparent 1px); } } diff --git a/client/src/pages/home.tsx b/client/src/pages/home.tsx new file mode 100644 index 0000000..1a988a6 --- /dev/null +++ b/client/src/pages/home.tsx @@ -0,0 +1,38 @@ +import { Navbar } from "@/components/navbar"; +import { Hero } from "@/components/hero"; +import { Services } from "@/components/services"; +import { Portfolio } from "@/components/portfolio"; +import { Footer } from "@/components/footer"; + +export default function Home() { + return ( +
+ +
+ + + + + {/* Contact CTA Section */} +
+
+
+
+ +
+

+ Ready to Build? +

+

+ Let's turn your ideas into reality. Whether you need a simple plugin or a complex modpack, we are here to help. +

+ +
+
+
+
+ ); +}