import { useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardTitle, CardDescription, CardContent } from "@/components/ui/card"; import { Projects } from "@/data/projects"; import { Tools } from "@/data/tools"; import { Github, Mail } from "lucide-react"; import { MapContainer, TileLayer, Marker, useMap } from "react-leaflet"; import L from "leaflet"; import "leaflet/dist/leaflet.css"; const KARLSRUHE: [number, number] = [49.0069, 8.4037]; const icon = L.divIcon({ html: `
`, className: "", iconSize: [12, 12], }); function MapEffects() { const map = useMap(); useEffect(() => { map.flyTo(KARLSRUHE, 14, { duration: 3 }); }, [map]); return null; } export default function Home() { const [mounted, setMounted] = useState(false); const [isDark, setIsDark] = useState(false); useEffect(() => { setMounted(true); const checkDark = () => setIsDark(document.documentElement.classList.contains("dark")); checkDark(); const obs = new MutationObserver(checkDark); obs.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] }); return () => obs.disconnect(); }, []); if (!mounted) return null; const tileUrl = isDark ? "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png" : "https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png"; return (

Hi, I'm Leander.

Passionate about hardware & software, pursuing computer science studies. Currently building 3D-printing projects and exploring homelabing.

Tools & Technologies

{Tools.map((t, i) => (
{t.name}
{t.name}{t.description}
))}

Recent Projects

{Projects.map((p, i) => ( {p.name} {p.name} {p.description}
{p.badges.map(b => {b})}
))}
); }