)
const SKILL_GROUPS = TIERS.map((tier) => ({
label: tier.label,
items: SKILLS.filter((s) => s.tier === tier.id && s.listed !== false).map(
(s) => s.name
),
})).filter((g) => g.items.length)
const CREDENTIAL_GROUPS = [
{ label: 'Education', items: EDUCATION.map((e) => e.title) },
{
label: 'Certifications',
items: CERTIFICATIONS.map((c) => `${c.name} (${c.year})`),
},
{
label: 'Languages',
items: LANGUAGES.map(([name, level]) => `${name}, ${level}`),
},
]
// The same facts as the terminal, laid out as a page. It is also what search engines and
// visitors without JavaScript get.
const Classic = () => (
{IDENTITY.name}
Data pipelines, data products and the automation that keeps them
running.
{IDENTITY.title} at {IDENTITY.employer}
, based in {IDENTITY.location}, with {IDENTITY.experience} across data
engineering, ML infrastructure and DevOps.
Profile
{SUMMARY.map((text) => (
{text}
))}
Experience
{ROUTE.map((stop) => stop.place).join(' → ')}
{ROLES.map((role) => (
{role.period}
{role.company}
{role.place}
{role.title}
{role.summary}
))}
Stack
Credentials
Contact
Always happy to talk about data, ML and platform engineering. Email is
the fastest way to reach me.