2025-12-01 22:57:12 +01:00
|
|
|
|
import Layout from '../components/Layout';
|
|
|
|
|
|
import SocialLinks from '../components/SocialLinks';
|
2025-12-03 03:24:29 +01:00
|
|
|
|
import AnimatedName from '../components/AnimatedName';
|
2026-10-24 21:19:22 +02:00
|
|
|
|
import SectionHeading from '../components/SectionHeading';
|
|
|
|
|
|
import Reveal from '../components/Reveal';
|
|
|
|
|
|
import Icon from '../components/Icon';
|
2026-10-24 21:42:49 +02:00
|
|
|
|
import { profile, stats, focusAreas, stack } from '../data/profile';
|
2021-04-29 10:32:58 +01:00
|
|
|
|
|
2021-04-23 15:35:23 +01:00
|
|
|
|
export default function Home() {
|
|
|
|
|
|
return (
|
2026-10-24 21:19:22 +02:00
|
|
|
|
<Layout>
|
|
|
|
|
|
{/* HERO */}
|
2025-12-01 22:57:12 +01:00
|
|
|
|
<section className="hero">
|
2026-10-24 21:19:22 +02:00
|
|
|
|
<div className="hero-backdrop" aria-hidden="true" />
|
|
|
|
|
|
<div className="shell hero-grid">
|
2025-12-03 03:24:29 +01:00
|
|
|
|
<div className="hero-content">
|
2026-10-24 21:19:22 +02:00
|
|
|
|
<h1 className="hero-title">
|
|
|
|
|
|
Hey, I’m {profile.firstName}.
|
|
|
|
|
|
<span className="hero-title-muted">{profile.tagline}</span>
|
|
|
|
|
|
</h1>
|
|
|
|
|
|
|
|
|
|
|
|
<p className="hero-subtitle">{profile.intro}</p>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="hero-actions">
|
|
|
|
|
|
<a href={`mailto:${profile.email}`} className="button button-primary">
|
|
|
|
|
|
Let’s work together
|
|
|
|
|
|
<Icon name="arrowRight" size={16} />
|
|
|
|
|
|
</a>
|
2026-10-24 21:42:49 +02:00
|
|
|
|
<a href="https://github.com/jesseinit" target="_blank" rel="noopener noreferrer" className="button button-ghost">
|
|
|
|
|
|
<Icon name="github" size={16} />
|
|
|
|
|
|
View GitHub
|
2026-10-24 21:19:22 +02:00
|
|
|
|
</a>
|
2025-12-03 03:24:29 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-10-24 21:19:22 +02:00
|
|
|
|
<div className="hero-meta">
|
|
|
|
|
|
<span className="meta-item">
|
|
|
|
|
|
<Icon name="pin" size={16} /> {profile.location}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
<span className="meta-divider" />
|
|
|
|
|
|
<SocialLinks variant="icons" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2025-12-03 03:24:29 +01:00
|
|
|
|
|
2026-10-24 21:19:22 +02:00
|
|
|
|
<div className="hero-visual">
|
|
|
|
|
|
<div className="portrait">
|
|
|
|
|
|
<img src="/hero.jpg" alt={profile.name} className="portrait-image" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div className="terminal-card" aria-hidden="true">
|
|
|
|
|
|
<div className="terminal-bar">
|
|
|
|
|
|
<span />
|
|
|
|
|
|
<span />
|
|
|
|
|
|
<span />
|
|
|
|
|
|
<em>~/whoami</em>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<pre className="terminal-body">
|
|
|
|
|
|
<code>
|
|
|
|
|
|
<span className="t-prompt">$</span> whoami{'\n'}
|
|
|
|
|
|
<span className="t-accent">
|
|
|
|
|
|
<AnimatedName />
|
|
|
|
|
|
</span>
|
|
|
|
|
|
{'\n'}
|
|
|
|
|
|
<span className="t-prompt">$</span> cat role.txt{'\n'}
|
|
|
|
|
|
<span className="t-muted">{profile.role.toLowerCase()} @ {profile.location.split(',')[0].toLowerCase()}</span>
|
|
|
|
|
|
</code>
|
|
|
|
|
|
</pre>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="shell">
|
|
|
|
|
|
<dl className="stats">
|
|
|
|
|
|
{stats.map((stat, i) => (
|
|
|
|
|
|
<Reveal key={stat.label} className="stat" delay={i * 80}>
|
|
|
|
|
|
<dt className="stat-label">{stat.label}</dt>
|
|
|
|
|
|
<dd className="stat-value">{stat.value}</dd>
|
|
|
|
|
|
</Reveal>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</dl>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
{/* ABOUT */}
|
|
|
|
|
|
<section id="about" className="section">
|
|
|
|
|
|
<div className="shell">
|
|
|
|
|
|
<SectionHeading index="01" eyebrow="About" title="Engineering for the long run." />
|
|
|
|
|
|
<div className="about-grid">
|
|
|
|
|
|
<Reveal className="about-copy">
|
|
|
|
|
|
{profile.about.map((paragraph) => (
|
|
|
|
|
|
<p key={paragraph}>{paragraph}</p>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</Reveal>
|
|
|
|
|
|
<div className="focus-grid">
|
|
|
|
|
|
{focusAreas.map((area, i) => (
|
|
|
|
|
|
<Reveal key={area.title} className="focus-card" delay={i * 80}>
|
|
|
|
|
|
<span className="focus-icon">
|
|
|
|
|
|
<Icon name={area.icon} size={20} />
|
|
|
|
|
|
</span>
|
|
|
|
|
|
<h3 className="focus-title">{area.title}</h3>
|
|
|
|
|
|
<p className="focus-description">{area.description}</p>
|
|
|
|
|
|
</Reveal>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
{/* STACK */}
|
|
|
|
|
|
<section id="stack" className="section">
|
|
|
|
|
|
<div className="shell">
|
|
|
|
|
|
<SectionHeading index="02" eyebrow="Stack" title="Tools I reach for.">
|
|
|
|
|
|
The technologies I use day to day to design, build and run production systems.
|
|
|
|
|
|
</SectionHeading>
|
|
|
|
|
|
<div className="stack-grid">
|
|
|
|
|
|
{stack.map((group, i) => (
|
|
|
|
|
|
<Reveal key={group.group} className="stack-group" delay={i * 80}>
|
|
|
|
|
|
<h3 className="stack-title">{group.group}</h3>
|
|
|
|
|
|
<ul className="tag-list">
|
|
|
|
|
|
{group.items.map((item) => (
|
|
|
|
|
|
<li key={item} className="tag tag-large">
|
|
|
|
|
|
{item}
|
|
|
|
|
|
</li>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
</Reveal>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
{/* CONTACT */}
|
|
|
|
|
|
<section id="contact" className="section">
|
|
|
|
|
|
<div className="shell">
|
|
|
|
|
|
<Reveal className="contact-card">
|
|
|
|
|
|
<p className="eyebrow">
|
2026-10-24 21:42:49 +02:00
|
|
|
|
<span className="eyebrow-index">03</span>
|
2026-10-24 21:19:22 +02:00
|
|
|
|
Contact
|
|
|
|
|
|
</p>
|
|
|
|
|
|
<h2 className="contact-title">Have a system that needs to scale?</h2>
|
|
|
|
|
|
<p className="contact-lead">
|
|
|
|
|
|
I’m always happy to talk about backend architecture, interesting problems or new roles. My inbox is open.
|
|
|
|
|
|
</p>
|
|
|
|
|
|
<div className="hero-actions">
|
|
|
|
|
|
<a href={`mailto:${profile.email}`} className="button button-primary">
|
|
|
|
|
|
<Icon name="mail" size={16} />
|
|
|
|
|
|
{profile.email}
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<SocialLinks variant="pills" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</Reveal>
|
2025-12-01 22:57:12 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
|
|
</Layout>
|
2021-04-23 16:53:30 +01:00
|
|
|
|
);
|
2021-04-23 15:35:23 +01:00
|
|
|
|
}
|