Source Code
src/pages/home.rs
use leptos::*;
use leptos_meta::{Meta, Title};
use leptos_router::A;
use super::projects::data::{aggregated_skills, SHOW_SKILL_COUNT};
/// How many skills to surface on the home page.
const HOME_SKILLS_LIMIT: usize = 20;
#[component]
pub fn Home() -> impl IntoView {
let skills_view = aggregated_skills()
.into_iter()
.take(HOME_SKILLS_LIMIT)
.map(|(skill, projects)| {
let count = projects.len();
let popup_items = projects
.iter()
.map(|p| {
let name: &'static str = p.name;
let tagline: &'static str = p.tagline;
let href = format!("/projects/{}", p.slug);
view! {
<A href=href class="skill-popup-project">
<span class="skill-popup-name">{name}</span>
<span class="skill-popup-sep">" - "</span>
<span class="skill-popup-desc">{tagline}</span>
</A>
}
})
.collect::<Vec<_>>();
view! {
<li class="skill-tag-wrapper">
{skill}
{SHOW_SKILL_COUNT.then(|| view! { <span class="skill-count">"("{count}")"</span> })}
<div class="skill-popup">
<div class="skill-popup-box">{popup_items}</div>
</div>
</li>
}
})
.collect::<Vec<_>>();
view! {
<Title text="Peter Pinto – Software Engineer"/>
<Meta name="description" content="Senior Software Engineer & Technical Lead building distributed systems, GPU-accelerated tools, and geospatial intelligence platforms. Based in Charlottesville, VA."/>
<div class="page">
// ── Hero ─────────────────────────────────────────────
<section class="hero">
<div class="hero-inner">
<div class="hero-text">
<h1>"Hi, I'm " <em>"Peter Pinto"</em>"."</h1>
<p class="lead">
"Senior Software Engineer & Technical Lead based in Charlottesville, VA.
I ship distributed systems, GPU-accelerated tools, and geospatial intelligence platforms —
and lead the teams that build them."
</p>
</div>
<img
src="/headshot.jpeg"
alt="Peter Pinto"
class="hero-avatar"
/>
</div>
</section>
<hr class="divider" />
// ── About Grid ────────────────────────────────────────
<section class="about-grid">
// Card 1 — About Me
<div class="about-card">
<span class="eyebrow">"About me"</span>
<h3>"Background"</h3>
<p>
"BS in Computer Science, New Jersey Institute of Technology (2023).
Eagle Scout. I gravitate toward hard problems — systems that need to scale,
pipelines that need to be reliable, and tools that need to perform."
</p>
</div>
// Card 2 — What I Do
<div class="about-card">
<span class="eyebrow">"What I do"</span>
<h3>"Focus Areas"</h3>
<p>
"Distributed systems, DevOps, and parallel computing — with a particular
interest in GPGPU and AI/ML. I lead teams, define requirements, and
ship software that delivers measurable value."
</p>
</div>
// Card 3 — Skills
<div class="about-card">
<span class="eyebrow">"Skills"</span>
<h3>"Tech & Tools"</h3>
<ul class="skills-list">
{skills_view}
</ul>
</div>
// Card 4 — Currently
<div class="about-card">
<span class="eyebrow">"Currently"</span>
<h3>"Role"</h3>
<p>
"Senior Software Engineer & Project Technical Lead at General Atomics Intelligence
(June 2023 – Present). I define requirements, coordinate cross-functional teams,
and deliver geospatial intelligence tooling used in production — all in Charlottesville, VA."
</p>
</div>
</section>
<hr class="divider" />
// ── Featured Projects ─────────────────────────────────
<section>
<span class="eyebrow">"Featured Projects"</span>
<h2>"Things I've " <em style="font-style:italic; color: var(--accent)">"Built"</em></h2>
<div class="featured-projects">
<div class="project-card">
<span class="eyebrow">"Rust · Kubernetes Operator"</span>
<h3>"Trading Bot"</h3>
<p>
"A Kubernetes-native operator that manages the full lifecycle of automated
trading bot deployments via Custom Resource Definitions — configuration,
scheduling, and declarative risk limits all in one spec."
</p>
<A href="/projects/trading-bot" class="btn btn-outline">"Details →"</A>
</div>
<div class="project-card">
<span class="eyebrow">"Infrastructure"</span>
<h3>"Home Lab"</h3>
<p>
"A three-node bare-metal Kubernetes cluster on repurposed hardware,
running RKE2, Istio, and Longhorn with real workloads — Gitea runner,
RabbitMQ, Matrix, InfluxDB, and more."
</p>
<A href="/projects/home-lab" class="btn btn-outline">"Details →"</A>
</div>
</div>
<div style="margin-top: 1.5rem;">
<A href="/projects" class="btn btn-outline">"See all projects →"</A>
</div>
</section>
<hr class="divider" />
// ── CTA Row ───────────────────────────────────────────
<div class="resume-actions">
<A href="/resume" class="btn btn-primary">"View Resume →"</A>
<A href="/contact" class="btn btn-outline">"Get in Touch"</A>
</div>
</div>
}
}