"use client"; import { motion } from "framer-motion"; import { useTranslations } from "next-intl"; const columns = [ { key: "frontend", icon: ( ), items: [ { name: "Next.js 15", desc: "App Router, SSR/ISR" }, { name: "TypeScript", desc: "Tipado seguro" }, { name: "Tailwind CSS", desc: "Estilos utilitarios" }, { name: "Framer Motion", desc: "Animaciones" }, { name: "next-intl", desc: "i18n" }, { name: "Howler.js", desc: "Audio player" }, ], }, { key: "backend", icon: ( ), items: [ { name: "Strapi 5", desc: "CMS Headless" }, { name: "PostgreSQL", desc: "Base de datos" }, { name: "MinIO", desc: "Almacenamiento de medios" }, ], }, { key: "infra", icon: ( ), items: [ { name: "Docker", desc: "Docker Compose" }, { name: "Nginx", desc: "Reverse proxy" }, { name: "Self-Hosted", desc: "100% propio" }, { name: "CI/CD", desc: "GitHub Actions" }, ], }, ]; export function TechStackSection() { const t = useTranslations("home"); return (
{/* Header */}
{t("stack_label")}

{t("stack_title")} {t("stack_title_span")}

{t("stack_subtitle")}

{/* Grid */}
{columns.map((col, colIndex) => ( {/* Header */}
{col.icon}

{t(`stack_${col.key}`)}

{/* Items */}
{col.items.map((item, index) => (
{item.name} {item.desc}
))}
))}
); }