From 05230528642b09bf09dcd17bb951d727107ec9ec Mon Sep 17 00:00:00 2001 From: Evandro Fonseca Junior Date: Sat, 7 Mar 2026 10:27:04 -0300 Subject: [PATCH] feat: Initialize portfolio project with core pages, UI components, and configuration files. --- app/components/About.tsx | 26 +- app/components/Contact.tsx | 26 +- app/components/ContactForm.tsx | 18 +- app/components/GoogleAnalytics.tsx | 11 +- app/components/Header.tsx | 102 +++--- app/components/Hero.tsx | 59 ++-- app/components/Logo.tsx | 160 +++++++++ app/components/Projects.tsx | 6 +- app/components/Section.tsx | 40 +++ app/components/Skills.tsx | 4 +- app/components/WorkModalities.tsx | 306 +++++++++++++----- app/components/ui/NumberIcons.tsx | 140 ++++++++ app/globals.css | 34 +- app/layout.tsx | 31 +- app/manifest.ts | 39 +-- app/not-found.tsx | 6 +- app/opengraph-image.tsx | 74 +++-- app/page.tsx | 2 +- app/robots.ts | 12 +- app/sitemap.ts | 20 +- components/DotGrid.tsx | 68 ++-- components/FaultyTerminal.tsx | 6 +- components/LogoLoop.tsx | 188 ++++++----- components/Squares.tsx | 2 +- components/TextType.tsx | 70 ++-- components/magicui/animated-gradient-text.tsx | 2 +- components/magicui/aurora-text.tsx | 2 +- components/magicui/bento-grid.tsx | 4 +- components/magicui/magic-card.tsx | 2 +- components/magicui/shimmer-button.tsx | 2 +- components/magicui/squares.tsx | 2 +- lib/utils.ts | 6 +- public/assets/emailSignature.svg | 58 ++++ public/assets/logo.svg | 10 + public/assets/socialCard.svg | 73 +++++ public/fonts/MonumentExtended-Regular.otf | Bin 0 -> 34380 bytes public/fonts/MonumentExtended-Ultrabold.otf | Bin 0 -> 33528 bytes tsconfig.json | 14 +- 38 files changed, 1165 insertions(+), 460 deletions(-) create mode 100644 app/components/Logo.tsx create mode 100644 app/components/Section.tsx create mode 100644 app/components/ui/NumberIcons.tsx create mode 100644 public/assets/emailSignature.svg create mode 100644 public/assets/logo.svg create mode 100644 public/assets/socialCard.svg create mode 100644 public/fonts/MonumentExtended-Regular.otf create mode 100644 public/fonts/MonumentExtended-Ultrabold.otf diff --git a/app/components/About.tsx b/app/components/About.tsx index fadea9e..a42386b 100644 --- a/app/components/About.tsx +++ b/app/components/About.tsx @@ -5,13 +5,13 @@ const STORY_DATA = [ id: "KERNEL_INIT", title: "Engenharia de fundamentos", content: - "Projeto sistemas com foco em previsibilidade, manutenção e crescimento real. Escala entra na arquitetura desde o início.", + "Projeto sistemas com foco em previsibilidade, manutenção e crescimento real. Escala entra na arquitetura desde o início.", }, { id: "RUNTIME_EXEC", - title: "Entrega sob restrições", + title: "Entrega sob restrições", content: - "Atuo bem em cenários com legado, prazos apertados e decisões de produto em movimento, sem sacrificar legibilidade técnica.", + "Atuo bem em cenários com legado, prazos apertados e decisões de produto em movimento, sem sacrificar legibilidade técnica.", }, ]; @@ -19,22 +19,22 @@ const VALUES_DATA = [ { title: "Pragmatismo arquitetural", description: - "Decisões guiadas por ROI, operabilidade e clareza para o time que mantém o sistema depois.", + "Decisões guiadas por ROI, operabilidade e clareza para o time que mantém o sistema depois.", }, { - title: "Fundação técnica", + title: "Fundação técnica", description: - "Fundamentos fortes em dados, protocolos e modelagem para evitar soluções frágeis e modismos vazios.", + "Fundamentos fortes em dados, protocolos e modelagem para evitar soluções frágeis e modismos vazios.", }, { title: "Ownership real", description: - "Responsabilidade sobre entrega, comunicação e qualidade final, não só sobre o trecho de código escrito.", + "Responsabilidade sobre entrega, comunicação e qualidade final, não só sobre o trecho de código escrito.", }, { title: "Security by design", description: - "Integridade, proteção de dados e conformidade tratadas como parte do produto, não como remendo.", + "Integridade, proteção de dados e conformidade tratadas como parte do produto, não como remendo.", }, ]; @@ -43,12 +43,12 @@ export default function About() {
- Garuva, SC · Remote worldwide + Garuva, SC · Remote worldwide } > @@ -65,10 +65,10 @@ export default function About() {
System Signature
-

Base técnica e postura de entrega

+

Base técnica e postura de entrega

Evandro Fonseca Junior. Engenheiro Full-Stack com foco em Next.js, - React, Node.js, Tauri, integrações e arquitetura pragmática. + React, Node.js, Tauri, integrações e arquitetura pragmática.

{VALUES_DATA.map((value) => ( diff --git a/app/components/Contact.tsx b/app/components/Contact.tsx index 57f285a..c0d27e8 100644 --- a/app/components/Contact.tsx +++ b/app/components/Contact.tsx @@ -1,4 +1,4 @@ -"use client"; +"use client"; import type React from "react"; import { useState } from "react"; @@ -29,23 +29,23 @@ export default function Contact() {
Response SLA
-

Retorno inicial em até 24h

+

Retorno inicial em até 24h

- Ideal para discovery técnico, revisão de arquitetura, rescue de - projeto, otimização de performance ou construção de produto do + Ideal para discovery técnico, revisão de arquitetura, rescue de + projeto, otimização de performance ou construção de produto do zero.

WhatsApp: +55 47 99274-2365
E-mail: evandrofonsecajunior@gmail.com
-
Base: Garuva, Santa Catarina · atuação remota
+
Base: Garuva, Santa Catarina · atuação remota
@@ -62,7 +62,8 @@ export default function Contact() { onChange={(e) => setFormData({ ...formData, name: e.target.value }) } - className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.03)] px-sp-4 py-[14px] text-[12px] text-white outline-none transition-colors focus:border-slash" + className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.06)] px-sp-4 py-[14px] text-[12px] outline-none transition-colors focus:border-slash" + style={{ color: "#fff", backgroundColor: "rgba(255,255,255,0.06)" }} />
@@ -77,7 +78,8 @@ export default function Contact() { onChange={(e) => setFormData({ ...formData, email: e.target.value }) } - className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.03)] px-sp-4 py-[14px] text-[12px] text-white outline-none transition-colors focus:border-slash" + className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.06)] px-sp-4 py-[14px] text-[12px] outline-none transition-colors focus:border-slash" + style={{ color: "#fff", backgroundColor: "rgba(255,255,255,0.06)" }} />
@@ -90,12 +92,13 @@ export default function Contact() { onChange={(e) => setFormData({ ...formData, subject: e.target.value }) } - className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.03)] px-sp-4 py-[14px] text-[12px] text-white outline-none transition-colors focus:border-slash" + className="mt-sp-2 w-full border border-[rgba(255,255,255,.12)] px-sp-4 py-[14px] text-[12px] outline-none transition-colors focus:border-slash" + style={{ color: "#fff", backgroundColor: "#1a1a1a" }} > - +
@@ -110,7 +113,8 @@ export default function Contact() { onChange={(e) => setFormData({ ...formData, message: e.target.value }) } - className="mt-sp-2 w-full resize-none border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.03)] px-sp-4 py-[14px] text-[12px] text-white outline-none transition-colors focus:border-slash" + className="mt-sp-2 w-full resize-none border border-[rgba(255,255,255,.12)] bg-[rgba(255,255,255,.06)] px-sp-4 py-[14px] text-[12px] outline-none transition-colors focus:border-slash" + style={{ color: "#fff", backgroundColor: "rgba(255,255,255,0.06)" }} />