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) => (
))}
);
}