Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/app/articles/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ import { SearchBar } from '../components/SearchBar';
import { useState, useMemo } from 'react';

const articles = [
{
title: "Arquitetura de Código Não Se Copia, Se Pensa",
description: "Reflexões sobre por que decisões arquiteturais devem nascer do contexto do produto em vez de copiar soluções prontas.",
imageUrl: "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*9ea92skPoohu6JQm8PU58Q.png",
link: "https://medium.com/@guilherme.zarelli/arquitetura-de-c%C3%B3digo-n%C3%A3o-se-copia-se-pensa-6bedcc272134"
},
{
title: "Replica Sets, Sharding e Escalabilidade Horizontal em Bancos NoSQL",
description: "Neste artigo, vamos explorar como bancos NoSQL aplicam conceitos como Replica Sets e Sharding para enfrentar esses desafios de escala e resiliência.",
Expand Down Expand Up @@ -151,4 +157,4 @@ export default function Articles() {
</div>
</main>
);
}
}
84 changes: 31 additions & 53 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,30 +74,30 @@ export default function Home() {
<div className="min-h-screen bg-gray-100">
<Navbar />

{/* Hero Section - Consulting positioning */}
{/* Hero Section - knowledge sharing focus */}
<section className="bg-white py-16">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex flex-col md:flex-row md:items-center md:justify-between gap-8">
<div className="md:w-3/5">
<h1 className="text-4xl sm:text-5xl font-bold text-gray-900 mb-4">
Desenvolvimento de Software e Consultoria Técnica
Artigos e conhecimento aplicado em engenharia de software
</h1>
<p className="text-xl text-gray-600 mb-8">
Acelere seu produto com arquitetura sólida, código de qualidade e entregas previsíveis. Atuo em projetos ponta a ponta ou como consultor especializado.
Compartilho experiências práticas sobre arquitetura, plataformas cloud e liderança técnica para ajudar times e devs a evoluírem com conteúdos acionáveis.
</p>
<div className="flex flex-wrap gap-4 mb-8">
<a
href={mailtoHref}
<Link
href="/articles"
className="inline-flex items-center px-6 py-3 border border-transparent text-base font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors"
>
Solicitar proposta
Explorar artigos
<FaArrowRight className="ml-2" />
</a>
</Link>
<Link
href="#servicos"
href="/blog"
className="inline-flex items-center px-6 py-3 border border-gray-300 text-base font-medium rounded-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors"
>
Ver serviços
Ver blog & gists
</Link>
</div>
<div className="flex gap-4">
Expand Down Expand Up @@ -129,50 +129,6 @@ export default function Home() {
</div>
</div>
</section>

{/* Services Section */}
<section id="servicos" className="py-16">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center mb-8">
<h2 className="text-3xl font-bold text-gray-900">Serviços</h2>
<a href={mailtoHref} className="text-blue-600 hover:text-blue-800 flex items-center transition-colors">
Solicitar proposta
<FaArrowRight className="ml-2" />
</a>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{services.map((s, i) => (
<div key={i} className="bg-white p-6 rounded-xl shadow-md hover:shadow-lg transition-shadow duration-300 h-full">
<div className="mb-4">{s.icon}</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">{s.title}</h3>
<p className="text-gray-600">{s.desc}</p>
</div>
))}
</div>
</div>
</section>

{/* Process Section */}
<section className="py-16 bg-gray-50">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 className="text-3xl font-bold text-gray-900 mb-8">Como trabalho</h2>
<div className="grid grid-cols-1 md:grid-cols-4 gap-6">
{[
{ n: '1', t: 'Descoberta', d: 'Entendemos objetivos, contexto e restrições.' },
{ n: '2', t: 'Proposta', d: 'Escopo claro, prazos e investimento.' },
{ n: '3', t: 'Execução', d: 'Sprints curtas, visibilidade e qualidade.' },
{ n: '4', t: 'Entrega', d: 'Handover, documentação e próximo ciclo.' }
].map((step) => (
<div key={step.n} className="bg-white p-6 rounded-xl shadow-md">
<div className="text-blue-600 text-sm font-bold mb-2">Etapa {step.n}</div>
<h3 className="text-lg font-semibold text-gray-900">{step.t}</h3>
<p className="text-gray-600 mt-1">{step.d}</p>
</div>
))}
</div>
</div>
</section>

{/* Featured Articles Section (social proof) */}
<section className="py-16">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
Expand Down Expand Up @@ -229,6 +185,28 @@ export default function Home() {
</div>
</section>

{/* Services Section */}
<section id="servicos" className="py-16">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center mb-8">
<h2 className="text-3xl font-bold text-gray-900">Serviços</h2>
<a href={mailtoHref} className="text-blue-600 hover:text-blue-800 flex items-center transition-colors">
Solicitar proposta
<FaArrowRight className="ml-2" />
</a>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{services.map((s, i) => (
<div key={i} className="bg-white p-6 rounded-xl shadow-md hover:shadow-lg transition-shadow duration-300 h-full">
<div className="mb-4">{s.icon}</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">{s.title}</h3>
<p className="text-gray-600">{s.desc}</p>
</div>
))}
</div>
</div>
</section>

{/* Projects Section (portfolio) */}
<section className="py-16">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
Expand Down
21 changes: 21 additions & 0 deletions src/data/content.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
// Featured articles data
export const featuredArticles = [
{
id: 4,
title: "Arquitetura de Código Não Se Copia, Se Pensa",
description: "Por que decisões arquiteturais precisam nascer do contexto do produto em vez de replicar soluções prontas.",
imageUrl: "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*9ea92skPoohu6JQm8PU58Q.png",
link: "https://medium.com/@guilherme.zarelli/arquitetura-de-c%C3%B3digo-n%C3%A3o-se-copia-se-pensa-6bedcc272134"
},
{
id: 1,
title: "Otimização da JVM para Contêineres: Memória e Garbage Collection",
Expand All @@ -20,6 +27,20 @@ export const featuredArticles = [
description: "Uma abordagem prática sobre como modelar casos de uso e interações em seu domínio de negócio.",
imageUrl: "https://miro.medium.com/v2/resize:fit:1100/format:webp/1*_dwylzkbc7FphRGIFOfufQ.png",
link: "https://medium.com/inside-picpay/o-use-case-modelando-as-intera%C3%A7%C3%B5es-do-seu-dom%C3%ADnio-c6c568270d0c"
},
{
id: 5,
title: "Java Garbage Collector — Por que precisamos conhecê-lo?",
description: "Um mergulho profundo no funcionamento do Garbage Collector do Java e sua importância.",
imageUrl: "https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ANetWgPAOkjvBM05WxT4nw.png",
link: "https://medium.com/luizalabs/java-garbage-collector-porque-precisamos-conhec%C3%AA-lo-9d26ebb0a6d8"
},
{
id: 6,
title: "Observabilidade: Monitorando sua aplicação a partir de métricas",
description: "Como implementar observabilidade efetiva em aplicações usando métricas e monitoramento contínuo.",
imageUrl: "https://miro.medium.com/v2/resize:fit:750/format:webp/1*mYwgRrLGeUDaNEJ1yQbdvg.png",
link: "https://medium.com/luizalabs/observabilidade-monitorando-sua-aplicacao-a-partir-de-metricas-bd1b2d0ba1f8"
}
] as const;

Expand Down
Loading