deploy
This commit is contained in:
12
frontend/app/(en)/layout.jsx
Normal file
12
frontend/app/(en)/layout.jsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import "../globals.css";
|
||||
import { baseMetadata } from "../seo.js";
|
||||
|
||||
export const metadata = baseMetadata;
|
||||
|
||||
export default function EnglishLayout({ children }) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
35
frontend/app/(en)/page.jsx
Normal file
35
frontend/app/(en)/page.jsx
Normal file
@@ -0,0 +1,35 @@
|
||||
import { profileContent } from "../content.js";
|
||||
import { ProfilePage } from "../ProfilePage.jsx";
|
||||
|
||||
export const metadata = {
|
||||
title: "Robert Seares | Software Engineer, Founder, Product Builder",
|
||||
description:
|
||||
"Robert Seares builds companies, software, and systems across AI, biotech, cloud infrastructure, developer platforms, product engineering, and automation.",
|
||||
alternates: {
|
||||
canonical: "/",
|
||||
languages: {
|
||||
en: "/",
|
||||
"pt-BR": "/pt/",
|
||||
"x-default": "/",
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
locale: "en_US",
|
||||
url: "/",
|
||||
title: "Robert Seares | Software Engineer, Founder, Product Builder",
|
||||
description:
|
||||
"I build companies, software, and systems across AI, biotech, infrastructure, developer platforms, and automation.",
|
||||
images: [
|
||||
{
|
||||
url: "/og-image.png",
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: "Robert Seares - I build companies, software, and systems.",
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
return <ProfilePage content={profileContent.en} />;
|
||||
}
|
||||
221
frontend/app/ProfilePage.jsx
Normal file
221
frontend/app/ProfilePage.jsx
Normal file
@@ -0,0 +1,221 @@
|
||||
export function ProfilePage({ content }) {
|
||||
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://robertseares.com";
|
||||
const pageUrl = new URL(content.locale === "pt" ? "/pt/" : "/", siteUrl).toString();
|
||||
const jsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@graph": [
|
||||
{
|
||||
"@type": "Person",
|
||||
"@id": `${siteUrl}/#person`,
|
||||
name: "Robert Seares",
|
||||
url: siteUrl,
|
||||
jobTitle: [
|
||||
content.locale === "pt" ? "Engenheiro de software" : "Software Engineer",
|
||||
content.locale === "pt" ? "Lider de engenharia" : "Engineering Leader",
|
||||
"Founder",
|
||||
content.locale === "pt" ? "Builder de produto" : "Product Builder",
|
||||
],
|
||||
homeLocation: {
|
||||
"@type": "Place",
|
||||
name: "Sao Paulo, Brazil",
|
||||
},
|
||||
worksFor: {
|
||||
"@type": "Organization",
|
||||
name: "Ark Biotech",
|
||||
},
|
||||
knowsAbout: [
|
||||
"Artificial Intelligence",
|
||||
"Biotechnology",
|
||||
"Cloud Infrastructure",
|
||||
"Distributed Systems",
|
||||
"Developer Platforms",
|
||||
"Product Engineering",
|
||||
"Automation",
|
||||
"Python",
|
||||
"TypeScript",
|
||||
"Kubernetes",
|
||||
"FastAPI",
|
||||
"React",
|
||||
"PostgreSQL",
|
||||
],
|
||||
knowsLanguage: ["English", "Portuguese"],
|
||||
description: content.hero.intro,
|
||||
},
|
||||
{
|
||||
"@type": "WebSite",
|
||||
"@id": `${siteUrl}/#website`,
|
||||
name: "Robert Seares",
|
||||
url: siteUrl,
|
||||
inLanguage: ["en", "pt-BR"],
|
||||
publisher: {
|
||||
"@id": `${siteUrl}/#person`,
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "ProfilePage",
|
||||
"@id": `${pageUrl}#webpage`,
|
||||
url: pageUrl,
|
||||
name: content.hero.title,
|
||||
headline: content.hero.lede,
|
||||
description: content.hero.intro,
|
||||
inLanguage: content.htmlLang,
|
||||
isPartOf: {
|
||||
"@id": `${siteUrl}/#website`,
|
||||
},
|
||||
about: {
|
||||
"@id": `${siteUrl}/#person`,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return (
|
||||
<main lang={content.htmlLang}>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
<nav className="topbar" aria-label={content.navAria}>
|
||||
<a className="brand" href="#top">RS</a>
|
||||
<div className="nav-links">
|
||||
<a href="#work">{content.nav.work}</a>
|
||||
<a href="#philosophy">{content.nav.philosophy}</a>
|
||||
<a href="#interests">{content.nav.interests}</a>
|
||||
<a href="#connect">{content.nav.connect}</a>
|
||||
</div>
|
||||
<div className="language-switch" aria-label="Language">
|
||||
<span>{content.currentLabel}</span>
|
||||
<a href={content.alternateHref}>{content.alternateLabel}</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section
|
||||
className="hero"
|
||||
id="top"
|
||||
style={{ "--hero-image": `url("${content.images.hero}")` }}
|
||||
>
|
||||
<div className="hero-panel">
|
||||
<p className="eyebrow">{content.hero.eyebrow}</p>
|
||||
<h1>{content.hero.title}</h1>
|
||||
<p className="lede">{content.hero.lede}</p>
|
||||
<p className="intro">{content.hero.intro}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="stats-strip" aria-label={content.statsAria}>
|
||||
{content.stats.map(([value, label]) => (
|
||||
<div key={label}>
|
||||
<strong>{value}</strong>
|
||||
<span>{label}</span>
|
||||
</div>
|
||||
))}
|
||||
</section>
|
||||
|
||||
<section className="section intro-section" id="work">
|
||||
<div className="section-kicker">
|
||||
<p className="eyebrow">{content.work.eyebrow}</p>
|
||||
<h2>{content.work.title}</h2>
|
||||
</div>
|
||||
<div className="large-copy">
|
||||
{content.work.paragraphs.map((paragraph) => (
|
||||
<p key={paragraph}>{paragraph}</p>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="timeline-section">
|
||||
<div className="timeline">
|
||||
{content.chapters.map((chapter) => (
|
||||
<article key={chapter.title}>
|
||||
<span>{chapter.label}</span>
|
||||
<div>
|
||||
<h3>{chapter.title}</h3>
|
||||
<p>{chapter.body}</p>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="question-band">
|
||||
<div>
|
||||
<p className="eyebrow">{content.question.eyebrow}</p>
|
||||
<h2>{content.question.title}</h2>
|
||||
<p>{content.question.body}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section focus-section">
|
||||
<div className="section-kicker">
|
||||
<p className="eyebrow">{content.focus.eyebrow}</p>
|
||||
<h2>{content.focus.title}</h2>
|
||||
</div>
|
||||
<div>
|
||||
<p className="large-copy compact">{content.focus.body}</p>
|
||||
<div className="pill-grid">
|
||||
{content.focus.areas.map((area) => (
|
||||
<span key={area}>{area}</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="beliefs" id="philosophy">
|
||||
<article className="belief-primary">
|
||||
<p className="eyebrow">{content.philosophy.eyebrow}</p>
|
||||
<h2>{content.philosophy.title}</h2>
|
||||
<p>{content.philosophy.body}</p>
|
||||
</article>
|
||||
<article className="belief-list">
|
||||
<p className="eyebrow">{content.philosophy.valuesEyebrow}</p>
|
||||
<ul>
|
||||
{content.philosophy.values.map((value) => (
|
||||
<li key={value}>{value}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section className="section building">
|
||||
<div className="build-copy">
|
||||
<p className="eyebrow">{content.building.eyebrow}</p>
|
||||
<h2>{content.building.title}</h2>
|
||||
</div>
|
||||
<div className="large-copy">
|
||||
{content.building.paragraphs.map((paragraph) => (
|
||||
<p key={paragraph}>{paragraph}</p>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section
|
||||
className="life-band"
|
||||
style={{ "--life-image": `url("${content.images.life}")` }}
|
||||
>
|
||||
<div>
|
||||
<p className="eyebrow">{content.life.eyebrow}</p>
|
||||
<h2>{content.life.title}</h2>
|
||||
</div>
|
||||
<p>{content.life.body}</p>
|
||||
</section>
|
||||
|
||||
<section className="section interests" id="interests">
|
||||
<div className="section-kicker">
|
||||
<p className="eyebrow">{content.interests.eyebrow}</p>
|
||||
<h2>{content.interests.title}</h2>
|
||||
</div>
|
||||
<div className="interest-grid">
|
||||
{content.interests.items.map((interest) => (
|
||||
<span key={interest}>{interest}</span>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="connect" id="connect">
|
||||
<p className="eyebrow">{content.connect.eyebrow}</p>
|
||||
<h2>{content.connect.title}</h2>
|
||||
<p>{content.connect.body}</p>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
269
frontend/app/content.js
Normal file
269
frontend/app/content.js
Normal file
@@ -0,0 +1,269 @@
|
||||
const sharedImages = {
|
||||
hero:
|
||||
"https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=2400&q=85",
|
||||
life:
|
||||
"https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=2000&q=85",
|
||||
};
|
||||
|
||||
export const profileContent = {
|
||||
en: {
|
||||
locale: "en",
|
||||
htmlLang: "en",
|
||||
alternateHref: "/pt/",
|
||||
alternateLabel: "PT",
|
||||
currentLabel: "EN",
|
||||
navAria: "Primary navigation",
|
||||
nav: {
|
||||
work: "Work",
|
||||
philosophy: "Philosophy",
|
||||
interests: "Interests",
|
||||
connect: "Connect",
|
||||
},
|
||||
hero: {
|
||||
eyebrow: "Software engineer / founder / product builder",
|
||||
title: "Robert Seares",
|
||||
lede: "I build companies, software, and systems.",
|
||||
intro:
|
||||
"I am a software engineer, engineering leader, founder, and product builder currently living in Brazil with my wife and two children. Over the last decade I have worked across startups, AI, biotech, consumer products, infrastructure, and automation, always gravitating toward difficult technical problems where software can create outsized leverage.",
|
||||
},
|
||||
statsAria: "Profile highlights",
|
||||
stats: [
|
||||
["10+", "years building software"],
|
||||
["AI + Bio", "current frontier"],
|
||||
["Brazil", "home base"],
|
||||
["0 to 1", "favorite operating mode"],
|
||||
],
|
||||
work: {
|
||||
eyebrow: "What I do",
|
||||
title: "Engineering work for hard, useful problems.",
|
||||
paragraphs: [
|
||||
"Today I lead software engineering at Ark Biotech, where I help build the infrastructure, applications, simulation tooling, and AI systems powering next-generation biomanufacturing.",
|
||||
"My work spans cloud infrastructure, developer platforms, simulation systems, machine learning applications, frontend architecture, backend services, and engineering leadership.",
|
||||
],
|
||||
},
|
||||
chapters: [
|
||||
{
|
||||
label: "Now",
|
||||
title: "Ark Biotech",
|
||||
body:
|
||||
"Leading software engineering for the infrastructure, applications, simulation tooling, and AI systems behind next-generation biomanufacturing.",
|
||||
},
|
||||
{
|
||||
label: "Before",
|
||||
title: "PlanetPlay and ventures",
|
||||
body:
|
||||
"Led innovation initiatives, founded software companies, and helped startups turn rough ideas into production systems.",
|
||||
},
|
||||
{
|
||||
label: "Always",
|
||||
title: "Useful leverage",
|
||||
body:
|
||||
"Drawn to hard technical problems where a small team, the right abstractions, and relentless execution can change the shape of a business.",
|
||||
},
|
||||
],
|
||||
question: {
|
||||
eyebrow: "The question",
|
||||
title:
|
||||
"How do we make it dramatically easier for people to build useful things?",
|
||||
body:
|
||||
"That question has led me through projects ranging from AI systems and developer platforms to restaurant software, biotechnology infrastructure, and autonomous agents.",
|
||||
},
|
||||
focus: {
|
||||
eyebrow: "Operating range",
|
||||
title: "From proof of concept to production business.",
|
||||
body:
|
||||
"I enjoy building systems that scale from a single user to thousands. My preferred stack is Python, TypeScript, Kubernetes, FastAPI, React, PostgreSQL, cloud-native infrastructure, and AI-powered workflows.",
|
||||
areas: [
|
||||
"Artificial Intelligence",
|
||||
"Cloud Infrastructure",
|
||||
"Distributed Systems",
|
||||
"Developer Platforms",
|
||||
"Product Engineering",
|
||||
"Startup Operations",
|
||||
"Automation",
|
||||
"Technical Leadership",
|
||||
],
|
||||
},
|
||||
philosophy: {
|
||||
eyebrow: "Philosophy",
|
||||
title: "Software should create leverage.",
|
||||
body:
|
||||
"The best technology removes complexity rather than adding it. Great systems are understandable, maintainable, and useful. Great companies solve real problems. Great engineers ship.",
|
||||
valuesEyebrow: "Values",
|
||||
values: [
|
||||
"Ownership over bureaucracy",
|
||||
"Speed over perfection",
|
||||
"Simplicity over complexity",
|
||||
"Learning over ego",
|
||||
"Execution over presentations",
|
||||
],
|
||||
},
|
||||
building: {
|
||||
eyebrow: "Building",
|
||||
title:
|
||||
"A laptop, an idea, and enough persistence can change the trajectory of a business.",
|
||||
paragraphs: [
|
||||
"Outside of my day job, I spend most of my time building. I have launched products in AI, SaaS, developer tooling, restaurant technology, and automation. Some succeeded, some failed, and all of them taught me something valuable.",
|
||||
"What keeps me motivated is the same thing that motivated me when I started writing software: the ability to create something from nothing.",
|
||||
],
|
||||
},
|
||||
life: {
|
||||
eyebrow: "Life",
|
||||
title: "Countryside of São Paulo, Brazil.",
|
||||
body:
|
||||
"When I am not building software, I am spending time with my family, exploring business ideas, studying technology, lifting weights, reading about startups, or working on the next project that probably should not exist but sounds too interesting not to build.",
|
||||
},
|
||||
interests: {
|
||||
eyebrow: "Current interests",
|
||||
title: "Problems worth paying attention to.",
|
||||
items: [
|
||||
"AI agents and autonomous systems",
|
||||
"Cloud-native platforms",
|
||||
"Scientific computing",
|
||||
"Biotechnology",
|
||||
"Startup strategy",
|
||||
"Developer experience",
|
||||
"Infrastructure automation",
|
||||
"Human-computer collaboration",
|
||||
],
|
||||
},
|
||||
connect: {
|
||||
eyebrow: "Connect",
|
||||
title:
|
||||
"If you are building something ambitious, I would love to hear about it.",
|
||||
body:
|
||||
"I am always interested in talking with builders, founders, engineers, and people working on difficult problems.",
|
||||
},
|
||||
images: sharedImages,
|
||||
},
|
||||
pt: {
|
||||
locale: "pt",
|
||||
htmlLang: "pt-BR",
|
||||
alternateHref: "/",
|
||||
alternateLabel: "EN",
|
||||
currentLabel: "PT",
|
||||
navAria: "Navegação principal",
|
||||
nav: {
|
||||
work: "Trabalho",
|
||||
philosophy: "Filosofia",
|
||||
interests: "Interesses",
|
||||
connect: "Contato",
|
||||
},
|
||||
hero: {
|
||||
eyebrow: "Engenheiro de software / fundador / builder de produto",
|
||||
title: "Robert Seares",
|
||||
lede: "Eu construo empresas, software e sistemas.",
|
||||
intro:
|
||||
"Sou engenheiro de software, líder de engenharia, fundador e builder de produto, atualmente morando no Brasil com minha esposa e meus dois filhos. Na última década trabalhei com startups, IA, biotecnologia, produtos de consumo, infraestrutura e automação, sempre gravitando em direção a problemas técnicos difíceis onde software pode criar alavancagem fora do comum.",
|
||||
},
|
||||
statsAria: "Destaques do perfil",
|
||||
stats: [
|
||||
["10+", "anos construindo software"],
|
||||
["IA + Bio", "fronteira atual"],
|
||||
["Brasil", "base"],
|
||||
["0 a 1", "modo favorito de operação"],
|
||||
],
|
||||
work: {
|
||||
eyebrow: "O que faço",
|
||||
title: "Engenharia para problemas difíceis e úteis.",
|
||||
paragraphs: [
|
||||
"Hoje lidero engenharia de software na Ark Biotech, onde ajudo a construir a infraestrutura, as aplicações, as ferramentas de simulação e os sistemas de IA que impulsionam a próxima geração da biomanufatura.",
|
||||
"Meu trabalho passa por infraestrutura em nuvem, plataformas para desenvolvedores, sistemas de simulação, aplicações de machine learning, arquitetura frontend, serviços backend e liderança de engenharia.",
|
||||
],
|
||||
},
|
||||
chapters: [
|
||||
{
|
||||
label: "Agora",
|
||||
title: "Ark Biotech",
|
||||
body:
|
||||
"Liderando engenharia de software para a infraestrutura, as aplicações, as ferramentas de simulação e os sistemas de IA por trás da próxima geração da biomanufatura.",
|
||||
},
|
||||
{
|
||||
label: "Antes",
|
||||
title: "PlanetPlay e ventures",
|
||||
body:
|
||||
"Liderei iniciativas de inovação, fundei empresas de software e ajudei startups a transformar ideias iniciais em sistemas de produção.",
|
||||
},
|
||||
{
|
||||
label: "Sempre",
|
||||
title: "Alavancagem útil",
|
||||
body:
|
||||
"Atraído por problemas técnicos difíceis onde um time pequeno, as abstrações certas e execução constante podem mudar a forma de um negócio.",
|
||||
},
|
||||
],
|
||||
question: {
|
||||
eyebrow: "A pergunta",
|
||||
title:
|
||||
"Como tornamos dramaticamente mais fácil para as pessoas construírem coisas úteis?",
|
||||
body:
|
||||
"Essa pergunta me levou por projetos que vão de sistemas de IA e plataformas para desenvolvedores a software para restaurantes, infraestrutura de biotecnologia e agentes autônomos.",
|
||||
},
|
||||
focus: {
|
||||
eyebrow: "Alcance operacional",
|
||||
title: "Do proof of concept ao negócio em produção.",
|
||||
body:
|
||||
"Gosto de construir sistemas que escalam de um único usuário para milhares. Minha stack preferida é Python, TypeScript, Kubernetes, FastAPI, React, PostgreSQL, infraestrutura cloud-native e fluxos de trabalho potencializados por IA.",
|
||||
areas: [
|
||||
"Inteligência Artificial",
|
||||
"Infraestrutura em Nuvem",
|
||||
"Sistemas Distribuídos",
|
||||
"Plataformas para Desenvolvedores",
|
||||
"Engenharia de Produto",
|
||||
"Operações de Startup",
|
||||
"Automação",
|
||||
"Liderança Técnica",
|
||||
],
|
||||
},
|
||||
philosophy: {
|
||||
eyebrow: "Filosofia",
|
||||
title: "Software deve criar alavancagem.",
|
||||
body:
|
||||
"A melhor tecnologia remove complexidade em vez de adicionar. Grandes sistemas são compreensíveis, mantíveis e úteis. Grandes empresas resolvem problemas reais. Grandes engenheiros entregam.",
|
||||
valuesEyebrow: "Valores",
|
||||
values: [
|
||||
"Propriedade acima de burocracia",
|
||||
"Velocidade acima de perfeição",
|
||||
"Simplicidade acima de complexidade",
|
||||
"Aprendizado acima de ego",
|
||||
"Execução acima de apresentações",
|
||||
],
|
||||
},
|
||||
building: {
|
||||
eyebrow: "Construindo",
|
||||
title:
|
||||
"Um laptop, uma ideia e persistência suficiente podem mudar a trajetória de um negócio.",
|
||||
paragraphs: [
|
||||
"Fora do meu trabalho principal, passo a maior parte do tempo construindo. Já lancei produtos em IA, SaaS, ferramentas para desenvolvedores, tecnologia para restaurantes e automação. Alguns deram certo, outros falharam, e todos me ensinaram algo valioso.",
|
||||
"O que continua me motivando é a mesma coisa que me motivava quando comecei a programar: a capacidade de criar algo do nada.",
|
||||
],
|
||||
},
|
||||
life: {
|
||||
eyebrow: "Vida",
|
||||
title: "Interior de São Paulo, Brasil.",
|
||||
body:
|
||||
"Quando não estou construindo software, estou passando tempo com minha família, explorando ideias de negócio, estudando tecnologia, treinando, lendo sobre startups ou trabalhando no próximo projeto que provavelmente não deveria existir, mas parece interessante demais para não construir.",
|
||||
},
|
||||
interests: {
|
||||
eyebrow: "Interesses atuais",
|
||||
title: "Problemas que valem atenção.",
|
||||
items: [
|
||||
"Agentes de IA e sistemas autônomos",
|
||||
"Plataformas cloud-native",
|
||||
"Computação científica",
|
||||
"Biotecnologia",
|
||||
"Estratégia de startups",
|
||||
"Experiência de desenvolvedor",
|
||||
"Automação de infraestrutura",
|
||||
"Colaboração humano-computador",
|
||||
],
|
||||
},
|
||||
connect: {
|
||||
eyebrow: "Contato",
|
||||
title:
|
||||
"Se você está construindo algo ambicioso, eu adoraria saber mais.",
|
||||
body:
|
||||
"Estou sempre interessado em conversar com builders, fundadores, engenheiros e pessoas trabalhando em problemas difíceis.",
|
||||
},
|
||||
images: sharedImages,
|
||||
},
|
||||
};
|
||||
@@ -3,8 +3,8 @@
|
||||
:root {
|
||||
color-scheme: light;
|
||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
background: #f4f1ec;
|
||||
color: #191816;
|
||||
background: #f7f3ea;
|
||||
color: #171512;
|
||||
}
|
||||
|
||||
* {
|
||||
@@ -19,16 +19,26 @@ body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
background:
|
||||
linear-gradient(90deg, rgba(25, 24, 22, 0.05) 1px, transparent 1px),
|
||||
linear-gradient(180deg, rgba(25, 24, 22, 0.05) 1px, transparent 1px),
|
||||
#f4f1ec;
|
||||
background-size: 44px 44px;
|
||||
linear-gradient(90deg, rgba(23, 21, 18, 0.055) 1px, transparent 1px),
|
||||
linear-gradient(180deg, rgba(23, 21, 18, 0.045) 1px, transparent 1px),
|
||||
#f7f3ea;
|
||||
background-size: 56px 56px;
|
||||
}
|
||||
|
||||
body::selection {
|
||||
background: #d7f4df;
|
||||
color: #111;
|
||||
}
|
||||
|
||||
main {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
@@ -37,117 +47,287 @@ p {
|
||||
}
|
||||
|
||||
p {
|
||||
color: #4d4840;
|
||||
color: #514b41;
|
||||
font-size: 18px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
position: fixed;
|
||||
top: 18px;
|
||||
left: 50%;
|
||||
z-index: 20;
|
||||
width: min(1120px, calc(100% - 40px));
|
||||
height: 54px;
|
||||
transform: translateX(-50%);
|
||||
border: 1px solid rgba(255, 255, 255, 0.36);
|
||||
border-radius: 8px;
|
||||
background: rgba(21, 24, 23, 0.76);
|
||||
backdrop-filter: blur(16px);
|
||||
color: #fffaf2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
padding: 0 10px 0 14px;
|
||||
box-shadow: 0 18px 60px rgba(0, 0, 0, 0.18);
|
||||
}
|
||||
|
||||
.brand {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 6px;
|
||||
background: #dfffe7;
|
||||
color: #111;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
font-size: 13px;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
.nav-links,
|
||||
.language-switch {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.nav-links a,
|
||||
.language-switch a,
|
||||
.language-switch span {
|
||||
border-radius: 6px;
|
||||
padding: 9px 11px;
|
||||
color: rgba(255, 250, 242, 0.82);
|
||||
font-size: 13px;
|
||||
font-weight: 750;
|
||||
}
|
||||
|
||||
.nav-links a:hover,
|
||||
.language-switch a:hover {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.language-switch {
|
||||
border-left: 1px solid rgba(255, 255, 255, 0.16);
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.language-switch span {
|
||||
background: rgba(223, 255, 231, 0.16);
|
||||
color: #dfffe7;
|
||||
}
|
||||
|
||||
.hero {
|
||||
min-height: 92vh;
|
||||
min-height: 100svh;
|
||||
padding: 108px 28px 46px;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 56px 28px;
|
||||
background:
|
||||
linear-gradient(135deg, rgba(22, 82, 73, 0.14), transparent 48%),
|
||||
linear-gradient(180deg, rgba(244, 241, 236, 0.52), #f4f1ec 84%),
|
||||
url("https://images.unsplash.com/photo-1497366754035-f200968a6e72?auto=format&fit=crop&w=2200&q=85");
|
||||
linear-gradient(90deg, rgba(16, 16, 14, 0.82), rgba(16, 16, 14, 0.38) 46%, rgba(16, 16, 14, 0.12)),
|
||||
linear-gradient(180deg, rgba(16, 16, 14, 0.14), rgba(247, 243, 234, 0.12) 72%, #f7f3ea 100%),
|
||||
var(--hero-image);
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.hero-inner {
|
||||
.hero-panel {
|
||||
width: min(1120px, 100%);
|
||||
margin: 0 auto;
|
||||
padding-top: 18vh;
|
||||
padding-bottom: clamp(28px, 7vh, 86px);
|
||||
}
|
||||
|
||||
.eyebrow {
|
||||
margin-bottom: 14px;
|
||||
color: #0f6c5b;
|
||||
color: #167861;
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
font-weight: 900;
|
||||
letter-spacing: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hero .eyebrow {
|
||||
color: #a8ffd4;
|
||||
}
|
||||
|
||||
h1 {
|
||||
max-width: 980px;
|
||||
max-width: 1040px;
|
||||
margin-bottom: 24px;
|
||||
color: #171512;
|
||||
font-size: clamp(64px, 11vw, 148px);
|
||||
line-height: 0.88;
|
||||
color: #fffaf2;
|
||||
font-size: clamp(72px, 12vw, 172px);
|
||||
font-weight: 900;
|
||||
line-height: 0.82;
|
||||
letter-spacing: 0;
|
||||
overflow-wrap: anywhere;
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 18px;
|
||||
margin-bottom: 20px;
|
||||
color: #1b1915;
|
||||
font-size: clamp(38px, 5vw, 72px);
|
||||
font-weight: 880;
|
||||
line-height: 0.96;
|
||||
letter-spacing: 0;
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-bottom: 8px;
|
||||
color: #1c1a17;
|
||||
font-size: clamp(34px, 5vw, 68px);
|
||||
line-height: 0.98;
|
||||
font-size: 26px;
|
||||
line-height: 1.05;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.lede {
|
||||
max-width: 760px;
|
||||
margin-bottom: 18px;
|
||||
color: #1f352f;
|
||||
font-size: clamp(28px, 4vw, 48px);
|
||||
line-height: 1.08;
|
||||
font-weight: 750;
|
||||
color: #e9fff2;
|
||||
font-size: clamp(28px, 4vw, 52px);
|
||||
line-height: 1.06;
|
||||
font-weight: 850;
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
.intro {
|
||||
max-width: 820px;
|
||||
margin-bottom: 0;
|
||||
color: #27231e;
|
||||
font-size: 21px;
|
||||
color: rgba(255, 250, 242, 0.84);
|
||||
font-size: 20px;
|
||||
line-height: 1.65;
|
||||
}
|
||||
|
||||
.section {
|
||||
padding: 96px 28px;
|
||||
.stats-strip {
|
||||
width: min(1120px, calc(100% - 56px));
|
||||
margin: -42px auto 0;
|
||||
position: relative;
|
||||
z-index: 4;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
border: 1px solid rgba(23, 21, 18, 0.12);
|
||||
border-radius: 8px;
|
||||
background: rgba(255, 253, 248, 0.92);
|
||||
backdrop-filter: blur(14px);
|
||||
box-shadow: 0 24px 80px rgba(30, 25, 15, 0.16);
|
||||
}
|
||||
|
||||
.content-grid {
|
||||
width: min(1120px, 100%);
|
||||
margin: 0 auto;
|
||||
.stats-strip div {
|
||||
min-height: 132px;
|
||||
padding: 24px;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(240px, 0.8fr) minmax(0, 1.2fr);
|
||||
gap: 56px;
|
||||
align-content: end;
|
||||
border-right: 1px solid rgba(23, 21, 18, 0.1);
|
||||
}
|
||||
|
||||
.stats-strip div:last-child {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.stats-strip strong {
|
||||
color: #15130f;
|
||||
font-size: clamp(28px, 4vw, 44px);
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.stats-strip span {
|
||||
margin-top: 8px;
|
||||
color: #696054;
|
||||
font-size: 14px;
|
||||
font-weight: 750;
|
||||
}
|
||||
|
||||
.section {
|
||||
width: min(1120px, calc(100% - 56px));
|
||||
margin: 0 auto;
|
||||
padding: 112px 0;
|
||||
}
|
||||
|
||||
.intro-section,
|
||||
.focus-section,
|
||||
.building,
|
||||
.interests {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(240px, 0.85fr) minmax(0, 1.15fr);
|
||||
gap: 70px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.copy p:last-child {
|
||||
.section-kicker {
|
||||
position: sticky;
|
||||
top: 96px;
|
||||
}
|
||||
|
||||
.large-copy p,
|
||||
.large-copy {
|
||||
color: #3d382f;
|
||||
font-size: clamp(21px, 2vw, 28px);
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.large-copy p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.lead-copy {
|
||||
margin-bottom: 28px;
|
||||
.large-copy.compact {
|
||||
margin-bottom: 34px;
|
||||
}
|
||||
|
||||
.timeline-section {
|
||||
padding: 24px 28px 112px;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
width: min(1120px, 100%);
|
||||
margin: 0 auto;
|
||||
border-top: 1px solid rgba(23, 21, 18, 0.16);
|
||||
}
|
||||
|
||||
.timeline article {
|
||||
display: grid;
|
||||
grid-template-columns: 150px 1fr;
|
||||
gap: 32px;
|
||||
padding: 30px 0;
|
||||
border-bottom: 1px solid rgba(23, 21, 18, 0.16);
|
||||
}
|
||||
|
||||
.timeline span {
|
||||
color: #0e755d;
|
||||
font-size: 13px;
|
||||
font-weight: 900;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.timeline p {
|
||||
max-width: 760px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.question-band {
|
||||
background: #17231f;
|
||||
color: #f9f6ef;
|
||||
padding: 120px 28px;
|
||||
background:
|
||||
linear-gradient(120deg, rgba(13, 72, 61, 0.95), rgba(22, 22, 18, 0.96)),
|
||||
#17231f;
|
||||
}
|
||||
|
||||
.question {
|
||||
.question-band > div {
|
||||
width: min(980px, 100%);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.question .eyebrow {
|
||||
color: #71d7b8;
|
||||
.question-band .eyebrow {
|
||||
color: #9dffd0;
|
||||
}
|
||||
|
||||
.question h2 {
|
||||
.question-band h2 {
|
||||
color: #fffaf2;
|
||||
font-size: clamp(42px, 6vw, 82px);
|
||||
}
|
||||
|
||||
.question p {
|
||||
.question-band p {
|
||||
max-width: 760px;
|
||||
margin-bottom: 0;
|
||||
color: #d9e2dc;
|
||||
color: #dbe8df;
|
||||
}
|
||||
|
||||
.pill-grid,
|
||||
@@ -159,124 +339,248 @@ h2 {
|
||||
|
||||
.pill-grid span,
|
||||
.interest-grid span {
|
||||
border: 1px solid rgba(25, 24, 22, 0.18);
|
||||
border: 1px solid rgba(23, 21, 18, 0.16);
|
||||
border-radius: 8px;
|
||||
background: rgba(255, 255, 255, 0.56);
|
||||
padding: 11px 13px;
|
||||
background: rgba(255, 253, 248, 0.78);
|
||||
padding: 12px 14px;
|
||||
color: #25221d;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
font-weight: 800;
|
||||
box-shadow: 0 10px 30px rgba(39, 31, 18, 0.06);
|
||||
}
|
||||
|
||||
.split-band {
|
||||
.beliefs {
|
||||
width: min(1120px, calc(100% - 56px));
|
||||
margin: 0 auto;
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
grid-template-columns: minmax(0, 1.35fr) minmax(280px, 0.65fr);
|
||||
gap: 1px;
|
||||
background: rgba(25, 24, 22, 0.18);
|
||||
background: rgba(23, 21, 18, 0.14);
|
||||
border: 1px solid rgba(23, 21, 18, 0.14);
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.split-band article {
|
||||
min-height: 520px;
|
||||
padding: 42px;
|
||||
.beliefs article {
|
||||
padding: clamp(30px, 5vw, 58px);
|
||||
background: #fffdf8;
|
||||
}
|
||||
|
||||
.split-band article:first-child {
|
||||
background: #e7eee8;
|
||||
}
|
||||
|
||||
.split-band h2 {
|
||||
font-size: clamp(32px, 4vw, 54px);
|
||||
}
|
||||
|
||||
.clean-list {
|
||||
.belief-primary {
|
||||
min-height: 560px;
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
margin: 28px 0 0;
|
||||
align-content: space-between;
|
||||
}
|
||||
|
||||
.belief-primary p:last-child {
|
||||
max-width: 720px;
|
||||
margin-bottom: 0;
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
.belief-list {
|
||||
background: #e8efe7 !important;
|
||||
}
|
||||
|
||||
.belief-list ul {
|
||||
margin: 34px 0 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.clean-list li {
|
||||
border-top: 1px solid rgba(25, 24, 22, 0.18);
|
||||
padding-top: 12px;
|
||||
color: #25221d;
|
||||
font-size: 17px;
|
||||
font-weight: 800;
|
||||
.belief-list li {
|
||||
border-top: 1px solid rgba(23, 21, 18, 0.18);
|
||||
padding: 17px 0;
|
||||
color: #1c1a17;
|
||||
font-size: 18px;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
.interests {
|
||||
width: min(1120px, 100%);
|
||||
.building {
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
.build-copy h2 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.life-band {
|
||||
width: min(1120px, calc(100% - 56px));
|
||||
margin: 0 auto;
|
||||
padding: 56px;
|
||||
border-radius: 8px;
|
||||
background:
|
||||
linear-gradient(90deg, rgba(247, 243, 234, 0.9), rgba(247, 243, 234, 0.62)),
|
||||
var(--life-image);
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(260px, 0.9fr) minmax(0, 1.1fr);
|
||||
gap: 56px;
|
||||
box-shadow: 0 24px 90px rgba(33, 29, 20, 0.14);
|
||||
}
|
||||
|
||||
.interests h2 {
|
||||
max-width: 760px;
|
||||
.life-band p:last-child {
|
||||
margin-bottom: 0;
|
||||
color: #2f2a22;
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
.interest-grid {
|
||||
align-content: start;
|
||||
}
|
||||
|
||||
.connect {
|
||||
width: min(1120px, calc(100% - 56px));
|
||||
margin: 0 auto 56px;
|
||||
margin: 0 auto 72px;
|
||||
padding: clamp(38px, 6vw, 72px);
|
||||
border-radius: 8px;
|
||||
background: #171512;
|
||||
padding: 56px;
|
||||
background:
|
||||
linear-gradient(135deg, rgba(11, 48, 42, 0.98), rgba(18, 18, 15, 0.98)),
|
||||
#171512;
|
||||
color: #fffaf2;
|
||||
}
|
||||
|
||||
.connect .eyebrow {
|
||||
color: #71d7b8;
|
||||
color: #9dffd0;
|
||||
}
|
||||
|
||||
.connect h2 {
|
||||
max-width: 920px;
|
||||
max-width: 980px;
|
||||
color: #fffaf2;
|
||||
}
|
||||
|
||||
.connect p {
|
||||
max-width: 720px;
|
||||
max-width: 760px;
|
||||
margin-bottom: 0;
|
||||
color: #d8d0c3;
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
@media (max-width: 820px) {
|
||||
@media (max-width: 900px) {
|
||||
.topbar {
|
||||
top: 10px;
|
||||
width: calc(100% - 24px);
|
||||
}
|
||||
|
||||
.nav-links a,
|
||||
.language-switch a,
|
||||
.language-switch span {
|
||||
padding: 9px 7px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.hero {
|
||||
min-height: 86vh;
|
||||
padding: 36px 20px;
|
||||
min-height: 92svh;
|
||||
padding: 94px 20px 34px;
|
||||
}
|
||||
|
||||
.hero-inner {
|
||||
padding-top: 12vh;
|
||||
h1 {
|
||||
font-size: clamp(58px, 18vw, 96px);
|
||||
}
|
||||
|
||||
.section {
|
||||
padding: 64px 20px;
|
||||
}
|
||||
|
||||
.content-grid,
|
||||
.split-band {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 28px;
|
||||
}
|
||||
|
||||
.split-band {
|
||||
width: min(100% - 40px, 1120px);
|
||||
}
|
||||
|
||||
.split-band article {
|
||||
min-height: auto;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.connect {
|
||||
width: min(100% - 40px, 1120px);
|
||||
padding: 32px 24px;
|
||||
}
|
||||
|
||||
p,
|
||||
.intro {
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.stats-strip {
|
||||
width: calc(100% - 40px);
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.stats-strip div {
|
||||
min-height: 116px;
|
||||
border-bottom: 1px solid rgba(23, 21, 18, 0.1);
|
||||
}
|
||||
|
||||
.stats-strip div:nth-child(2n) {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.stats-strip div:nth-last-child(-n + 2) {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.section,
|
||||
.beliefs,
|
||||
.life-band,
|
||||
.connect {
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
|
||||
.section {
|
||||
padding: 76px 0;
|
||||
}
|
||||
|
||||
.intro-section,
|
||||
.focus-section,
|
||||
.building,
|
||||
.interests,
|
||||
.beliefs,
|
||||
.life-band {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.section-kicker {
|
||||
position: static;
|
||||
}
|
||||
|
||||
.timeline-section,
|
||||
.question-band {
|
||||
padding-right: 20px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.timeline article {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.belief-primary {
|
||||
min-height: auto;
|
||||
gap: 34px;
|
||||
}
|
||||
|
||||
.life-band {
|
||||
padding: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 560px) {
|
||||
.nav-links a:nth-child(2),
|
||||
.nav-links a:nth-child(3) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hero {
|
||||
background-position: center right 38%;
|
||||
}
|
||||
|
||||
.stats-strip {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.stats-strip div,
|
||||
.stats-strip div:nth-child(2n),
|
||||
.stats-strip div:nth-last-child(-n + 2) {
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid rgba(23, 21, 18, 0.1);
|
||||
}
|
||||
|
||||
.stats-strip div:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.large-copy p,
|
||||
.large-copy,
|
||||
.life-band p:last-child,
|
||||
.connect p {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.question-band h2,
|
||||
h2 {
|
||||
font-size: clamp(34px, 11vw, 48px);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import "./globals.css";
|
||||
|
||||
export const metadata = {
|
||||
title: "Robert Seares",
|
||||
description: "Software engineer, engineering leader, founder, and product builder."
|
||||
};
|
||||
|
||||
export default function RootLayout({ children }) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -1,178 +0,0 @@
|
||||
const focusAreas = [
|
||||
"Artificial Intelligence",
|
||||
"Cloud Infrastructure",
|
||||
"Distributed Systems",
|
||||
"Developer Platforms",
|
||||
"Product Engineering",
|
||||
"Startup Operations",
|
||||
"Automation",
|
||||
"Technical Leadership",
|
||||
];
|
||||
|
||||
const values = [
|
||||
"Ownership over bureaucracy",
|
||||
"Speed over perfection",
|
||||
"Simplicity over complexity",
|
||||
"Learning over ego",
|
||||
"Execution over presentations",
|
||||
];
|
||||
|
||||
const interests = [
|
||||
"AI agents and autonomous systems",
|
||||
"Cloud-native platforms",
|
||||
"Scientific computing",
|
||||
"Biotechnology",
|
||||
"Startup strategy",
|
||||
"Developer experience",
|
||||
"Infrastructure automation",
|
||||
"Human-computer collaboration",
|
||||
];
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main>
|
||||
<section className="hero">
|
||||
<div className="hero-inner">
|
||||
<p className="eyebrow">Software engineer, founder, product builder</p>
|
||||
<h1>Robert Seares</h1>
|
||||
<p className="lede">I build companies, software, and systems.</p>
|
||||
<p className="intro">
|
||||
I am a software engineer, engineering leader, founder, and product
|
||||
builder currently living in Brazil with my wife and two children.
|
||||
Over the last decade I have worked across startups, AI, biotech,
|
||||
consumer products, infrastructure, and automation, always gravitating
|
||||
toward difficult technical problems where software can create
|
||||
outsized leverage.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section narrative">
|
||||
<div className="content-grid">
|
||||
<div>
|
||||
<p className="eyebrow">Today</p>
|
||||
<h2>Engineering at Ark Biotech</h2>
|
||||
</div>
|
||||
<div className="copy">
|
||||
<p>
|
||||
Today I lead software engineering at Ark Biotech, where I help
|
||||
build the infrastructure, applications, simulation tooling, and AI
|
||||
systems powering next-generation biomanufacturing.
|
||||
</p>
|
||||
<p>
|
||||
My work spans cloud infrastructure, developer platforms,
|
||||
simulation systems, machine learning applications, frontend
|
||||
architecture, backend services, and engineering leadership.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section question-band">
|
||||
<div className="question">
|
||||
<p className="eyebrow">The question</p>
|
||||
<h2>How do we make it dramatically easier for people to build useful things?</h2>
|
||||
<p>
|
||||
That question has led me through projects ranging from AI systems
|
||||
and developer platforms to restaurant software, biotechnology
|
||||
infrastructure, and autonomous agents.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section">
|
||||
<div className="content-grid">
|
||||
<div>
|
||||
<p className="eyebrow">What I do</p>
|
||||
<h2>Systems that scale from idea to business</h2>
|
||||
</div>
|
||||
<div>
|
||||
<p className="copy lead-copy">
|
||||
I enjoy building systems that can scale from a single user to
|
||||
thousands, and from a proof of concept to a business. My preferred
|
||||
stack is Python, TypeScript, Kubernetes, FastAPI, React,
|
||||
PostgreSQL, cloud-native infrastructure, and AI-powered workflows.
|
||||
</p>
|
||||
<div className="pill-grid">
|
||||
{focusAreas.map((area) => (
|
||||
<span key={area}>{area}</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section split-band">
|
||||
<article>
|
||||
<p className="eyebrow">Philosophy</p>
|
||||
<h2>Software should create leverage.</h2>
|
||||
<p>
|
||||
The best technology removes complexity rather than adding it. Great
|
||||
systems are understandable, maintainable, and useful. Great
|
||||
companies solve real problems. Great engineers ship.
|
||||
</p>
|
||||
<ul className="clean-list">
|
||||
{values.map((value) => (
|
||||
<li key={value}>{value}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<p className="eyebrow">Building</p>
|
||||
<h2>A laptop, an idea, and enough persistence.</h2>
|
||||
<p>
|
||||
Outside of my day job, I spend most of my time building. I have
|
||||
launched products in AI, SaaS, developer tooling, restaurant
|
||||
technology, and automation. Some succeeded, some failed, and all of
|
||||
them taught me something valuable.
|
||||
</p>
|
||||
<p>
|
||||
What keeps me motivated is the same thing that motivated me when I
|
||||
started writing software: the ability to create something from
|
||||
nothing.
|
||||
</p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section className="section">
|
||||
<div className="content-grid">
|
||||
<div>
|
||||
<p className="eyebrow">Life</p>
|
||||
<h2>Countryside of Sao Paulo, Brazil</h2>
|
||||
</div>
|
||||
<div className="copy">
|
||||
<p>
|
||||
When I am not building software, I am spending time with my
|
||||
family, exploring business ideas, studying technology, lifting
|
||||
weights, reading about startups, or working on the next project
|
||||
that probably should not exist but sounds too interesting not to
|
||||
build.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section interests">
|
||||
<div>
|
||||
<p className="eyebrow">Current interests</p>
|
||||
<h2>Problems worth paying attention to</h2>
|
||||
</div>
|
||||
<div className="interest-grid">
|
||||
{interests.map((interest) => (
|
||||
<span key={interest}>{interest}</span>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="section connect">
|
||||
<p className="eyebrow">Connect</p>
|
||||
<h2>If you are building something ambitious, I would love to hear about it.</h2>
|
||||
<p>
|
||||
I am always interested in talking with builders, founders, engineers,
|
||||
and people working on difficult problems.
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
22
frontend/app/pt/layout.jsx
Normal file
22
frontend/app/pt/layout.jsx
Normal file
@@ -0,0 +1,22 @@
|
||||
import "../globals.css";
|
||||
import { baseMetadata } from "../seo.js";
|
||||
|
||||
export const metadata = {
|
||||
...baseMetadata,
|
||||
alternates: {
|
||||
canonical: "/pt/",
|
||||
languages: {
|
||||
en: "/",
|
||||
"pt-BR": "/pt/",
|
||||
"x-default": "/",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default function PortugueseLayout({ children }) {
|
||||
return (
|
||||
<html lang="pt-BR">
|
||||
<body>{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
42
frontend/app/pt/page.jsx
Normal file
42
frontend/app/pt/page.jsx
Normal file
@@ -0,0 +1,42 @@
|
||||
import { profileContent } from "../content.js";
|
||||
import { ProfilePage } from "../ProfilePage.jsx";
|
||||
|
||||
export const metadata = {
|
||||
title: "Robert Seares | Engenheiro de Software, Fundador, Builder de Produto",
|
||||
description:
|
||||
"Robert Seares constroi empresas, software e sistemas em IA, biotecnologia, infraestrutura em nuvem, plataformas para desenvolvedores, produto e automacao.",
|
||||
alternates: {
|
||||
canonical: "/pt/",
|
||||
languages: {
|
||||
en: "/",
|
||||
"pt-BR": "/pt/",
|
||||
"x-default": "/",
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
locale: "pt_BR",
|
||||
url: "/pt/",
|
||||
title: "Robert Seares | Engenheiro de Software, Fundador, Builder de Produto",
|
||||
description:
|
||||
"Eu construo empresas, software e sistemas em IA, biotecnologia, infraestrutura, plataformas para desenvolvedores e automacao.",
|
||||
images: [
|
||||
{
|
||||
url: "/og-image.png",
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: "Robert Seares - Eu construo empresas, software e sistemas.",
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image",
|
||||
title: "Robert Seares | Engenheiro de Software, Fundador, Builder de Produto",
|
||||
description:
|
||||
"Eu construo empresas, software e sistemas em IA, biotecnologia, infraestrutura, plataformas para desenvolvedores e automacao.",
|
||||
images: ["/og-image.png"],
|
||||
},
|
||||
};
|
||||
|
||||
export default function PortugueseHome() {
|
||||
return <ProfilePage content={profileContent.pt} />;
|
||||
}
|
||||
14
frontend/app/robots.js
Normal file
14
frontend/app/robots.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://robertseares.com";
|
||||
|
||||
export const dynamic = "force-static";
|
||||
|
||||
export default function robots() {
|
||||
return {
|
||||
rules: {
|
||||
userAgent: "*",
|
||||
allow: "/",
|
||||
},
|
||||
sitemap: `${siteUrl}/sitemap.xml`,
|
||||
host: siteUrl,
|
||||
};
|
||||
}
|
||||
86
frontend/app/seo.js
Normal file
86
frontend/app/seo.js
Normal file
@@ -0,0 +1,86 @@
|
||||
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://robertseares.com";
|
||||
|
||||
export const baseMetadata = {
|
||||
metadataBase: new URL(siteUrl),
|
||||
title: {
|
||||
default: "Robert Seares | Software Engineer, Founder, Product Builder",
|
||||
template: "%s | Robert Seares",
|
||||
},
|
||||
description:
|
||||
"Robert Seares is a software engineer, engineering leader, founder, and product builder working across AI, biotech, cloud infrastructure, developer platforms, and automation.",
|
||||
applicationName: "Robert Seares",
|
||||
authors: [{ name: "Robert Seares", url: siteUrl }],
|
||||
creator: "Robert Seares",
|
||||
publisher: "Robert Seares",
|
||||
category: "Technology",
|
||||
keywords: [
|
||||
"Robert Seares",
|
||||
"software engineer",
|
||||
"engineering leader",
|
||||
"founder",
|
||||
"product builder",
|
||||
"AI",
|
||||
"biotechnology",
|
||||
"cloud infrastructure",
|
||||
"developer platforms",
|
||||
"automation",
|
||||
"FastAPI",
|
||||
"React",
|
||||
"Kubernetes",
|
||||
"TypeScript",
|
||||
"Python",
|
||||
"Ark Biotech",
|
||||
],
|
||||
alternates: {
|
||||
canonical: "/",
|
||||
languages: {
|
||||
en: "/",
|
||||
"pt-BR": "/pt/",
|
||||
"x-default": "/",
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
type: "profile",
|
||||
locale: "en_US",
|
||||
alternateLocale: ["pt_BR"],
|
||||
url: siteUrl,
|
||||
siteName: "Robert Seares",
|
||||
title: "Robert Seares | Software Engineer, Founder, Product Builder",
|
||||
description:
|
||||
"I build companies, software, and systems across AI, biotech, infrastructure, developer platforms, and automation.",
|
||||
images: [
|
||||
{
|
||||
url: "/og-image.png",
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: "Robert Seares - I build companies, software, and systems.",
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image",
|
||||
title: "Robert Seares | Software Engineer, Founder, Product Builder",
|
||||
description:
|
||||
"I build companies, software, and systems across AI, biotech, infrastructure, developer platforms, and automation.",
|
||||
images: ["/og-image.png"],
|
||||
},
|
||||
icons: {
|
||||
icon: [
|
||||
{ url: "/favicon.ico", sizes: "any" },
|
||||
{ url: "/icon.svg", type: "image/svg+xml" },
|
||||
],
|
||||
apple: [{ url: "/apple-touch-icon.png", type: "image/png" }],
|
||||
},
|
||||
manifest: "/site.webmanifest",
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
"max-image-preview": "large",
|
||||
"max-snippet": -1,
|
||||
"max-video-preview": -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
35
frontend/app/sitemap.js
Normal file
35
frontend/app/sitemap.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://robertseares.com";
|
||||
const lastModified = new Date("2026-06-11T00:00:00.000Z");
|
||||
|
||||
export const dynamic = "force-static";
|
||||
|
||||
export default function sitemap() {
|
||||
return [
|
||||
{
|
||||
url: `${siteUrl}/`,
|
||||
lastModified,
|
||||
changeFrequency: "monthly",
|
||||
priority: 1,
|
||||
alternates: {
|
||||
languages: {
|
||||
en: `${siteUrl}/`,
|
||||
"pt-BR": `${siteUrl}/pt/`,
|
||||
"x-default": `${siteUrl}/`,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
url: `${siteUrl}/pt/`,
|
||||
lastModified,
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.9,
|
||||
alternates: {
|
||||
languages: {
|
||||
en: `${siteUrl}/`,
|
||||
"pt-BR": `${siteUrl}/pt/`,
|
||||
"x-default": `${siteUrl}/`,
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user