From d4ac92f6923a29577294038b5ee5edc9913eb3e3 Mon Sep 17 00:00:00 2001 From: John Enderson Date: Sun, 2 Aug 2026 18:39:03 -0300 Subject: [PATCH 1/4] feat(me): reescreve a pagina Sobre mim e troca a fonte do site para IBM Plex Sans - pagina /me reescrita: nova bio (Oi eu sou o John, Sobre este site, Atuacao profissional), cards de Curto/Nao curto lado a lado com selo colorido por tom (reaproveita os acentos das admonitions tip/danger), foto pessoal com o mesmo hover (escala + rotacao + anel interno) dos cards de artista do /now, largura da pagina alinhada ao padrao do site (max-w-5xl, com max-w-3xl so na prosa longa) - card-animation.ts promovido de features/now para src/base, ja que o hover da foto do /me passou a compartilha-lo com ArtistCard/GameCard/LolChampionCard - fonte sans-serif do site trocada de Geist para IBM Plex Sans (pesos 400/500/600/700); Geist Mono mantida para codigo, tags e labels; variavel css renomeada de --font-geist-sans para --font-sans Co-Authored-By: Claude Sonnet 5 --- app/layout.tsx | 9 +- app/me/page.tsx | 305 ++++++++++++++---- public/me/john_3d.jpg | Bin 0 -> 211706 bytes src/{features/now => base}/card-animation.ts | 0 .../components/SectionIcon/SectionIcon.tsx | 2 +- src/features/now/components/ArtistCard.tsx | 5 +- src/features/now/components/GameCard.tsx | 10 +- .../now/components/LolChampionCard.tsx | 5 +- styles/globals.css | 63 +++- 9 files changed, 314 insertions(+), 85 deletions(-) create mode 100644 public/me/john_3d.jpg rename src/{features/now => base}/card-animation.ts (100%) diff --git a/app/layout.tsx b/app/layout.tsx index eb01bfd..e2f6b03 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,4 +1,4 @@ -import { Geist, Geist_Mono } from 'next/font/google'; +import { Geist_Mono, IBM_Plex_Sans } from 'next/font/google'; import '../styles/globals.css'; import { config } from '@fortawesome/fontawesome-svg-core'; @@ -13,9 +13,10 @@ import { SITE_NAME, SITE_URL } from '@/lib/site'; // Prevent FontAwesome from adding its CSS dynamically on the server (causes SSR errors) config.autoAddCss = false; -const geistSans = Geist({ +const sans = IBM_Plex_Sans({ subsets: ['latin'], - variable: '--font-geist-sans', + weight: ['400', '500', '600', '700'], + variable: '--font-sans', display: 'swap', }); @@ -91,7 +92,7 @@ export default function RootLayout({ return ( diff --git a/app/me/page.tsx b/app/me/page.tsx index 2abd1e6..8d46e68 100644 --- a/app/me/page.tsx +++ b/app/me/page.tsx @@ -3,18 +3,30 @@ import Link from 'next/link'; import type { CSSProperties } from 'react'; import { PageWrapper } from '../components/PageWrapper'; +import type { IconDefinition } from '@fortawesome/fontawesome-svg-core'; import { + faBriefcase, faCakeCandles, + faCheck, faCode, + faFaceFrown, + faFaceSmile, faGraduationCap, faHandshake, faHeadphones, faIdCard, + faPenNib, faUser, + faXmark, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import type { Metadata } from 'next'; +import { + CARD_HOVER_LARGE, + CARD_INNER_RING, + hoverRotation, +} from '@/base/card-animation'; import { Card } from '@/base/components/Card'; import { PageTitle } from '@/base/components/PageTitle'; import { SectionHeader } from '@/base/components/SectionHeader'; @@ -86,6 +98,78 @@ const tldrCards = [ const musicTagColors = ['#ec4899', '#f0a66d', '#5bd3c7', '#8b5cf6', '#facc15']; +// Seed fixa: sempre a mesma foto, mesma rotação de hover em toda renderização. +const PHOTO_HOVER_SEED = 2; + +const likes = [ + 'Pizza', + 'Música eletrônica', + 'Instrumentos musicais', + 'Piano e teclado', + 'Tecnologia', + 'Assuntos sobrenaturais', + 'Conversas aleatórias que duram horas', +]; + +const dislikes = ['Incoerência', 'Frio', 'Falta de propósito']; + +const PreferenceCard = ({ + id, + title, + icon, + marker, + tone, + items, +}: { + id: string; + title: string; + icon: IconDefinition; + marker: IconDefinition; + tone: 'positive' | 'negative'; + items: string[]; +}) => ( +
+ + +
+); + +const Prose = ({ children }: { children: React.ReactNode }) => ( +
+ {children} +
+); + +const InlineLink = ({ href, children }: { href: string; children: string }) => ( + + {children} + +); + export default async function Page() { const [languages, musicTags] = await Promise.all([ getGithubLanguages().catch(() => []), @@ -130,7 +214,7 @@ export default async function Page() { title="Em poucas palavras" /> -