feat: complete NutriScan redesign

This commit is contained in:
evandrodevbr committed 2026-07-16 16:31:50 -03:00
1 parent c1fe4af997
commit f71cd167b3
163 files changed
+30802 -14169

No files matched your search

+79 -65
View File
@@ -1,97 +1,111 @@
"use client";
import React from "react";
import { motion } from "framer-motion";
import { Heart, Coffee, ShieldCheck, Server, Globe, Code2 } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Heart, Server, ShieldCheck, Globe } from "lucide-react";
export function DonationSection() {
return (
<section className="py-24 bg-white dark:bg-[#030712] relative overflow-hidden">
{/* Background Decor sutil */}
<div className="absolute top-0 right-0 w-1/3 h-1/3 bg-blue-500/5 blur-[120px] rounded-full pointer-events-none" />
<section className="bg-base section-py">
<div className="container-editorial">
<div className="max-w-5xl mx-auto px-6 relative z-10">
<div className="grid lg:grid-cols-2 gap-16 items-center">
{/* Lado Esquerdo: A Missão (Copywriting Técnico) */}
<motion.div
initial={{ opacity: 0, x: -20 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
>
<h2 className="text-4xl md:text-5xl font-black text-gray-900 dark:text-white mb-6 tracking-tighter leading-tight">
Mantenha a <span className="text-blue-600">Engenharia</span> Livre de Interesses.
{/* ── Section header ───────────────────────────────────────────── */}
<div className="mb-16">
<span className="label text-[var(--accent)] block mb-4">Apoie o Projeto</span>
<hr className="hairline mb-10" />
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 items-end">
<h2 className="font-display text-display-lg text-[var(--fg-primary)]">
Mantenha a informação{" "}
<em className="font-display-i text-[var(--accent)]">livre.</em>
</h2>
<p className="text-lg text-gray-600 dark:text-gray-400 mb-8 leading-relaxed">
O NutriScan é um projeto de código aberto nascido em Garuva, SC. Operamos sem anúncios e sem venda de dados. Nosso único combustível é o apoio da comunidade que acredita na democratização da saúde.
<p className="text-[var(--fg-secondary)] text-lg leading-relaxed max-w-md">
O NutriScan opera sem anúncios e sem venda de dados. Nosso único
combustível é o apoio de quem acredita na democratização da saúde.
</p>
</div>
</div>
<div className="space-y-4">
{/* ── Content grid ─────────────────────────────────────────────── */}
<div className="grid grid-cols-1 lg:grid-cols-12 gap-16 lg:gap-20 items-start">
{/* Left: What your support funds */}
<div className="lg:col-span-6">
<div className="divide-y divide-[var(--border-subtle)]">
{[
{ icon: Server, text: "Manutenção de Servidores e API de Alta Latência" },
{ icon: ShieldCheck, text: "Segurança de Dados e Auditoria Open Source" },
{ icon: Globe, text: "Expansão da Base de Dados Internacional" },
].map((item, i) => (
<div key={i} className="flex items-center gap-3 text-sm font-medium text-gray-700 dark:text-gray-300">
<div className="p-2 bg-blue-100 dark:bg-blue-900/30 rounded-lg">
<item.icon className="w-4 h-4 text-blue-600" />
{
icon: Server,
title: "Infraestrutura",
desc: "Servidores, CDN e API de alta disponibilidade para garantir acesso global sem interrupções.",
},
{
icon: ShieldCheck,
title: "Segurança & Auditoria",
desc: "Revisões de código open source, análise de dependências e manutenção da integridade dos dados.",
},
{
icon: Globe,
title: "Expansão da Base",
desc: "Integração com novos mercados e suporte a mais países, línguas e categorias de produtos.",
},
].map(({ icon: Icon, title, desc }, i) => (
<div key={i} className="flex gap-6 py-8 group">
<div className="shrink-0 mt-0.5">
<Icon
className="w-5 h-5 text-[var(--fg-muted)] group-hover:text-[var(--accent)] transition-colors duration-300"
strokeWidth={1.5}
/>
</div>
<div>
<h4 className="font-sans font-semibold text-[var(--fg-primary)] mb-1.5">
{title}
</h4>
<p className="text-[var(--fg-secondary)] text-sm leading-relaxed">
{desc}
</p>
</div>
{item.text}
</div>
))}
</div>
</motion.div>
</div>
{/* Lado Direito: O Card de Doação (Psychological Anchoring) */}
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
className="relative"
>
<div className="bg-gray-50 dark:bg-gray-900/50 border border-gray-100 dark:border-gray-800 p-8 rounded-[2.5rem] shadow-2xl backdrop-blur-sm">
<div className="flex items-center gap-4 mb-8">
<div className="w-12 h-12 bg-gradient-to-br from-yellow-400 to-orange-500 rounded-2xl flex items-center justify-center shadow-lg shadow-orange-500/20">
<Coffee className="w-6 h-6 text-white" />
</div>
<div>
<h4 className="font-bold text-gray-900 dark:text-white">Apoie com um Café</h4>
<p className="text-xs text-gray-500 uppercase tracking-widest font-mono">Status: Sistema Online</p>
</div>
</div>
{/* Right: Donation card */}
<div className="lg:col-span-6">
<div className="card-warm p-10 rounded-xl">
<blockquote className="italic text-gray-600 dark:text-gray-400 text-sm border-l-2 border-blue-500 pl-4 mb-8">
&quot;Como desenvolvedor independente, cada contribuição me permite dedicar mais horas à refatoração e novas features para o NutriScan.&quot;
{/* Eyebrow */}
<span className="label text-[var(--fg-muted)] block mb-8">
Desenvolvido em Garuva, SC · Brasil
</span>
{/* Quote */}
<blockquote className="border-l-2 border-[var(--accent)] pl-5 mb-10">
<p className="font-display text-display-sm text-[var(--fg-primary)] leading-snug mb-3">
&ldquo;Cada contribuição me permite dedicar mais horas ao{" "}
<em className="font-display-i">NutriScan</em>.&rdquo;
</p>
<cite className="label text-[var(--fg-muted)] not-italic">
— Evandro, desenvolvedor
</cite>
</blockquote>
{/* CTA */}
<a
href="https://buymeacoffee.com/evandrotruuta"
target="_blank"
rel="noopener noreferrer"
className="block group"
className="btn-accent w-full justify-center py-4 text-base"
>
<Button className="w-full h-16 bg-blue-600 hover:bg-blue-700 text-white rounded-2xl font-bold text-lg transition-all group-hover:scale-[1.02] active:scale-95 shadow-xl shadow-blue-500/25">
<Heart className="w-5 h-5 mr-3 fill-white group-hover:animate-pulse" />
Contribuir agora
</Button>
<Heart className="w-4 h-4" strokeWidth={1.5} />
Contribuir agora
</a>
<div className="mt-6 flex justify-center gap-4">
<div className="flex items-center gap-1.5 text-[10px] font-bold text-gray-400 uppercase tracking-tighter">
<Code2 size={12} /> Engenharia Brasileira
</div>
</div>
<p className="mt-4 label text-center text-[var(--fg-faint)]">
Qualquer valor ajuda a manter o NutriScan gratuito.
</p>
</div>
{/* Elemento Decorativo: Floating Badge */}
<div className="absolute -bottom-6 -right-6 bg-white dark:bg-gray-800 p-4 rounded-2xl shadow-xl border border-gray-100 dark:border-gray-700 animate-bounce">
<p className="text-[10px] font-black text-blue-600 uppercase">Qualquer valor ajuda!</p>
</div>
</motion.div>
</div>
</div>
</div>
</section>
);
}
}